[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\n    [\"env\", {\n      \"modules\": false\n    }],\n    \"stage-2\"\n  ],\n  \"plugins\": [\"transform-runtime\", [\"component\", [\n    {\n      \"libraryName\": \"element-ui\"\n    }\n  ]]],\n  \"env\": {\n    \"test\": {\n      \"presets\": [\"env\", \"stage-2\"],\n      \"plugins\": [\"transform-es2015-modules-commonjs\", \"dynamic-import-node\"]\n    }\n  }\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": ".eslintignore",
    "content": "/build/\n/config/\n/dist/\n/*.js\n/test/unit/coverage/\n/src/icons/iconfont.js\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "// https://eslint.org/docs/user-guide/configuring\n\nmodule.exports = {\n  root: true,\n  parser: 'babel-eslint',\n  parserOptions: {\n    sourceType: 'module'\n  },\n  env: {\n    browser: true,\n  },\n  // https://github.com/standard/standard/blob/master/docs/RULES-en.md\n  extends: 'standard',\n  // required to lint *.vue files\n  plugins: [\n    'html'\n  ],\n  // add your custom rules here\n  rules: {\n    // allow async-await\n    'generator-star-spacing': 'off',\n    // allow debugger during development\n    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'\n  }\n}\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\nnode_modules/\ndist/\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n/test/unit/coverage/\n/test/e2e/reports/\nselenium-debug.log\n\n# Editor directories and files\n.idea\n.vscode\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n"
  },
  {
    "path": ".postcssrc.js",
    "content": "// https://github.com/michael-ciniawsky/postcss-load-config\n\nmodule.exports = {\n  \"plugins\": {\n    // to edit target browsers: use \"browserslist\" field in package.json\n    \"postcss-import\": {},\n    \"autoprefixer\": {}\n  }\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "## 更新日志\n\n### 1.2.2\n\n*2018-10-16*\n\n- 修复判断当前路由类型 bug\n- 默认开放element-ui所有组件\n- 修复子菜单同级出现子菜单项会同时选中bug\n- 捕获首次请求菜单列表和权限异常，自动跳转至登录页\n- 修复菜单按钮权限错误bug [#41](https://github.com/renrenio/renren-fast-vue/issues/41)\n- 提供重置登录信息状态方法。修复登出或替换账号还保留之前账号操作信息和痕迹bug\n- 优化token失效、退出后，为了强制清空整站临时存储数据而刷新页面问题。注意: 此次vux数据并未做重置处理！\n\n### 1.2.1\n\n*2018-06-08*\n\n- 修复tabs关闭最后一个tab后，再次打开会保留最后一个tab bug\n- 优化完善mock模拟数据\n- 修复linux系统，引入主题色文件名大小写编译错误bug [#22](https://github.com/daxiongYang/renren-fast-vue/issues/22)\n- 新增echarts图表、ueditor富文本编辑器demo\n- 移除登录成功token前端设置的失效时间\n- 修复退出／token失效后，返回登录页面未清空整站临时存储数据bug\n- 修复手机号码验证正则bug\n- 同步后台 修改config模块key vulue子段为paramKey paramValue\n- 修复角色管理 新增修改授权接口请求错误bug\n- 修复1.2 新版本的导航栏Tab错位bug [#14](https://github.com/daxiongYang/renren-fast-vue/issues/14)\n- 修复动态菜单路由 最前面带/bug\n- 修复其它已知bug\n\n### 1.2.0\n\n*2018-05-03*\n\n- 支持菜单管理操作动态(菜单)路由\n- 移除api文件夹目录，简化api请求方式\n- 新增element-ui组件主题12套，可同步修改配置设置成整站主题\n- 调整store状态目录结构，改变设置／获取方式\n- 调整views视图层结构，更友好的支持动态(菜单)路由\n- 修复其它已知bug\n\n### 1.1.0\n\n*2018-04-15*\n\n- 使用SVG Sprite矢量图标，替换fontawesome字体图标\n- 新增内容tabs标签页，关闭当前／其它／全部、刷新当前功能\n- 新增scss变量皮肤定制\n- 优化路由机制，通过meta isTab属性，设定是否通过tab标签页展示内容\n- 更新element-ui 2.3.2 用于修复左侧菜单收缩卡顿问题\n- 新增mock本地开发模拟数据功能\n- 修复本地开发找不到baseUrl问题\n- 更新element-ui 2.2.1 用于修复tree半选中状态项不能传给后台接口问题\n- 修复其它已知bug\n\n### 1.0.0\n\n*2018-02-11*\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 \n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<!--\n * @Author: your name\n * @Date: 2019-12-10 10:46:21\n * @LastEditTime: 2019-12-10 11:55:18\n * @LastEditors: your name\n * @Description: In User Settings Edit\n * @FilePath: \\form-design\\README.md\n -->\n## form-design (react版本，手机版本请查看我的<a target=\"_blank\" href=\"https://github.com/TsangTszKin/react-form-design\">react-form-design</a>)\n- form-design本人基于vue、element-ui，vuedraggable构建开发，实现用拖拉拽和自主配置来实现动态表单设计功能功能，提供一套更优的前端解决方案\n- 自主研发，模仿小幺鸡表单设计器（<a target=\"_blank\" href=\"http://tools.xiaoyaoji.cn/form/#/\">点击查看小幺鸡</a>）\n- 支持拖拉拽控件，支持二次拖来拽\n- 支持自定义配置和栅格布局\n- 支持表单验证和表单预览\n- 前后端分离，通过token进行数据交互，可独立部署\n\n- (账号密码：admin/admin)\n\n\n![效果图](demo-screenshot/1.gif)\n\n![效果图](demo-screenshot/03.png)\n\n\n----------\n\n### 12.10更新\n- 表单设置页面设置为全屏显示\n- 新增tab页的表单模式，可自定义\n- \"计数器元素\" 改为 \"数字文本框\"\n- 新增元素 '意见框'，提供快捷选择意见和落款\n- 大大加强组件化封装\n- icon改为iconfont集成\n\n![12/10更新界面效果图](demo-screenshot/update_12_10.png)\n"
  },
  {
    "path": "build/build.js",
    "content": "'use strict'\nrequire('./check-versions')()\n\nprocess.env.NODE_ENV = 'production'\n\nconst ora = require('ora')\nconst rm = require('rimraf')\nconst path = require('path')\nconst chalk = require('chalk')\nconst webpack = require('webpack')\nconst config = require('../config')\nconst webpackConfig = require('./webpack.prod.conf')\n\nconst spinner = ora('building for production...')\nspinner.start()\n\nrm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {\n  if (err) throw err\n  webpack(webpackConfig, (err, stats) => {\n    spinner.stop()\n    if (err) throw err\n    process.stdout.write(stats.toString({\n      colors: true,\n      modules: false,\n      children: false,\n      chunks: false,\n      chunkModules: false\n    }) + '\\n\\n')\n\n    if (stats.hasErrors()) {\n      console.log(chalk.red('  Build failed with errors.\\n'))\n      process.exit(1)\n    }\n\n    console.log(chalk.cyan('  Build complete.\\n'))\n    console.log(chalk.yellow(\n      '  Tip: built files are meant to be served over an HTTP server.\\n' +\n      '  Opening index.html over file:// won\\'t work.\\n'\n    ))\n  })\n})\n"
  },
  {
    "path": "build/check-versions.js",
    "content": "'use strict'\nconst chalk = require('chalk')\nconst semver = require('semver')\nconst packageConfig = require('../package.json')\nconst shell = require('shelljs')\n\nfunction exec (cmd) {\n  return require('child_process').execSync(cmd).toString().trim()\n}\n\nconst versionRequirements = [\n  {\n    name: 'node',\n    currentVersion: semver.clean(process.version),\n    versionRequirement: packageConfig.engines.node\n  }\n]\n\nif (shell.which('npm')) {\n  versionRequirements.push({\n    name: 'npm',\n    currentVersion: exec('npm --version'),\n    versionRequirement: packageConfig.engines.npm\n  })\n}\n\nmodule.exports = function () {\n  const warnings = []\n\n  for (let i = 0; i < versionRequirements.length; i++) {\n    const mod = versionRequirements[i]\n\n    if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {\n      warnings.push(mod.name + ': ' +\n        chalk.red(mod.currentVersion) + ' should be ' +\n        chalk.green(mod.versionRequirement)\n      )\n    }\n  }\n\n  if (warnings.length) {\n    console.log('')\n    console.log(chalk.yellow('To use this template, you must update following to modules:'))\n    console.log()\n\n    for (let i = 0; i < warnings.length; i++) {\n      const warning = warnings[i]\n      console.log('  ' + warning)\n    }\n\n    console.log()\n    process.exit(1)\n  }\n}\n"
  },
  {
    "path": "build/utils.js",
    "content": "'use strict'\nconst path = require('path')\nconst config = require('../config')\nconst ExtractTextPlugin = require('extract-text-webpack-plugin')\nconst packageConfig = require('../package.json')\n\nexports.assetsPath = function (_path) {\n  const assetsSubDirectory = process.env.NODE_ENV === 'production'\n    ? config.build.assetsSubDirectory\n    : config.dev.assetsSubDirectory\n\n  return path.posix.join(assetsSubDirectory, _path)\n}\n\nexports.cssLoaders = function (options) {\n  options = options || {}\n\n  const cssLoader = {\n    loader: 'css-loader',\n    options: {\n      sourceMap: options.sourceMap\n    }\n  }\n\n  const postcssLoader = {\n    loader: 'postcss-loader',\n    options: {\n      sourceMap: options.sourceMap\n    }\n  }\n\n  // generate loader string to be used with extract text plugin\n  function generateLoaders (loader, loaderOptions) {\n    const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]\n\n    if (loader) {\n      loaders.push({\n        loader: loader + '-loader',\n        options: Object.assign({}, loaderOptions, {\n          sourceMap: options.sourceMap\n        })\n      })\n    }\n\n    // Extract CSS when that option is specified\n    // (which is the case during production build)\n    if (options.extract) {\n      return ExtractTextPlugin.extract({\n        use: loaders,\n        fallback: 'vue-style-loader'\n      })\n    } else {\n      return ['vue-style-loader'].concat(loaders)\n    }\n  }\n\n  // https://vue-loader.vuejs.org/en/configurations/extract-css.html\n  return {\n    css: generateLoaders(),\n    postcss: generateLoaders(),\n    less: generateLoaders('less'),\n    sass: generateLoaders('sass', { indentedSyntax: true }),\n    scss: generateLoaders('sass'),\n    stylus: generateLoaders('stylus'),\n    styl: generateLoaders('stylus')\n  }\n}\n\n// Generate loaders for standalone style files (outside of .vue)\nexports.styleLoaders = function (options) {\n  const output = []\n  const loaders = exports.cssLoaders(options)\n\n  for (const extension in loaders) {\n    const loader = loaders[extension]\n    output.push({\n      test: new RegExp('\\\\.' + extension + '$'),\n      use: loader\n    })\n  }\n\n  return output\n}\n\nexports.createNotifierCallback = () => {\n  const notifier = require('node-notifier')\n\n  return (severity, errors) => {\n    if (severity !== 'error') return\n\n    const error = errors[0]\n    const filename = error.file && error.file.split('!').pop()\n\n    notifier.notify({\n      title: packageConfig.name,\n      message: severity + ': ' + error.name,\n      subtitle: filename || '',\n      icon: path.join(__dirname, 'logo.png')\n    })\n  }\n}\n"
  },
  {
    "path": "build/vue-loader.conf.js",
    "content": "'use strict'\nconst utils = require('./utils')\nconst config = require('../config')\nconst isProduction = process.env.NODE_ENV === 'production'\nconst sourceMapEnabled = isProduction\n  ? config.build.productionSourceMap\n  : config.dev.cssSourceMap\n\nmodule.exports = {\n  loaders: utils.cssLoaders({\n    sourceMap: sourceMapEnabled,\n    extract: isProduction\n  }),\n  cssSourceMap: sourceMapEnabled,\n  cacheBusting: config.dev.cacheBusting,\n  transformToRequire: {\n    video: ['src', 'poster'],\n    source: 'src',\n    img: 'src',\n    image: 'xlink:href'\n  }\n}\n"
  },
  {
    "path": "build/webpack.base.conf.js",
    "content": "'use strict'\nconst path = require('path')\nconst utils = require('./utils')\nconst config = require('../config')\nconst vueLoaderConfig = require('./vue-loader.conf')\n\nfunction resolve (dir) {\n  return path.join(__dirname, '..', dir)\n}\n\nconst createLintingRule = () => ({\n  test: /\\.(js|vue)$/,\n  loader: 'eslint-loader',\n  enforce: 'pre',\n  include: [resolve('src'), resolve('test')],\n  options: {\n    formatter: require('eslint-friendly-formatter'),\n    emitWarning: !config.dev.showEslintErrorsInOverlay\n  }\n})\n\nmodule.exports = {\n  context: path.resolve(__dirname, '../'),\n  entry: {\n    app: ['babel-polyfill', './src/main.js']\n  },\n  output: {\n    path: config.build.assetsRoot,\n    filename: '[name].js',\n    publicPath: process.env.NODE_ENV === 'production'\n      ? config.build.assetsPublicPath\n      : config.dev.assetsPublicPath\n  },\n  resolve: {\n    extensions: ['.js', '.vue', '.json'],\n    alias: {\n      'vue$': 'vue/dist/vue.esm.js',\n      '@': resolve('src'),\n    }\n  },\n  module: {\n    rules: [\n      ...(config.dev.useEslint ? [createLintingRule()] : []),\n      {\n        test: /\\.vue$/,\n        loader: 'vue-loader',\n        options: vueLoaderConfig\n      },\n      {\n        test: /\\.js$/,\n        loader: 'babel-loader',\n        include: [resolve('src'), resolve('test')]\n      },\n      {\n        test: /\\.svg$/,\n        loader: 'svg-sprite-loader',\n        include: [resolve('src/icons')]\n      },\n      {\n        test: /\\.(png|jpe?g|gif|svg)(\\?.*)?$/,\n        loader: 'url-loader',\n        exclude: [resolve('src/icons')],\n        options: {\n          limit: 10000,\n          name: utils.assetsPath('img/[name].[hash:7].[ext]')\n        }\n      },\n      {\n        test: /\\.(mp4|webm|ogg|mp3|wav|flac|aac)(\\?.*)?$/,\n        loader: 'url-loader',\n        options: {\n          limit: 10000,\n          name: utils.assetsPath('media/[name].[hash:7].[ext]')\n        }\n      },\n      {\n        test: /\\.(woff2?|eot|ttf|otf)(\\?.*)?$/,\n        loader: 'url-loader',\n        options: {\n          limit: 10000,\n          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')\n        }\n      }\n    ]\n  },\n  node: {\n    // prevent webpack from injecting useless setImmediate polyfill because Vue\n    // source contains it (although only uses it if it's native).\n    setImmediate: false,\n    // prevent webpack from injecting mocks to Node native modules\n    // that does not make sense for the client\n    dgram: 'empty',\n    fs: 'empty',\n    net: 'empty',\n    tls: 'empty',\n    child_process: 'empty'\n  },\n  // 引入外部库, 无需webpack打包处理\n  externals: {\n    mockjs: 'Mock',\n    echarts: 'echarts',\n    ueditor: 'UE'\n  }\n}\n"
  },
  {
    "path": "build/webpack.dev.conf.js",
    "content": "'use strict'\nconst utils = require('./utils')\nconst webpack = require('webpack')\nconst config = require('../config')\nconst merge = require('webpack-merge')\nconst baseWebpackConfig = require('./webpack.base.conf')\nconst HtmlWebpackPlugin = require('html-webpack-plugin')\nconst FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')\nconst portfinder = require('portfinder')\n\nconst HOST = process.env.HOST\nconst PORT = process.env.PORT && Number(process.env.PORT)\n\nconst devWebpackConfig = merge(baseWebpackConfig, {\n  module: {\n    rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })\n  },\n  // cheap-module-eval-source-map is faster for development\n  devtool: config.dev.devtool,\n\n  // these devServer options should be customized in /config/index.js\n  devServer: {\n    clientLogLevel: 'warning',\n    historyApiFallback: true,\n    hot: true,\n    compress: true,\n    host: HOST || config.dev.host,\n    port: PORT || config.dev.port,\n    open: config.dev.autoOpenBrowser,\n    overlay: config.dev.errorOverlay\n      ? { warnings: false, errors: true }\n      : false,\n    publicPath: config.dev.assetsPublicPath,\n    proxy: config.dev.proxyTable,\n    quiet: true, // necessary for FriendlyErrorsPlugin\n    watchOptions: {\n      poll: config.dev.poll,\n    }\n  },\n  plugins: [\n    new webpack.DefinePlugin({\n      'process.env': require('../config/dev.env')\n    }),\n    new webpack.HotModuleReplacementPlugin(),\n    new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.\n    new webpack.NoEmitOnErrorsPlugin(),\n    // https://github.com/ampedandwired/html-webpack-plugin\n    new HtmlWebpackPlugin({\n      filename: 'index.html',\n      template: 'index.html',\n      inject: true\n    }),\n  ]\n})\n\nmodule.exports = new Promise((resolve, reject) => {\n  portfinder.basePort = process.env.PORT || config.dev.port\n  portfinder.getPort((err, port) => {\n    if (err) {\n      reject(err)\n    } else {\n      // publish the new Port, necessary for e2e tests\n      process.env.PORT = port\n      // add port to devServer config\n      devWebpackConfig.devServer.port = port\n\n      // Add FriendlyErrorsPlugin\n      devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({\n        compilationSuccessInfo: {\n          messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],\n        },\n        onErrors: config.dev.notifyOnErrors\n        ? utils.createNotifierCallback()\n        : undefined\n      }))\n\n      resolve(devWebpackConfig)\n    }\n  })\n})\n"
  },
  {
    "path": "build/webpack.prod.conf.js",
    "content": "'use strict'\nconst path = require('path')\nconst utils = require('./utils')\nconst webpack = require('webpack')\nconst config = require('../config')\nconst merge = require('webpack-merge')\nconst baseWebpackConfig = require('./webpack.base.conf')\nconst CopyWebpackPlugin = require('copy-webpack-plugin')\nconst HtmlWebpackPlugin = require('html-webpack-plugin')\nconst ExtractTextPlugin = require('extract-text-webpack-plugin')\nconst OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')\nconst UglifyJsPlugin = require('uglifyjs-webpack-plugin')\n\nconst env = process.env.NODE_ENV === 'testing'\n  ? require('../config/test.env')\n  : require('../config/prod.env')\n\nconst webpackConfig = merge(baseWebpackConfig, {\n  module: {\n    rules: utils.styleLoaders({\n      sourceMap: config.build.productionSourceMap,\n      extract: true,\n      usePostCSS: true\n    })\n  },\n  devtool: config.build.productionSourceMap ? config.build.devtool : false,\n  output: {\n    path: config.build.assetsRoot,\n    filename: utils.assetsPath('js/[name].js'),\n    chunkFilename: utils.assetsPath('js/[id].js')\n  },\n  plugins: [\n    // http://vuejs.github.io/vue-loader/en/workflow/production.html\n    new webpack.DefinePlugin({\n      'process.env': env\n    }),\n    new UglifyJsPlugin({\n      uglifyOptions: {\n        compress: {\n          warnings: false\n        }\n      },\n      sourceMap: config.build.productionSourceMap,\n      parallel: true\n    }),\n    // extract css into its own file\n    new ExtractTextPlugin({\n      filename: utils.assetsPath('css/[name].css'),\n      // set the following option to `true` if you want to extract CSS from\n      // codesplit chunks into this main css file as well.\n      // This will result in *all* of your app's CSS being loaded upfront.\n      allChunks: false,\n    }),\n    // Compress extracted CSS. We are using this plugin so that possible\n    // duplicated CSS from different components can be deduped.\n    new OptimizeCSSPlugin({\n      cssProcessorOptions: config.build.productionSourceMap\n        ? { safe: true, map: { inline: false } }\n        : { safe: true }\n    }),\n    // generate dist index.html with correct asset hash for caching.\n    // you can customize output by editing /index.html\n    // see https://github.com/ampedandwired/html-webpack-plugin\n    new HtmlWebpackPlugin({\n      filename: process.env.NODE_ENV === 'testing'\n        ? 'index.html'\n        : config.build.index,\n      template: 'index.html',\n      inject: false,\n      minify: {\n        removeComments: true,\n        collapseWhitespace: true,\n        removeAttributeQuotes: true\n        // more options:\n        // https://github.com/kangax/html-minifier#options-quick-reference\n      },\n      // necessary to consistently work with multiple chunks via CommonsChunkPlugin\n      chunksSortMode: 'dependency'\n    }),\n    // keep module.id stable when vender modules does not change\n    new webpack.HashedModuleIdsPlugin(),\n    // enable scope hoisting\n    new webpack.optimize.ModuleConcatenationPlugin(),\n    // split vendor js into its own file\n    new webpack.optimize.CommonsChunkPlugin({\n      name: 'vendor',\n      minChunks (module) {\n        // any required modules inside node_modules are extracted to vendor\n        return (\n          module.resource &&\n          /\\.js$/.test(module.resource) &&\n          module.resource.indexOf(\n            path.join(__dirname, '../node_modules')\n          ) === 0\n        )\n      }\n    }),\n    // extract webpack runtime and module manifest to its own file in order to\n    // prevent vendor hash from being updated whenever app bundle is updated\n    new webpack.optimize.CommonsChunkPlugin({\n      name: 'manifest',\n      minChunks: Infinity\n    }),\n    // This instance extracts shared chunks from code splitted chunks and bundles them\n    // in a separate chunk, similar to the vendor chunk\n    // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk\n    new webpack.optimize.CommonsChunkPlugin({\n      name: 'app',\n      async: 'vendor-async',\n      children: true,\n      minChunks: 3\n    }),\n\n    // copy custom static assets\n    new CopyWebpackPlugin([\n      {\n        from: path.resolve(__dirname, '../static'),\n        to: config.build.assetsSubDirectory,\n        ignore: ['.*']\n      }\n    ])\n  ]\n})\n\nif (config.build.productionGzip) {\n  const CompressionWebpackPlugin = require('compression-webpack-plugin')\n\n  webpackConfig.plugins.push(\n    new CompressionWebpackPlugin({\n      asset: '[path].gz[query]',\n      algorithm: 'gzip',\n      test: new RegExp(\n        '\\\\.(' +\n        config.build.productionGzipExtensions.join('|') +\n        ')$'\n      ),\n      threshold: 10240,\n      minRatio: 0.8\n    })\n  )\n}\n\nif (config.build.bundleAnalyzerReport) {\n  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin\n  webpackConfig.plugins.push(new BundleAnalyzerPlugin({ analyzerMode: 'static' }))\n}\n\nmodule.exports = webpackConfig\n"
  },
  {
    "path": "build/webpack.test.conf.js",
    "content": "'use strict'\n// This is the webpack config used for unit tests.\n\nconst utils = require('./utils')\nconst webpack = require('webpack')\nconst merge = require('webpack-merge')\nconst baseWebpackConfig = require('./webpack.base.conf')\n\nconst webpackConfig = merge(baseWebpackConfig, {\n  // use inline sourcemap for karma-sourcemap-loader\n  module: {\n    rules: utils.styleLoaders()\n  },\n  devtool: '#inline-source-map',\n  resolveLoader: {\n    alias: {\n      // necessary to to make lang=\"scss\" work in test when using vue-loader's ?inject option\n      // see discussion at https://github.com/vuejs/vue-loader/issues/724\n      'scss-loader': 'sass-loader'\n    }\n  },\n  plugins: [\n    new webpack.DefinePlugin({\n      'process.env': require('../config/test.env')\n    })\n  ]\n})\n\n// no need for app entry during tests\ndelete webpackConfig.entry\n\nmodule.exports = webpackConfig\n"
  },
  {
    "path": "config/dev.env.js",
    "content": "'use strict'\nconst merge = require('webpack-merge')\nconst prodEnv = require('./prod.env')\n\nmodule.exports = merge(prodEnv, {\n  NODE_ENV: '\"development\"',\n  OPEN_PROXY: false // 是否开启代理, 重置后需重启vue-cli\n})\n"
  },
  {
    "path": "config/index.js",
    "content": "'use strict'\n// Template version: 1.2.5\n// see http://vuejs-templates.github.io/webpack for documentation.\n\nconst path = require('path')\nconst devEnv = require('./dev.env')\n\nmodule.exports = {\n  dev: {\n\n    // Paths\n    assetsSubDirectory: 'static',\n    assetsPublicPath: '/',\n    // 代理列表, 是否开启代理通过[./dev.env.js]配置\n    proxyTable: devEnv.OPEN_PROXY === false ? {} : {\n      '/proxyApi': {\n        target: 'http://demo.renren.io/renren-fast/',\n        changeOrigin: true,\n        pathRewrite: {\n          '^/proxyApi': '/'\n        }\n      }\n    },\n\n    // Various Dev Server settings\n    host: 'localhost', // can be overwritten by process.env.HOST\n    port: 8001, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined\n    autoOpenBrowser: true,\n    errorOverlay: true,\n    notifyOnErrors: true,\n    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-\n\n    // Use Eslint Loader?\n    // If true, your code will be linted during bundling and\n    // linting errors and warnings will be shown in the console.\n    useEslint: true,\n    // If true, eslint errors and warnings will also be shown in the error overlay\n    // in the browser.\n    showEslintErrorsInOverlay: false,\n\n    /**\n     * Source Maps\n     */\n\n    // https://webpack.js.org/configuration/devtool/#development\n    devtool: 'eval-source-map',\n\n    // If you have problems debugging vue-files in devtools,\n    // set this to false - it *may* help\n    // https://vue-loader.vuejs.org/en/options.html#cachebusting\n    cacheBusting: true,\n\n    // CSS Sourcemaps off by default because relative paths are \"buggy\"\n    // with this option, according to the CSS-Loader README\n    // (https://github.com/webpack/css-loader#sourcemaps)\n    // In our experience, they generally work as expected,\n    // just be aware of this issue when enabling this option.\n    cssSourceMap: false,\n  },\n\n  build: {\n    // Template for index.html\n    index: path.resolve(__dirname, '../dist/index.html'),\n\n    // Paths\n    assetsRoot: path.resolve(__dirname, '../dist'),\n    assetsSubDirectory: 'static',\n    assetsPublicPath: './',\n\n    /**\n     * Source Maps\n     */\n\n    productionSourceMap: false,\n    // https://webpack.js.org/configuration/devtool/#production\n    devtool: '#source-map',\n\n    // Gzip off by default as many popular static hosts such as\n    // Surge or Netlify already gzip all static assets for you.\n    // Before setting to `true`, make sure to:\n    // npm install --save-dev compression-webpack-plugin\n    productionGzip: false,\n    productionGzipExtensions: ['js', 'css'],\n\n    // Run the build command with an extra argument to\n    // View the bundle analyzer report after build finishes:\n    // `npm run build --report`\n    // Set to `true` or `false` to always turn it on or off\n    bundleAnalyzerReport: process.env.npm_config_report\n  }\n}\n"
  },
  {
    "path": "config/prod.env.js",
    "content": "'use strict'\nmodule.exports = {\n  NODE_ENV: '\"production\"'\n}\n"
  },
  {
    "path": "config/test.env.js",
    "content": "'use strict'\nconst merge = require('webpack-merge')\nconst devEnv = require('./dev.env')\n\nmodule.exports = merge(devEnv, {\n  NODE_ENV: '\"testing\"'\n})\n"
  },
  {
    "path": "debug.log",
    "content": "[0503/155252.466:ERROR:process_info.cc(359)] UncheckedAllocate\n[0503/155313.696:ERROR:http_transport_win.cc(276)] WinHttpSendRequest: ɹɡ (0x0)\n"
  },
  {
    "path": "gulpfile.js",
    "content": "var gulp = require('gulp');\nvar $    = require('gulp-load-plugins')();\nvar path = require('path');\nvar del  = require('del');\n\nvar distPath    = path.resolve('./dist');\nvar version     = ''; // 版本号\nvar versionPath = ''; // 版本号路径\nvar env         = ''; // 运行环境\n\n// 创建版本号(年月日时分)\n(function () {\n  var d = new Date();\n  var yy = d.getFullYear().toString().slice(2);\n  var MM = d.getMonth() + 1 >= 10 ? (d.getMonth() + 1) : '0' + (d.getMonth() + 1);\n  var DD = d.getDate() >= 10 ? d.getDate() : '0' + d.getDate();\n  var h  = d.getHours() >= 10 ? d.getHours() : '0' + d.getHours();\n  var mm = d.getMinutes() >= 10 ? d.getMinutes() : '0' + d.getMinutes();\n  version = yy + MM + DD + h + mm;\n  versionPath = distPath + '/' + version;\n})();\n\n// 编译\ngulp.task('build', $.shell.task([ 'node build/build.js' ]));\n\n// 创建版本号目录\ngulp.task('create:versionCatalog', ['build'], function () {\n  return gulp.src(`${distPath}/static/**/*`)\n    .pipe(gulp.dest(`${versionPath}/static/`))\n});\n\n// 替换${versionPath}/static/js/manifest.js window.SITE_CONFIG.cdnUrl占位变量\ngulp.task('replace:cdnUrl', ['create:versionCatalog'], function () {\n  return gulp.src(`${versionPath}/static/js/manifest.js`)\n    .pipe($.replace(new RegExp(`\"${require('./config').build.assetsPublicPath}\"`, 'g'), 'window.SITE_CONFIG.cdnUrl + \"/\"'))\n    .pipe(gulp.dest(`${versionPath}/static/js/`))\n});\n\n// 替换${versionPath}/static/config/index-${env}.js window.SITE_CONFIG['version']配置变量\ngulp.task('replace:version', ['create:versionCatalog'], function () {\n  return gulp.src(`${versionPath}/static/config/index-${env}.js`)\n    .pipe($.replace(/window.SITE_CONFIG\\['version'\\] = '.*'/g, `window.SITE_CONFIG['version'] = '${version}'`))\n    .pipe(gulp.dest(`${versionPath}/static/config/`))\n});\n\n// 合并${versionPath}/static/config/[index-${env}, init].js 至 ${distPath}/config/index.js\ngulp.task('concat:config', ['replace:version'], function () {\n  return gulp.src([`${versionPath}/static/config/index-${env}.js`, `${versionPath}/static/config/init.js`])\n    .pipe($.concat('index.js'))\n    .pipe(gulp.dest(`${distPath}/config/`))\n});\n\n// 清空\ngulp.task('clean', function () {\n  return del([versionPath])\n});\n\ngulp.task('default', ['clean'], function () {\n  // 获取环境配置\n  env = process.env.npm_config_qa ? 'qa' : process.env.npm_config_uat ? 'uat' : 'prod'\n  // 开始打包编译\n  gulp.start(['build', 'create:versionCatalog', 'replace:cdnUrl', 'replace:version', 'concat:config'], function () {\n    // 清除, 编译 / 处理项目中产生的文件\n    del([`${distPath}/static`, `${versionPath}/static/config`])\n  })\n});\n"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n  <title>人人快速开发平台</title>\n  <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"./static/img/favicon.ico\">\n  <link rel=\"stylesheet\" href=\"./static/base.css\">\n  <link rel=\"stylesheet\" href=\"./static/reset.css\">\n  <link rel=\"stylesheet\" href=\"./static/normalize.css\">\n  <link rel=\"stylesheet\" href=\"./static/font/iconfont.css\">\n  <style type=\"text/css\">\n  .form-design-main .el-form-item{\n  margin-bottom: 15px !important;\n  }\n  .form-design-main .el-dialog__header {\n    display: none !important;\n  }\n  .form-design-main .el-dialog__body {\n    padding: 10px;\n  }\n  </style>\n  <% if (process.env.NODE_ENV === 'production') { %>\n  <!-- 生产环境 -->\n  <script>\n    document.write('<script src=\"./config/index.js?t=' + new Date().getTime() + '\"><\\/script>');\n\n  </script>\n  <% }else { %>\n  <!-- 开发环境 -->\n  <script src=\"./static/config/index.js\"></script>\n  <script src=\"./static/plugins/mock-1.0.0-beta3/mock-min.js\"></script>\n  <script src=\"./static/plugins/echarts-3.8.5/echarts.common.min.js\"></script>\n  <script src=\"./static/plugins/ueditor-1.4.3.3/ueditor.config.js\"></script>\n  <script src=\"./static/plugins/ueditor-1.4.3.3/ueditor.all.min.js\"></script>\n  <script src=\"./static/plugins/ueditor-1.4.3.3/lang/zh-cn/zh-cn.js\"></script>\n  <% } %>\n</head>\n\n<body>\n  <div id=\"app\"></div>\n</body>\n\n\n</html>\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"renren-fast-vue\",\n  \"version\": \"1.2.2\",\n  \"description\": \"renren-fast-vue基于vue、element-ui构建开发，实现renren-fast后台管理前端功能，提供一套更优的前端解决方案。\",\n  \"author\": \"daxiong.yang <daxiong.yang@qq.com>\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"webpack-dev-server --inline --progress --config build/webpack.dev.conf.js\",\n    \"start\": \"npm run dev\",\n    \"unit\": \"jest --config test/unit/jest.conf.js --coverage\",\n    \"e2e\": \"node test/e2e/runner.js\",\n    \"test\": \"npm run unit && npm run e2e\",\n    \"lint\": \"eslint --ext .js,.vue src test/unit/specs test/e2e/specs\",\n    \"build\": \"gulp\"\n  },\n  \"dependencies\": {\n    \"axios\": \"0.17.1\",\n    \"babel-plugin-component\": \"0.10.1\",\n    \"babel-polyfill\": \"6.26.0\",\n    \"element-ui\": \"^2.8.2\",\n    \"gulp\": \"3.9.1\",\n    \"gulp-concat\": \"2.6.1\",\n    \"gulp-load-plugins\": \"1.5.0\",\n    \"gulp-replace\": \"0.6.1\",\n    \"gulp-shell\": \"0.6.5\",\n    \"lodash\": \"4.17.5\",\n    \"node-sass\": \"^4.9.0\",\n    \"sass-loader\": \"6.0.6\",\n    \"svg-sprite-loader\": \"3.7.3\",\n    \"vue\": \"2.5.2\",\n    \"vue-cookie\": \"1.1.4\",\n    \"vue-router\": \"3.0.1\",\n    \"vuedraggable\": \"^2.20.0\",\n    \"vuex\": \"3.0.1\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"7.1.2\",\n    \"babel-core\": \"6.22.1\",\n    \"babel-eslint\": \"7.1.1\",\n    \"babel-jest\": \"21.0.2\",\n    \"babel-loader\": \"7.1.1\",\n    \"babel-plugin-dynamic-import-node\": \"1.2.0\",\n    \"babel-plugin-transform-es2015-modules-commonjs\": \"6.26.0\",\n    \"babel-plugin-transform-runtime\": \"6.22.0\",\n    \"babel-preset-env\": \"1.3.2\",\n    \"babel-preset-stage-2\": \"6.22.0\",\n    \"babel-register\": \"6.22.0\",\n    \"chalk\": \"2.3.0\",\n    \"chromedriver\": \"2.27.2\",\n    \"copy-webpack-plugin\": \"4.0.1\",\n    \"cross-spawn\": \"5.0.1\",\n    \"css-loader\": \"0.28.0\",\n    \"eslint\": \"3.19.0\",\n    \"eslint-config-standard\": \"10.2.1\",\n    \"eslint-friendly-formatter\": \"3.0.0\",\n    \"eslint-loader\": \"1.7.1\",\n    \"eslint-plugin-html\": \"3.0.0\",\n    \"eslint-plugin-import\": \"2.7.0\",\n    \"eslint-plugin-node\": \"5.2.0\",\n    \"eslint-plugin-promise\": \"3.5.0\",\n    \"eslint-plugin-standard\": \"3.0.1\",\n    \"eventsource-polyfill\": \"0.9.6\",\n    \"extract-text-webpack-plugin\": \"3.0.0\",\n    \"file-loader\": \"1.1.4\",\n    \"friendly-errors-webpack-plugin\": \"1.6.1\",\n    \"html-webpack-plugin\": \"2.30.1\",\n    \"jest\": \"21.2.0\",\n    \"jest-serializer-vue\": \"0.3.0\",\n    \"nightwatch\": \"0.9.12\",\n    \"node-notifier\": \"5.1.2\",\n    \"optimize-css-assets-webpack-plugin\": \"3.2.0\",\n    \"ora\": \"1.2.0\",\n    \"portfinder\": \"1.0.13\",\n    \"postcss-import\": \"11.0.0\",\n    \"postcss-loader\": \"2.0.8\",\n    \"rimraf\": \"2.6.0\",\n    \"selenium-server\": \"3.0.1\",\n    \"semver\": \"5.3.0\",\n    \"shelljs\": \"0.7.6\",\n    \"uglifyjs-webpack-plugin\": \"1.1.1\",\n    \"url-loader\": \"0.5.8\",\n    \"vue-jest\": \"1.0.2\",\n    \"vue-loader\": \"13.3.0\",\n    \"vue-style-loader\": \"3.0.1\",\n    \"vue-template-compiler\": \"2.5.2\",\n    \"webpack\": \"3.6.0\",\n    \"webpack-bundle-analyzer\": \"2.9.0\",\n    \"webpack-dev-server\": \"2.9.1\",\n    \"webpack-merge\": \"4.1.0\"\n  },\n  \"engines\": {\n    \"node\": \">= 8.11.1\",\n    \"npm\": \">= 5.6.0\"\n  },\n  \"browserslist\": [\n    \"> 1%\",\n    \"last 2 versions\",\n    \"not ie <= 8\"\n  ]\n}\n"
  },
  {
    "path": "src/App.vue",
    "content": "<template>\n  <transition name=\"fade\">\n    <router-view></router-view>\n  </transition>\n</template>\n\n<script>\n  export default {\n  }\n</script>\n"
  },
  {
    "path": "src/assets/scss/_base.scss",
    "content": "*,\n*:before,\n*:after {\n  box-sizing: border-box;\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei\", \"微软雅黑\", Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.15;\n  color: #303133;\n  background-color: #fff;\n}\na {\n  color: mix(#fff, $--color-primary, 20%);\n  text-decoration: none;\n  &:focus,\n  &:hover {\n    color: $--color-primary;\n    text-decoration: underline;\n  }\n}\nimg {\n  vertical-align: middle;\n}\n\n\n/* Utils\n------------------------------ */\n.clearfix:before,\n.clearfix:after {\n  content: \" \";\n  display: table;\n}\n.clearfix:after {\n  clear: both;\n}\n\n\n/* Animation\n------------------------------ */\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity .5s;\n}\n.fade-enter,\n.fade-leave-to {\n  opacity: 0;\n}\n\n\n/* Reset element-ui\n------------------------------ */\n.site-wrapper {\n  .el-pagination {\n    margin-top: 15px;\n    text-align: right;\n  }\n}\n\n\n/* Layout\n------------------------------ */\n.site-wrapper {\n  position: relative;\n  min-width: 1180px;\n}\n\n\n/* Sidebar fold\n------------------------------ */\n.site-sidebar--fold {\n  .site-navbar__header,\n  .site-navbar__brand,\n  .site-sidebar,\n  .site-sidebar__inner,\n  .el-menu.site-sidebar__menu {\n    width: 64px;\n  }\n  .site-navbar__body,\n  .site-content__wrapper {\n    margin-left: 64px;\n  }\n  .site-navbar__brand {\n    &-lg {\n      display: none;\n    }\n    &-mini {\n      display: inline-block;\n    }\n  }\n  .site-sidebar,\n  .site-sidebar__inner {\n    overflow: initial;\n  }\n  .site-sidebar__menu-icon {\n    margin-right: 0;\n    font-size: 20px;\n  }\n  .site-content--tabs > .el-tabs > .el-tabs__header {\n    left: 64px;\n  }\n}\n// animation\n.site-navbar__header,\n.site-navbar__brand,\n.site-navbar__body,\n.site-sidebar,\n.site-sidebar__inner,\n.site-sidebar__menu.el-menu,\n.site-sidebar__menu-icon,\n.site-content__wrapper,\n.site-content--tabs > .el-tabs .el-tabs__header {\n  transition: inline-block .3s, left .3s, width .3s, margin-left .3s, font-size .3s;\n}\n\n\n/* Navbar\n------------------------------ */\n.site-navbar {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n  height: 50px;\n  box-shadow: 0 2px 4px rgba(0, 0, 0, .08);\n  background-color: $navbar--background-color;\n\n  &--inverse {\n    .site-navbar__body {\n      background-color: transparent;\n    }\n    .el-menu {\n      > .el-menu-item,\n      > .el-submenu > .el-submenu__title {\n        color: #fff;\n        &:focus,\n        &:hover {\n          color: #fff;\n          background-color: mix(#000, $navbar--background-color, 15%);\n        }\n      }\n      > .el-menu-item.is-active,\n      > .el-submenu.is-active > .el-submenu__title {\n        border-bottom-color: mix(#fff, $navbar--background-color, 85%);\n      }\n      .el-menu-item i,\n      .el-submenu__title i,\n      .el-dropdown {\n        color: #fff;\n      }\n    }\n    .el-menu--popup-bottom-start {\n      background-color: $navbar--background-color;\n    }\n  }\n\n  &__header {\n    position: relative;\n    float: left;\n    width: 230px;\n    height: 50px;\n    overflow: hidden;\n  }\n  &__brand {\n    display: table-cell;\n    vertical-align: middle;\n    width: 230px;\n    height: 50px;\n    margin: 0;\n    line-height: 50px;\n    font-size: 20px;\n    text-align: center;\n    text-transform: uppercase;\n    white-space: nowrap;\n    color: #fff;\n    \n    &-lg,\n    &-mini {\n      margin: 0 5px;\n      color: #fff;\n      &:focus,\n      &:hover {\n        color: #fff;\n        text-decoration: none;\n      }\n    }\n    &-mini {\n      display: none;\n    }\n  }\n  &__switch {\n    font-size: 18px;\n    border-bottom: none !important;\n  }\n  &__avatar {\n    border-bottom: none !important;\n    * {\n      vertical-align: inherit;\n    }\n    .el-dropdown-link {\n      > img {\n        width: 36px;\n        height: auto;\n        margin-right: 5px;\n        border-radius: 100%;\n        vertical-align: middle;\n      }\n    }\n  }\n  &__body {\n    position: relative;\n    margin-left: 230px;\n    padding-right: 15px;\n    background-color: #fff;\n  }\n  &__menu {\n    float: left;\n    background-color: transparent;\n    border-bottom: 0;\n\n    &--right {\n      float: right;\n    }\n    a:focus,\n    a:hover {\n      text-decoration: none;\n    }\n    .el-menu-item,\n    .el-submenu > .el-submenu__title {\n      height: 50px;\n      line-height: 50px;\n    }\n    .el-submenu > .el-menu {\n      top: 55px;\n    }\n    .el-badge {\n      display: inline;\n      z-index: 2;\n      &__content {\n        line-height: 16px;\n      }\n    }\n  }\n}\n\n\n/* Sidebar\n------------------------------ */\n.site-sidebar {\n  position: fixed;\n  top: 50px;\n  left: 0;\n  bottom: 0;\n  z-index: 1020;\n  width: 230px;\n  overflow: hidden;\n\n  &--dark,\n  &--dark-popper {\n    background-color: $sidebar--background-color-dark;\n    .site-sidebar__menu.el-menu,\n    > .el-menu--popup {\n      background-color: $sidebar--background-color-dark;\n      .el-menu-item,\n      .el-submenu > .el-submenu__title {\n        color: $sidebar--color-text-dark;\n        &:focus,\n        &:hover {\n          color: mix(#fff, $sidebar--color-text-dark, 50%);\n          background-color: mix(#fff, $sidebar--background-color-dark, 2.5%);\n        }\n      }\n      .el-menu,\n      .el-submenu.is-opened {\n        background-color: mix(#000, $sidebar--background-color-dark, 15%);\n      }\n      .el-menu-item.is-active,\n      .el-submenu.is-active > .el-submenu__title {\n        color: mix(#fff, $sidebar--color-text-dark, 80%);\n      }\n    }\n  }\n  &__inner {\n    position: relative;\n    z-index: 1;\n    width: 250px;\n    height: 100%;\n    padding-bottom: 15px;\n    overflow-y: scroll;\n  }\n  &__menu.el-menu {\n    width: 230px;\n    border-right: 0;\n  }\n  &__menu-icon {\n    width: 24px;\n    margin-right: 5px;\n    text-align: center;\n    font-size: 16px;\n    color: inherit !important;\n  }\n}\n\n\n/* Content\n------------------------------ */\n.site-content {\n  position: relative;\n  padding: 15px;\n\n  &__wrapper {\n    position: relative;\n    padding-top: 50px;\n    margin-left: 230px;\n    min-height: 100%;\n    background: $content--background-color;\n  }\n  &--tabs {\n    padding: 55px 0 0;\n  }\n  > .el-tabs {\n    > .el-tabs__header {\n      position: fixed;\n      top: 50px;\n      left: 230px;\n      right: 0;\n      z-index: 930;\n      padding: 0 55px 0 15px;\n      box-shadow: 0 2px 4px 0 rgba(0, 0, 0, .12), 0 0 6px 0 rgba(0, 0, 0, .04);\n      background-color: #fff;\n      > .el-tabs__nav-wrap {\n        margin-bottom: 0;\n        &:after {\n          display: none;\n        }\n      }\n    }\n    > .el-tabs__content {\n      padding: 0 15px 15px;\n      > .site-tabs__tools {\n        position: fixed;\n        top: 50px;\n        right: 0;\n        z-index: 931;\n        height: 40px;\n        padding: 0 12px;\n        font-size: 16px;\n        line-height: 40px;\n        background-color: $content--background-color;\n        cursor: pointer;\n        .el-icon--right {\n          margin-left: 0;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/assets/scss/_normalize.scss",
    "content": "/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in\n *    IE on Windows Phone and in iOS.\n */\n\n html {\n  line-height: 1.15; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n  margin: 0;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n  display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\n\nfigcaption,\nfigure,\nmain { /* 1 */\n  display: block;\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  box-sizing: content-box; /* 1 */\n  height: 0; /* 1 */\n  overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n  background-color: transparent; /* 1 */\n  -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none; /* 1 */\n  text-decoration: underline; /* 2 */\n  text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n  font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\nvideo {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n  border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: sans-serif; /* 1 */\n  font-size: 100%; /* 1 */\n  line-height: 1.15; /* 1 */\n  margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n  padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n  box-sizing: border-box; /* 1 */\n  color: inherit; /* 2 */\n  display: table; /* 1 */\n  max-width: 100%; /* 1 */\n  padding: 0; /* 3 */\n  white-space: normal; /* 1 */\n}\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\n\ndetails, /* 1 */\nmenu {\n  display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n  display: list-item;\n}\n\n/* Scripting\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\ncanvas {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in IE.\n */\n\ntemplate {\n  display: none;\n}\n\n/* Hidden\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 10-.\n */\n\n[hidden] {\n  display: none;\n}"
  },
  {
    "path": "src/assets/scss/_variables.scss",
    "content": "// 站点主色\n// tips: 要达到整站主题修改效果, 请确保[$--color-primary]站点主色与[/src/element-ui-theme/index.js]文件中[import './element-[#17B3A3]/index.css']当前主题色一致\n$--color-primary: #17B3A3;\n\n// Navbar\n$navbar--background-color: $--color-primary;\n\n// Sidebar\n$sidebar--background-color-dark: #263238;\n$sidebar--color-text-dark: #8a979e;\n\n// Content\n$content--background-color: #f1f4f5;\n"
  },
  {
    "path": "src/assets/scss/index.scss",
    "content": "@import \"normalize\";       // api: https://github.com/necolas/normalize.css/\n@import \"variables\";       // 站点变量\n@import \"base\";\n"
  },
  {
    "path": "src/components/common/ApprovalPanel.vue",
    "content": "<!--\n * @Description: 审批主面板\n * @Author: zzj\n * @Date: 2019-08-09 08:37:25\n * @LastEditTime: 2019-12-10 11:39:55\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-row :gutter=\"20\" style=\"border: 1px solid gray;border-bottom: none;\">\n    <Material\n      :readOnly=\"readOnly\"\n      :materialListProp=\"materialDatas\"\n      :otherMaterialListProp=\"otherMaterialList\"\n      @materialListCallBack=\"materialListCallBack\"\n      @otherMaterialListCallBack=\"otherMaterialListCallBack\"\n    />\n    <el-col :span=\"12\" v-loading=\"loadingForm\" style=\"border-left: 1px solid gray;padding: 0 20px;\">\n      <el-divider content-position=\"left\">表单</el-divider>\n      <el-form\n        :label-position=\"formAttr.align\"\n        :label-width=\"formAttr.labelWidth\"\n        :size=\"formAttr.size\"\n        :rules=\"rules\"\n        v-if=\"!formAttr.isTabs\"\n        :model=\"formValue\"\n        ref=\"formValue\"\n      >\n        <FormList :formListProp=\"formList\" @callBack=\"formListCallBack\" />\n      </el-form>\n\n      <el-tabs :type=\"formAttr.tabType\" v-else v-model=\"tabIndex\">\n        <el-tab-pane\n          :label=\"item.name\"\n          :name=\"String(i)\"\n          v-for=\"(item, i) in formAttr.tabs\"\n          :key=\"i\"\n        >\n          <el-form\n            :label-position=\"formAttr.align\"\n            :label-width=\"formAttr.labelWidth\"\n            :size=\"formAttr.size\"\n            :model=\"formValue\"\n            :rules=\"rules\"\n            :ref=\"'formValue'+i\"\n          >\n            <FormList :formListProp=\"formList\" @callBack=\"formListCallBack\" />\n          </el-form>\n        </el-tab-pane>\n      </el-tabs>\n    </el-col>\n  </el-row>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport FormList from '@/components/form-design/view/FormList'\nimport Material from '@/components/form-design/view/Material'\n\nexport default {\n  props: {\n    // 表单数据\n    formData: {\n      type: Object,\n      default: function () {\n        return {}\n      }\n    },\n    // 表单\n    dycForm: {\n      type: Object,\n      default: function () {\n        return {}\n      }\n    },\n    // 受理材料\n    materialList: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    // 其他材料\n    otherMaterialList: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    // 申请表单域\n    applyFormList: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    // 预审表单域\n    precheckFormList: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    // 系统默认值大全\n    formDefaultValue: {\n      type: Object,\n      default: function () {\n        return {}\n      }\n    },\n    readOnly: {\n      type: Boolean,\n      default: true\n    }\n  },\n  data () {\n    return {\n      visible: true,\n      dialogVisible: false,\n      formAttr: {\n        align: 'left',\n        size: 'medium',\n        labelWidth: '80px',\n        isTabs: false,\n        tabType: 'card',\n        tabs: [\n          {\n            name: 'tab1',\n            formList: []\n          }\n        ]\n      },\n      tabIndex: '0',\n      rules: {},\n      formValue: {},\n      formList: [],\n      loading: null,\n      loadingForm: true,\n      materialDatas: []\n    }\n  },\n  mounted () { },\n  components: { FormList, Material },\n  activated () {\n    // this.getDataList();\n  },\n  methods: {\n    // 子组件回调模块 start\n    formListCallBack (value) {\n      this.formList = value\n    },\n    materialListCallBack (value) {\n      this.materialDatas = value\n      this.$emit('materialListCallBack', value)\n    },\n    otherMaterialListCallBack (value) {\n      this.$emit('otherMaterialListCallBack', value)\n    },\n    // 子组件回调模块 end\n    reset () {\n      this.formAttr = {\n        align: 'left',\n        size: 'medium',\n        labelWidth: '80px',\n        isTabs: false,\n        tabType: 'card',\n        tabs: [\n          {\n            name: 'tab1',\n            formList: []\n          }\n        ]\n      }\n      this.tabIndex = '0'\n      this.rules = {}\n      this.formValue = {}\n      this.formList = []\n    },\n    verifyFile () {\n      for (let i = 0; i < this.materialDatas.length; i++) {\n        const element = this.materialDatas[i]\n        if (\n          element.required === 1 &&\n          (element.state === 0 ||\n            !element.fileVoList ||\n            !element.fileVoList.length)\n        ) {\n          this.$message({\n            message: `请上传受理材料【${element.materialsName}】`,\n            type: 'warning',\n            duration: 1500\n          })\n          return false\n        }\n      }\n      return true\n    },\n    verifyTabForm (index, maxIndex, resolve, reject) {\n      let validateFun = () => {\n        this.$refs['formValue' + index][0].validate((valid, obj) => {\n          if (valid) {\n            if (index < maxIndex - 1) {\n              this.verifyTabForm(index + 1, maxIndex, resolve, resolve)\n            } else {\n              resolve()\n            }\n          } else {\n            reject(obj)\n            this.$emit('formDataNotFinishCallBack')\n            return false\n          }\n        })\n      }\n      if (index.toString() !== this.tabIndex) {\n        this.tabIndex = index.toString()\n        this.$nextTick(_ => validateFun())\n      } else {\n        validateFun()\n      }\n    },\n    verifyForm (resolve, reject) {\n      this.$refs['formValue'].validate((valid, obj) => {\n        if (valid) {\n          resolve()\n        } else {\n          reject(obj)\n          this.$emit('formDataNotFinishCallBack')\n          return false\n        }\n      })\n    },\n    // 最多五层tabs校验\n    save (isSubmit = false) {\n      if (!isSubmit) {\n        // rules为空则代表是保存，不是提交，此时文件不提交状态\n        // this.tabIndex = '0'\n        this.saveForApi(isSubmit)\n      } else {\n        if (!this.verifyFile()) {\n          this.$emit('formDataNotFinishCallBack')\n          return\n        }\n        // 验证\n\n        let verifyFailed = valid => {\n          this.$message.error('必填项不能为空，请补充表单信息！')\n        }\n\n        let verifySuccess = () => {\n          // this.tabIndex = '0'\n          // 解决不切换tab直接提交数据，此时主动获取第一个tab的数据 start\n          // this.updateCurrentTabFormList(-1, 0)\n          // end\n          this.saveForApi(isSubmit)\n        }\n\n        if (this.formAttr.isTabs) {\n          this.verifyTabForm(\n            0,\n            this.formAttr.tabs.length,\n            verifySuccess,\n            verifyFailed\n          )\n        } else {\n          this.verifyForm(verifySuccess, verifyFailed)\n        }\n      }\n    },\n    saveForApi (isSubmit) {\n      // 组装formData\n      let formData = {}\n\n      let setFormData = formList => {\n        formList.forEach(element => {\n          if (element.type === 'grid') {\n            element.cols.forEach(element2 => {\n              element2.list.forEach(element3 => {\n                if (element3.type !== 'grid' && !common.isEmpty(element3.options.defaultValue)) {\n                  formData[element3.code] = element3.options.defaultValue\n                }\n              })\n            })\n          } else {\n            if (!common.isEmpty(element.options.defaultValue)) {\n              let value = element.options.defaultValue\n              if (element.type === 'idea') {\n                const realname = '管理员'\n                const nowDate = common.formatDateCN(new Date().getTime())\n                if (value.indexOf(realname) === -1 && value.indexOf('年') === -1 && value.indexOf('月') === -1 && value.indexOf('日') === -1) {\n                  value = `${value}\\n\\n                                                  ${realname}\\n                                                  ${nowDate}`\n                }\n              }\n              formData[element.code] = value\n            }\n          }\n        })\n      }\n\n      if (this.formAttr.isTabs) {\n        this.updateCurrentTabFormList(-1, this.tabIndex)\n        this.formAttr.tabs.forEach(tab => {\n          setFormData(tab.formList)\n        })\n      } else {\n        setFormData(this.formList)\n      }\n      this.tabIndex = '0'\n      this.$emit('formDataCallBack', formData, isSubmit)\n    },\n    fillValueToFormList (formList, formData) {\n      const oldFormValue = formData\n\n      // let keys = [...this.applyFormList, ...this.precheckFormList]\n\n      // 设置默认值\n      // console.warn('formList', common.deepClone(formList))\n      formList.forEach((element, i) => {\n        if (element.type === 'grid') {\n          element.cols.forEach((element2, j) => {\n            element2.list.forEach((element3, k) => {\n              // console.warn('element3', element3, i, j, k)\n              if (element3.type !== 'grid' && this.formDefaultValue.hasOwnProperty(element3.options.defaultValue)) {\n                if (!common.isEmpty(this.applyFormList) && this.applyFormList.includes(element3.code)) {\n                  element3.options.defaultValue = this.formDefaultValue[element3.options.defaultValue]\n                }\n                if (!common.isEmpty(this.precheckFormList) && this.precheckFormList.includes(element3.code)) {\n                  element3.options.defaultValue = this.formDefaultValue[element3.options.defaultValue]\n                }\n              }\n            })\n          })\n        } else {\n          if (this.formDefaultValue.hasOwnProperty(element.options.defaultValue)) {\n            if (!common.isEmpty(this.applyFormList) && this.applyFormList.includes(element.code)) {\n              element.options.defaultValue = this.formDefaultValue[element.options.defaultValue]\n            }\n            if (!common.isEmpty(this.precheckFormList) && this.precheckFormList.includes(element.code)) {\n              element.options.defaultValue = this.formDefaultValue[element.options.defaultValue]\n            }\n          }\n        }\n      })\n\n      // start\n      formList.forEach(element => {\n        for (const key in oldFormValue) {\n          if (oldFormValue.hasOwnProperty(key)) {\n            if (element.type === 'grid') {\n              element.cols.forEach(element2 => {\n                element2.list.forEach(element3 => {\n                  if (element3.type !== 'grid' && key === element3.code) {\n                    element3.options.defaultValue = oldFormValue[key]\n                    if (this.formDefaultValue.hasOwnProperty(element3.options.defaultValue)) {\n                      if (!common.isEmpty(this.applyFormList) && this.applyFormList.includes(element3.code)) {\n                        element3.options.defaultValue = this.formDefaultValue[element3.options.defaultValue]\n                      }\n                      if (!common.isEmpty(this.precheckFormList) && this.precheckFormList.includes(element3.code)) {\n                        element3.options.defaultValue = this.formDefaultValue[element3.options.defaultValue]\n                      }\n                    }\n                  }\n                })\n              })\n            } else {\n              if (key === element.code) {\n                element.options.defaultValue = oldFormValue[key]\n                if (this.formDefaultValue.hasOwnProperty(element.options.defaultValue)) {\n                  if (!common.isEmpty(this.applyFormList) && this.applyFormList.includes(element.code)) {\n                    element.options.defaultValue = this.formDefaultValue[element.options.defaultValue]\n                  }\n                  if (!common.isEmpty(this.precheckFormList) && this.precheckFormList.includes(element.code)) {\n                    element.options.defaultValue = this.formDefaultValue[element.options.defaultValue]\n                  }\n                }\n              }\n            }\n          }\n        }\n      })\n\n      return formList\n    },\n    init () {\n      this.visible = true\n      this.$nextTick(() => {\n        this.loadingForm = true\n        this.reset()\n        let content = JSON.parse(this.dycForm.content)\n        this.formAttr = content.formAttr\n        let formList = content.formList\n        if (this.formAttr.isTabs) {\n          // tab多页\n          this.tabIndex = '0'\n\n          // 把原来的formData的值设置进去\n          this.formAttr.tabs.forEach(element => {\n            element.formList = this.fillValueToFormList(\n              element.formList,\n              this.formData\n            )\n          })\n          this.$store.dispatch(\n            'formDesign/setFormList',\n            common.deepClone(this.formAttr.tabs[0].formList)\n          )\n          this.formList = common.deepClone(this.formAttr.tabs[0].formList)\n\n          this.initFormRule(\n            this.formList,\n            this.applyFormList,\n            this.precheckFormList\n          )\n          this.initDisabledField(this.applyFormList, this.precheckFormList)\n        } else {\n          // 单页\n\n          // 把原来的formData的值设置进去\n          let formListFilled = this.fillValueToFormList(\n            formList,\n            this.formData\n          )\n          this.$store.dispatch(\n            'formDesign/setFormList',\n            common.deepClone(formListFilled)\n          )\n          this.formList = common.deepClone(formListFilled)\n\n          this.initFormRule(\n            this.formList,\n            this.applyFormList,\n            this.precheckFormList\n          )\n          this.initDisabledField(this.applyFormList, this.precheckFormList)\n        }\n        this.loadingForm = false\n      })\n    },\n    initFormRule (formList, applyFormList = [], precheckFormList = []) {\n      let keys = (() => {\n        if (!common.isEmpty(applyFormList) && !common.isEmpty(precheckFormList)) { return [...applyFormList, ...precheckFormList] }\n        if (!common.isEmpty(applyFormList)) return applyFormList\n        if (!common.isEmpty(precheckFormList)) return precheckFormList\n        return []\n      })()\n      let rules = {}\n      formList.forEach(element => {\n        if (element.type === 'grid') {\n          element.cols.forEach(element2 => {\n            element2.list.forEach(element3 => {\n              if (element3.type !== 'grid' && element3.options.required && keys.includes(element3.code)) {\n                rules[element3.code] = [\n                  {\n                    required: element3.options.required,\n                    message: '必填项不能为空',\n                    trigger: 'blur'\n                  }\n                ]\n              } else {\n                rules[element3.code] = [\n                  {\n                    required: false\n                  }\n                ]\n              }\n            })\n          })\n        } else {\n          if (element.options.required && keys.includes(element.code)) {\n            rules[element.code] = [\n              {\n                required: element.options.required,\n                message: '必填项不能为空',\n                trigger: 'blur'\n              }\n            ]\n          }\n        }\n      })\n      this.rules = rules\n\n      let formValue = {}\n      for (const key in this.rules) {\n        if (this.rules.hasOwnProperty(key)) {\n          formValue[key] = ''\n        }\n      }\n      this.formValue = formValue\n    },\n    initDisabledField (applyFormList = [], precheckFormList = []) {\n      let keys = (() => {\n        if (!common.isEmpty(applyFormList)) return applyFormList\n        if (!common.isEmpty(precheckFormList)) return precheckFormList\n        return []\n      })()\n      // this.dycForm.columnList.forEach(element => {\n      //   if ([...applyFormList, ...precheckFormList].includes(element.tableColumnCode)) {\n      //     keys.push(element.code)\n      //   }\n      // })\n\n      this.formList.forEach(element => {\n        if (element.type === 'grid') {\n          element.cols.forEach(element2 => {\n            element2.list.forEach(element3 => {\n              if (element3.type !== 'grid' && !keys.includes(element3.code)) {\n                element3.options.disabled = true\n              }\n            })\n          })\n        } else {\n          if (!keys.includes(element.code)) {\n            element.options.disabled = true\n          }\n        }\n      })\n    },\n    updateCurrentTabFormList (newTabIndex, oldTabIndex) {\n        // this.loadingForm = true\n        // 切换tab之前，赋值给formAttr\n      this.formAttr.tabs[oldTabIndex].formList = common.deepClone(this.formList)\n\n      if (newTabIndex === -1 || newTabIndex === '-1') return\n\n        // 赋值新tab\n      this.$store.dispatch(\n          'formDesign/setFormList',\n          common.deepClone(this.formAttr.tabs[Number(newTabIndex)].formList)\n        )\n      this.formList = common.deepClone(\n          this.formAttr.tabs[Number(newTabIndex)].formList\n        )\n      let formList = this.formAttr.tabs[Number(newTabIndex)].formList\n      this.initFormRule(formList, this.applyFormList, this.precheckFormList)\n      this.initDisabledField(this.applyFormList, this.precheckFormList)\n    }\n  },\n  watch: {\n    tabIndex: {\n      handler: function (newTabIndex, oldTabIndex) {\n        console.log('newTabIndex, oldTabIndex', newTabIndex, oldTabIndex)\n        this.updateCurrentTabFormList(newTabIndex, oldTabIndex)\n      },\n      deep: true\n    },\n    formValue: {\n      handler: function (value, oldValue) {\n      },\n      deep: true\n    },\n    materialList: {\n      handler (value) {\n        this.materialDatas = value\n      },\n      immediate: true,\n      deep: true\n    },\n    formList: {\n      handler: function (value, oldValue) {\n        if (common.isEmpty(value)) return\n\n        let keys = [...this.applyFormList, ...this.precheckFormList]\n\n        common.deepClone(value).forEach(element => {\n          for (const key in this.formValue) {\n            if (this.formValue.hasOwnProperty(key)) {\n              if (element.type === 'grid') {\n                element.cols.forEach(element2 => {\n                  element2.list.forEach(element3 => {\n                    if (element3.type !== 'grid' && key === element3.code && keys.includes(key)) {\n                      this.formValue[key] = element3.options.defaultValue\n                    }\n                  })\n                })\n              } else {\n                if (key === element.code && keys.includes(key)) {\n                  this.formValue[key] = element.options.defaultValue\n                }\n              }\n            }\n          }\n        })\n      },\n      deep: true\n    },\n    formData: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    },\n    dycForm: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    },\n    applyFormList: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    },\n    precheckFormList: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    },\n    formDefaultValue: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    }\n  }\n}\n</script>\n"
  },
  {
    "path": "src/components/common/DocumentPanel.vue",
    "content": "<!--\n * @Description: 审批主面板\n * @Author: zzj\n * @Date: 2019-08-09 08:37:25\n * @LastEditTime: 2019-11-11 14:10:19\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-row :gutter=\"20\" style=\"border: 1px solid gray;border-bottom: none;\">\n    <Document\n      :readOnly=\"readOnly\"\n      :dfileListProp=\"dfileList\"\n      @dfileListCallBack=\"dfileListCallBack\"\n    />\n    <el-col :span=\"12\" v-loading=\"loadingForm\" style=\"border-left: 1px solid gray;margin-left: -1px;padding: 0 20px;\">\n      <el-divider content-position=\"left\">表单</el-divider>\n      <el-form\n        :label-position=\"formAttr.align\"\n        :label-width=\"formAttr.labelWidth\"\n        :size=\"formAttr.size\"\n        :rules=\"rules\"\n        v-if=\"!formAttr.isTabs\"\n        :model=\"formValue\"\n        ref=\"formValue\"\n      >\n        <FormList :formListProp=\"formList\" @callBack=\"formListCallBack\" />\n      </el-form>\n\n      <el-tabs :type=\"formAttr.tabType\" v-else v-model=\"tabIndex\">\n        <el-tab-pane\n          :label=\"item.name\"\n          :name=\"String(i)\"\n          v-for=\"(item, i) in formAttr.tabs\"\n          :key=\"i\"\n        >\n          <el-form\n            :label-position=\"formAttr.align\"\n            :label-width=\"formAttr.labelWidth\"\n            :size=\"formAttr.size\"\n            :model=\"formValue\"\n            :rules=\"rules\"\n            :ref=\"'formValue'+i\"\n          >\n            <FormList :formListProp=\"formList\" @callBack=\"formListCallBack\" />\n          </el-form>\n        </el-tab-pane>\n      </el-tabs>\n    </el-col>\n  </el-row>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport FormList from '@/components/form-design/view/FormList'\nimport Document from '@/components/form-design/view/Document'\n\nexport default {\n  props: {\n    // 表单数据\n    formData: {\n      type: Object,\n      default: function () {\n        return {}\n      }\n    },\n    // 表单\n    dycForm: {\n      type: Object,\n      default: function () {\n        return {}\n      }\n    },\n    // 受理材料\n    materialList: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    // 其他材料\n    dfileList: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    // 申请表单域\n    applyFormList: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    // 预审表单域\n    precheckFormList: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    // 系统默认值大全\n    formDefaultValue: {\n      type: Object,\n      default: function () {\n        return {}\n      }\n    },\n    readOnly: {\n      type: Boolean,\n      default: true\n    }\n  },\n  data () {\n    return {\n      visible: true,\n      dialogVisible: false,\n      formAttr: {\n        align: 'left',\n        size: 'medium',\n        labelWidth: '80px',\n        isTabs: false,\n        tabType: 'card',\n        tabs: [\n          {\n            name: 'tab1',\n            formList: []\n          }\n        ]\n      },\n      tabIndex: '0',\n      rules: {},\n      formValue: {},\n      formList: [],\n      loading: null,\n      loadingForm: true\n    }\n  },\n  mounted () { },\n  components: { FormList, Document },\n  activated () {\n    // this.getDataList();\n  },\n  methods: {\n    // 子组件回调模块 start\n    formListCallBack (value) {\n      console.log(\n        'ApprovalPanl formListCallBack value',\n        common.deepClone(value)\n      )\n      this.formList = value\n    },\n    dfileListCallBack (value) {\n      this.$emit('dfileListCallBack', value)\n    },\n    // 子组件回调模块 end\n    reset () {\n      this.formAttr = {\n        align: 'left',\n        size: 'medium',\n        labelWidth: '80px',\n        isTabs: false,\n        tabType: 'card',\n        tabs: [\n          {\n            name: 'tab1',\n            formList: []\n          }\n        ]\n      }\n      this.tabIndex = '0'\n      this.rules = {}\n      this.formValue = {}\n      this.formList = []\n    },\n    verifyFile () {\n      // for (let i = 0; i < this.materialDatas.length; i++) {\n      //   const element = this.materialDatas[i]\n      //   if (\n      //     element.required === 1 &&\n      //     (element.state === 0 ||\n      //       !element.fileVoList ||\n      //       !element.fileVoList.length)\n      //   ) {\n      //     this.$message({\n      //       message: `请上传受理材料【${element.materialsName}】`,\n      //       type: 'warning',\n      //       duration: 1500\n      //     })\n      //     return false\n      //   }\n      // }\n      return true\n    },\n    verifyTabForm (index, maxIndex, resolve, reject) {\n      let validateFun = () => {\n        this.$refs['formValue' + index][0].validate((valid, obj) => {\n          if (valid) {\n            if (index < maxIndex - 1) {\n              this.verifyTabForm(index + 1, maxIndex, resolve, resolve)\n            } else {\n              resolve()\n            }\n          } else {\n            reject(obj)\n            this.$emit('formDataNotFinishCallBack')\n            return false\n          }\n        })\n      }\n      if (index.toString() !== this.tabIndex) {\n        this.tabIndex = index.toString()\n        this.$nextTick(_ => validateFun())\n      } else {\n        validateFun()\n      }\n    },\n    verifyForm (resolve, reject) {\n      this.$refs['formValue'].validate((valid, obj) => {\n        if (valid) {\n          resolve()\n        } else {\n          reject(obj)\n          this.$emit('formDataNotFinishCallBack')\n          return false\n        }\n      })\n    },\n    // 最多五层tabs校验\n    save (isSubmit = false) {\n      if (!isSubmit) {\n        // rules为空则代表是保存，不是提交，此时文件不提交状态\n        this.tabIndex = '0'\n        this.saveForApi(isSubmit)\n      } else {\n        if (!this.verifyFile()) {\n          this.$emit('formDataNotFinishCallBack')\n          return\n        }\n        // 验证\n\n        let verifyFailed = valid => {\n          this.$message.error('必填项不能为空，请补充表单信息！')\n        }\n\n        let verifySuccess = () => {\n          this.tabIndex = '0'\n          this.saveForApi(isSubmit)\n        }\n\n        if (this.formAttr.isTabs) {\n          this.verifyTabForm(\n            0,\n            this.formAttr.tabs.length,\n            verifySuccess,\n            verifyFailed\n          )\n        } else {\n          this.verifyForm(verifySuccess, verifyFailed)\n        }\n      }\n    },\n    saveForApi (isSubmit) {\n      // 组装formData\n      let formData = {}\n\n      let setFormData = formList => {\n        formList.forEach(element => {\n          if (element.type === 'grid') {\n            element.cols.forEach(element2 => {\n              element2.list.forEach(element3 => {\n                if (!common.isEmpty(element3.options.defaultValue)) {\n                  formData[element3.code] = element3.options.defaultValue\n                }\n              })\n            })\n          } else {\n            if (!common.isEmpty(element.options.defaultValue)) {\n              let value = element.options.defaultValue\n              if (element.type === 'idea') {\n                const realname = '管理员'\n                const nowDate = common.formatDateCN(new Date().getTime())\n                if (value.indexOf(realname) === -1 && value.indexOf('年') === -1 && value.indexOf('月') === -1 && value.indexOf('日') === -1) {\n                  value = `${value}\\n\\n                                                  ${realname}\\n                                                  ${nowDate}`\n                }\n              }\n              formData[element.code] = value\n            }\n          }\n        })\n      }\n\n      if (this.formAttr.isTabs) {\n        this.formAttr.tabs.forEach(tab => {\n          setFormData(tab.formList)\n        })\n      } else {\n        setFormData(this.formList)\n      }\n\n      console.log('save formData', formData)\n      this.$emit('formDataCallBack', formData, isSubmit)\n    },\n    fillValueToFormList (formList, formData) {\n      const oldFormValue = formData\n\n      // let keys = [...this.applyFormList, ...this.precheckFormList]\n\n      // 设置默认值\n      formList.forEach(element => {\n        if (element.type === 'grid') {\n          element.cols.forEach(element2 => {\n            element2.list.forEach(element3 => {\n              if (this.formDefaultValue.hasOwnProperty(element3.options.defaultValue)) {\n                if (!common.isEmpty(this.applyFormList) && this.applyFormList.includes(element3.code)) {\n                  element3.options.defaultValue = this.formDefaultValue[element3.options.defaultValue]\n                }\n                if (!common.isEmpty(this.precheckFormList) && this.precheckFormList.includes(element3.code)) {\n                  element3.options.defaultValue = this.formDefaultValue[element3.options.defaultValue]\n                }\n              }\n            })\n          })\n        } else {\n          if (this.formDefaultValue.hasOwnProperty(element.options.defaultValue)) {\n            if (!common.isEmpty(this.applyFormList) && this.applyFormList.includes(element.code)) {\n              element.options.defaultValue = this.formDefaultValue[element.options.defaultValue]\n            }\n            if (!common.isEmpty(this.precheckFormList) && this.precheckFormList.includes(element.code)) {\n              element.options.defaultValue = this.formDefaultValue[element.options.defaultValue]\n            }\n          }\n        }\n      })\n\n      // start\n      formList.forEach(element => {\n        for (const key in oldFormValue) {\n          if (oldFormValue.hasOwnProperty(key)) {\n            if (element.type === 'grid') {\n              element.cols.forEach(element2 => {\n                element2.list.forEach(element3 => {\n                  if (key === element3.code) {\n                    element3.options.defaultValue = oldFormValue[key]\n                    if (this.formDefaultValue.hasOwnProperty(element3.options.defaultValue)) {\n                      if (!common.isEmpty(this.applyFormList) && this.applyFormList.includes(element3.code)) {\n                        element3.options.defaultValue = this.formDefaultValue[element3.options.defaultValue]\n                      }\n                      if (!common.isEmpty(this.precheckFormList) && this.precheckFormList.includes(element3.code)) {\n                        element3.options.defaultValue = this.formDefaultValue[element3.options.defaultValue]\n                      }\n                    }\n                  }\n                })\n              })\n            } else {\n              if (key === element.code) {\n                element.options.defaultValue = oldFormValue[key]\n                if (this.formDefaultValue.hasOwnProperty(element.options.defaultValue)) {\n                  if (!common.isEmpty(this.applyFormList) && this.applyFormList.includes(element.code)) {\n                    element.options.defaultValue = this.formDefaultValue[element.options.defaultValue]\n                  }\n                  if (!common.isEmpty(this.precheckFormList) && this.precheckFormList.includes(element.code)) {\n                    element.options.defaultValue = this.formDefaultValue[element.options.defaultValue]\n                  }\n                }\n              }\n            }\n          }\n        }\n      })\n\n      return formList\n    },\n    init () {\n      this.visible = true\n      this.$nextTick(() => {\n        this.loadingForm = true\n        this.reset()\n        let content = JSON.parse(this.dycForm.content)\n        this.formAttr = content.formAttr\n        let formList = content.formList\n        if (this.formAttr.isTabs) {\n          // tab多页\n          this.tabIndex = '0'\n\n          // 把原来的formData的值设置进去\n          this.formAttr.tabs.forEach(element => {\n            element.formList = this.fillValueToFormList(\n              element.formList,\n              this.formData\n            )\n          })\n          this.$store.dispatch(\n            'formDesign/setFormList',\n            common.deepClone(this.formAttr.tabs[0].formList)\n          )\n          this.formList = common.deepClone(this.formAttr.tabs[0].formList)\n\n          this.initFormRule(\n            this.formList,\n            this.applyFormList,\n            this.precheckFormList\n          )\n          this.initDisabledField(this.applyFormList, this.precheckFormList)\n        } else {\n          // 单页\n\n          // 把原来的formData的值设置进去\n          let formListFilled = this.fillValueToFormList(\n            formList,\n            this.formData\n          )\n          this.$store.dispatch(\n            'formDesign/setFormList',\n            common.deepClone(formListFilled)\n          )\n          this.formList = common.deepClone(formListFilled)\n\n          this.initFormRule(\n            this.formList,\n            this.applyFormList,\n            this.precheckFormList\n          )\n          this.initDisabledField(this.applyFormList, this.precheckFormList)\n        }\n        this.loadingForm = false\n      })\n    },\n    initFormRule (formList, applyFormList = [], precheckFormList = []) {\n      let keys = (() => {\n        if (!common.isEmpty(applyFormList) && !common.isEmpty(precheckFormList)) { return [...applyFormList, ...precheckFormList] }\n        if (!common.isEmpty(applyFormList)) return applyFormList\n        if (!common.isEmpty(precheckFormList)) return precheckFormList\n        return []\n      })()\n      let rules = {}\n      formList.forEach(element => {\n        if (element.type === 'grid') {\n          element.cols.forEach(element2 => {\n            element2.list.forEach(element3 => {\n              if (element3.options.required && keys.includes(element3.code)) {\n                rules[element3.code] = [\n                  {\n                    required: element3.options.required,\n                    message: '必填项不能为空',\n                    trigger: 'blur'\n                  }\n                ]\n              } else {\n                rules[element3.code] = [\n                  {\n                    required: false\n                  }\n                ]\n              }\n            })\n          })\n        } else {\n          if (element.options.required && keys.includes(element.code)) {\n            rules[element.code] = [\n              {\n                required: element.options.required,\n                message: '必填项不能为空',\n                trigger: 'blur'\n              }\n            ]\n          }\n        }\n      })\n      this.rules = rules\n\n      console.log('form rules', rules)\n\n      let formValue = {}\n      for (const key in this.rules) {\n        if (this.rules.hasOwnProperty(key)) {\n          formValue[key] = ''\n        }\n      }\n      this.formValue = formValue\n    },\n    initDisabledField (applyFormList = [], precheckFormList = []) {\n      let keys = (() => {\n        if (!common.isEmpty(applyFormList)) return applyFormList\n        if (!common.isEmpty(precheckFormList)) return precheckFormList\n        return []\n      })()\n      // this.dycForm.columnList.forEach(element => {\n      //   if ([...applyFormList, ...precheckFormList].includes(element.tableColumnCode)) {\n      //     keys.push(element.code)\n      //   }\n      // })\n\n      this.formList.forEach(element => {\n        if (element.type === 'grid') {\n          element.cols.forEach(element2 => {\n            element2.list.forEach(element3 => {\n              if (!keys.includes(element3.code)) {\n                element3.options.disabled = true\n              }\n            })\n          })\n        } else {\n          if (!keys.includes(element.code)) {\n            element.options.disabled = true\n          }\n        }\n      })\n    }\n  },\n  watch: {\n    tabIndex: {\n      handler: function (newValue, oldValue) {\n        // this.loadingForm = true\n        // 切换tab之前，赋值给formAttr\n        this.formAttr.tabs[oldValue].formList = common.deepClone(this.formList)\n\n        if (newValue === -1 || newValue === '-1') return\n\n        // 赋值新tab\n        this.$store.dispatch(\n          'formDesign/setFormList',\n          common.deepClone(this.formAttr.tabs[Number(newValue)].formList)\n        )\n        this.formList = common.deepClone(\n          this.formAttr.tabs[Number(newValue)].formList\n        )\n        let formList = this.formAttr.tabs[Number(newValue)].formList\n        this.initFormRule(formList, this.applyFormList, this.precheckFormList)\n        this.initDisabledField(this.applyFormList, this.precheckFormList)\n\n        // setTimeout(() => {\n        //   this.loadingForm = false\n        // }, 500)\n      },\n      deep: true\n    },\n    formValue: {\n      handler: function (value, oldValue) {\n        // console.log('watch formValue', value)\n      },\n      deep: true\n    },\n    // materialList: {\n    //   handler (value) {\n    //     this.materialDatas = value\n    //   },\n    //   immediate: true,\n    //   deep: true\n    // },\n    formList: {\n      handler: function (value, oldValue) {\n        console.log('watch formList', value)\n\n        if (common.isEmpty(value)) return\n\n        let keys = [...this.applyFormList, ...this.precheckFormList]\n\n        common.deepClone(value).forEach(element => {\n          for (const key in this.formValue) {\n            if (this.formValue.hasOwnProperty(key)) {\n              if (element.type === 'grid') {\n                element.cols.forEach(element2 => {\n                  element2.list.forEach(element3 => {\n                    if (key === element3.code && keys.includes(key)) {\n                      this.formValue[key] = element3.options.defaultValue\n                    }\n                  })\n                })\n              } else {\n                if (key === element.code && keys.includes(key)) {\n                  this.formValue[key] = element.options.defaultValue\n                }\n              }\n            }\n          }\n        })\n\n        console.log('this.formValue', this.formValue)\n      },\n      deep: true\n    },\n    formData: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    },\n    dycForm: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    },\n    applyFormList: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    },\n    precheckFormList: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    },\n    formDefaultValue: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    }\n  }\n}\n</script>\n"
  },
  {
    "path": "src/components/common/FormPreview.vue",
    "content": "<!--\n * @Description: 审批主面板\n * @Author: zzj\n * @Date: 2019-08-09 08:37:25\n * @LastEditTime: 2019-10-18 11:22:58\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-dialog\n    :close-on-click-modal=\"false\"\n    :visible.sync=\"visible\"\n    append-to-body\n    :show-close=\"true\"\n    custom-class=\"form-preview\"\n    title=\"表单预览\"\n  >\n    <span slot=\"title\" class=\"dialog-btn-title\">\n      <span class=\"el-dialog__title\" style=\"margin-right: 10px;\">表单预览</span>\n      <el-button type=\"primary\" icon=\"el-icon-printer\" v-print=\"'#form-preview-print'\">打印</el-button>\n    </span>\n\n    <el-row :gutter=\"20\" id=\"form-preview-print\" style=\"margin-top: 15px;\">\n      <el-col :span=\"24\" v-loading=\"loadingForm\">\n        <el-form\n          :label-position=\"formAttr.align\"\n          :label-width=\"formAttr.labelWidth\"\n          :size=\"formAttr.size\"\n          :rules=\"rules\"\n          v-if=\"!formAttr.isTabs\"\n          :model=\"formValue\"\n          ref=\"formValue\"\n        >\n          <FormList :formListProp=\"formList\" @callBack=\"formListCallBack\" />\n        </el-form>\n\n        <template v-else v-for=\"(item, i) in formAttr.tabs\">\n          <el-divider :key=\"i\" content-position=\"left\" style=\"background-color:#DCDFE6 !important;\">{{item.name}}</el-divider>\n          <el-form\n            :key=\"i\"\n            :label-position=\"formAttr.align\"\n            :label-width=\"formAttr.labelWidth\"\n            :size=\"formAttr.size\"\n            :rules=\"rules\"\n            :model=\"formValue\"\n            ref=\"formValue\"\n          >\n            <FormList :formListProp=\"item.formList\" @callBack=\"formListCallBack\" />\n          </el-form>\n          <p style=\"margin-bottom: 120px;\" :key=\"i\"></p>\n          <div style=\"page-break-after:always\" :key=\"i\"></div>\n        </template>\n      </el-col>\n    </el-row>\n  </el-dialog>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport FormList from '@/components/form-design/view/FormList'\n\nexport default {\n  props: {\n    // 表单数据\n    formData: {\n      type: Object,\n      default: function () {\n        return {}\n      }\n    },\n    // 表单\n    dycForm: {\n      type: Object,\n      default: function () {\n        return []\n      }\n    }\n  },\n  data () {\n    return {\n      visible: false,\n      dialogVisible: false,\n      formAttr: {\n        align: 'left',\n        size: 'medium',\n        labelWidth: '80px',\n        isTabs: false,\n        tabType: 'card',\n        tabs: [\n          {\n            name: 'tab1',\n            formList: []\n          }\n        ]\n      },\n      tabIndex: '0',\n      saveData: {\n        approvalPutinVo: {\n          materialList: [],\n          otherMaterialList: [],\n          formData: {}\n        },\n        dycForm: { columnList: [] }\n      },\n      rules: {},\n      formValue: {},\n      formList: [],\n      loading: null,\n      loadingForm: true,\n      fullscreenLoading: false\n    }\n  },\n  mounted () { },\n  components: { FormList },\n  activated () {\n    // this.getDataList();\n  },\n  methods: {\n    formListCallBack (value) {\n      console.log('ApprovalPanl formListCallBack value', common.deepClone(value))\n      this.formList = value\n    },\n    // 子组件回调模块 end\n    show () {\n      this.visible = true\n    },\n    reset () {\n      this.visible = false\n      this.formAttr = {\n        align: 'left',\n        size: 'medium',\n        labelWidth: '80px',\n        isTabs: false,\n        tabType: 'card',\n        tabs: [\n          {\n            name: 'tab1',\n            formList: []\n          }\n        ]\n      }\n      this.tabIndex = '0'\n      this.rules = {}\n      this.formValue = {}\n      this.formList = []\n    },\n    tabHandleClick_preview (tab, event) {\n    },\n    fillValueToFormList (formList, formData) {\n      const oldFormValue = formData\n\n      // start\n      formList.forEach(element => {\n        for (const key in oldFormValue) {\n          if (oldFormValue.hasOwnProperty(key)) {\n            if (element.type === 'grid') {\n              element.cols.forEach(element2 => {\n                element2.list.forEach(element3 => {\n                  if (key === element3.code) {\n                    element3.options.defaultValue = oldFormValue[key]\n                  }\n                  element3.options.disabled = true\n                })\n              })\n            } else {\n              if (key === element.code) {\n                element.options.defaultValue = oldFormValue[key]\n              }\n              element.options.disabled = true\n            }\n          }\n        }\n      })\n\n      return formList\n    },\n    init () {\n      this.visible = true\n      this.$nextTick(() => {\n        this.loadingForm = true\n        this.reset()\n        let content = JSON.parse(this.dycForm.content)\n        this.formAttr = content.formAttr\n        let formList = content.formList\n        if (this.formAttr.isTabs) {\n          // tab多页\n          this.tabIndex = '0'\n\n          // 把原来的formData的值设置进去\n          this.formAttr.tabs.forEach(element => {\n            element.formList = this.fillValueToFormList(\n              element.formList,\n              this.formData\n            )\n          })\n          this.$store.dispatch(\n            'formDesign/setFormList',\n            common.deepClone(this.formAttr.tabs[0].formList)\n          )\n          this.formList = common.deepClone(this.formAttr.tabs[0].formList)\n        } else {\n          // 单页\n\n          // 把原来的formData的值设置进去\n          let formListFilled = this.fillValueToFormList(\n            formList,\n            this.formData\n          )\n          this.$store.dispatch(\n            'formDesign/setFormList',\n            common.deepClone(formListFilled)\n          )\n          this.formList = common.deepClone(formListFilled)\n        }\n        this.loadingForm = false\n      })\n    }\n  },\n  watch: {\n    tabIndex: {\n      handler: function (newValue, oldValue) {\n        // this.loadingForm = true\n        // 切换tab之前，赋值给formAttr\n        this.formAttr.tabs[oldValue].formList = common.deepClone(this.formList)\n\n        if (newValue === -1 || newValue === '-1') return\n\n        // 赋值新tab\n        this.$store.dispatch(\n          'formDesign/setFormList',\n          common.deepClone(this.formAttr.tabs[Number(newValue)].formList)\n        )\n        this.formList = common.deepClone(\n          this.formAttr.tabs[Number(newValue)].formList\n        )\n      },\n      deep: true\n    },\n    formValue: {\n      handler: function (value, oldValue) {\n      },\n      deep: true\n    },\n    formList: {\n      handler: function (value, oldValue) {\n        console.log('watch formList', value)\n\n        if (common.isEmpty(value)) return\n\n        let keys = []\n\n        common.deepClone(value).forEach(element => {\n          for (const key in this.formValue) {\n            if (this.formValue.hasOwnProperty(key)) {\n              if (element.type === 'grid') {\n                element.cols.forEach(element2 => {\n                  element2.list.forEach(element3 => {\n                    if (key === element3.code && keys.includes(key)) {\n                      this.formValue[key] = element3.options.defaultValue\n                    }\n                  })\n                })\n              } else {\n                if (key === element.code && keys.includes(key)) {\n                  this.formValue[key] = element.options.defaultValue\n                }\n              }\n            }\n          }\n        })\n\n        console.log('this.formValue', this.formValue)\n      },\n      deep: true\n    },\n    formData: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    },\n    dycForm: {\n      handler: function () {\n        this.init()\n      },\n      deep: true\n    }\n  }\n}\n</script>\n"
  },
  {
    "path": "src/components/form-design/Cell.vue",
    "content": "<template>\n  <div class=\"cell\" :class=\"{'cell-active': data.key === $store.state.formDesign.activeKey}\">\n    <div>\n      <el-form-item\n        v-if=\"data.type !== 'grid' && data.type !== 'title'\"\n        :label=\"data.title\"\n        :prop=\"data.key\"\n        @click.native=\"activeCell\"\n      >\n        <el-input\n          v-if=\"data.type === 'input'\"\n          value=\"\"\n          :placeholder=\"data.options.placeholder\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n          :style=\"{width: data.options.width}\"\n        ></el-input>\n        <el-input\n          v-if=\"data.type === 'textarea'\"\n          :placeholder=\"data.options.placeholder\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n          type=\"textarea\"\n          :rows=\"5\"\n          :style=\"{width: data.options.width}\"\n        ></el-input>\n        <template v-if=\"data.type === 'idea'\">\n          <el-input\n            :placeholder=\"data.options.placeholder\"\n            :disabled=\"data.options.disabled\"\n            :readonly=\"true\"\n            type=\"textarea\"\n            :rows=\"5\"\n            :style=\"{width: data.options.width}\"\n            :id=\"data.key\"\n          ></el-input>\n          <el-button type=\"text\" @click=\"ideaDialogVisible = true; markIdeaKey(data.key);\">选择快捷意见</el-button>\n        </template>\n        <el-input-number\n          v-if=\"data.type === 'number'\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n          :style=\"{width: data.options.width}\"\n        ></el-input-number>\n        <el-radio-group\n          v-if=\"data.type === 'radio'\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n          :style=\"{width: data.options.width}\"\n        >\n          <el-radio\n            v-for=\"(item, i) in data.options.option\"\n            :label=\"item.value\"\n            :key=\"i\"\n          >{{item.label}}</el-radio>\n        </el-radio-group>\n        <el-checkbox-group\n          v-if=\"data.type === 'checkbox'\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n          :style=\"{width: data.options.width}\"\n        >\n          <el-checkbox\n            v-for=\"(item, i) in data.options.option\"\n            :label=\"item.value\"\n            :key=\"i\"\n          >{{item.label}}</el-checkbox>\n        </el-checkbox-group>\n        <el-select\n          v-if=\"data.type === 'select'\"\n          :placeholder=\"data.options.placeholder\"\n          :style=\"{width: data.options.width}\"\n          :readonly=\"true\"\n          :disabled=\"data.options.disabled\"\n        >\n          <el-option\n            v-for=\"(item, i) in data.options.option\"\n            :key=\"i\"\n            :label=\"item.label\"\n            :value=\"item.value\"\n          ></el-option>\n        </el-select>\n        <el-switch\n          v-if=\"data.type === 'switch'\"\n          active-color=\"#13ce66\"\n          inactive-color=\"#EEEEEE\"\n          :style=\"{width: data.options.width}\"\n          :readonly=\"true\"\n          :disabled=\"data.options.disabled\"\n        ></el-switch>\n        <el-date-picker\n          type=\"datetime\"\n          v-if=\"data.type === 'datetime'\"\n          :placeholder=\"data.options.placeholder\"\n          :style=\"{width: data.options.width}\"\n          :disabled=\"data.options.disabled\"\n        ></el-date-picker>\n        <el-upload\n          v-if=\"data.type === 'img'\"\n          class=\"upload-demo\"\n          action=\"https://jsonplaceholder.typicode.com/posts/\"\n          :limit=\"1\"\n          :file-list=\"[]\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n        >\n          <el-button size=\"small\" type=\"primary\">点击上传</el-button>\n          <div slot=\"tip\" class=\"el-upload__tip\">只能上传jpg/png文件，且不超过500kb</div>\n        </el-upload>\n      </el-form-item>\n      <p\n        v-if=\"data.type === 'title'\"\n        :style=\"{'text-align': data.options.align, 'font-size': data.options.fontSize}\"\n        @click=\"activeCell\"\n      >{{data.value}}</p>\n      <FDGridPanel\n        v-else\n        :propData=\"data\"\n        :formAttr=\"formAttr\"\n        :FDkey=\"data.key\"\n        @syncList=\"syncList\"\n      />\n    </div>\n    <i\n      class=\"action-copy\"\n      title=\"复制\"\n      v-show=\"data.key === $store.state.formDesign.activeKey && data.type != 'grid'\"\n      @click=\"copyForm\"\n    ></i>\n    <i\n      class=\"action-delete\"\n      title=\"删除\"\n      v-show=\"data.key === $store.state.formDesign.activeKey\"\n      @click=\"deleteForm\"\n    ></i>\n\n    <el-dialog\n      title=\"选择意见\"\n      :visible.sync=\"ideaDialogVisible\"\n      append-to-body\n      modal-append-to-body\n      width=\"30%\"\n    >\n      <el-tabs v-model=\"ideaTabIndex\">\n        <el-tab-pane label=\"个人意见\" name=\"1\">\n          <el-table :data=\"idea.personal\" style=\"width: 100%\">\n            <el-table-column type=\"index\" label=\"序号\" width=\"180\"></el-table-column>\n            <el-table-column prop=\"ideaNotes\" label=\"意见内容\" width=\"180\">\n              <template slot-scope=\"scope\">\n                <a\n                  href=\"javascript:void(0);\"\n                  @click=\"appendNote(scope.row.ideaNotes)\"\n                >{{scope.row.ideaNotes}}</a>\n              </template>\n            </el-table-column>\n          </el-table>\n        </el-tab-pane>\n        <el-tab-pane label=\"公共意见\" name=\"2\">\n          <el-table :data=\"idea.public\" style=\"width: 100%\">\n            <el-table-column type=\"index\" label=\"序号\" width=\"180\"></el-table-column>\n            <el-table-column prop=\"ideaNotes\" label=\"意见内容\" width=\"180\">\n              <template slot-scope=\"scope\">\n                <a\n                  href=\"javascript:void(0);\"\n                  @click=\"appendNote(scope.row.ideaNotes)\"\n                >{{scope.row.ideaNotes}}</a>\n              </template>\n            </el-table-column>\n          </el-table>\n        </el-tab-pane>\n      </el-tabs>\n      <span slot=\"footer\" class=\"dialog-footer\">\n        <el-button type=\"primary\" @click=\"ideaDialogVisible = false\">确 定</el-button>\n      </span>\n    </el-dialog>\n  </div>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport FDGridPanel from '@/components/form-design/FDGridPanel'\nimport bus from '@/utils/bus'\n\nexport default {\n  components: {\n    FDGridPanel\n  },\n  props: {\n    formAttr: {\n      type: Object,\n      default: function () {\n        return {\n          align: 'top',\n          size: 'medium',\n          labelWidth: 80\n        }\n      }\n    },\n    data: {\n      type: Object,\n      default: function () {\n        return {\n          type: '',\n          name: '',\n          code: '',\n          options: {\n            width: '100%',\n            defaultValue: '',\n            required: false,\n            dataType: 'string',\n            placeholder: ''\n          },\n          key: '1556775967000_4898'\n        }\n      }\n    },\n    isGrid: {\n      type: Boolean,\n      default: false\n    },\n    FDindex: {\n      type: Number\n    },\n    idea: {\n      type: Object,\n      default: function () {\n        return {\n          personal: [\n            {\n              'ideaId': '402880ee6c3df518016c3e5251980008',\n              'mainType': 1,\n              'userId': null,\n              'ideaNotes': '这是一条模拟个人意见文本',\n              'sortOrder': null,\n              'state': 1\n            }\n          ],\n          public: [\n            {\n              'ideaId': '402880ee6c3df518016c3e5251980008',\n              'mainType': 1,\n              'userId': null,\n              'ideaNotes': '这是一条模拟公共意见文本',\n              'sortOrder': null,\n              'state': 1\n            }\n          ]\n        }\n      }\n    }\n  },\n  methods: {\n    copyForm () {\n      let formList = common.deepClone(this.$store.state.formDesign.formList)\n\n      let newIndex\n      for (let i = 0; i < formList.length; i++) {\n        const element = formList[i]\n        if (element.key === this.data.key) {\n          newIndex = i\n          break\n        }\n      }\n      let copyForm = common.deepClone(formList[newIndex])\n      copyForm.key = common.getGuid()\n      copyForm.code = `code_${common.getGuid2()}`\n      formList.splice(newIndex + 1, 0, copyForm)\n      this.$store.commit(\n        'formDesign/updateActiveForm',\n        common.deepClone(copyForm)\n      )\n      this.$store.commit('formDesign/updateActiveKey', copyForm.key)\n      this.$emit('syncList', formList)\n      this.$store.dispatch('formDesign/setFormList', formList)\n    },\n    deleteForm () {\n      let formList = common.deepClone(this.$store.state.formDesign.formList)\n      let newIndex\n      for (let i = 0; i < formList.length; i++) {\n        const element = formList[i]\n        if (element.key === this.data.key) {\n          newIndex = i\n          break\n        }\n      }\n      formList.splice(newIndex, 1)\n\n      this.$emit('syncList', formList)\n      this.$store.dispatch(\n        'formDesign/setFormList',\n        common.deepClone(formList)\n      )\n\n      if (newIndex !== 0) {\n        this.$store.commit(\n          'formDesign/updateActiveKey',\n          formList[newIndex - 1].key\n        )\n        this.$store.commit(\n          'formDesign/updateActiveForm',\n          common.deepClone(formList[newIndex - 1])\n        )\n      } else {\n        if (formList.length > 0) {\n          this.$store.commit('formDesign/updateActiveKey', formList[0].key)\n          this.$store.commit(\n            'formDesign/updateActiveForm',\n            common.deepClone(formList[0])\n          )\n        }\n      }\n    },\n    activeCell () {\n      bus.$emit('update.activeName', '1')\n      this.$store.commit('formDesign/updateActiveKey', this.data.key)\n      this.$store.commit('formDesign/updateShowType', this.data.type)\n      this.$store.commit(\n        'formDesign/updateActiveForm',\n        common.deepClone(this.data)\n      )\n    },\n    syncList (value) {\n      this.$emit('syncList', value)\n    },\n    markIdeaKey (ideaKey) {\n      sessionStorage.ideaKey = ideaKey\n    },\n    appendNote (note) {\n      const realname = '管理员'\n      const nowDate = common.formatDateCN(new Date().getTime())\n      const result = `${note}\\n\\n                                                  ${realname}\\n                                                  ${nowDate}`\n      // let newFormList = common.deepClone(this.$store.state.formDesign.formList)\n      // newFormList.forEach((el) => {\n      //   if (el.type === 'idea' && el.key === sessionStorage.ideaKey) {\n      //     el.options.defaultValue = result\n      //     this.$emit('syncList', newFormList)\n      //     this.$store.dispatch(\n      //       'formDesign/setFormList',\n      //       common.deepClone(newFormList)\n      //     )\n      //   }\n      // })\n\n      this.ideaDialogVisible = false\n      window.document.getElementById(sessionStorage.ideaKey).value = result\n    }\n  },\n  data () {\n    return {\n      ideaDialogVisible: false,\n      ideaTabIndex: '1'\n    }\n  }\n}\n</script>\n\n<style lang=\"css\" scoped>\n.cell {\n  background-color: #eee;\n  padding: 10px 10px 20px 10px;\n  position: relative;\n  cursor: move;\n}\n.cell-active {\n  background-color: #b3d8ff;\n  border-left: 5px solid #409eff;\n}\n.el-form-item {\n  margin-bottom: 0;\n}\n.action-copy {\n  position: absolute;\n  bottom: -15px;\n  right: 60px;\n  height: 30px;\n  width: 30px;\n  background: url(\"../../assets/img/copy.png\") no-repeat center;\n  background-size: 18px 18px;\n  background-color: #ecf5ff;\n  border-color: #409eff;\n  border-radius: 50%;\n  cursor: pointer;\n  border: 1px solid #409eff;\n  z-index: 1;\n}\n.action-copy:hover {\n  background: url(\"../../assets/img/copy-active.png\") no-repeat center;\n  background-color: #409eff;\n}\n.action-delete {\n  position: absolute;\n  bottom: -15px;\n  right: 15px;\n  height: 30px;\n  width: 30px;\n  background: url(\"../../assets/img/delete.png\") no-repeat center;\n  background-size: 15px 15px;\n  background-color: #fef0f0;\n  border-radius: 50%;\n  cursor: pointer;\n  border: 1px solid #f56c6c;\n  z-index: 1;\n}\n.action-delete:hover {\n  background: url(\"../../assets/img/delete-active.png\") no-repeat center;\n  background-color: #f56c6c;\n}\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDCheckbox.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-07-03 08:37:07\n * @LastEditTime: 2019-10-18 12:35:15\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-form label-position=\"top\" label-width=\"80px\" size=\"mini\">\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"data.title\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"表字段code\">\n      <el-input v-model=\"data.code\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"宽度\">\n      <el-input v-model=\"data.options.width\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"数据绑定key\">\n      <el-input v-model=\"data.width\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item>\n\n    <el-form-item label=\"选项\">\n      <el-checkbox-group class=\"clearfix\">\n        <div v-for=\"(item, i) in data.options.option\" :key=\"i\" style=\"clearfix\">\n          <el-checkbox :label=\"item.value\" style=\"float: left;\">\n            <el-input size=\"small\" style=\"width:80px!important;\" v-model=\"item.label\" title=\"删除选项\"></el-input>\n            <el-input size=\"small\" style=\"width:80px!important;\" v-model=\"item.value\" title=\"删除选项\"></el-input>\n            <i class=\"el-icon-circle-close\" style=\"color: red;\" @click=\"subOption(i)\"></i>\n          </el-checkbox>\n        </div>\n      </el-checkbox-group>\n\n      <div style=\"width: 100%;\">\n        <i class=\"el-icon-circle-plus\" style=\"color: #17B3A3;\" title=\"增加选项\" @click=\"addOption\"></i>\n      </div>\n    </el-form-item>\n    <el-form-item label=\"是否必填\">\n      <el-switch v-model=\"data.options.required\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"是否禁用\">\n      <el-switch v-model=\"data.options.disabled\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '多选框组',\n          type: 'checkbox',\n          code: '',\n          icon: '/static/img/form-design/checkbox.png',\n          options: {\n            width: '100%',\n            required: false,\n            disabled: false,\n            defaultValue: [],\n            option: [{\n              value: '值1',\n              label: '选项1'\n            }, {\n              value: '值2',\n              label: '选项2'\n            }, {\n              value: '值3',\n              label: '选项3'\n            }]\n          },\n          key: common.getGuid()\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '多选框组',\n        type: 'checkbox',\n        code: '',\n        icon: '/static/img/form-design/checkbox.png',\n        options: {\n          defaultValue: [],\n          width: '100%',\n          required: false,\n          disabled: false,\n          option: [{\n            value: '值1',\n            label: '选项1'\n          }, {\n            value: '值2',\n            label: '选项2'\n          }, {\n            value: '值3',\n            label: '选项3'\n          }]\n        },\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {\n    addOption () {\n      this.data.options.option.push({\n        value: `值${this.data.options.option.length + 1}`,\n        label: `选项${this.data.options.option.length + 1}`\n      })\n    },\n    subOption (index) {\n      this.data.options.option.splice(index, 1)\n    }\n  },\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        let newFormList = common.deepClone(\n          this.$store.state.formDesign.formList\n        )\n        // eslint-disable-next-line no-unused-vars\n        let activeIndex\n        for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n          const element = newFormList[i]\n          if (element.type !== 'grid') {\n            if (element.key === this.$store.state.formDesign.activeKey) {\n              activeIndex = i\n\n              newFormList[i] = value\n              this.$store.commit('formDesign/updateActiveKey', element.key)\n              this.$store.dispatch('formDesign/setFormList', common.deepClone(newFormList))\n              bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n              break\n            }\n          } else {\n            for (let j = 0; j < element.cols.length; j++) {\n              const element2 = element.cols[j]\n              for (let k = 0; k < element2.list.length; k++) {\n                const element3 = element2.list[k]\n                if (element3.key === this.$store.state.formDesign.activeKey) {\n                  activeIndex = i\n\n                  newFormList[i].cols[j].list[k] = value\n                  this.$store.commit('formDesign/updateActiveKey', element3.key)\n                  this.$store.dispatch('formDesign/setFormList', common.deepClone(newFormList))\n                  bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n                  break\n                }\n              }\n            }\n          }\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true\n      // immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDDateTime.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-07-03 08:37:07\n * @LastEditTime: 2019-10-14 10:52:57\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-form label-position=\"top\" label-width=\"80px\" size=\"mini\">\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"data.title\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"表字段code\">\n      <el-input v-model=\"data.code\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"宽度\">\n      <el-input v-model=\"data.options.width\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"占位内容\">\n      <el-input v-model=\"data.options.placeholder\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"显示类型/格式\">\n      <el-cascader :options=\"dateTimeTypeOptions\" v-model=\"data.options.type\"></el-cascader>\n    </el-form-item>\n    <el-form-item label=\"数据绑定key\">\n      <el-input v-model=\"data.key\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"是否必填\">\n      <el-switch v-model=\"data.options.required\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"是否禁用\">\n      <el-switch v-model=\"data.options.disabled\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"是否只读\">\n      <el-switch v-model=\"data.options.readonly\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '时间选择器',\n          type: 'datetime',\n          code: '',\n          icon: '/static/img/form-design/datetime.png',\n          options: {\n            width: '100%',\n            type: ['ymd', 'yyyy-MM-dd'],\n            defaultValue: '',\n            required: false,\n            disabled: false,\n            placeholder: ''\n          },\n          key: common.getGuid()\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '时间选择器',\n        type: 'datetime',\n        code: '',\n        icon: '/static/img/form-design/datetime.png',\n        options: {\n          width: '100%',\n          type: ['ymd', 'yyyy-MM-dd'],\n          defaultValue: '',\n          required: false,\n          disabled: false,\n          placeholder: ''\n        },\n        key: common.getGuid()\n      },\n\n      dateTimeTypeOptions: [\n        {\n          value: 'y',\n          label: '年',\n          children: [\n            {\n              value: 'yyyy',\n              label: 'yyyy'\n            },\n            {\n              value: 'yyyy年',\n              label: 'yyyy年'\n            }\n          ]\n        },\n        {\n          value: 'ym',\n          label: '年月',\n          children: [\n            {\n              value: 'yyyy-MM',\n              label: 'yyyy-MM'\n            },\n            {\n              value: 'yyyy/MM',\n              label: 'yyyy/MM'\n            },\n            {\n              value: 'yyyy年MM月',\n              label: 'yyyy年MM月'\n            }\n          ]\n        },\n        {\n          value: 'ymd',\n          label: '年月日',\n          children: [\n            {\n              value: 'yyyy-MM-dd',\n              label: 'yyyy-MM-dd'\n            },\n            {\n              value: 'yyyy/MM/dd',\n              label: 'yyyy/MM/dd'\n            },\n            {\n              value: 'yyyy年MM月dd日',\n              label: 'yyyy年MM月dd日'\n            }\n          ]\n        },\n        {\n          value: 'hm',\n          label: '时分',\n          children: [\n            {\n              value: 'HH:mm',\n              label: 'HH:mm'\n            },\n            {\n              value: 'HH时mm分',\n              label: 'HH时mm分'\n            }\n          ]\n        },\n        {\n          value: 'hms',\n          label: '时分秒',\n          children: [\n            {\n              value: 'HH:mm:ss',\n              label: 'HH:mm:ss'\n            },\n            {\n              value: 'HH时mm分ss秒',\n              label: 'HH时mm分ss秒'\n            }\n          ]\n        },\n        {\n          value: 'ymdhm',\n          label: '年月日时分',\n          children: [\n            {\n              value: 'yyyy-MM-dd HH:mm',\n              label: 'yyyy-MM-dd HH:mm'\n            },\n            {\n              value: 'yyyy/MM/dd HH:mm',\n              label: 'yyyy/MM/dd HH:mm'\n            },\n            {\n              value: 'yyyy年MM月dd日 HH时mm分',\n              label: 'yyyy年MM月dd日 HH时mm分'\n            }\n          ]\n        },\n        {\n          value: 'ymdhms',\n          label: '年月日时分秒',\n          children: [\n            {\n              value: 'yyyy-MM-dd HH:mm:ss',\n              label: 'yyyy-MM-dd HH:mm:ss'\n            },\n            {\n              value: 'yyyy/MM/dd HH:mm:ss',\n              label: 'yyyy/MM/dd HH:mm:ss'\n            },\n            {\n              value: 'yyyy年MM月dd日 HH时mm分ss秒',\n              label: 'yyyy年MM月dd日 HH时mm分ss秒'\n            }\n          ]\n        }\n      ]\n    }\n  },\n  methods: {},\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        let newFormList = common.deepClone(\n          this.$store.state.formDesign.formList\n        )\n        // eslint-disable-next-line no-unused-vars\n        let activeIndex\n        for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n          const element = newFormList[i]\n          if (element.type !== 'grid') {\n            if (element.key === this.$store.state.formDesign.activeKey) {\n              activeIndex = i\n\n              newFormList[i] = value\n              this.$store.commit('formDesign/updateActiveKey', element.key)\n              this.$store.dispatch(\n                'formDesign/setFormList',\n                common.deepClone(newFormList)\n              )\n              bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n              break\n            }\n          } else {\n            for (let j = 0; j < element.cols.length; j++) {\n              const element2 = element.cols[j]\n              for (let k = 0; k < element2.list.length; k++) {\n                const element3 = element2.list[k]\n                if (element3.key === this.$store.state.formDesign.activeKey) {\n                  activeIndex = i\n\n                  newFormList[i].cols[j].list[k] = value\n                  this.$store.commit(\n                    'formDesign/updateActiveKey',\n                    element3.key\n                  )\n                  this.$store.dispatch(\n                    'formDesign/setFormList',\n                    common.deepClone(newFormList)\n                  )\n                  bus.$emit(\n                    'formDesign.syncList',\n                    common.deepClone(newFormList)\n                  )\n                  break\n                }\n              }\n            }\n          }\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true\n      // immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDGrid.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-05-15 21:32:27\n * @LastEditTime: 2019-05-15 21:32:27\n * @LastEditors: your name\n -->\n<template>\n  <el-form label-position=\"top\" label-width=\"80px\"  size=\"mini\">\n    <el-form-item label=\"列配置项（每行占比总和最多为24）\">\n      <div v-for=\"(item, i) in data.cols\" :key=\"i\">\n        <el-input-number v-model=\"item.span\" :min=\"1\" :max=\"24\" label=\"列占比\" size=\"small\"></el-input-number>\n        <i class=\"el-icon-circle-close\" style=\"color: red;\" @click=\"subOption(i)\"></i>\n      </div>\n\n      <div style=\"width: 100%;\">\n        <i class=\"el-icon-circle-plus\" style=\"color: #17B3A3;\" title=\"增加选项\" @click=\"addOption\"></i>\n      </div>\n    </el-form-item>\n\n    <!-- <el-form-item label=\"数据绑定key\">\n      <el-input v-model=\"data.width\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item> -->\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '栅格布局',\n          type: 'grid',\n          icon: '/static/img/form-design/grid.png',\n          cols: [{\n            span: 12,\n            list: [\n            ]\n          }, {\n            span: 12,\n            list: []\n          }]\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '栅格布局',\n        type: 'grid',\n        icon: '/static/img/form-design/grid.png',\n        cols: [{\n          span: 12,\n          list: [\n          ]\n        }, {\n          span: 12,\n          list: []\n        }],\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {\n    addOption () {\n      this.data.cols.push({\n        span: 12,\n        list: [\n        ]\n      })\n    },\n    subOption (index) {\n      this.data.cols.splice(index, 1)\n    }\n  },\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        let newFormList = common.deepClone(this.$store.state.formDesign.formList)\n        let activeIndex\n        for (let i = 0; i < newFormList.length; i++) {\n          const element = newFormList[i]\n          if (element.key === this.$store.state.formDesign.activeKey) {\n            activeIndex = i\n          }\n        }\n        if (!common.isEmpty(activeIndex)) {\n          newFormList[activeIndex] = value\n          this.$store.commit('formDesign/updateActiveKey', value.key)\n          this.$store.dispatch('formDesign/setFormList', common.deepClone(newFormList))\n          bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true\n      // immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDGridPanel.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-07-03 08:37:07\n * @LastEditTime: 2019-10-12 17:02:43\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-row>\n    <el-col :span=\"col.span\" v-for=\"(col, i) in data.cols\" :key=\"i\" class=\"col\">\n      <draggable class=\"dragArea\" @change=\"log\" :list=\"col.list\" :group=\"{ name: 'form-design'}\">\n        <GridCell\n          :data=\"item\"\n          v-for=\"(item, j) in col.list\"\n          :key=\"j\"\n          @syncList=\"syncList\"\n          :formAttr=\"formAttr\"\n          :isGrid=\"true\"\n          :FDkey=\"FDkey\"\n          :FDindex=\"i\"\n        />\n        <!-- \n        <el-form-item label=\"（必填）\">\n          <el-input :readonly=\"true\"></el-input>\n        </el-form-item>-->\n      </draggable>\n      <div class=\"bottom-area\" @click=\"activeCell\"></div>\n    </el-col>\n  </el-row>\n</template>\n\n<script>\nimport GridCell from '@/components/form-design/GridCell'\nimport draggable from 'vuedraggable'\nimport common from '@/utils/common'\n// eslint-disable-next-line no-unused-vars\nimport bus from '@/utils/bus'\n\nexport default {\n  components: {\n    draggable,\n    GridCell\n  },\n  props: {\n    formAttr: {\n      type: Object,\n      default: function () {\n        return {\n          align: 'top',\n          size: 'medium',\n          labelWidth: 80\n        }\n      }\n    },\n    FDkey: {\n      type: String,\n      default: ''\n    },\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '栅格布局',\n          type: 'grid',\n          icon: '/static/img/form-design/grid.png',\n          cols: [\n            {\n              span: 12,\n              list: [\n                // {\n                //   title: \"多行文本\",\n                //   type: \"textarea\",\n                //   icon: \"/static/img/form-design/textarea.png\",\n                //   options: {\n                //     width: \"100%\",\n                //     defaultValue: \"\",\n                //     required: false,\n                //     disabled: false,\n                //     placeholder: \"\",\n                //     regEx: \"\"\n                //   },\n                //   key: \"\"\n                // }\n              ]\n            },\n            {\n              span: 12,\n              list: []\n            }\n          ],\n          key: common.getGuid()\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '栅格布局',\n        type: 'grid',\n        icon: '/static/img/form-design/grid.png',\n        cols: [\n          {\n            span: 12,\n            list: []\n          },\n          {\n            span: 12,\n            list: []\n          }\n        ],\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {\n    log: function (evt) {\n      console.log('FDGridPanel')\n      window.console.log(evt)\n      // let newFormList = common.deepClone(this.$store.state.formDesign.grid[this.FDkey]);\n      // console.log(\"newFormList\", newFormList)\n      // let form;\n      // if (evt.added) {\n      //   form = evt.added.element;\n      //   let newIndex = evt.added.newIndex;\n      //   form.key = common.getGuid();\n      //   newFormList.splice(newIndex, 0, form);\n      //   this.$store.commit('formDesign/updateShowType', form.type);\n      //   this.$store.commit('formDesign/updateActiveKey', form.key);\n      //   this.$store.commit('formDesign/updateActiveForm', common.deepClone(form));\n      //   this.$store.commit('formDesign/updateGrid', this.FDkey, common.deepClone(newFormList));\n      // }\n      // if (evt.moved) {\n      //   form = evt.moved.element;\n      //   let newIndex = evt.moved.newIndex;\n      //   let oldIndex = evt.moved.oldIndex;\n      //   //先直接在新位置插入表单，然后旧位置索引+1的位置表单直接减掉\n      //   // newFormList.splice(newIndex, 0, form);\n      //   // newFormList.splice(oldIndex, oldIndex + 1);\n      //   this.$store.commit('formDesign/updateShowType', form.type);\n      //   this.$store.commit('formDesign/updateActiveKey', form.key);\n      //   this.$store.commit('formDesign/updateActiveForm', common.deepClone(form));\n      //   this.$store.commit('formDesign/updateGrid', this.FDkey, common.deepClone(newFormList));\n      // }\n\n      // 处理从外部拖进栅格的表单元素\n      if (evt.added) {\n        sessionStorage.outToIn = 1\n      }\n    },\n    syncList (value, index) {\n      // this.data.cols[index].list = common.deepClone(value);\n      let formList = common.deepClone(this.$store.state.formDesign.formList)\n      for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n        const element = this.$store.state.formDesign.formList[i]\n        if (element.key === this.FDkey) {\n          formList[i] = this.data\n        }\n      }\n      console.log('formList', formList)\n      this.$emit('syncList', formList)\n    },\n    activeCell () {\n      this.$store.commit('formDesign/updateActiveKey', this.FDkey)\n      this.$store.commit('formDesign/updateShowType', 'grid')\n      this.$store.commit(\n        'formDesign/updateActiveForm',\n        common.deepClone(this.data)\n      )\n    }\n  },\n  mounted () {},\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        console.log('value', value)\n        let newData = common.deepClone(value)\n        let haveEmptyKey = false\n        for (let i = 0; i < newData.cols.length; i++) {\n          const element = newData.cols[i]\n          for (let j = 0; j < element.list.length; j++) {\n            const element2 = element.list[j]\n            if (common.isEmpty(element2.key)) {\n              element2.key = common.getGuid()\n              element2.code = `code_${common.getGuid2()}`\n              this.$store.commit('formDesign/updateActiveKey', element2.key)\n              haveEmptyKey = true\n            }\n          }\n        }\n        if (haveEmptyKey) {\n          this.data = newData\n\n          let formListAll = common.deepClone(\n            this.$store.state.formDesign.formList\n          )\n          for (\n            let i = 0;\n            i < this.$store.state.formDesign.formList.length;\n            i++\n          ) {\n            const element = this.$store.state.formDesign.formList[i]\n            if (element.key === this.FDkey) {\n              formListAll[i] = common.deepClone(newData)\n            }\n          }\n          this.$store.dispatch(\n            'formDesign/setFormList',\n            common.deepClone(formListAll)\n          )\n\n          this.$store.state.formDesign.formList.forEach(el => {\n            if (el.type === 'grid') {\n              el.cols.forEach(el2 => {\n                el2.list.forEach(el3 => {\n                  if (el3.key === this.$store.state.formDesign.activeKey) {\n                    this.$store.commit('formDesign/updateShowType', el3.type)\n                    this.$store.commit('formDesign/updateActiveForm', common.deepClone(el3))\n                    // this.$store.commit('formDesign/updateGrid', {\n                    //   key: el.key,\n                    //   value: common.deepClone(el2.list)\n                    // })\n                  }\n                })\n              })\n            } else {\n              if (el.key === this.$store.state.formDesign.activeKey) {\n                this.$store.commit('formDesign/updateShowType', el.type)\n                this.$store.commit('formDesign/updateActiveForm', common.deepClone(el))\n              }\n            }\n          })\n        }\n        console.log('newData.key', this.FDkey)\n        console.log(\n          'this.$store.state.formDesign.activeKey',\n          this.$store.state.formDesign.activeKey\n        )\n        console.log(\n          'this.$store.state.formDesign.grid',\n          this.$store.state.formDesign.grid\n        )\n        this.$store.commit('formDesign/updateGrid', {\n          key: this.FDkey,\n          value: common.deepClone(newData)\n        })\n        this.$emit('syncList', this.$store.state.formDesign.formList)\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true,\n      immediate: true\n    }\n  }\n}\n</script>\n\n<style scoped>\n.col {\n  min-height: 50px;\n  outline: 1px dashed;\n  /* margin: 10px; */\n}\n.bottom-area {\n  width: 100%;\n  height: 25px;\n}\n.dragArea {\n  min-height: 50px;\n}\n</style>"
  },
  {
    "path": "src/components/form-design/FDIdea.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-09-30 12:28:12\n * @LastEditTime: 2019-10-14 10:51:10\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-form label-position=\"top\" label-width=\"80px\" size=\"mini\">\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"data.title\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"表字段code\">\n      <el-input v-model=\"data.code\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"宽度\">\n      <el-input v-model=\"data.options.width\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"最大长度\">\n      <el-input-number\n        v-model=\"data.options.maxlength\"\n        :min=\"1\"\n        :max=\"300\"\n        label=\"最大长度\"\n        size=\"small\"\n      ></el-input-number>\n    </el-form-item>\n    <el-form-item label=\"占位内容\">\n      <el-input v-model=\"data.options.placeholder\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"默认值\">\n      <el-select\n        v-model=\"data.options.defaultValue\"\n        allow-create\n        title=\"自定义值按回车确定\"\n        placeholder=\"请输入选择默认值\"\n        size=\"small\"\n      >\n        <el-option\n          v-for=\"(item, i) in defaultValueList\"\n          :key=\"i\"\n          :label=\"item.label\"\n          :value=\"item.val\"\n        ></el-option>\n      </el-select>\n    </el-form-item>\n    <el-form-item label=\"数据绑定key\">\n      <el-input v-model=\"data.key\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"是否必填\">\n      <el-switch v-model=\"data.options.required\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"是否禁用\">\n      <el-switch v-model=\"data.options.disabled\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '意见框落款',\n          type: 'idea',\n          code: '',\n          icon: '/static/img/form-design/textarea.png',\n          options: {\n            width: '100%',\n            defaultValue: '',\n            required: false,\n            disabled: false,\n            placeholder: '',\n            regEx: '',\n            maxlength: 300\n          },\n          key: common.getGuid()\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '意见框落款',\n        type: 'idea',\n        code: '',\n        icon: '/static/img/form-design/textarea.png',\n        options: {\n          width: '100%',\n          defaultValue: '',\n          required: false,\n          disabled: false,\n          placeholder: '',\n          regEx: '',\n          maxlength: 300\n        },\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {},\n  mounted () {},\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        let newFormList = common.deepClone(\n          this.$store.state.formDesign.formList\n        )\n        // eslint-disable-next-line no-unused-vars\n        let activeIndex\n        for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n          const element = newFormList[i]\n          if (element.type !== 'grid') {\n            if (element.key === this.$store.state.formDesign.activeKey) {\n              activeIndex = i\n\n              newFormList[i] = value\n              this.$store.commit('formDesign/updateActiveKey', element.key)\n              this.$store.dispatch(\n                'formDesign/setFormList',\n                common.deepClone(newFormList)\n              )\n              bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n              break\n            }\n          } else {\n            for (let j = 0; j < element.cols.length; j++) {\n              const element2 = element.cols[j]\n              for (let k = 0; k < element2.list.length; k++) {\n                const element3 = element2.list[k]\n                if (element3.key === this.$store.state.formDesign.activeKey) {\n                  activeIndex = i\n\n                  newFormList[i].cols[j].list[k] = value\n                  this.$store.commit(\n                    'formDesign/updateActiveKey',\n                    element3.key\n                  )\n                  this.$store.dispatch(\n                    'formDesign/setFormList',\n                    common.deepClone(newFormList)\n                  )\n                  bus.$emit(\n                    'formDesign.syncList',\n                    common.deepClone(newFormList)\n                  )\n                  break\n                }\n              }\n            }\n          }\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true\n      // immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDImg.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-05-15 21:32:27\n * @LastEditTime: 2019-05-15 21:32:27\n * @LastEditors: your name\n -->\n<template>\n  <el-form label-position=\"top\" label-width=\"80px\"  size=\"mini\">\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"data.title\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"默认值图片地址\">\n      <el-input v-model=\"data.options.defaultValue\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"数据绑定key\">\n      <el-input v-model=\"data.key\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"是否必填\">\n      <el-switch v-model=\"data.options.required\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"是否禁用\">\n      <el-switch v-model=\"data.options.disabled\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '图片上传',\n          type: 'img',\n          code: '',\n          icon: '/static/img/form-design/img.png',\n          options: {\n            defaultValue: '',\n            required: false,\n            disabled: false\n          },\n          key: common.getGuid()\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '图片上传',\n        type: 'img',\n        code: '',\n        icon: '/static/img/form-design/img.png',\n        options: {\n          defaultValue: '',\n          required: false,\n          disabled: false\n        },\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {},\n  mounted () {},\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        console.log('FDImg watch')\n        let newFormList = common.deepClone(\n          this.$store.state.formDesign.formList\n        )\n        // eslint-disable-next-line no-unused-vars\n        let activeIndex\n        for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n          const element = newFormList[i]\n          if (element.type !== 'grid') {\n            if (element.key === this.$store.state.formDesign.activeKey) {\n              activeIndex = i\n\n              newFormList[i] = value\n              this.$store.commit('formDesign/updateActiveKey', element.key)\n              this.$store.dispatch(\n                'formDesign/setFormList',\n                common.deepClone(newFormList)\n              )\n              bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n              break\n            }\n          } else {\n            for (let j = 0; j < element.cols.length; j++) {\n              const element2 = element.cols[j]\n              for (let k = 0; k < element2.list.length; k++) {\n                const element3 = element2.list[k]\n                if (element3.key === this.$store.state.formDesign.activeKey) {\n                  activeIndex = i\n\n                  newFormList[i].cols[j].list[k] = value\n                  this.$store.commit(\n                    'formDesign/updateActiveKey',\n                    element3.key\n                  )\n                  this.$store.dispatch(\n                    'formDesign/setFormList',\n                    common.deepClone(newFormList)\n                  )\n                  bus.$emit(\n                    'formDesign.syncList',\n                    common.deepClone(newFormList)\n                  )\n                  break\n                }\n              }\n            }\n          }\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true\n      // immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDInput.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-07-03 08:37:07\n * @LastEditTime: 2019-10-14 10:36:17\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-form label-position=\"top\" label-width=\"80px\" size=\"mini\">\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"data.title\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"表字段code\">\n      <el-input v-model=\"data.code\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"宽度\">\n      <el-input v-model=\"data.options.width\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"最大长度\">\n      <el-input-number\n        v-model=\"data.options.maxlength\"\n        :min=\"1\"\n        :max=\"50\"\n        label=\"最大长度\"\n        size=\"small\"\n      ></el-input-number>\n    </el-form-item>\n    <el-form-item label=\"占位内容\">\n      <el-input v-model=\"data.options.placeholder\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"默认值\">\n      <el-popover placement=\"bottom\" title=\"系统默认值\" width=\"200\" trigger=\"click\">\n        <el-table :data=\"defaultValueList\">\n          <el-table-column width=\"50\" label=\"序号\" header-align=\"center\" type=\"index\"></el-table-column>\n          <el-table-column header-align=\"center\" prop=\"label\" label=\"值类型\">\n            <template slot-scope=\"scope\">\n              <a\n                href=\"javascript:void(0);\"\n                @click=\"data.options.defaultValue = scope.row.val\"\n              >{{scope.row.label}}</a>\n            </template>\n          </el-table-column>\n        </el-table>\n        <el-input v-model=\"data.options.defaultValue\" size=\"small\" slot=\"reference\"></el-input>\n      </el-popover>\n    </el-form-item>\n    <el-form-item label=\"数据绑定key\">\n      <el-input v-model=\"data.key\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"数据类型\">\n      <el-select v-model=\"data.options.dataType\" placeholder=\"请选择\">\n        <el-option\n          v-for=\"item in data.options.option\"\n          :key=\"item.value\"\n          :label=\"item.label\"\n          :value=\"item.value\"\n        ></el-option>\n      </el-select>\n    </el-form-item>\n    <el-form-item label=\"是否必填\">\n      <el-switch v-model=\"data.options.required\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"是否禁用\">\n      <el-switch v-model=\"data.options.disabled\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"正则表达式\">\n      <el-input v-model=\"data.options.regEx\" size=\"small\"></el-input>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '单行文本',\n          type: 'input',\n          code: '',\n          icon: '/static/img/form-design/input.png',\n          options: {\n            width: '100%',\n            defaultValue: '',\n            required: false,\n            disabled: false,\n            dataType: 'string',\n            placeholder: '',\n            maxlength: 30,\n            regEx: '',\n            option: [\n              {\n                value: 'string',\n                label: '字符串'\n              },\n              {\n                value: 'bool',\n                label: '布尔值'\n              },\n              {\n                value: 'int',\n                label: '整数'\n              },\n              {\n                value: 'float',\n                label: '浮点数'\n              },\n              {\n                value: 'url',\n                label: 'URL地址'\n              },\n              {\n                value: 'email',\n                label: '邮箱地址'\n              }\n            ]\n          },\n          key: common.getGuid()\n        }\n      }\n    },\n    defaultValueList: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '单行文本',\n        type: 'input',\n        code: '',\n        icon: '/static/img/form-design/input.png',\n        options: {\n          width: '100%',\n          defaultValue: '',\n          required: false,\n          disabled: false,\n          dataType: 'string',\n          placeholder: '',\n          regEx: '',\n          maxlength: 30,\n          option: [\n            {\n              value: 'string',\n              label: '字符串'\n            },\n            {\n              value: 'bool',\n              label: '布尔值'\n            },\n            {\n              value: 'int',\n              label: '整数'\n            },\n            {\n              value: 'float',\n              label: '浮点数'\n            },\n            {\n              value: 'url',\n              label: 'URL地址'\n            },\n            {\n              value: 'email',\n              label: '邮箱地址'\n            }\n          ]\n        },\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {},\n  mounted () {},\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        let newFormList = common.deepClone(\n          this.$store.state.formDesign.formList\n        )\n        // eslint-disable-next-line no-unused-vars\n        let activeIndex\n        for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n          const element = newFormList[i]\n          if (element.type !== 'grid') {\n            if (element.key === this.$store.state.formDesign.activeKey) {\n              activeIndex = i\n\n              newFormList[i] = value\n              this.$store.commit('formDesign/updateActiveKey', element.key)\n              this.$store.dispatch(\n                'formDesign/setFormList',\n                common.deepClone(newFormList)\n              )\n              bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n              break\n            }\n          } else {\n            for (let j = 0; j < element.cols.length; j++) {\n              const element2 = element.cols[j]\n              for (let k = 0; k < element2.list.length; k++) {\n                const element3 = element2.list[k]\n                if (element3.key === this.$store.state.formDesign.activeKey) {\n                  activeIndex = i\n\n                  newFormList[i].cols[j].list[k] = value\n                  this.$store.commit(\n                    'formDesign/updateActiveKey',\n                    element3.key\n                  )\n                  this.$store.dispatch(\n                    'formDesign/setFormList',\n                    common.deepClone(newFormList)\n                  )\n                  bus.$emit(\n                    'formDesign.syncList',\n                    common.deepClone(newFormList)\n                  )\n                  break\n                }\n              }\n            }\n          }\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true\n      // immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDMenu.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-07-03 08:37:07\n * @LastEditTime: 2019-12-10 11:29:33\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-collapse :value=\"['1','2', '3']\" style=\"width: 100%;\">\n    <el-collapse-item title=\"基础字段\" name=\"1\">\n      <draggable\n        :list=\"base.child\"\n        :group=\"{ name: 'form-design', pull: 'clone', put: false }\"\n        @change=\"log\"\n      >\n        <div class=\"cell\" v-for=\"(item, i) in base.child\" :key=\"i\">\n          <p class=\"left\">\n            <span :class=\"`iconfont icon-${item.icon}`\"></span>\n          </p>\n          <p class=\"right\">{{item.title}}</p>\n        </div>\n      </draggable>\n    </el-collapse-item>\n    <el-collapse-item title=\"高级字段\" name=\"2\">\n      <draggable\n        :list=\"senior.child\"\n        :group=\"{ name: 'form-design', pull: 'clone', put: false }\"\n        @change=\"log\"\n      >\n        <div class=\"cell\" v-for=\"(item, i) in senior.child\" :key=\"i\">\n          <p class=\"left\">\n           <span :class=\"`iconfont icon-${item.icon}`\"></span>\n          </p>\n          <p class=\"right\">{{item.title}}</p>\n        </div>\n      </draggable>\n    </el-collapse-item>\n    <el-collapse-item title=\"布局字段\" name=\"3\">\n      <draggable\n        :list=\"layout.child\"\n        :group=\"{ name: 'form-design', pull: 'clone', put: false }\"\n        @change=\"log\"\n      >\n        <div class=\"cell\" v-for=\"(item, i) in layout.child\" :key=\"i\">\n          <p class=\"left\">\n           <span :class=\"`iconfont icon-${item.icon}`\"></span>\n          </p>\n          <p class=\"right\">{{item.title}}</p>\n        </div>\n      </draggable>\n    </el-collapse-item>\n    <el-collapse-item title=\"其它字段\" name=\"3\">\n      <draggable\n        :list=\"elseItem.child\"\n        :group=\"{ name: 'form-design', pull: 'clone', put: false }\"\n        @change=\"log\"\n      >\n        <div class=\"cell\" v-for=\"(item, i) in elseItem.child\" :key=\"i\">\n          <p class=\"left\">\n           <span :class=\"`iconfont icon-${item.icon}`\"></span>\n          </p>\n          <p class=\"right\">{{item.title}}</p>\n        </div>\n      </draggable>\n    </el-collapse-item>\n  </el-collapse>\n</template>\n\n<script>\nimport draggable from 'vuedraggable'\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\nconst base = {\n  title: '基础字段',\n  child: [\n    {\n      title: '单行文本',\n      type: 'input',\n      icon: 'danhangwenben',\n      value: '',\n      options: {\n        width: '100%',\n        defaultValue: '',\n        required: false,\n        disabled: false,\n        dataType: 'string',\n        placeholder: '',\n        regEx: '',\n        option: [\n          {\n            value: 'string',\n            label: '字符串'\n          },\n          {\n            value: 'bool',\n            label: '布尔值'\n          },\n          {\n            value: 'int',\n            label: '整数'\n          },\n          {\n            value: 'float',\n            label: '浮点数'\n          },\n          {\n            value: 'url',\n            label: 'URL地址'\n          },\n          {\n            value: 'email',\n            label: '邮箱地址'\n          }\n        ]\n      },\n      key: ''\n    },\n    {\n      title: '多行文本',\n      type: 'textarea',\n      code: '',\n      icon: 'duohangwenben',\n      value: '',\n      options: {\n        width: '100%',\n        defaultValue: '',\n        required: false,\n        disabled: false,\n        placeholder: '',\n        regEx: ''\n      },\n      key: ''\n    },\n    {\n      title: '数字文本框',\n      type: 'number',\n      code: '',\n      icon: 'jishubiaoqian',\n      value: '',\n      options: {\n        width: '120px',\n        min: 0,\n        max: 100,\n        required: false,\n        disabled: false\n      },\n      key: ''\n    },\n    {\n      title: '单选框组',\n      type: 'radio',\n      code: '',\n      icon: 'danxuankuang',\n      value: '',\n      options: {\n        width: '100%',\n        required: false,\n        disabled: false,\n        defaultValue: '',\n        option: [\n          {\n            value: '值1',\n            label: '选项1'\n          },\n          {\n            value: '值2',\n            label: '选项2'\n          },\n          {\n            value: '值3',\n            label: '选项3'\n          }\n        ]\n      },\n      key: ''\n    },\n    {\n      title: '多选框组',\n      type: 'checkbox',\n      code: '',\n      icon: 'duoxuankuang1',\n      value: '',\n      options: {\n        defaultValue: [],\n        width: '100%',\n        required: false,\n        disabled: false,\n        option: [\n          {\n            value: '值1',\n            label: '选项1'\n          },\n          {\n            value: '值2',\n            label: '选项2'\n          },\n          {\n            value: '值3',\n            label: '选项3'\n          }\n        ]\n      },\n      key: ''\n    },\n    {\n      title: '时间选择器',\n      type: 'datetime',\n      code: '',\n      icon: 'shijianxuanzeqi',\n      value: '',\n      options: {\n        width: '100%',\n        type: ['ymd', 'yyyy-MM-dd'],\n        defaultValue: '',\n        required: false,\n        disabled: false,\n        placeholder: ''\n      },\n      key: ''\n    },\n    {\n      title: '下拉选择框',\n      type: 'select',\n      code: '',\n      icon: 'xialaxuanze',\n      value: '',\n      options: {\n        width: '100%',\n        defaultValue: '',\n        required: false,\n        disabled: false,\n        placeholder: '',\n        option: [\n          {\n            value: '值1',\n            label: '选项1'\n          },\n          {\n            value: '值2',\n            label: '选项2'\n          },\n          {\n            value: '值3',\n            label: '选项3'\n          }\n        ]\n      },\n      key: ''\n    },\n    {\n      title: '开关',\n      type: 'switch',\n      code: '',\n      icon: 'kaiguan',\n      value: false,\n      options: {\n        defaultValue: false,\n        required: false,\n        disabled: false\n      },\n      key: ''\n    }\n  ]\n}\nconst senior = {\n  title: '高级字段',\n  child: [\n    // {\n    //   title: '图片上传',\n    //   type: 'img',\n    //   code: '',\n    //   icon: 'tupianshangchuan',\n    //   options: {\n    //     defaultValue: '',\n    //     required: false,\n    //     disabled: false\n    //   }\n    // }\n    {\n      title: '意见框',\n      type: 'idea',\n      code: '',\n      icon: 'duohangwenben',\n      value: '',\n      options: {\n        width: '100%',\n        defaultValue: '',\n        required: false,\n        disabled: false,\n        placeholder: '',\n        regEx: ''\n      },\n      key: ''\n    }\n  ],\n  key: ''\n}\nconst layout = {\n  title: '布局字段',\n  child: [\n    {\n      title: '栅格布局',\n      type: 'grid',\n      icon: 'ai211',\n      cols: [\n        {\n          span: 12,\n          list: []\n        },\n        {\n          span: 12,\n          list: []\n        }\n      ],\n      key: ''\n    }\n  ],\n  key: ''\n}\nconst elseItem = {\n  title: '其它字段',\n  child: [{\n    title: '表单标题',\n    type: 'title',\n    icon: 'biaoti',\n    value: '标题',\n    options: {\n      align: 'center',\n      fontSize: '18px'\n    },\n    key: ''\n  }],\n  key: ''\n}\nexport default {\n  components: {\n    draggable\n  },\n  data () {\n    return {\n      base: {\n        title: '基础字段',\n        child: [\n          {\n            title: '单行文本',\n            type: 'input',\n            icon: 'danhangwenben',\n            value: '',\n            code: '',\n            options: {\n              width: '100%',\n              defaultValue: '',\n              required: false,\n              disabled: false,\n              dataType: 'string',\n              placeholder: '',\n              regEx: '',\n              maxlength: 30,\n              option: [\n                {\n                  value: 'string',\n                  label: '字符串'\n                },\n                {\n                  value: 'bool',\n                  label: '布尔值'\n                },\n                {\n                  value: 'int',\n                  label: '整数'\n                },\n                {\n                  value: 'float',\n                  label: '浮点数'\n                },\n                {\n                  value: 'url',\n                  label: 'URL地址'\n                },\n                {\n                  value: 'email',\n                  label: '邮箱地址'\n                }\n              ]\n            },\n            key: ''\n          },\n          {\n            title: '多行文本',\n            type: 'textarea',\n            icon: 'duohangwenben',\n            value: '',\n            code: '',\n            options: {\n              width: '100%',\n              defaultValue: '',\n              required: false,\n              disabled: false,\n              placeholder: '',\n              regEx: '',\n              maxlength: 100\n            },\n            key: ''\n          },\n          {\n            title: '数字文本框',\n            type: 'number',\n            icon: 'jishubiaoqian',\n            value: '',\n            code: '',\n            options: {\n              width: '120px',\n              min: 0,\n              max: 100,\n              required: false,\n              disabled: false\n            },\n            key: ''\n          },\n          {\n            title: '单选框组',\n            type: 'radio',\n            icon: 'danxuankuang',\n            value: '',\n            code: '',\n            options: {\n              width: '100%',\n              required: false,\n              disabled: false,\n              defaultValue: '',\n              option: [\n                {\n                  value: '值1',\n                  label: '选项1'\n                },\n                {\n                  value: '值2',\n                  label: '选项2'\n                },\n                {\n                  value: '值3',\n                  label: '选项3'\n                }\n              ]\n            },\n            key: ''\n          },\n          {\n            title: '多选框组',\n            type: 'checkbox',\n            icon: 'xialaxuanze',\n            value: '',\n            code: '',\n            options: {\n              width: '100%',\n              required: false,\n              disabled: false,\n              defaultValue: [],\n              option: [\n                {\n                  value: '值1',\n                  label: '选项1'\n                },\n                {\n                  value: '值2',\n                  label: '选项2'\n                },\n                {\n                  value: '值3',\n                  label: '选项3'\n                }\n              ]\n            },\n            key: ''\n          },\n          {\n            title: '时间选择器',\n            type: 'datetime',\n            icon: 'shijianxuanzeqi',\n            value: '',\n            code: '',\n            options: {\n              width: '100%',\n              type: ['ymd', 'yyyy-MM-dd'],\n              defaultValue: '',\n              required: false,\n              disabled: false,\n              placeholder: ''\n            },\n            key: ''\n          },\n          {\n            title: '下拉选择框',\n            type: 'select',\n            icon: 'xialaxuanze',\n            value: '',\n            code: '',\n            options: {\n              width: '100%',\n              defaultValue: '',\n              required: false,\n              disabled: false,\n              placeholder: '',\n              option: [\n                {\n                  value: '值1',\n                  label: '选项1'\n                },\n                {\n                  value: '值2',\n                  label: '选项2'\n                },\n                {\n                  value: '值3',\n                  label: '选项3'\n                }\n              ]\n            },\n            key: ''\n          },\n          {\n            title: '开关',\n            type: 'switch',\n            icon: 'kaiguan',\n            value: false,\n            code: '',\n            options: {\n              defaultValue: false,\n              required: false,\n              disabled: false\n            },\n            key: ''\n          }\n        ]\n      },\n      senior: {\n        title: '高级字段',\n        child: [\n          {\n            title: '意见框',\n            type: 'idea',\n            code: '',\n            icon: 'duohangwenben',\n            options: {\n              width: '100%',\n              defaultValue: '',\n              required: false,\n              disabled: false,\n              placeholder: '',\n              regEx: '',\n              maxlength: 300\n            }\n          }\n        ],\n        key: ''\n      },\n      layout: {\n        title: '布局字段',\n        child: [\n          {\n            title: '栅格布局',\n            type: 'grid',\n            icon: 'ai211',\n            cols: [\n              {\n                span: 12,\n                list: []\n              },\n              {\n                span: 12,\n                list: []\n              }\n            ],\n            key: ''\n          }\n        ],\n        key: ''\n      },\n      elseItem: {\n        title: '其它字段',\n        child: [{\n          title: '表单标题',\n          type: 'title',\n          icon: 'biaoti',\n          value: '标题',\n          options: {\n            align: 'center',\n            fontSize: '18px'\n          },\n          key: ''\n        }],\n        key: ''\n      }\n    }\n  },\n  mounted () {\n    bus.$on('formMenu.init', () => {\n      this.initMenu()\n    })\n  },\n  methods: {\n    log: function (evt) {\n      console.log('menu')\n      window.console.log(evt)\n    },\n    initMenu () {\n      this.base = common.deepClone(base)\n      this.senior = common.deepClone(senior)\n      this.layout = common.deepClone(layout)\n      this.elseItem = common.deepClone(elseItem)\n    }\n  }\n}\n</script>\n\n<style scoped>\n.cell {\n  cursor: move;\n  float: left;\n  height: 30px;\n  line-height: 30px;\n  width: 100px;\n  background-color: #ecf5ff;\n  margin: 0 10px 10px 0;\n}\n.cell .left {\n  float: left;\n  width: 27px;\n  height: 100%;\n  margin: 0;\n}\n.cell .left img {\n  position: relative;\n  top: -1px;\n  left: 5px;\n}\n.cell .right {\n  float: left;\n  width: 73px;\n  height: 100%;\n  margin: 0;\n}\n.iconfont  {\n  margin-left: 5px;\n}\n</style>\n\n"
  },
  {
    "path": "src/components/form-design/FDNumber.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-07-03 08:37:07\n * @LastEditTime: 2019-12-10 11:29:24\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-form label-position=\"top\" label-width=\"80px\"  size=\"mini\">\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"data.title\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"表字段code\">\n      <el-input v-model=\"data.code\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"宽度\">\n      <el-input v-model=\"data.options.width\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"最小值\">\n      <el-input-number v-model=\"data.options.min\" :min=\"0\" :max=\"100\" label=\"描述文字\" size=\"small\"></el-input-number>\n    </el-form-item>\n    <el-form-item label=\"最大值\">\n      <el-input-number v-model=\"data.options.max\" :min=\"0\" :max=\"100\" label=\"描述文字\" size=\"small\"></el-input-number>\n    </el-form-item>\n    <el-form-item label=\"数据绑定key\">\n      <el-input v-model=\"data.key\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"是否必填\">\n      <el-switch v-model=\"data.options.required\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"是否禁用\">\n      <el-switch v-model=\"data.options.disabled\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '数字文本框',\n          type: 'number',\n          code: '',\n          icon: '/static/img/form-design/number.png',\n          options: {\n            width: '120px',\n            min: 0,\n            max: 100,\n            required: false,\n            disabled: false\n          },\n          key: common.getGuid()\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '数字文本框',\n        type: 'number',\n        code: '',\n        icon: '/static/img/form-design/number.png',\n        options: {\n          width: '120px',\n          min: 0,\n          max: 100,\n          required: false,\n          disabled: false\n        },\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {\n\n  },\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        let newFormList = common.deepClone(\n          this.$store.state.formDesign.formList\n        )\n        // eslint-disable-next-line no-unused-vars\n        let activeIndex\n        for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n          const element = newFormList[i]\n          if (element.type !== 'grid') {\n            if (element.key === this.$store.state.formDesign.activeKey) {\n              activeIndex = i\n\n              newFormList[i] = value\n              this.$store.commit('formDesign/updateActiveKey', element.key)\n              this.$store.dispatch('formDesign/setFormList', common.deepClone(newFormList))\n              bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n              break\n            }\n          } else {\n            for (let j = 0; j < element.cols.length; j++) {\n              const element2 = element.cols[j]\n              for (let k = 0; k < element2.list.length; k++) {\n                const element3 = element2.list[k]\n                if (element3.key === this.$store.state.formDesign.activeKey) {\n                  activeIndex = i\n\n                  newFormList[i].cols[j].list[k] = value\n                  this.$store.commit('formDesign/updateActiveKey', element3.key)\n                  this.$store.dispatch('formDesign/setFormList', common.deepClone(newFormList))\n                  bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n                  break\n                }\n              }\n            }\n          }\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true\n      // immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDRadio.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-07-03 08:37:07\n * @LastEditTime: 2019-07-03 08:37:07\n * @LastEditors: your name\n -->\n<template>\n  <el-form label-position=\"top\" label-width=\"80px\"  size=\"mini\">\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"data.title\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"表字段code\">\n      <el-input v-model=\"data.code\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"宽度\">\n      <el-input v-model=\"data.options.width\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"数据绑定key\">\n      <el-input v-model=\"data.key\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item>\n\n    <el-form-item label=\"选项\">\n      <el-radio-group>\n        <div v-for=\"(item, i) in data.options.option\" :key=\"i\" style=\"clearfix\">\n          <el-radio :label=\"item.value\" style=\"float: left;\">\n            <el-input size=\"small\" style=\"width:80px!important;\" v-model=\"item.label\" title=\"删除选项\"></el-input>\n            <el-input size=\"small\" style=\"width:80px!important;\" v-model=\"item.value\" title=\"删除选项\"></el-input>\n            <i class=\"el-icon-circle-close\" style=\"color: red;\" @click=\"subOption(i)\"></i>\n          </el-radio>\n        </div>\n      </el-radio-group>\n\n      <div>\n        <i class=\"el-icon-circle-plus\" style=\"color: #17B3A3;\" title=\"增加选项\" @click=\"addOption\"></i>\n      </div>\n    </el-form-item>\n    <el-form-item label=\"是否必填\">\n      <el-switch v-model=\"data.options.required\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"是否禁用\">\n      <el-switch v-model=\"data.options.disabled\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '单选框组',\n          type: 'radio',\n          code: '',\n          icon: '/static/img/form-design/radio.png',\n          options: {\n            width: '100%',\n            required: false,\n            disabled: false,\n            option: [\n              {\n                value: '值1',\n                label: '选项1'\n              },\n              {\n                value: '值2',\n                label: '选项2'\n              },\n              {\n                value: '值3',\n                label: '选项3'\n              }\n            ]\n          },\n          key: common.getGuid()\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '单选框组',\n        type: 'radio',\n        code: '',\n        icon: '/static/img/form-design/radio.png',\n        options: {\n          width: '100%',\n          required: false,\n          disabled: false,\n          option: [\n            {\n              value: '值1',\n              label: '选项1'\n            },\n            {\n              value: '值2',\n              label: '选项2'\n            },\n            {\n              value: '值3',\n              label: '选项3'\n            }\n          ]\n        },\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {\n    addOption () {\n      this.data.options.option.push({\n        value: `值${this.data.options.option.length + 1}`,\n        label: `选项${this.data.options.option.length + 1}`\n      })\n    },\n    subOption (index) {\n      this.data.options.option.splice(index, 1)\n    }\n  },\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        let newFormList = common.deepClone(\n          this.$store.state.formDesign.formList\n        )\n        // let activeIndex\n        for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n          const element = newFormList[i]\n          if (element.type !== 'grid') {\n            if (element.key === this.$store.state.formDesign.activeKey) {\n              // activeIndex = i\n\n              newFormList[i] = value\n              this.$store.commit('formDesign/updateActiveKey', element.key)\n              this.$store.dispatch(\n                'formDesign/setFormList',\n                common.deepClone(newFormList)\n              )\n              bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n              break\n            }\n          } else {\n            for (let j = 0; j < element.cols.length; j++) {\n              const element2 = element.cols[j]\n              for (let k = 0; k < element2.list.length; k++) {\n                const element3 = element2.list[k]\n                if (element3.key === this.$store.state.formDesign.activeKey) {\n                  // activeIndex = i\n\n                  newFormList[i].cols[j].list[k] = value\n                  this.$store.commit(\n                    'formDesign/updateActiveKey',\n                    element3.key\n                  )\n                  this.$store.dispatch(\n                    'formDesign/setFormList',\n                    common.deepClone(newFormList)\n                  )\n                  bus.$emit(\n                    'formDesign.syncList',\n                    common.deepClone(newFormList)\n                  )\n                  break\n                }\n              }\n            }\n          }\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true\n      // immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDSelect.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-07-03 08:37:07\n * @LastEditTime: 2019-10-18 12:35:02\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-form label-position=\"top\" label-width=\"80px\"  size=\"mini\">\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"data.title\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"表字段code\">\n      <el-input v-model=\"data.code\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"宽度\">\n      <el-input v-model=\"data.options.width\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"数据绑定key\">\n      <el-input v-model=\"data.key\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item>\n\n    <el-form-item label=\"选项\">\n      <el-radio-group>\n        <div v-for=\"(item, i) in data.options.option\" :key=\"i\" style=\"clearfix\">\n          <el-radio :label=\"item.value\" style=\"float: left;\">\n            <el-input size=\"small\" style=\"width:80px !important;\" v-model=\"item.label\" title=\"删除选项\"></el-input>\n            <el-input size=\"small\" style=\"width:80px !important;\" v-model=\"item.value\" title=\"删除选项\"></el-input>\n            <i class=\"el-icon-circle-close\" style=\"color: red;\" @click=\"subOption(i)\"></i>\n          </el-radio>\n        </div>\n      </el-radio-group>\n\n      <div>\n        <i class=\"el-icon-circle-plus\" style=\"color: #17B3A3;\" title=\"增加选项\" @click=\"addOption\"></i>\n      </div>\n    </el-form-item>\n    <el-form-item label=\"是否必填\">\n      <el-switch v-model=\"data.options.required\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"是否禁用\">\n      <el-switch v-model=\"data.options.disabled\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '下拉选择框',\n          type: 'select',\n          code: '',\n          icon: '/static/img/form-design/select.png',\n          options: {\n            width: '100%',\n            defaultValue: '',\n            required: false,\n            disabled: false,\n            placeholder: '',\n            option: [\n              {\n                value: '值1',\n                label: '选项1'\n              },\n              {\n                value: '值2',\n                label: '选项2'\n              },\n              {\n                value: '值3',\n                label: '选项3'\n              }\n            ]\n          },\n          key: common.getGuid()\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '下拉选择框',\n        type: 'select',\n        code: '',\n        icon: '/static/img/form-design/select.png',\n        options: {\n          width: '100%',\n          defaultValue: '',\n          required: false,\n          disabled: false,\n          placeholder: '',\n          option: [\n            {\n              value: '值1',\n              label: '选项1'\n            },\n            {\n              value: '值2',\n              label: '选项2'\n            },\n            {\n              value: '值3',\n              label: '选项3'\n            }\n          ]\n        },\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {\n    addOption () {\n      this.data.options.option.push({\n        value: `值${this.data.options.option.length + 1}`,\n        label: `选项${this.data.options.option.length + 1}`\n      })\n    },\n    subOption (index) {\n      this.data.options.option.splice(index, 1)\n    }\n  },\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        let newFormList = common.deepClone(\n          this.$store.state.formDesign.formList\n        )\n        // let activeIndex\n        for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n          const element = newFormList[i]\n          if (element.type !== 'grid') {\n            if (element.key === this.$store.state.formDesign.activeKey) {\n              // activeIndex = i\n\n              newFormList[i] = value\n              this.$store.commit('formDesign/updateActiveKey', element.key)\n              this.$store.dispatch(\n                'formDesign/setFormList',\n                common.deepClone(newFormList)\n              )\n              bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n              break\n            }\n          } else {\n            for (let j = 0; j < element.cols.length; j++) {\n              const element2 = element.cols[j]\n              for (let k = 0; k < element2.list.length; k++) {\n                const element3 = element2.list[k]\n                if (element3.key === this.$store.state.formDesign.activeKey) {\n                  // activeIndex = i\n\n                  newFormList[i].cols[j].list[k] = value\n                  this.$store.commit(\n                    'formDesign/updateActiveKey',\n                    element3.key\n                  )\n                  this.$store.dispatch(\n                    'formDesign/setFormList',\n                    common.deepClone(newFormList)\n                  )\n                  bus.$emit(\n                    'formDesign.syncList',\n                    common.deepClone(newFormList)\n                  )\n                  break\n                }\n              }\n            }\n          }\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true\n      // immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDSwitch.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-07-03 08:37:07\n * @LastEditTime: 2019-07-03 08:37:07\n * @LastEditors: your name\n -->\n<template>\n  <el-form label-position=\"top\" label-width=\"80px\"  size=\"mini\">\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"data.title\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"表字段code\">\n      <el-input v-model=\"data.code\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"默认值\">\n      <el-switch\n        v-model=\"data.options.defaultValue\"\n        active-color=\"#13ce66\"\n        inactive-color=\"#EEEEEE\"\n      ></el-switch>\n    </el-form-item>\n    <el-form-item label=\"数据绑定key\">\n      <el-input v-model=\"data.key\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"是否必填\">\n      <el-switch v-model=\"data.options.required\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"是否禁用\">\n      <el-switch v-model=\"data.options.disabled\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '开关',\n          type: 'switch',\n          code: '',\n          icon: '/static/img/form-design/switch.png',\n          options: {\n            defaultValue: false,\n            required: false,\n            disabled: false\n          },\n          key: common.getGuid()\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '开关',\n        type: 'switch',\n        code: '',\n        icon: '/static/img/form-design/switch.png',\n        options: {\n          defaultValue: false,\n          required: false,\n          disabled: false\n        },\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {},\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        let newFormList = common.deepClone(\n          this.$store.state.formDesign.formList\n        )\n        // eslint-disable-next-line no-unused-vars\n        let activeIndex\n        for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n          const element = newFormList[i]\n          if (element.type !== 'grid') {\n            if (element.key === this.$store.state.formDesign.activeKey) {\n              activeIndex = i\n\n              newFormList[i] = value\n              this.$store.commit('formDesign/updateActiveKey', element.key)\n              this.$store.dispatch(\n                'formDesign/setFormList',\n                common.deepClone(newFormList)\n              )\n              bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n              break\n            }\n          } else {\n            for (let j = 0; j < element.cols.length; j++) {\n              const element2 = element.cols[j]\n              for (let k = 0; k < element2.list.length; k++) {\n                const element3 = element2.list[k]\n                if (element3.key === this.$store.state.formDesign.activeKey) {\n                  activeIndex = i\n\n                  newFormList[i].cols[j].list[k] = value\n                  this.$store.commit(\n                    'formDesign/updateActiveKey',\n                    element3.key\n                  )\n                  this.$store.dispatch(\n                    'formDesign/setFormList',\n                    common.deepClone(newFormList)\n                  )\n                  bus.$emit(\n                    'formDesign.syncList',\n                    common.deepClone(newFormList)\n                  )\n                  break\n                }\n              }\n            }\n          }\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true\n      // immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDTextArea.vue",
    "content": "<template>\n  <el-form label-position=\"top\" label-width=\"80px\"  size=\"mini\">\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"data.title\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"表字段code\">\n      <el-input v-model=\"data.code\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"宽度\">\n      <el-input v-model=\"data.options.width\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"最大长度\">\n      <el-input-number\n        v-model=\"data.options.maxlength\"\n        :min=\"1\"\n        :max=\"300\"\n        label=\"最大长度\"\n        size=\"small\"\n      ></el-input-number>\n    </el-form-item>\n    <el-form-item label=\"占位内容\">\n      <el-input v-model=\"data.options.placeholder\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"默认值\">\n      <el-input v-model=\"data.options.defaultValue\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"数据绑定key\">\n      <el-input v-model=\"data.key\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"是否必填\">\n      <el-switch v-model=\"data.options.required\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"是否禁用\">\n      <el-switch v-model=\"data.options.disabled\" active-color=\"#13ce66\" inactive-color=\"#EEEEEE\"></el-switch>\n    </el-form-item>\n    <el-form-item label=\"正则表达式\">\n      <el-input v-model=\"data.options.regEx\" size=\"small\"></el-input>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '多行文本',\n          type: 'textarea',\n          code: '',\n          icon: '/static/img/form-design/textarea.png',\n          options: {\n            width: '100%',\n            defaultValue: '',\n            required: false,\n            disabled: false,\n            placeholder: '',\n            regEx: '',\n            maxlength: 100\n          },\n          key: common.getGuid()\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '多行文本',\n        type: 'textarea',\n        code: '',\n        icon: '/static/img/form-design/textarea.png',\n        options: {\n          width: '100%',\n          defaultValue: '',\n          required: false,\n          disabled: false,\n          placeholder: '',\n          regEx: '',\n          maxlength: 100\n        },\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {},\n  mounted () {},\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        let newFormList = common.deepClone(\n          this.$store.state.formDesign.formList\n        )\n        // eslint-disable-next-line no-unused-vars\n        let activeIndex\n        for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n          const element = newFormList[i]\n          if (element.type !== 'grid') {\n            if (element.key === this.$store.state.formDesign.activeKey) {\n              activeIndex = i\n\n              newFormList[i] = value\n              this.$store.commit('formDesign/updateActiveKey', element.key)\n              this.$store.dispatch(\n                'formDesign/setFormList',\n                common.deepClone(newFormList)\n              )\n              bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n              break\n            }\n          } else {\n            for (let j = 0; j < element.cols.length; j++) {\n              const element2 = element.cols[j]\n              for (let k = 0; k < element2.list.length; k++) {\n                const element3 = element2.list[k]\n                if (element3.key === this.$store.state.formDesign.activeKey) {\n                  activeIndex = i\n\n                  newFormList[i].cols[j].list[k] = value\n                  this.$store.commit(\n                    'formDesign/updateActiveKey',\n                    element3.key\n                  )\n                  this.$store.dispatch(\n                    'formDesign/setFormList',\n                    common.deepClone(newFormList)\n                  )\n                  bus.$emit(\n                    'formDesign.syncList',\n                    common.deepClone(newFormList)\n                  )\n                  break\n                }\n              }\n            }\n          }\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        this.data = common.deepClone(value)\n      },\n      deep: true\n      // immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/FDTitle.vue",
    "content": "<template>\n  <el-form label-position=\"top\" label-width=\"80px\"  size=\"mini\">\n    <el-form-item label=\"标题内容\">\n      <el-input v-model=\"data.value\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"字体大小\">\n      <el-input v-model=\"data.options.fontSize\" size=\"small\"></el-input>\n    </el-form-item>\n    <el-form-item label=\"标题对齐方式\">\n      <el-radio-group v-model=\"data.options.align\" size=\"small\">\n        <el-radio-button label=\"left\">左对齐</el-radio-button>\n        <el-radio-button label=\"center\">居中对齐</el-radio-button>\n        <el-radio-button label=\"right\">右对齐</el-radio-button>\n      </el-radio-group>\n    </el-form-item>\n    <el-form-item label=\"数据绑定key\">\n      <el-input :title=\"data.key\" v-model=\"data.key\" size=\"small\" :disabled=\"true\"></el-input>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    propData: {\n      type: Object,\n      default: function () {\n        return {\n          title: '表单标题',\n          type: 'title',\n          icon: 'biaoti',\n          value: '标题',\n          options: {\n            align: 'center',\n            fontSize: '18px'\n          },\n          key: common.getGuid()\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      data: {\n        title: '表单标题',\n        type: 'title',\n        icon: 'biaoti',\n        value: '标题',\n        options: {\n          align: 'center',\n          fontSize: '18px'\n        },\n        key: common.getGuid()\n      }\n    }\n  },\n  methods: {\n  },\n  mounted () {\n  },\n  watch: {\n    data: {\n      handler: function (value, oldValue) {\n        console.log('FDTitle watch', value)\n        let newFormList = common.deepClone(\n          this.$store.state.formDesign.formList\n        )\n        // eslint-disable-next-line no-unused-vars\n        let activeIndex\n        for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n          const element = newFormList[i]\n          if (element.type !== 'grid') {\n            if (element.key === this.$store.state.formDesign.activeKey) {\n              activeIndex = i\n\n              newFormList[i] = value\n              this.$store.commit('formDesign/updateActiveKey', element.key)\n              this.$store.dispatch('formDesign/setFormList', common.deepClone(newFormList))\n              bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n              break\n            }\n          } else {\n            for (let j = 0; j < element.cols.length; j++) {\n              const element2 = element.cols[j]\n              for (let k = 0; k < element2.list.length; k++) {\n                const element3 = element2.list[k]\n                if (element3.key === this.$store.state.formDesign.activeKey) {\n                  activeIndex = i\n\n                  newFormList[i].cols[j].list[k] = value\n                  this.$store.commit('formDesign/updateActiveKey', element3.key)\n                  this.$store.dispatch('formDesign/setFormList', common.deepClone(newFormList))\n                  bus.$emit('formDesign.syncList', common.deepClone(newFormList))\n                  break\n                }\n              }\n            }\n          }\n        }\n      },\n      deep: true\n    },\n    propData: {\n      handler: function (value) {\n        console.log('propData', value)\n        this.data = common.deepClone(value)\n      },\n      deep: true,\n      immediate: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/GridCell.vue",
    "content": "<template>\n  <div class=\"cell\" :class=\"{'cell-active': data.key === $store.state.formDesign.activeKey}\">\n    <div @click=\"activeCell\">\n      <el-form-item\n        v-show=\"data.type !== 'title'\"\n        :label=\"data.title+`${data.options.required?'（必填）':''}`\"\n        :prop=\"data.key\"\n      >\n        <el-input\n          v-show=\"data.type === 'input'\"\n          value=\"\"\n          :placeholder=\"data.options.placeholder\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n          :style=\"{width: data.options.width}\"\n        ></el-input>\n        <el-input\n          v-show=\"data.type === 'textarea'\"\n          value=\"\"\n          :placeholder=\"data.options.placeholder\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n          type=\"textarea\"\n          :rows=\"5\"\n          :style=\"{width: data.options.width}\"\n        ></el-input>\n        <el-input-number\n          v-show=\"data.type === 'number'\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n          :style=\"{width: data.options.width}\"\n        ></el-input-number>\n        <el-radio-group\n          v-show=\"data.type === 'radio'\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n          :style=\"{width: data.options.width}\"\n        >\n          <el-radio\n            v-for=\"(item, i) in data.options.option\"\n            :label=\"item.value\"\n            :key=\"i\"\n          >{{item.label}}</el-radio>\n        </el-radio-group>\n        <el-checkbox-group\n          v-show=\"data.type === 'checkbox'\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n          :style=\"{width: data.options.width}\"\n        >\n          <el-checkbox\n            v-for=\"(item, i) in data.options.option\"\n            :label=\"item.value\"\n            :key=\"i\"\n          >{{item.label}}</el-checkbox>\n        </el-checkbox-group>\n        <el-select\n          v-show=\"data.type === 'select'\"\n          :placeholder=\"data.options.placeholder\"\n          :style=\"{width: data.options.width}\"\n          :readonly=\"true\"\n          :disabled=\"data.options.disabled\"\n        >\n          <el-option\n            v-for=\"(item, i) in data.options.option\"\n            :key=\"i\"\n            :label=\"item.label\"\n            :value=\"item.value\"\n          ></el-option>\n        </el-select>\n        <el-switch\n          v-show=\"data.type === 'switch'\"\n          active-color=\"#13ce66\"\n          inactive-color=\"#EEEEEE\"\n          :style=\"{width: data.options.width}\"\n          :readonly=\"true\"\n          :disabled=\"data.options.disabled\"\n        ></el-switch>\n        <el-date-picker\n          type=\"datetime\"\n          v-show=\"data.type === 'datetime'\"\n          :placeholder=\"data.options.placeholder\"\n          :style=\"{width: data.options.width}\"\n          :disabled=\"data.options.disabled\"\n        ></el-date-picker>\n        <el-upload\n          v-show=\"data.type === 'img'\"\n          class=\"upload-demo\"\n          action=\"https://jsonplaceholder.typicode.com/posts/\"\n          :limit=\"1\"\n          :file-list=\"[]\"\n          :disabled=\"data.options.disabled\"\n          :readonly=\"true\"\n        >\n          <el-button size=\"small\" type=\"primary\">点击上传</el-button>\n          <div slot=\"tip\" class=\"el-upload__tip\">只能上传jpg/png文件，且不超过500kb</div>\n        </el-upload>\n      </el-form-item>\n       <p\n        v-show=\"data.type === 'title'\"\n        :style=\"{'text-align': data.options.align, 'font-size': data.options.fontSize}\"\n        @click=\"activeCell\"\n      >{{data.value}}</p>\n    </div>\n    <i\n      class=\"action-copy\"\n      title=\"复制\"\n      v-show=\"data.key === $store.state.formDesign.activeKey && data.type != 'grid'\"\n      @click=\"copyForm\"\n    ></i>\n    <i\n      class=\"action-delete\"\n      title=\"删除\"\n      v-show=\"data.key === $store.state.formDesign.activeKey\"\n      @click=\"deleteForm\"\n    ></i>\n  </div>\n</template>\n\n<script>\nimport common from '@/utils/common'\n\nexport default {\n  components: {},\n  props: {\n    formAttr: {\n      type: Object,\n      default: function () {\n        return {\n          align: 'top',\n          size: 'medium',\n          labelWidth: 80\n        }\n      }\n    },\n    data: {\n      type: Object,\n      default: function () {\n        return {\n          type: '',\n          name: '',\n          options: {\n            width: '100%',\n            defaultValue: '',\n            required: false,\n            dataType: 'string',\n            placeholder: ''\n          },\n          key: '1556775967000_4898'\n        }\n      }\n    },\n    isGrid: {\n      type: Boolean,\n      default: false\n    },\n    FDkey: {\n      type: String,\n      default: ''\n    },\n    FDindex: {\n      type: Number\n    }\n  },\n  methods: {\n    copyForm () {\n      let formList\n      let grid\n      let formListAll = common.deepClone(this.$store.state.formDesign.formList)\n      formList = common.deepClone(this.$store.state.formDesign.grid[this.FDkey])\n        .cols[this.FDindex].list\n      grid = common.deepClone(this.$store.state.formDesign.grid[this.FDkey])\n      let newIndex\n      for (let i = 0; i < formList.length; i++) {\n        const element = formList[i]\n        if (element.key === this.data.key) {\n          newIndex = i\n          break\n        }\n      }\n      let copyForm = common.deepClone(formList[newIndex])\n      copyForm.key = common.getGuid()\n      copyForm.code = `code_${common.getGuid2()}`\n      formList.splice(newIndex + 1, 0, copyForm)\n      this.$store.commit(\n        'formDesign/updateActiveForm',\n        common.deepClone(copyForm)\n      )\n      this.$store.commit('formDesign/updateActiveKey', copyForm.key)\n      grid.cols[this.FDindex].list = formList\n\n      this.$store.commit('formDesign/updateGrid', {\n        key: this.FDkey,\n        value: common.deepClone(grid)\n      })\n      for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n        const element = this.$store.state.formDesign.formList[i]\n        if (element.key === this.FDkey) {\n          formListAll[i] = common.deepClone(grid)\n        }\n      }\n      this.$store.dispatch(\n        'formDesign/setFormList',\n        common.deepClone(formListAll)\n      )\n      this.$emit('syncList', formList, this.FDindex)\n    },\n    deleteForm () {\n      console.warn('this.FDkey', this.FDkey)\n      console.warn('this.$store.state.formDesign.grid', this.$store.state.formDesign.grid)\n      let formList\n      let grid\n      let formListAll = common.deepClone(this.$store.state.formDesign.formList)\n      formList = common.deepClone(this.$store.state.formDesign.grid[this.FDkey])\n        .cols[this.FDindex].list\n      grid = common.deepClone(this.$store.state.formDesign.grid[this.FDkey])\n      let newIndex\n      for (let i = 0; i < formList.length; i++) {\n        const element = formList[i]\n        if (element.key === this.data.key) {\n          newIndex = i\n          break\n        }\n      }\n      formList.splice(newIndex, 1)\n      grid.cols[this.FDindex].list = formList\n      console.log('formList', formList)\n      console.log('grid', grid)\n      console.log('formListAll', formListAll)\n      console.log('this.FDindex', this.FDindex)\n\n      for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n        const element = this.$store.state.formDesign.formList[i]\n        if (element.key === this.FDkey) {\n          formListAll[i] = grid\n        }\n      }\n\n      this.$store.dispatch(\n        'formDesign/setFormList',\n        common.deepClone(formListAll)\n      )\n\n      // this.$emit(\"syncList\", formList, this.FDindex);\n\n      this.$store.commit('formDesign/updateGrid', {\n        key: this.FDkey,\n        value: common.deepClone(grid)\n      })\n\n      if (newIndex !== 0) {\n        this.$store.commit(\n          'formDesign/updateActiveKey',\n          formList[newIndex - 1].key\n        )\n        this.$store.commit(\n          'formDesign/updateActiveForm',\n          common.deepClone(formList[newIndex - 1])\n        )\n      } else {\n        if (formList.length > 0) {\n          this.$store.commit('formDesign/updateActiveKey', formList[0].key)\n          this.$store.commit(\n            'formDesign/updateActiveForm',\n            common.deepClone(formList[0])\n          )\n        }\n      }\n    },\n    activeCell () {\n      this.$store.commit('formDesign/updateActiveKey', this.data.key)\n      this.$store.commit('formDesign/updateShowType', this.data.type)\n      this.$store.commit(\n        'formDesign/updateActiveForm',\n        common.deepClone(this.data)\n      )\n    }\n  }\n}\n</script>\n\n<style lang=\"css\" scoped>\n.cell {\n  background-color: #eee;\n  padding: 10px 10px 20px 10px;\n  position: relative;\n  cursor: move;\n}\n.cell-active {\n  background-color: #b3d8ff;\n  border-left: 5px solid #409eff;\n}\n.el-form-item {\n  margin-bottom: 0;\n}\n.action-copy {\n  position: absolute;\n  bottom: -15px;\n  right: 60px;\n  height: 30px;\n  width: 30px;\n  background: url(\"../../assets/img/copy.png\") no-repeat center;\n  background-size: 18px 18px;\n  background-color: #ecf5ff;\n  border-color: #409eff;\n  border-radius: 50%;\n  cursor: pointer;\n  border: 1px solid #409eff;\n  z-index: 1;\n}\n.action-copy:hover {\n  background: url(\"../../assets/img/copy-active.png\") no-repeat center;\n  background-color: #409eff;\n}\n.action-delete {\n  position: absolute;\n  bottom: -15px;\n  right: 15px;\n  height: 30px;\n  width: 30px;\n  background: url(\"../../assets/img/delete.png\") no-repeat center;\n  background-size: 15px 15px;\n  background-color: #fef0f0;\n  border-radius: 50%;\n  cursor: pointer;\n  border: 1px solid #f56c6c;\n  z-index: 1;\n}\n.action-delete:hover {\n  background: url(\"../../assets/img/delete-active.png\") no-repeat center;\n  background-color: #f56c6c;\n}\n</style>\n"
  },
  {
    "path": "src/components/form-design/Panel.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-07-03 08:37:07\n * @LastEditTime: 2019-10-12 17:30:04\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <div class=\"main\">\n    <el-form\n      ref=\"form\"\n      :label-position=\"formAttr.align\"\n      :label-width=\"formAttr.labelWidth\"\n      :size=\"formAttr.size\"\n      :class=\"{'dragArea-empty':$store.state.formDesign.formList.length > 0}\"\n      :rules=\"$store.state.formDesign.rules\"\n    >\n      <draggable\n        class=\"dragArea dragArea-empty\"\n        @change=\"log\"\n        :list=\"list\"\n        :group=\"{ name: 'form-design'}\"\n      >\n        <Cell\n          :data=\"item\"\n          v-for=\"(item, i) in $store.state.formDesign.formList\"\n          :key=\"i\"\n          @syncList=\"syncList\"\n          :formAttr=\"formAttr\"\n        />\n      </draggable>\n    </el-form>\n    <!-- 表单为空的时候默认是一个空容器 -->\n    <!-- <draggable\n      class=\"dragArea-empty\"\n      @change=\"log\"\n      :list=\"list\"\n      :group=\"{ name: 'form-design', pull: 'move' }\"\n      v-if=\"$store.state.formDesign.formList.length == 0\"\n    ></draggable>-->\n  </div>\n</template>\n\n<script>\nimport Cell from '@/components/form-design/Cell.vue'\nimport draggable from 'vuedraggable'\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    formAttr: {\n      type: Object,\n      default: function () {\n        return {\n          align: 'top',\n          size: 'medium',\n          labelWidth: 80\n        }\n      }\n    }\n  },\n  components: {\n    Cell,\n    draggable\n  },\n  mounted () {\n    window.localStorage.formList = []\n    bus.$on('formDesign.syncList', (list) => {\n      console.log('list', list)\n      this.syncList(list)\n    })\n  },\n  data () {\n    return {\n      'list': [\n      ],\n      rules: {\n        e878f1c6_3c5c_b1b3_b785_9897b52a904f: [{ required: true, message: '必填项不能为空', trigger: 'blur' }]\n      }\n    }\n  },\n  methods: {\n    log: function (evt) {\n      console.log('panel')\n      window.console.log(evt)\n      console.log('common.deepClone(this.$store.state.formDesign.formList)', common.deepClone(this.$store.state.formDesign.formList))\n      let newFormList = common.deepClone(this.$store.state.formDesign.formList)\n      for (let i = 0; i < this.$store.state.formDesign.formList.length; i++) {\n        const element = this.$store.state.formDesign.formList[i]\n        if (element.type === 'grid') {\n          newFormList[i] = common.deepClone(this.$store.state.formDesign.grid[element.key])\n          console.log('this.$store.state.formDesign.grid', this.$store.state.formDesign.grid)\n        }\n      }\n      console.log('newFormList', common.deepClone(newFormList))\n\n      let form\n      if (evt.added) {\n        form = evt.added.element\n        let newIndex = evt.added.newIndex\n        form.key = common.getGuid()\n        form.code = `code_${common.getGuid2()}`\n        newFormList.splice(newIndex, 0, form)\n        this.$store.commit('formDesign/updateShowType', form.type)\n        this.$store.commit('formDesign/updateActiveKey', form.key)\n        this.$store.commit('formDesign/updateActiveForm', common.deepClone(form))\n        this.$store.dispatch('formDesign/setFormList', common.deepClone(newFormList))\n        this.syncList(newFormList)\n      }\n      if (evt.moved) {\n        form = evt.moved.element\n        // eslint-disable-next-line no-unused-vars\n        let newIndex = evt.moved.newIndex\n        // eslint-disable-next-line no-unused-vars\n        let oldIndex = evt.moved.oldIndex\n        // 先直接在新位置插入表单，然后旧位置索引+1的位置表单直接减掉\n        // newFormList.splice(newIndex, 0, form);\n        // newFormList.splice(oldIndex, oldIndex + 1);\n        this.$store.commit('formDesign/updateShowType', form.type)\n        this.$store.commit('formDesign/updateActiveKey', form.key)\n        this.$store.commit('formDesign/updateActiveForm', common.deepClone(form))\n        this.$store.dispatch('formDesign/setFormList', common.deepClone(this.list))\n        this.syncList(newFormList)\n      }\n      // let rules = {};\n      // this.$store.state.formDesign.formList.forEach(element => {\n      //   rules[element.key] = [{ required: element.options.required, message: '必填项不能为空', trigger: 'blur' }]\n      // });\n      // console.log(\"rules\", rules);\n      // this.$store.commit('formDesign/updateRules', common.deepClone(rules));\n\n      // 处理从外部拖进栅格的表单元素,\n      if (evt.removed && sessionStorage.outToIn) {\n        newFormList = newFormList.filter(el => el.key !== evt.removed.element.key)\n        this.$store.dispatch('formDesign/setFormList', common.deepClone(newFormList))\n        this.syncList(newFormList)\n        sessionStorage.removeItem('outToIn')\n      }\n    },\n    syncList (value) {\n      this.list = common.deepClone(value)\n      bus.$emit('formMenu.init')\n      this.$emit('callBack', value)\n    },\n    init (value) {\n      this.list = value\n      bus.$emit('formMenu.init')\n      this.$store.dispatch('formDesign/setFormList', common.deepClone(value))\n    }\n  },\n  watch: {\n    list: {\n      handler: function (value) {\n        // console.log(\"watch list\", value);\n        // let newData = common.deepClone(value);\n        // let haveEmptyKey = false;\n\n        // for (let i = 0; i < newData.length; i++) {\n        //   const element = newData[i];\n        //   if (common.isEmpty(element.key)) {\n        //     element.key = common.getGuid();\n        //     this.$store.commit(\"formDesign/updateActiveKey\", element.key);\n        //     haveEmptyKey = true;\n        //   }\n        // }\n\n        // if (haveEmptyKey) {\n        //   this.list = newData;\n\n        //   this.$store.dispatch('formDesign/setFormList', common.deepClone(newData));\n        // }\n\n      },\n      deep: true\n    }\n  },\n  filters: {\n    labelWidth (value) {\n      return `${value}px`\n    }\n  }\n}\n</script>\n\n<style lang=\"css\" scoped>\n.main {\n  width: 100%;\n  height: 100%;\n  min-height: 500px;\n}\n.dragArea-empty {\n  min-height: 500px;\n  margin-bottom: 100px;\n}\n</style>\n\n"
  },
  {
    "path": "src/components/form-design/Test.vue",
    "content": "<template>\n  <div class=\"main\">\n    <el-row>\n      <el-col :span=\"6\">\n        <h3>Draggable 1</h3>\n        <draggable\n          class=\"dragArea list-group\"\n          :list=\"list1\"\n          :group=\"{ name: 'people', pull: 'clone', put: false }\"\n          @change=\"log\"\n        >\n          <div\n            class=\"list-group-item\"\n            style=\"cursor:move;\"\n            v-for=\"element in list1\"\n            :key=\"element.name\"\n          >{{ element.name }}</div>\n        </draggable>\n      </el-col>\n\n      <el-col :span=\"6\">\n        <h3>Draggable 2</h3>\n        <draggable class=\"dragArea list-group\" :list=\"list2\" group=\"people\" @change=\"log\">\n          <div\n            class=\"list-group-item\"\n            v-for=\"element in list2\"\n            :key=\"element.name\"\n          >{{ element.name }}</div>\n        </draggable>\n      </el-col>\n\n      <!-- <rawDisplayer class=\"col-3\" :value=\"list1\" title=\"List 1\"/>\n\n      <rawDisplayer class=\"col-3\" :value=\"list2\" title=\"List 2\"/>-->\n    </el-row>\n  </div>\n</template>\n\n<script>\nimport draggable from 'vuedraggable'\nexport default {\n  name: 'clone',\n  display: 'Clone',\n  order: 2,\n  components: {\n    draggable\n  },\n  data () {\n    return {\n      list1: [\n        { name: 'John', id: 1 },\n        { name: 'Joao', id: 2 },\n        { name: 'Jean', id: 3 },\n        { name: 'Gerard', id: 4 }\n      ],\n      list2: [\n        { name: 'Juan', id: 5 },\n        { name: 'Edgard', id: 6 },\n        { name: 'Johnson', id: 7 }\n      ]\n    }\n  },\n  methods: {\n    log: function (evt) {\n      window.console.log(evt)\n    }\n  }\n}\n</script>\n<style lang=\"css\" scoped>\n.main {\n  height: 100%;\n  position: absolute;\n  top: 0px;\n  width: calc(100% - 490px);\n  left: 200px;\n}\n</style>"
  },
  {
    "path": "src/components/form-design/nested.vue",
    "content": "<template>\n  <draggable class=\"dragArea\" tag=\"ul\" :list=\"tasks\" :group=\"{ name: 'form-design' }\" @change=\"log\">\n    <el-row v-for=\"(row, i) in tasks\" :key=\"i\">\n      <el-col :span=\"col.span\" v-for=\"(col, j) in row.cols\" :key=\"j\">\n        <p>{{ col.name }}</p>\n        <nested-draggable :tasks=\"col.rows\"/>\n      </el-col>\n    </el-row>\n  </draggable>\n</template>\n<script>\nimport draggable from 'vuedraggable'\n\nexport default {\n  props: {\n    tasks: {\n      required: true,\n      type: Array\n    }\n  },\n  components: {\n    draggable\n  },\n  name: 'nested-draggable',\n  methods: {\n    log (e) {\n      console.log('nested change', e)\n    }\n  }\n}\n</script>\n<style scoped>\n.dragArea {\n  min-height: 50px;\n  outline: 1px dashed;\n  margin: 10px;\n}\n</style>\n"
  },
  {
    "path": "src/components/form-design/nestedExample.vue",
    "content": "<template>\n  <div class=\"row\">\n    <div class=\"col-8\">\n      <h3>Nested draggable</h3>\n      <nested-draggable :tasks=\"rows\"/>\n    </div>\n\n    <rawDisplayer class=\"col-3\" :value=\"rows\" title=\"List\"/>\n  </div>\n</template>\n\n<script>\nimport nestedDraggable from './nested'\nimport rawDisplayer from './raw-displayer.vue'\nexport default {\n  name: 'nested-example',\n  display: 'Nested',\n  order: 15,\n  components: {\n    nestedDraggable,\n    rawDisplayer\n  },\n  data () {\n    return {\n      rows: [\n        {\n          cols: [{\n            name: '11',\n            span: 12,\n            rows: [{\n              cols: [{\n                name: '111',\n                span: 12,\n                rows: []\n              }]\n            }]\n          }, {\n            name: '12',\n            span: 12,\n            rows: []\n          }]\n        },\n        {\n          cols: [{\n            name: '2',\n            span: 12,\n            rows: [{\n              cols: []\n            }]\n          }]\n        }\n      ]\n    }\n  }\n}\n</script>\n<style scoped></style>\n"
  },
  {
    "path": "src/components/form-design/raw-displayer.vue",
    "content": "<template>\n  <div>\n    <h3>{{ title }}</h3>\n    <pre>{{ valueString }}</pre>\n  </div>\n</template>\n<script>\nconst props = {\n  name: 'raw-displayer',\n  title: {\n    required: true,\n    type: String\n  },\n  value: {\n    required: true\n  }\n}\nexport default {\n  props,\n  computed: {\n    valueString () {\n      return JSON.stringify(this.value, null, 2)\n    }\n  }\n}\n</script>\n<style scoped>\npre {\n  text-align: start;\n}\n</style>\n"
  },
  {
    "path": "src/components/form-design/view/Document copy.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-10-09 13:53:44\n * @LastEditTime: 2019-11-11 20:56:15\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-col :span=\"12\" style=\"border-right: 1px solid gray;\">\n    <el-divider content-position=\"left\">正文</el-divider>\n    <div class=\"edit_container_doc\">\n      <quill-editor ref=\"myQuillEditor\" :options=\"editorOption\" class=\"code-editor\"></quill-editor>\n    </div>\n    <el-divider content-position=\"left\">附件</el-divider>\n    <div style=\"margin: 10px;\">\n      <el-upload\n        ref=\"uploadAddOtherMaterial\"\n        :action=\"$http.adornUrl(`/api-oa/file/single`)\"\n        :headers=\"$http.getAuthHeader()\"\n        :show-file-list=\"false\"\n        :on-success=\"uploaded2\"\n        :multiple=\"false\"\n        :limit=\"1\"\n        :on-exceed=\"onExceed\"\n      >\n        <el-button v-if=\"!readOnly\" type=\"info\" size=\"mini\">新增</el-button>\n      </el-upload>\n    </div>\n\n    <el-table size=\"mini\" :data=\"dfileList\" style=\"width: 100%\">\n      <el-table-column header-align=\"center\" align=\"center\" label=\"序号\" width=\"50\">\n        <template slot-scope=\"scope\">{{scope.$index+1}}</template>\n      </el-table-column>\n      <el-table-column prop=\"fileName\" label=\"其他材料名称\"></el-table-column>\n      <el-table-column prop=\"fileSize\" label=\"大小(字节)\"></el-table-column>\n      <el-table-column prop=\"action\" label=\"操作\" width=\"100\" v-if=\"!readOnly\">\n        <template slot-scope=\"scope\">\n          <el-button type=\"text\" size=\"small\" @click=\"removeOtherMaterialList(scope.$index)\">删除</el-button>\n        </template>\n      </el-table-column>\n    </el-table>\n  </el-col>\n</template>\n\n<script>\n// import common from '@/utils/common'\n// import {download} from '@/utils/download'\nimport { quillEditor } from 'vue-quill-editor'\nimport 'quill/dist/quill.core.css'\nimport 'quill/dist/quill.snow.css'\nimport 'quill/dist/quill.bubble.css'\n\nexport default {\n  props: {\n    dfileListProp: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    readOnly: {\n      type: Boolean,\n      default: true\n    }\n  },\n  data () {\n    return {\n      dfileList: [],\n      editorOption: {\n        height: '300px',\n        theme: 'snow', // or 'bubble'\n        placeholder: '请输入内容'\n      }\n    }\n  },\n  components: {\n    quillEditor\n  },\n  computed: {\n    editor () {\n      return this.$refs.myQuillEditor.quill\n    }\n  },\n  methods: {\n    downloadFile (row) {\n      let ids = row.fileVoList.map(itm => itm.objId)\n      if (!ids || !ids.length) {\n        this.$message.error('文件不存在~')\n        return\n      }\n      let url = `/api-oa/system/common/downloadBatchByFile?access_token=${this.$http.getAccessToken()}`\n      ids.forEach(itm => {\n        url += '&objIds=' + itm\n      })\n\n      window.open(this.$http.adornUrl(url))\n      /*\n      let filename = ids.length === 1 ? row.fileVoList[0].fileName : row.materialsName + '.zip'\n      download(ids, filename)\n      .catch(e => {\n        this.$message.error(e.message)\n      }) */\n    },\n    onExceed () {\n      this.$message({\n        message: '最多上传一个文件',\n        type: 'warning',\n        duration: 1500\n      })\n    },\n    removeOtherMaterialList (index) {\n      this.dfileList.splice(index, 1)\n    },\n    resetFile () {\n      this.currentCaiLiao = {\n        contentType: '',\n        fileName: '',\n        fileSize: '',\n        objId: '',\n        state: 0\n      }\n    },\n    willUpload (index) {\n      this.uploadIndex = index\n    },\n    beforeUpload () {\n      this.loading = this.$loading({\n        lock: true,\n        text: 'Loading',\n        spinner: 'el-icon-loading',\n        background: 'rgba(0, 0, 0, 0.7)'\n      })\n    },\n    uploaded2 (res, file, fileList) {\n      if (res && res.code === 0) {\n        this.dfileList.push(Object.assign(res.fileList[0], {state: 1}))\n        this.$refs.uploadAddOtherMaterial.clearFiles()\n        this.resetFile()\n      } else {\n        this.$message({\n          message: '上传文件失败',\n          type: 'error',\n          duration: 1500\n        })\n      }\n    }\n  },\n  watch: {\n    dfileListProp: {\n      handler: function (value, oldValue) {\n        if (!Array.isArray(value)) {\n          value = []\n        }\n\n        this.dfileList = value\n      },\n      deep: true,\n      immediate: true\n    },\n    dfileList: {\n      handler: function (value, oldValue) {\n        this.$emit('dfileListCallBack', value)\n      },\n      deep: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/view/Document.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-10-09 13:53:44\n * @LastEditTime: 2019-11-12 12:21:26\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-col :span=\"12\" style=\"border-right: 1px solid gray;\">\n    <el-divider content-position=\"left\">正文</el-divider>\n    <!-- <div class=\"edit_container_doc\">\n      <quill-editor ref=\"myQuillEditor\" :options=\"editorOption\" class=\"code-editor\"></quill-editor>\n    </div> -->\n    <WebOffice />\n    <el-divider content-position=\"left\">附件</el-divider>\n    <div style=\"margin: 10px;\">\n      <el-upload\n        ref=\"uploadAddOtherMaterial\"\n        :action=\"$http.adornUrl(`/api-oa/file/single`)\"\n        :headers=\"$http.getAuthHeader()\"\n        :show-file-list=\"false\"\n        :on-success=\"uploaded2\"\n        :multiple=\"false\"\n        :limit=\"1\"\n        :on-exceed=\"onExceed\"\n      >\n        <el-button v-if=\"!readOnly\" type=\"info\" size=\"mini\">新增</el-button>\n      </el-upload>\n    </div>\n\n    <el-table size=\"mini\" :data=\"dfileList\" style=\"width: 100%\">\n      <el-table-column header-align=\"center\" align=\"center\" label=\"序号\" width=\"50\">\n        <template slot-scope=\"scope\">{{scope.$index+1}}</template>\n      </el-table-column>\n      <el-table-column prop=\"fileName\" label=\"其他材料名称\"></el-table-column>\n      <el-table-column prop=\"fileSize\" label=\"大小(字节)\"></el-table-column>\n      <el-table-column prop=\"action\" label=\"操作\" width=\"100\" v-if=\"!readOnly\">\n        <template slot-scope=\"scope\">\n          <el-button type=\"text\" size=\"small\" @click=\"removeOtherMaterialList(scope.$index)\">删除</el-button>\n        </template>\n      </el-table-column>\n    </el-table>\n  </el-col>\n</template>\n\n<script>\n// import common from '@/utils/common'\n// import {download} from '@/utils/download'\nimport { quillEditor } from 'vue-quill-editor'\nimport 'quill/dist/quill.core.css'\nimport 'quill/dist/quill.snow.css'\nimport 'quill/dist/quill.bubble.css'\nimport WebOffice from '@/components/common/WebOffice'\n\nexport default {\n  props: {\n    dfileListProp: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    readOnly: {\n      type: Boolean,\n      default: true\n    }\n  },\n  data () {\n    return {\n      dfileList: [],\n      editorOption: {\n        height: '300px',\n        theme: 'snow', // or 'bubble'\n        placeholder: '请输入内容'\n      }\n    }\n  },\n  components: {\n    quillEditor, WebOffice\n  },\n  computed: {\n    editor () {\n      return this.$refs.myQuillEditor.quill\n    }\n  },\n  methods: {\n    downloadFile (row) {\n      let ids = row.fileVoList.map(itm => itm.objId)\n      if (!ids || !ids.length) {\n        this.$message.error('文件不存在~')\n        return\n      }\n      let url = `/api-oa/system/common/downloadBatchByFile?access_token=${this.$http.getAccessToken()}`\n      ids.forEach(itm => {\n        url += '&objIds=' + itm\n      })\n\n      window.open(this.$http.adornUrl(url))\n      /*\n      let filename = ids.length === 1 ? row.fileVoList[0].fileName : row.materialsName + '.zip'\n      download(ids, filename)\n      .catch(e => {\n        this.$message.error(e.message)\n      }) */\n    },\n    onExceed () {\n      this.$message({\n        message: '最多上传一个文件',\n        type: 'warning',\n        duration: 1500\n      })\n    },\n    removeOtherMaterialList (index) {\n      this.dfileList.splice(index, 1)\n    },\n    resetFile () {\n      this.currentCaiLiao = {\n        contentType: '',\n        fileName: '',\n        fileSize: '',\n        objId: '',\n        state: 0\n      }\n    },\n    willUpload (index) {\n      this.uploadIndex = index\n    },\n    beforeUpload () {\n      this.loading = this.$loading({\n        lock: true,\n        text: 'Loading',\n        spinner: 'el-icon-loading',\n        background: 'rgba(0, 0, 0, 0.7)'\n      })\n    },\n    uploaded2 (res, file, fileList) {\n      if (res && res.code === 0) {\n        this.dfileList.push(Object.assign(res.fileList[0], {state: 1}))\n        this.$refs.uploadAddOtherMaterial.clearFiles()\n        this.resetFile()\n      } else {\n        this.$message({\n          message: '上传文件失败',\n          type: 'error',\n          duration: 1500\n        })\n      }\n    }\n  },\n  watch: {\n    dfileListProp: {\n      handler: function (value, oldValue) {\n        if (!Array.isArray(value)) {\n          value = []\n        }\n\n        this.dfileList = value\n      },\n      deep: true,\n      immediate: true\n    },\n    dfileList: {\n      handler: function (value, oldValue) {\n        this.$emit('dfileListCallBack', value)\n      },\n      deep: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/view/FormItem.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-09-30 12:28:12\n * @LastEditTime: 2019-10-22 11:19:31\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-form-item :label=\"item.title\" :prop=\"item.code\">\n    <el-input\n      v-if=\"item.type === 'input'\"\n      :placeholder=\"item.options.placeholder\"\n      :disabled=\"item.options.disabled\"\n      :readonly=\"item.options.readonly\"\n      :style=\"{width: item.options.width}\"\n      v-model=\"item.options.defaultValue\"\n    ></el-input>\n    <el-input\n      v-if=\"item.type === 'textarea'\"\n      :placeholder=\"item.options.placeholder\"\n      :disabled=\"item.options.disabled\"\n      :readonly=\"item.options.readonly\"\n      type=\"textarea\"\n      :autosize=\"{ minRows: 3, maxRows: 20}\"\n      :style=\"{width: item.options.width}\"\n      v-model=\"item.options.defaultValue\"\n    ></el-input>\n    <template v-if=\"item.type === 'idea'\">\n      <el-input\n        :placeholder=\"item.options.placeholder\"\n        :disabled=\"item.options.disabled\"\n        :readonly=\"item.options.readonly\"\n        type=\"textarea\"\n        :autosize=\"{ minRows: 3, maxRows: 20}\"\n        :style=\"{width: item.options.width}\"\n        :id=\"item.key\"\n        v-model=\"item.options.defaultValue\"\n      ></el-input>\n      <el-button type=\"text\" :disabled=\"item.options.disabled\" @click=\"selectIdeaList(item)\">选择快捷意见</el-button>\n    </template>\n    <el-input-number\n      v-if=\"item.type === 'number'\"\n      :disabled=\"item.options.disabled\"\n      :readonly=\"item.options.readonly\"\n      :style=\"{width: item.options.width}\"\n      :min=\"item.options.min\"\n      :max=\"item.options.max\"\n    ></el-input-number>\n    <el-radio-group\n      v-if=\"item.type === 'radio'\"\n      :disabled=\"item.options.disabled\"\n      :readonly=\"item.options.readonly\"\n      :style=\"{width: item.options.width}\"\n      v-model=\"item.options.defaultValue\"\n    >\n      <el-radio v-for=\"(item, i) in item.options.option\" :label=\"item.value\" :key=\"i\">{{item.label}}</el-radio>\n    </el-radio-group>\n    <template v-if=\"item.type == 'checkbox'\">\n      <el-checkbox-group\n        :disabled=\"item.options.disabled\"\n        :style=\"{width: item.options.width}\"\n        v-model=\"item.options.defaultValue\"\n      >\n        <el-checkbox\n          v-for=\"(itm, j) in item.options.option\"\n          :label=\"itm.value\"\n          :key=\"j\"\n        >{{itm.label}}</el-checkbox>\n      </el-checkbox-group>\n    </template>\n    <el-select\n      v-if=\"item.type === 'select'\"\n      :placeholder=\"item.options.placeholder\"\n      :style=\"{width: item.options.width}\"\n      :readonly=\"item.options.readonly\"\n      :disabled=\"item.options.disabled\"\n      v-model=\"item.options.defaultValue\"\n    >\n      <el-option\n        v-for=\"(item, i) in item.options.option\"\n        :key=\"i\"\n        :label=\"item.label\"\n        :value=\"item.value\"\n      ></el-option>\n    </el-select>\n    <el-switch\n      v-if=\"item.type === 'switch'\"\n      active-color=\"#13ce66\"\n      inactive-color=\"#EEEEEE\"\n      :style=\"{width: item.options.width}\"\n      :readonly=\"item.options.readonly\"\n      :disabled=\"item.options.disabled\"\n      v-model=\"item.options.defaultValue\"\n    ></el-switch>\n    <template v-if=\"item.type === 'datetime'\">\n      <el-time-select\n        v-if=\"isTime(item.options.type)\"\n        :placeholder=\"item.options.placeholder\"\n        :style=\"{width: item.options.width}\"\n        :disabled=\"item.options.disabled\"\n        v-model=\"item.options.defaultValue\"\n        :value-format=\"item.options.type | time\"\n      ></el-time-select>\n      <el-date-picker\n        v-else\n        :type=\"getType(item.options.type)\"\n        :placeholder=\"item.options.placeholder\"\n        :style=\"{width: item.options.width}\"\n        :disabled=\"item.options.disabled\"\n        v-model=\"item.options.defaultValue\"\n        :format=\"item.options.type | date\"\n        :value-format=\"item.options.type | date\"\n      ></el-date-picker>\n    </template>\n    <el-upload\n      v-if=\"item.type === 'img'\"\n      class=\"upload-demo\"\n      action=\"https://jsonplaceholder.typicode.com/posts/\"\n      :limit=\"1\"\n      :file-list=\"[{name: '图片.jpeg', url: item.options.defaultValue}]\"\n      :disabled=\"item.options.disabled\"\n      :readonly=\"true\"\n    >\n      <el-button size=\"small\" type=\"primary\">点击上传</el-button>\n      <div slot=\"tip\" class=\"el-upload__tip\">只能上传jpg/png文件，且不超过500kb</div>\n    </el-upload>\n\n    <el-dialog\n      title=\"选择意见\"\n      :visible.sync=\"ideaDialogVisible\"\n      append-to-body\n      modal-append-to-body\n      width=\"500px\"\n    >\n      <el-tabs v-model=\"ideaTabIndex\">\n        <el-tab-pane label=\"个人意见\" name=\"1\">\n          <el-table :data=\"idea.personal\" style=\"width: 100%\">\n            <el-table-column type=\"index\" label=\"序号\" width=\"50\"></el-table-column>\n            <el-table-column prop=\"ideaNotes\" label=\"意见内容\">\n              <template slot-scope=\"scope\">\n                <a\n                  href=\"javascript:void(0);\"\n                  @click=\"appendNote(scope.row.ideaNotes)\"\n                >{{scope.row.ideaNotes}}</a>\n              </template>\n            </el-table-column>\n          </el-table>\n        </el-tab-pane>\n        <el-tab-pane label=\"公共意见\" name=\"2\" style=\"height:300px;overflow: auto;\">\n          <el-table :data=\"idea.public\" style=\"width: 100%;\">\n            <el-table-column type=\"index\" label=\"序号\" width=\"50\"></el-table-column>\n            <el-table-column prop=\"ideaNotes\" label=\"意见内容\">\n              <template slot-scope=\"scope\">\n                <a\n                  href=\"javascript:void(0);\"\n                  @click=\"appendNote(scope.row.ideaNotes)\"\n                >{{scope.row.ideaNotes}}</a>\n              </template>\n            </el-table-column>\n          </el-table>\n        </el-tab-pane>\n      </el-tabs>\n      <span slot=\"footer\" class=\"dialog-footer\">\n        <el-button type=\"primary\" @click=\"ideaDialogVisible = false\">确 定</el-button>\n      </span>\n    </el-dialog>\n  </el-form-item>\n</template>\n<script>\nimport common from '@/utils/common'\nimport bus from '@/utils/bus'\n\nexport default {\n  props: {\n    item: {\n      type: Object\n    },\n    formList: {\n      type: Array\n    },\n    idea: {\n      type: Object,\n      default: function () {\n        return {\n          personal: [\n            {\n              ideaId: '402880ee6c3df518016c3e5251980008',\n              mainType: 1,\n              userId: null,\n              ideaNotes: '这是一条模拟个人意见文本',\n              sortOrder: null,\n              state: 1\n            }\n          ],\n          public: [\n            {\n              ideaId: '402880ee6c3df518016c3e5251980008',\n              mainType: 1,\n              userId: null,\n              ideaNotes: '这是一条模拟公共意见文本',\n              sortOrder: null,\n              state: 1\n            }\n          ]\n        }\n      }\n    }\n  },\n  data () {\n    return {\n      ideaDialogVisible: false,\n      ideaTabIndex: '1'\n    }\n  },\n  filters: {\n    date (value) {\n      return value && value.length ? value[1] : 'yyyy-MM-dd'\n    },\n    time (value) {\n      return value && value.length ? value[1] : 'HH:mm:ss'\n    },\n    rule (value) {\n      let rules = []\n      if (value.options && value.options.required) {\n        rules.push({\n          required: true,\n          message: '必填项不能为空',\n          trigger: 'blur'\n        })\n      }\n      return rules\n    },\n    deepClone (value) {\n      return common.deepClone(value)\n    }\n  },\n  methods: {\n    isTime (type) {\n      return type && type.length && ['hm', 'hms'].indexOf(type[0]) >= 0\n    },\n    getType (type) {\n      if (!type || type.length === 0) {\n        return 'date'\n      } else if (type[0] === 'y') {\n        return 'year'\n      } else if (type[0] === 'ym' || type[0] === 'ymd') {\n        return 'date'\n      } else {\n        return 'datetime'\n      }\n    },\n    markIdeaKey (ideaKey) {\n      sessionStorage.ideaKey = ideaKey\n    },\n    appendNote (note) {\n      console.log('this.formList', this.formList)\n      const realname = '管理员'\n      const nowDate = common.formatDateCN(new Date().getTime())\n      const result = `${note}\\n\\n                                                  ${realname}\\n                                                  ${nowDate}`\n      let newFormList = this.formList\n      newFormList.forEach(el => {\n        if (el.type === 'idea' && el.key === sessionStorage.ideaKey) {\n          el.options.defaultValue = result\n          this.$emit('updateFormList', newFormList)\n          this.$store.dispatch(\n            'formDesign/setFormList',\n            common.deepClone(newFormList)\n          )\n        }\n      })\n\n      this.ideaDialogVisible = false\n      // window.document.getElementById(sessionStorage.ideaKey).value = result\n    },\n    selectIdeaList (item) {\n      bus.$emit('getIdeaList')\n      this.ideaDialogVisible = true\n      this.markIdeaKey(item.key)\n    }\n  },\n  mounted () {\n    console.log('item', this.item)\n    console.log('formList', this.formList)\n  }\n}\n</script>\n<style scoped>\n</style>"
  },
  {
    "path": "src/components/form-design/view/FormList.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-08-22 08:31:36\n * @LastEditTime: 2019-09-16 16:23:17\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <div class=\"form-design-main\">\n    <template v-for=\"(item, i) in formList\">\n      <form-item\n        v-if=\"item.type !== 'grid' && item.type !== 'title'\"\n        :item=\"item\"\n        :formList=\"formList\"\n        :key=\"i\"\n        :idea=\"idea\"\n      />\n      <p\n        v-if=\"item.type === 'title'\"\n        :style=\"{'text-align': item.options.align, 'font-size': item.options.fontSize, 'margin-bottom': '20px'}\"\n        :key=\"i\"\n      >{{item.value}}</p>\n      <el-row v-if=\"item.type === 'grid'\" :key=\"i\" :gutter=\"20\">\n        <el-col :span=\"col.span\" v-for=\"(col, j) in item.cols\" :key=\"j\" class=\"col\">\n          <template v-for=\"(item2, j) in col.list\">\n            <form-item v-if=\"item2.type !== 'title'\" :key=\"j\" :item=\"item2\" :formList=\"formList\" :idea=\"idea\" />\n            <p\n              v-if=\"item2.type === 'title'\"\n              :style=\"{'text-align': item2.options.align, 'font-size': item2.options.fontSize, 'margin-bottom': '20px'}\"\n              :key=\"j\"\n            >{{item2.value}}</p>\n          </template>\n        </el-col>\n      </el-row>\n    </template>\n  </div>\n</template>\n\n<script>\nimport common from '@/utils/common'\nimport FormItem from './FormItem'\nimport bus from '@/utils/bus'\n\nexport default {\n  components: { FormItem },\n  props: {\n    formListProp: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    }\n  },\n  data () {\n    return {\n      formList: [],\n      idea: {\n        personal: [],\n        public: []\n      }\n    }\n  },\n  mounted () {\n    this.$on('updateFormList', (value) => {\n      this.formList = value\n    })\n    bus.$on('getIdeaList', () => {\n      this.getIdeaList()\n    })\n  },\n  created () {\n    this.formList = this.formListProp\n  },\n  methods: {\n    getIdeaList () {\n      this.$http({\n        url: this.$http.adornUrl(`/api-oa/system/ideaman/selectList`),\n        method: 'post'\n      }).then(({ data }) => {\n        if (data && data.code === 0) {\n          const {personList, publicList} = data.resultData\n          if (!common.isEmpty(personList)) this.idea.personal = personList\n          if (!common.isEmpty(publicList)) this.idea.public = publicList\n        } else {\n          this.$message.error(data.msg)\n        }\n      })\n    }\n  },\n  watch: {\n    formListProp: {\n      handler: function (value, oldValue) {\n        this.formList = value\n      },\n      deep: true,\n      immediate: true\n    },\n    formList: {\n      handler: function (value, oldValue) {\n        console.log('formList 组件', common.deepClone(value))\n        this.$emit('callBack', value)\n      },\n      deep: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/form-design/view/Material.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-10-09 13:53:44\n * @LastEditTime: 2019-11-19 12:04:10\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-col :span=\"12\" style=\"border-right: 1px solid gray;\">\n    <el-divider content-position=\"left\">受理材料</el-divider>\n    <el-table size=\"mini\" :data=\"materialList\" style=\"width: 100%;margin-bottom: 60px;\">\n      <el-table-column header-align=\"center\" align=\"center\" label=\"序号\" width=\"50\">\n        <template slot-scope=\"scope\">{{scope.$index+1}}</template>\n      </el-table-column>\n      <el-table-column prop=\"state\" label=\"状态\" width=\"100\">\n        <template slot-scope=\"scope\">\n          <el-tag\n            size=\"mini\"\n            type=\"success\"\n            v-if=\"scope.row.state === 1 && scope.row.fileVoList && scope.row.fileVoList.length\"\n            :title=\"scope.row.materialsNote\"\n          >已上传</el-tag>\n          <el-tag size=\"mini\" type=\"danger\" v-else :title=\"scope.row.materialsNote\">待上传</el-tag>\n        </template>\n      </el-table-column>\n      <el-table-column prop=\"materialsName\" label=\"受理材料名称\">\n        <template slot-scope=\"scope\">\n          <template v-if=\"scope.row.fileVoList && scope.row.fileVoList.length\">\n            <a\n              style=\"cursor: pointer;\"\n              @click.stop=\"downloadFile(scope.row)\"\n              :title=\"scope.row.materialsNote\"\n            >\n              <span\n                v-if=\"scope.row.required\"\n                style=\"margin-right: 5px;color: red;\"\n                :title=\"scope.row.materialsNote\"\n              >*</span>\n              <span :title=\"scope.row.materialsNote\">{{scope.row.materialsName}}</span>\n            </a>\n          </template>\n          <template v-else>\n            <span\n              v-if=\"scope.row.required\"\n              style=\"margin-right: 5px;color: red;\"\n              :title=\"scope.row.materialsNote\"\n            >*</span>\n            <span style=\"cursor: help;\" :title=\"scope.row.materialsNote\">{{scope.row.materialsName}}</span>\n          </template>\n        </template>\n      </el-table-column>\n      <el-table-column prop=\"action\" label=\"操作\" width=\"100\" v-if=\"!readOnly\">\n        <template slot-scope=\"scope\">\n          <el-upload\n            ref=\"upload\"\n            :action=\"$http.adornUrl(`/api-oa/file/multiple`)\"\n            :headers=\"$http.getAuthHeader()\"\n            :show-file-list=\"false\"\n            :on-success=\"uploaded\"\n            :before-upload=\"beforeUpload\"\n          >\n            <el-button\n              type=\"text\"\n              size=\"small\"\n              :title=\"scope.row.materialsNote\"\n              @click=\"willUpload(scope.$index)\"\n            >{{scope.row.fileVoList.length?'附加上传':'上传'}}</el-button>\n          </el-upload>\n        </template>\n      </el-table-column>\n    </el-table>\n\n    <el-divider content-position=\"left\">其他材料</el-divider>\n    <div style=\"margin: 10px;\">\n      <el-button v-if=\"!readOnly\" type=\"info\" size=\"mini\" @click=\"dialogVisibleFile = true\">新增电子材料</el-button>\n      <el-button v-if=\"!readOnly\" type=\"info\" size=\"mini\" @click=\"dialogVisibleFile2 = true\">新增纸质说明</el-button>\n    </div>\n\n    <el-table size=\"mini\" :data=\"otherMaterialList\" style=\"width: 100%\">\n      <el-table-column header-align=\"center\" align=\"center\" label=\"序号\" width=\"50\">\n        <template slot-scope=\"scope\">{{scope.$index+1}}</template>\n      </el-table-column>\n      <el-table-column prop=\"fileVo.fileName\" label=\"其他材料名称\">\n        <template slot-scope=\"scope\">\n          <a\n            style=\"cursor: pointer;\"\n            @click.stop=\"downloadFile(scope.row, true)\"\n            :title=\"scope.row.fileVo.fileName\"\n            v-if=\"scope.row.type === 1\"\n          >\n            <span :title=\"scope.row.fileVo.fileName\">{{scope.row.fileVo.fileName}}</span>\n          </a>\n          <span v-else :title=\"scope.row.fileVo.fileName\">{{scope.row.fileVo.fileName}}</span>\n        </template>\n      </el-table-column>\n      <el-table-column prop=\"type\" label=\"电子/纸质\">\n        <template slot-scope=\"scope\">\n          <el-tag size=\"mini\" type=\"info\" v-if=\"scope.row.type === 1\">电子</el-tag>\n          <el-tag size=\"mini\" type=\"info\" v-if=\"scope.row.type === 2\">纸质</el-tag>\n        </template>\n      </el-table-column>\n      <el-table-column prop=\"fileVo.fileSize\" label=\"页数/大小(字节)\"></el-table-column>\n      <el-table-column prop=\"action\" label=\"操作\" width=\"100\" v-if=\"!readOnly\">\n        <template slot-scope=\"scope\">\n          <el-button type=\"text\" size=\"small\" @click=\"removeOtherMaterialList(scope.$index)\">删除</el-button>\n        </template>\n      </el-table-column>\n      <el-table-column type=\"expand\">\n        <template slot-scope=\"props\">\n          <el-form label-position=\"left\" inline class=\"demo-table-expand\">\n            <el-form-item label=\"说明\">\n              <span>{{ props.row.remark }}</span>\n            </el-form-item>\n          </el-form>\n        </template>\n      </el-table-column>\n    </el-table>\n\n    <!-- 电子材料 -->\n    <el-dialog title=\"电子材料\" :visible.sync=\"dialogVisibleFile\" width=\"30%\" append-to-body>\n      <el-form :model=\"currentCaiLiao\" ref=\"currentCaiLiao\">\n        <el-form-item label=\"说明\" prop=\"remark\">\n          <el-input\n            type=\"textarea\"\n            v-model=\"currentCaiLiao.remark\"\n            :autosize=\"{ minRows: 6, maxRows: 6}\"\n          ></el-input>\n        </el-form-item>\n      </el-form>\n      <el-upload\n        ref=\"uploadAddOtherMaterial\"\n        :action=\"$http.adornUrl(`/api-oa/file/single`)\"\n        :headers=\"$http.getAuthHeader()\"\n        :show-file-list=\"true\"\n        :on-success=\"uploaded2\"\n        :multiple=\"false\"\n        :limit=\"1\"\n        :on-exceed=\"onExceed\"\n      >\n        <el-button type=\"info\" size=\"small\">选择文件上传</el-button>\n      </el-upload>\n      <span slot=\"footer\" class=\"dialog-footer\">\n        <el-button @click=\"addOtherMaterial(1)\">确定</el-button>\n      </span>\n    </el-dialog>\n\n    <!-- 纸质说明 -->\n    <el-dialog title=\"纸质说明\" :visible.sync=\"dialogVisibleFile2\" width=\"30%\" append-to-body>\n      <el-form :model=\"currentCaiLiao\" ref=\"currentCaiLiao\" label-position=\"top\">\n        <el-form-item label=\"名称\" prop=\"name\">\n          <el-input v-model=\"currentCaiLiao.fileVo.fileName\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"页数\" prop=\"name\">\n          <el-input-number v-model=\"currentCaiLiao.fileVo.fileSize\"></el-input-number>\n        </el-form-item>\n        <el-form-item label=\"说明\" prop=\"remark\">\n          <el-input\n            type=\"textarea\"\n            v-model=\"currentCaiLiao.remark\"\n            :autosize=\"{ minRows: 6, maxRows: 6}\"\n          ></el-input>\n        </el-form-item>\n      </el-form>\n      <span slot=\"footer\" class=\"dialog-footer\">\n        <el-button @click=\"addOtherMaterial(2)\">确定</el-button>\n      </span>\n    </el-dialog>\n  </el-col>\n</template>\n\n<script>\nimport common from '@/utils/common'\n// import {download} from '@/utils/download'\n\nexport default {\n  props: {\n    materialListProp: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    otherMaterialListProp: {\n      type: Array,\n      default: function () {\n        return []\n      }\n    },\n    readOnly: {\n      type: Boolean,\n      default: true\n    }\n  },\n  data () {\n    return {\n      materialList: [],\n      otherMaterialList: [],\n      dialogVisibleFile: false,\n      dialogVisibleFile2: false,\n      currentCaiLiao: {\n        type: '',\n        remark: '',\n        fileVo: {\n          contentType: '',\n          fileName: '',\n          fileSize: '',\n          objId: ''\n        }\n      }\n    }\n  },\n  methods: {\n    downloadFile (row, single = false) {\n      console.warn('row', row)\n      let url\n      if (single) {\n        url = `/api-oa/system/common/downloadBatchByFile?access_token=${this.$http.getAccessToken()}&objIds=${row.fileVo.objId}`\n      } else {\n        let ids = row.fileVoList.map(itm => itm.objId)\n        if (!ids || !ids.length) {\n          this.$message.error('文件不存在~')\n          return\n        }\n        url = `/api-oa/system/common/downloadBatchByFile?access_token=${this.$http.getAccessToken()}`\n        ids.forEach(itm => {\n          url += '&objIds=' + itm\n        })\n      }\n      window.open(this.$http.adornUrl(url))\n      /*\n      let filename = ids.length === 1 ? row.fileVoList[0].fileName : row.materialsName + '.zip'\n      download(ids, filename)\n      .catch(e => {\n        this.$message.error(e.message)\n      }) */\n    },\n    onExceed () {\n      this.$message({\n        message: '最多上传一个文件',\n        type: 'warning',\n        duration: 1500\n      })\n    },\n    addOtherMaterial (type) {\n      if (type === 1) {\n        if (common.isEmpty(this.currentCaiLiao.fileVo.objId)) {\n          this.$message({\n            message: '文件不能为空',\n            type: 'warning',\n            duration: 1500\n          })\n          return\n        }\n        this.currentCaiLiao.type = 1\n        this.otherMaterialList.push(this.currentCaiLiao)\n        this.$refs.uploadAddOtherMaterial.clearFiles()\n      } else if (type === 2) {\n        if (common.isEmpty(this.currentCaiLiao.fileVo.fileName)) {\n          this.$message({\n            message: '名称不能为空',\n            type: 'error',\n            duration: 1500\n          })\n          return\n        }\n        this.currentCaiLiao.type = 2\n        this.otherMaterialList.push(this.currentCaiLiao)\n      }\n      this.dialogVisibleFile = false\n      this.dialogVisibleFile2 = false\n      this.resetFile()\n    },\n    removeOtherMaterialList (index) {\n      this.otherMaterialList.splice(index, 1)\n    },\n    resetFile () {\n      this.currentCaiLiao = {\n        type: '',\n        remark: '',\n        fileVo: {\n          contentType: '',\n          fileName: '',\n          fileSize: '',\n          objId: ''\n        }\n      }\n    },\n    willUpload (index) {\n      this.uploadIndex = index\n    },\n    beforeUpload () {\n      this.loading = this.$loading({\n        lock: true,\n        text: 'Loading',\n        spinner: 'el-icon-loading',\n        background: 'rgba(0, 0, 0, 0.7)'\n      })\n    },\n    uploaded (res, file, fileList) {\n      this.loading.close()\n      if (res && res.code === 0) {\n        let materia = this.materialList[this.uploadIndex]\n\n        if (!materia.fileVoList) {\n          materia.fileVoList = []\n        }\n\n        materia.fileVoList = materia.fileVoList.concat(res.fileList)\n        materia.state = 1\n\n        this.materialList.splice(this.uploadIndex, 1, materia)\n      } else {\n        this.$message({\n          message: '上传文件失败',\n          type: 'error',\n          duration: 1500\n        })\n      }\n    },\n    uploaded2 (res, file, fileList) {\n      if (res && res.code === 0) {\n        this.currentCaiLiao.fileVo = res.fileList[0]\n      } else {\n        this.$message({\n          message: '上传文件失败',\n          type: 'error',\n          duration: 1500\n        })\n      }\n    }\n  },\n  watch: {\n    materialListProp: {\n      handler: function (value, oldValue) {\n        if (Array.isArray(value)) {\n          value.forEach(element => {\n            if (!Array.isArray(element.fileVoList)) element.fileVoList = []\n          })\n        } else {\n          value = []\n        }\n\n        this.materialList = value\n      },\n      deep: true,\n      immediate: true\n    },\n    otherMaterialListProp: {\n      handler: function (value, oldValue) {\n        if (!Array.isArray(value)) {\n          value = []\n        }\n\n        this.otherMaterialList = value\n      },\n      deep: true,\n      immediate: true\n    },\n    materialList: {\n      handler: function (value, oldValue) {\n        this.$emit('materialListCallBack', value)\n      },\n      deep: true\n    },\n    otherMaterialList: {\n      handler: function (value, oldValue) {\n        this.$emit('otherMaterialListCallBack', value)\n      },\n      deep: true\n    }\n  }\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/components/icon-svg/index.vue",
    "content": "<template>\n  <svg\n    :class=\"getClassName\"\n    :width=\"width\"\n    :height=\"height\"\n    aria-hidden=\"true\">\n    <use :xlink:href=\"getName\"></use>\n  </svg>\n</template>\n\n<script>\n  export default {\n    name: 'icon-svg',\n    props: {\n      name: {\n        type: String,\n        required: true\n      },\n      className: {\n        type: String\n      },\n      width: {\n        type: String\n      },\n      height: {\n        type: String\n      }\n    },\n    computed: {\n      getName () {\n        return `#icon-${this.name}`\n      },\n      getClassName () {\n        return [\n          'icon-svg',\n          `icon-svg__${this.name}`,\n          this.className && /\\S/.test(this.className) ? `${this.className}` : ''\n        ]\n      }\n    }\n  }\n</script>\n\n<style>\n  .icon-svg {\n    width: 1em;\n    height: 1em;\n    fill: currentColor;\n    overflow: hidden;\n  }\n</style>\n"
  },
  {
    "path": "src/components/table-tree-column/index.vue",
    "content": "<template>\n  <el-table-column :prop=\"prop\" v-bind=\"$attrs\">\n    <template slot-scope=\"scope\">\n      <span @click.prevent=\"toggleHandle(scope.$index, scope.row)\" :style=\"childStyles(scope.row)\">\n        <i :class=\"iconClasses(scope.row)\" :style=\"iconStyles(scope.row)\"></i>\n        {{ scope.row[prop] }}\n      </span>\n    </template>\n  </el-table-column>\n</template>\n\n<script>\n  import isArray from 'lodash/isArray'\n  export default {\n    name: 'table-tree-column',\n    props: {\n      prop: {\n        type: String\n      },\n      treeKey: {\n        type: String,\n        default: 'id'\n      },\n      parentKey: {\n        type: String,\n        default: 'parentId'\n      },\n      levelKey: {\n        type: String,\n        default: '_level'\n      },\n      childKey: {\n        type: String,\n        default: 'children'\n      }\n    },\n    methods: {\n      childStyles (row) {\n        return { 'padding-left': (row[this.levelKey] > 1 ? row[this.levelKey] * 7 : 0) + 'px' }\n      },\n      iconClasses (row) {\n        return [ !row._expanded ? 'el-icon-caret-right' : 'el-icon-caret-bottom' ]\n      },\n      iconStyles (row) {\n        return { 'visibility': this.hasChild(row) ? 'visible' : 'hidden' }\n      },\n      hasChild (row) {\n        return (isArray(row[this.childKey]) && row[this.childKey].length >= 1) || false\n      },\n      // 切换处理\n      toggleHandle (index, row) {\n        if (this.hasChild(row)) {\n          var data = this.$parent.store.states.data.slice(0)\n          data[index]._expanded = !data[index]._expanded\n          if (data[index]._expanded) {\n            data = data.splice(0, index + 1).concat(row[this.childKey]).concat(data)\n          } else {\n            data = this.removeChildNode(data, row[this.treeKey])\n          }\n          this.$parent.store.commit('setData', data)\n          this.$nextTick(() => {\n            this.$parent.doLayout()\n          })\n        }\n      },\n      // 移除子节点\n      removeChildNode (data, parentId) {\n        var parentIds = isArray(parentId) ? parentId : [parentId]\n        if (parentId.length <= 0) {\n          return data\n        }\n        var ids = []\n        for (var i = 0; i < data.length; i++) {\n          if (parentIds.indexOf(data[i][this.parentKey]) !== -1 && parentIds.indexOf(data[i][this.treeKey]) === -1) {\n            data[i]._expanded = false\n            ids.push(data.splice(i, 1)[0][this.treeKey])\n            i--\n          }\n        }\n        return this.removeChildNode(data, ids)\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/element-ui/index.js",
    "content": "/**\n * UI组件, 统一使用饿了么桌面端组件库(https://github.com/ElemeFE/element）\n *\n * 使用:\n *  1. 项目中需要的组件进行释放(解开注释)\n *\n * 注意:\n *  1. 打包只会包含释放(解开注释)的组件, 减少打包文件大小\n */\nimport Vue from 'vue'\nimport {\n  Pagination,\n  Dialog,\n  Autocomplete,\n  Dropdown,\n  DropdownMenu,\n  DropdownItem,\n  Menu,\n  Submenu,\n  MenuItem,\n  MenuItemGroup,\n  Input,\n  InputNumber,\n  Radio,\n  RadioGroup,\n  RadioButton,\n  Checkbox,\n  CheckboxButton,\n  CheckboxGroup,\n  Switch,\n  Select,\n  Option,\n  OptionGroup,\n  Button,\n  ButtonGroup,\n  Table,\n  TableColumn,\n  DatePicker,\n  TimeSelect,\n  TimePicker,\n  Popover,\n  Tooltip,\n  Breadcrumb,\n  BreadcrumbItem,\n  Form,\n  FormItem,\n  Tabs,\n  TabPane,\n  Tag,\n  Tree,\n  Alert,\n  Slider,\n  Icon,\n  Row,\n  Col,\n  Upload,\n  Progress,\n  Badge,\n  Card,\n  Rate,\n  Steps,\n  Step,\n  Carousel,\n  CarouselItem,\n  Collapse,\n  CollapseItem,\n  Cascader,\n  ColorPicker,\n  Transfer,\n  Container,\n  Header,\n  Aside,\n  Main,\n  Footer,\n  Loading,\n  MessageBox,\n  Message,\n  Notification\n} from 'element-ui'\n\nVue.use(Pagination)\nVue.use(Dialog)\nVue.use(Autocomplete)\nVue.use(Dropdown)\nVue.use(DropdownMenu)\nVue.use(DropdownItem)\nVue.use(Menu)\nVue.use(Submenu)\nVue.use(MenuItem)\nVue.use(MenuItemGroup)\nVue.use(Input)\nVue.use(InputNumber)\nVue.use(Radio)\nVue.use(RadioGroup)\nVue.use(RadioButton)\nVue.use(Checkbox)\nVue.use(CheckboxButton)\nVue.use(CheckboxGroup)\nVue.use(Switch)\nVue.use(Select)\nVue.use(Option)\nVue.use(OptionGroup)\nVue.use(Button)\nVue.use(ButtonGroup)\nVue.use(Table)\nVue.use(TableColumn)\nVue.use(DatePicker)\nVue.use(TimeSelect)\nVue.use(TimePicker)\nVue.use(Popover)\nVue.use(Tooltip)\nVue.use(Breadcrumb)\nVue.use(BreadcrumbItem)\nVue.use(Form)\nVue.use(FormItem)\nVue.use(Tabs)\nVue.use(TabPane)\nVue.use(Tag)\nVue.use(Tree)\nVue.use(Alert)\nVue.use(Slider)\nVue.use(Icon)\nVue.use(Row)\nVue.use(Col)\nVue.use(Upload)\nVue.use(Progress)\nVue.use(Badge)\nVue.use(Card)\nVue.use(Rate)\nVue.use(Steps)\nVue.use(Step)\nVue.use(Carousel)\nVue.use(CarouselItem)\nVue.use(Collapse)\nVue.use(CollapseItem)\nVue.use(Cascader)\nVue.use(ColorPicker)\nVue.use(Transfer)\nVue.use(Container)\nVue.use(Header)\nVue.use(Aside)\nVue.use(Main)\nVue.use(Footer)\n\nVue.use(Loading.directive)\n\nVue.prototype.$loading = Loading.service\nVue.prototype.$msgbox = MessageBox\nVue.prototype.$alert = MessageBox.alert\nVue.prototype.$confirm = MessageBox.confirm\nVue.prototype.$prompt = MessageBox.prompt\nVue.prototype.$notify = Notification\nVue.prototype.$message = Message\n\nVue.prototype.$ELEMENT = { size: 'medium' }\n"
  },
  {
    "path": "src/element-ui-theme/element-#0BB2D4/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#0BB2D4}.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:#0BB2D4}.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;margin:0 2px;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:#0BB2D4}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#0BB2D4;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#0BB2D4}.el-pager li.active{color:#0BB2D4;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;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);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:#0BB2D4}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(231, 247, 251);color:rgb(60, 193, 221)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #0BB2D4;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__title.is-active{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 #0BB2D4;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:rgb(231, 247, 251)}.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:#0BB2D4}.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:rgb(231, 247, 251)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(231, 247, 251)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#0BB2D4}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#0BB2D4}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#0BB2D4;background:#0BB2D4}.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:#0BB2D4}.el-radio__input.is-focus .el-radio__inner{border-color:#0BB2D4}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#0BB2D4}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #0BB2D4;box-shadow:0 0 2px 2px #0BB2D4}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#0BB2D4}.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:#0BB2D4;border-color:#0BB2D4;-webkit-box-shadow:-1px 0 0 0 #0BB2D4;box-shadow:-1px 0 0 0 #0BB2D4}.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){-webkit-box-shadow:0 0 2px 2px #0BB2D4;box-shadow:0 0 2px 2px #0BB2D4}.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:#0BB2D4}.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__input:focus~.el-switch__core{outline:#0BB2D4 solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#0BB2D4;background-color:#0BB2D4}.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:#0BB2D4;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:\"\\E611\";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:#0BB2D4;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#0BB2D4}.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);line-height:16px;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:#0BB2D4}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#0BB2D4}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#0BB2D4}.el-table .descending .sort-caret.descending{border-top-color:#0BB2D4}.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,.el-table__body tr.current-row>td,.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:rgb(231, 247, 251)}.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-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-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:rgb(231, 247, 251);color:rgb(60, 193, 221)}.el-table-filter__list-item.is-active{background-color:#0BB2D4;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:#0BB2D4}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#0BB2D4;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:#0BB2D4}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#0BB2D4}.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:#0BB2D4}.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-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}.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:#0BB2D4;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#0BB2D4}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#0BB2D4}.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.is-right .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:#0BB2D4}.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:#0BB2D4;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}.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-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--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:#0BB2D4}.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:#0BB2D4}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#0BB2D4}.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:#0BB2D4}.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:#0BB2D4}.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;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:#0BB2D4}.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)}.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-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:#0BB2D4}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#0BB2D4;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#0BB2D4;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:#0BB2D4}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #0BB2D4 inset;box-shadow:0 0 2px 2px #0BB2D4 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:#0BB2D4}.el-tabs__item:hover{color:#0BB2D4;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#0BB2D4;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:#0BB2D4}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#0BB2D4;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#0BB2D4}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#0BB2D4;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#0BB2D4}.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:#0BB2D4;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#0BB2D4}.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:#0BB2D4}.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}.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__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:#0BB2D4;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;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 #0BB2D4;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#0BB2D4}.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:#0BB2D4;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:#0BB2D4;stroke-linecap:round}.el-loading-spinner i{color:#0BB2D4}@-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:768px){.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:#0BB2D4;color:#0BB2D4}.el-upload:focus .el-upload-dragger{border-color:#0BB2D4}.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:#0BB2D4;font-style:normal}.el-upload-dragger:hover{border-color:#0BB2D4}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #0BB2D4}.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:#0BB2D4}.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:#0BB2D4;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:#0BB2D4}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#0BB2D4;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#0BB2D4;border-color:#0BB2D4}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#0BB2D4}.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:#0BB2D4}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#0BB2D4}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#0BB2D4}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #0BB2D4;box-shadow:0 0 3px 2px #0BB2D4}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#0BB2D4;border-color:#0BB2D4}.el-color-dropdown__link-btn{cursor:pointer;color:#0BB2D4;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#0BB2D4}.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-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;line-height:16px;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__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:#0BB2D4;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#0BB2D4;border-color:rgb(182, 232, 242);background-color:rgb(231, 247, 251)}.el-button:active{color:rgb(10, 160, 191);border-color:rgb(10, 160, 191);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:#0BB2D4;color:#0BB2D4}.el-button.is-active,.el-button.is-plain:active{color:rgb(10, 160, 191);border-color:rgb(10, 160, 191)}.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:#0BB2D4;border-color:#0BB2D4}.el-button--primary:focus,.el-button--primary:hover{background:rgb(60, 193, 221);border-color:rgb(60, 193, 221);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(10, 160, 191);border-color:rgb(10, 160, 191);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:rgb(133, 217, 234);border-color:rgb(133, 217, 234)}.el-button--primary.is-plain{color:#0BB2D4;background:rgb(231, 247, 251);border-color:rgb(157, 224, 238)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#0BB2D4;border-color:#0BB2D4;color:#fff}.el-button--primary.is-plain:active{background:rgb(10, 160, 191);border-color:rgb(10, 160, 191);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:rgb(109, 209, 229);background-color:rgb(231, 247, 251);border-color:rgb(206, 240, 246)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#0BB2D4;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(60, 193, 221);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(10, 160, 191);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#0BB2D4}.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:#0BB2D4;border-color:#0BB2D4}.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:#0BB2D4}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#0BB2D4}.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:#0BB2D4}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#0BB2D4}.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:#0BB2D4;border-color:#0BB2D4;-webkit-box-shadow:-1px 0 0 0 rgb(109, 209, 229);box-shadow:-1px 0 0 0 rgb(109, 209, 229)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#0BB2D4}.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:#0BB2D4}.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:#0BB2D4;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#0BB2D4}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/element-#11C26D/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#11C26D}.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:#11C26D}.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;margin:0 2px;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:#11C26D}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#11C26D;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#11C26D}.el-pager li.active{color:#11C26D;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;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);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:#11C26D}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(231, 249, 240);color:rgb(65, 206, 138)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #11C26D;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__title.is-active{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 #11C26D;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:rgb(231, 249, 240)}.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:#11C26D}.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:rgb(231, 249, 240)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(231, 249, 240)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#11C26D}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#11C26D}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#11C26D;background:#11C26D}.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:#11C26D}.el-radio__input.is-focus .el-radio__inner{border-color:#11C26D}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#11C26D}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #11C26D;box-shadow:0 0 2px 2px #11C26D}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#11C26D}.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:#11C26D;border-color:#11C26D;-webkit-box-shadow:-1px 0 0 0 #11C26D;box-shadow:-1px 0 0 0 #11C26D}.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){-webkit-box-shadow:0 0 2px 2px #11C26D;box-shadow:0 0 2px 2px #11C26D}.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:#11C26D}.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__input:focus~.el-switch__core{outline:#11C26D solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#11C26D;background-color:#11C26D}.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:#11C26D;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:\"\\E611\";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:#11C26D;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#11C26D}.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);line-height:16px;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:#11C26D}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#11C26D}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#11C26D}.el-table .descending .sort-caret.descending{border-top-color:#11C26D}.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,.el-table__body tr.current-row>td,.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:rgb(231, 249, 240)}.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-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-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:rgb(231, 249, 240);color:rgb(65, 206, 138)}.el-table-filter__list-item.is-active{background-color:#11C26D;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:#11C26D}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#11C26D;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:#11C26D}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#11C26D}.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:#11C26D}.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-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}.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:#11C26D;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#11C26D}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#11C26D}.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.is-right .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:#11C26D}.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:#11C26D;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}.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-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--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:#11C26D}.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:#11C26D}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#11C26D}.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:#11C26D}.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:#11C26D}.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;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:#11C26D}.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)}.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-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:#11C26D}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#11C26D;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#11C26D;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:#11C26D}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #11C26D inset;box-shadow:0 0 2px 2px #11C26D 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:#11C26D}.el-tabs__item:hover{color:#11C26D;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#11C26D;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:#11C26D}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#11C26D;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#11C26D}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#11C26D;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#11C26D}.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:#11C26D;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#11C26D}.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:#11C26D}.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}.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__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:#11C26D;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;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 #11C26D;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#11C26D}.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:#11C26D;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:#11C26D;stroke-linecap:round}.el-loading-spinner i{color:#11C26D}@-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:768px){.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:#11C26D;color:#11C26D}.el-upload:focus .el-upload-dragger{border-color:#11C26D}.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:#11C26D;font-style:normal}.el-upload-dragger:hover{border-color:#11C26D}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #11C26D}.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:#11C26D}.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:#11C26D;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:#11C26D}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#11C26D;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#11C26D;border-color:#11C26D}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#11C26D}.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:#11C26D}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#11C26D}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#11C26D}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #11C26D;box-shadow:0 0 3px 2px #11C26D}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#11C26D;border-color:#11C26D}.el-color-dropdown__link-btn{cursor:pointer;color:#11C26D;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#11C26D}.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-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;line-height:16px;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__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:#11C26D;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#11C26D;border-color:rgb(184, 237, 211);background-color:rgb(231, 249, 240)}.el-button:active{color:rgb(15, 175, 98);border-color:rgb(15, 175, 98);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:#11C26D;color:#11C26D}.el-button.is-active,.el-button.is-plain:active{color:rgb(15, 175, 98);border-color:rgb(15, 175, 98)}.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:#11C26D;border-color:#11C26D}.el-button--primary:focus,.el-button--primary:hover{background:rgb(65, 206, 138);border-color:rgb(65, 206, 138);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(15, 175, 98);border-color:rgb(15, 175, 98);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:rgb(136, 225, 182);border-color:rgb(136, 225, 182)}.el-button--primary.is-plain{color:#11C26D;background:rgb(231, 249, 240);border-color:rgb(160, 231, 197)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#11C26D;border-color:#11C26D;color:#fff}.el-button--primary.is-plain:active{background:rgb(15, 175, 98);border-color:rgb(15, 175, 98);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:rgb(112, 218, 167);background-color:rgb(231, 249, 240);border-color:rgb(207, 243, 226)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#11C26D;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(65, 206, 138);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(15, 175, 98);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#11C26D}.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:#11C26D;border-color:#11C26D}.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:#11C26D}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#11C26D}.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:#11C26D}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#11C26D}.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:#11C26D;border-color:#11C26D;-webkit-box-shadow:-1px 0 0 0 rgb(112, 218, 167);box-shadow:-1px 0 0 0 rgb(112, 218, 167)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#11C26D}.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:#11C26D}.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:#11C26D;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#11C26D}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/element-#17B3A3/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#17B3A3}.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:#17B3A3}.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;margin:0 2px;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:#17B3A3}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#17B3A3;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#17B3A3}.el-pager li.active{color:#17B3A3;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;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);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:#17B3A3}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(232, 247, 246);color:rgb(69, 194, 181)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #17B3A3;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__title.is-active{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 #17B3A3;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:rgb(232, 247, 246)}.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:#17B3A3}.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:rgb(232, 247, 246)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(232, 247, 246)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#17B3A3}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#17B3A3}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#17B3A3;background:#17B3A3}.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:#17B3A3}.el-radio__input.is-focus .el-radio__inner{border-color:#17B3A3}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#17B3A3}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #17B3A3;box-shadow:0 0 2px 2px #17B3A3}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#17B3A3}.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:#17B3A3;border-color:#17B3A3;-webkit-box-shadow:-1px 0 0 0 #17B3A3;box-shadow:-1px 0 0 0 #17B3A3}.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){-webkit-box-shadow:0 0 2px 2px #17B3A3;box-shadow:0 0 2px 2px #17B3A3}.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:#17B3A3}.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__input:focus~.el-switch__core{outline:#17B3A3 solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#17B3A3;background-color:#17B3A3}.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:#17B3A3;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:\"\\E611\";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:#17B3A3;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#17B3A3}.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);line-height:16px;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:#17B3A3}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#17B3A3}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#17B3A3}.el-table .descending .sort-caret.descending{border-top-color:#17B3A3}.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,.el-table__body tr.current-row>td,.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:rgb(232, 247, 246)}.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-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-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:rgb(232, 247, 246);color:rgb(69, 194, 181)}.el-table-filter__list-item.is-active{background-color:#17B3A3;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:#17B3A3}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#17B3A3;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:#17B3A3}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#17B3A3}.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:#17B3A3}.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-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}.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:#17B3A3;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#17B3A3}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#17B3A3}.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.is-right .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:#17B3A3}.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:#17B3A3;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}.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-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--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:#17B3A3}.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:#17B3A3}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#17B3A3}.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:#17B3A3}.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:#17B3A3}.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;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:#17B3A3}.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)}.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-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:#17B3A3}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#17B3A3;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#17B3A3;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:#17B3A3}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #17B3A3 inset;box-shadow:0 0 2px 2px #17B3A3 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:#17B3A3}.el-tabs__item:hover{color:#17B3A3;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#17B3A3;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:#17B3A3}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#17B3A3;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#17B3A3}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#17B3A3;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#17B3A3}.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:#17B3A3;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#17B3A3}.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:#17B3A3}.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}.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__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:#17B3A3;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;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 #17B3A3;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#17B3A3}.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:#17B3A3;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:#17B3A3;stroke-linecap:round}.el-loading-spinner i{color:#17B3A3}@-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:768px){.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:#17B3A3;color:#17B3A3}.el-upload:focus .el-upload-dragger{border-color:#17B3A3}.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:#17B3A3;font-style:normal}.el-upload-dragger:hover{border-color:#17B3A3}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #17B3A3}.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:#17B3A3}.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:#17B3A3;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:#17B3A3}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#17B3A3;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#17B3A3;border-color:#17B3A3}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#17B3A3}.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:#17B3A3}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#17B3A3}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#17B3A3}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #17B3A3;box-shadow:0 0 3px 2px #17B3A3}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#17B3A3;border-color:#17B3A3}.el-color-dropdown__link-btn{cursor:pointer;color:#17B3A3;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#17B3A3}.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-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;line-height:16px;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__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:#17B3A3;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#17B3A3;border-color:rgb(185, 232, 227);background-color:rgb(232, 247, 246)}.el-button:active{color:rgb(21, 161, 147);border-color:rgb(21, 161, 147);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:#17B3A3;color:#17B3A3}.el-button.is-active,.el-button.is-plain:active{color:rgb(21, 161, 147);border-color:rgb(21, 161, 147)}.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:#17B3A3;border-color:#17B3A3}.el-button--primary:focus,.el-button--primary:hover{background:rgb(69, 194, 181);border-color:rgb(69, 194, 181);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(21, 161, 147);border-color:rgb(21, 161, 147);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:rgb(139, 217, 209);border-color:rgb(139, 217, 209)}.el-button--primary.is-plain{color:#17B3A3;background:rgb(232, 247, 246);border-color:rgb(162, 225, 218)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#17B3A3;border-color:#17B3A3;color:#fff}.el-button--primary.is-plain:active{background:rgb(21, 161, 147);border-color:rgb(21, 161, 147);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:rgb(116, 209, 200);background-color:rgb(232, 247, 246);border-color:rgb(209, 240, 237)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#17B3A3;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(69, 194, 181);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(21, 161, 147);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#17B3A3}.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:#17B3A3;border-color:#17B3A3}.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:#17B3A3}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#17B3A3}.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:#17B3A3}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#17B3A3}.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:#17B3A3;border-color:#17B3A3;-webkit-box-shadow:-1px 0 0 0 rgb(116, 209, 200);box-shadow:-1px 0 0 0 rgb(116, 209, 200)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#17B3A3}.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:#17B3A3}.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:#17B3A3;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#17B3A3}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/element-#3E8EF7/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#3E8EF7}.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:#3E8EF7}.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;margin:0 2px;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:#3E8EF7}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#3E8EF7;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#3E8EF7}.el-pager li.active{color:#3E8EF7;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;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);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:#3E8EF7}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(236, 244, 254);color:rgb(101, 165, 249)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #3E8EF7;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__title.is-active{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 #3E8EF7;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:rgb(236, 244, 254)}.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:#3E8EF7}.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:rgb(236, 244, 254)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(236, 244, 254)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#3E8EF7}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#3E8EF7}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#3E8EF7;background:#3E8EF7}.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:#3E8EF7}.el-radio__input.is-focus .el-radio__inner{border-color:#3E8EF7}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#3E8EF7}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #3E8EF7;box-shadow:0 0 2px 2px #3E8EF7}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#3E8EF7}.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:#3E8EF7;border-color:#3E8EF7;-webkit-box-shadow:-1px 0 0 0 #3E8EF7;box-shadow:-1px 0 0 0 #3E8EF7}.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){-webkit-box-shadow:0 0 2px 2px #3E8EF7;box-shadow:0 0 2px 2px #3E8EF7}.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:#3E8EF7}.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__input:focus~.el-switch__core{outline:#3E8EF7 solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#3E8EF7;background-color:#3E8EF7}.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:#3E8EF7;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:\"\\E611\";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:#3E8EF7;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#3E8EF7}.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);line-height:16px;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:#3E8EF7}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#3E8EF7}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#3E8EF7}.el-table .descending .sort-caret.descending{border-top-color:#3E8EF7}.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,.el-table__body tr.current-row>td,.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:rgb(236, 244, 254)}.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-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-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:rgb(236, 244, 254);color:rgb(101, 165, 249)}.el-table-filter__list-item.is-active{background-color:#3E8EF7;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:#3E8EF7}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#3E8EF7;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:#3E8EF7}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#3E8EF7}.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:#3E8EF7}.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-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}.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:#3E8EF7;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#3E8EF7}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#3E8EF7}.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.is-right .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:#3E8EF7}.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:#3E8EF7;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}.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-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--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:#3E8EF7}.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:#3E8EF7}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#3E8EF7}.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:#3E8EF7}.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:#3E8EF7}.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;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:#3E8EF7}.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)}.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-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:#3E8EF7}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#3E8EF7;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#3E8EF7;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:#3E8EF7}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #3E8EF7 inset;box-shadow:0 0 2px 2px #3E8EF7 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:#3E8EF7}.el-tabs__item:hover{color:#3E8EF7;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#3E8EF7;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:#3E8EF7}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#3E8EF7;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#3E8EF7}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#3E8EF7;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#3E8EF7}.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:#3E8EF7;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#3E8EF7}.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:#3E8EF7}.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}.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__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:#3E8EF7;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;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 #3E8EF7;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#3E8EF7}.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:#3E8EF7;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:#3E8EF7;stroke-linecap:round}.el-loading-spinner i{color:#3E8EF7}@-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:768px){.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:#3E8EF7;color:#3E8EF7}.el-upload:focus .el-upload-dragger{border-color:#3E8EF7}.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:#3E8EF7;font-style:normal}.el-upload-dragger:hover{border-color:#3E8EF7}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #3E8EF7}.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:#3E8EF7}.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:#3E8EF7;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:#3E8EF7}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#3E8EF7;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#3E8EF7;border-color:#3E8EF7}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#3E8EF7}.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:#3E8EF7}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#3E8EF7}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#3E8EF7}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #3E8EF7;box-shadow:0 0 3px 2px #3E8EF7}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#3E8EF7;border-color:#3E8EF7}.el-color-dropdown__link-btn{cursor:pointer;color:#3E8EF7;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#3E8EF7}.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-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;line-height:16px;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__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:#3E8EF7;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#3E8EF7;border-color:rgb(197, 221, 253);background-color:rgb(236, 244, 254)}.el-button:active{color:rgb(56, 128, 222);border-color:rgb(56, 128, 222);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:#3E8EF7;color:#3E8EF7}.el-button.is-active,.el-button.is-plain:active{color:rgb(56, 128, 222);border-color:rgb(56, 128, 222)}.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:#3E8EF7;border-color:#3E8EF7}.el-button--primary:focus,.el-button--primary:hover{background:rgb(101, 165, 249);border-color:rgb(101, 165, 249);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(56, 128, 222);border-color:rgb(56, 128, 222);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:rgb(159, 199, 251);border-color:rgb(159, 199, 251)}.el-button--primary.is-plain{color:#3E8EF7;background:rgb(236, 244, 254);border-color:rgb(178, 210, 252)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#3E8EF7;border-color:#3E8EF7;color:#fff}.el-button--primary.is-plain:active{background:rgb(56, 128, 222);border-color:rgb(56, 128, 222);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:rgb(139, 187, 250);background-color:rgb(236, 244, 254);border-color:rgb(216, 232, 253)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#3E8EF7;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(101, 165, 249);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(56, 128, 222);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#3E8EF7}.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:#3E8EF7;border-color:#3E8EF7}.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:#3E8EF7}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#3E8EF7}.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:#3E8EF7}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#3E8EF7}.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:#3E8EF7;border-color:#3E8EF7;-webkit-box-shadow:-1px 0 0 0 rgb(139, 187, 250);box-shadow:-1px 0 0 0 rgb(139, 187, 250)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#3E8EF7}.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:#3E8EF7}.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:#3E8EF7;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#3E8EF7}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/element-#667AFA/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#667AFA}.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:#667AFA}.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;margin:0 2px;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:#667AFA}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#667AFA;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#667AFA}.el-pager li.active{color:#667AFA;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;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);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:#667AFA}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(240, 242, 255);color:rgb(133, 149, 251)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #667AFA;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__title.is-active{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 #667AFA;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:rgb(240, 242, 255)}.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:#667AFA}.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:rgb(240, 242, 255)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(240, 242, 255)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#667AFA}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#667AFA}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#667AFA;background:#667AFA}.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:#667AFA}.el-radio__input.is-focus .el-radio__inner{border-color:#667AFA}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#667AFA}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #667AFA;box-shadow:0 0 2px 2px #667AFA}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#667AFA}.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:#667AFA;border-color:#667AFA;-webkit-box-shadow:-1px 0 0 0 #667AFA;box-shadow:-1px 0 0 0 #667AFA}.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){-webkit-box-shadow:0 0 2px 2px #667AFA;box-shadow:0 0 2px 2px #667AFA}.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:#667AFA}.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__input:focus~.el-switch__core{outline:#667AFA solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#667AFA;background-color:#667AFA}.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:#667AFA;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:\"\\E611\";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:#667AFA;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#667AFA}.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);line-height:16px;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:#667AFA}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#667AFA}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#667AFA}.el-table .descending .sort-caret.descending{border-top-color:#667AFA}.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,.el-table__body tr.current-row>td,.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:rgb(240, 242, 255)}.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-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-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:rgb(240, 242, 255);color:rgb(133, 149, 251)}.el-table-filter__list-item.is-active{background-color:#667AFA;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:#667AFA}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#667AFA;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:#667AFA}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#667AFA}.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:#667AFA}.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-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}.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:#667AFA;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#667AFA}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#667AFA}.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.is-right .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:#667AFA}.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:#667AFA;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}.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-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--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:#667AFA}.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:#667AFA}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#667AFA}.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:#667AFA}.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:#667AFA}.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;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:#667AFA}.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)}.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-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:#667AFA}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#667AFA;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#667AFA;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:#667AFA}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #667AFA inset;box-shadow:0 0 2px 2px #667AFA 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:#667AFA}.el-tabs__item:hover{color:#667AFA;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#667AFA;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:#667AFA}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#667AFA;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#667AFA}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#667AFA;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#667AFA}.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:#667AFA;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#667AFA}.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:#667AFA}.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}.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__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:#667AFA;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;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 #667AFA;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#667AFA}.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:#667AFA;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:#667AFA;stroke-linecap:round}.el-loading-spinner i{color:#667AFA}@-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:768px){.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:#667AFA;color:#667AFA}.el-upload:focus .el-upload-dragger{border-color:#667AFA}.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:#667AFA;font-style:normal}.el-upload-dragger:hover{border-color:#667AFA}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #667AFA}.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:#667AFA}.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:#667AFA;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:#667AFA}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#667AFA;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#667AFA;border-color:#667AFA}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#667AFA}.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:#667AFA}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#667AFA}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#667AFA}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #667AFA;box-shadow:0 0 3px 2px #667AFA}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#667AFA;border-color:#667AFA}.el-color-dropdown__link-btn{cursor:pointer;color:#667AFA;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#667AFA}.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-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;line-height:16px;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__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:#667AFA;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#667AFA;border-color:rgb(209, 215, 254);background-color:rgb(240, 242, 255)}.el-button:active{color:rgb(92, 110, 225);border-color:rgb(92, 110, 225);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:#667AFA;color:#667AFA}.el-button.is-active,.el-button.is-plain:active{color:rgb(92, 110, 225);border-color:rgb(92, 110, 225)}.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:#667AFA;border-color:#667AFA}.el-button--primary:focus,.el-button--primary:hover{background:rgb(133, 149, 251);border-color:rgb(133, 149, 251);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(92, 110, 225);border-color:rgb(92, 110, 225);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:rgb(179, 189, 253);border-color:rgb(179, 189, 253)}.el-button--primary.is-plain{color:#667AFA;background:rgb(240, 242, 255);border-color:rgb(194, 202, 253)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#667AFA;border-color:#667AFA;color:#fff}.el-button--primary.is-plain:active{background:rgb(92, 110, 225);border-color:rgb(92, 110, 225);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:rgb(163, 175, 252);background-color:rgb(240, 242, 255);border-color:rgb(224, 228, 254)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#667AFA;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(133, 149, 251);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(92, 110, 225);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#667AFA}.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:#667AFA;border-color:#667AFA}.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:#667AFA}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#667AFA}.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:#667AFA}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#667AFA}.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:#667AFA;border-color:#667AFA;-webkit-box-shadow:-1px 0 0 0 rgb(163, 175, 252);box-shadow:-1px 0 0 0 rgb(163, 175, 252)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#667AFA}.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:#667AFA}.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:#667AFA;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#667AFA}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/element-#757575/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#757575}.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:#757575}.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;margin:0 2px;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:#757575}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#757575;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#757575}.el-pager li.active{color:#757575;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;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);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:#757575}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(241, 241, 241);color:rgb(145, 145, 145)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #757575;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__title.is-active{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 #757575;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:rgb(241, 241, 241)}.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:#757575}.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:rgb(241, 241, 241)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(241, 241, 241)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#757575}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#757575}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#757575;background:#757575}.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:#757575}.el-radio__input.is-focus .el-radio__inner{border-color:#757575}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#757575}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #757575;box-shadow:0 0 2px 2px #757575}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#757575}.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:#757575;border-color:#757575;-webkit-box-shadow:-1px 0 0 0 #757575;box-shadow:-1px 0 0 0 #757575}.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){-webkit-box-shadow:0 0 2px 2px #757575;box-shadow:0 0 2px 2px #757575}.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:#757575}.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__input:focus~.el-switch__core{outline:#757575 solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#757575;background-color:#757575}.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:#757575;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:\"\\E611\";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:#757575;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#757575}.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);line-height:16px;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:#757575}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#757575}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#757575}.el-table .descending .sort-caret.descending{border-top-color:#757575}.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,.el-table__body tr.current-row>td,.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:rgb(241, 241, 241)}.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-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-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:rgb(241, 241, 241);color:rgb(145, 145, 145)}.el-table-filter__list-item.is-active{background-color:#757575;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:#757575}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#757575;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:#757575}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#757575}.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:#757575}.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-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}.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:#757575;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#757575}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#757575}.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.is-right .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:#757575}.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:#757575;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}.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-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--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:#757575}.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:#757575}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#757575}.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:#757575}.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:#757575}.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;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:#757575}.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)}.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-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:#757575}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#757575;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#757575;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:#757575}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #757575 inset;box-shadow:0 0 2px 2px #757575 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:#757575}.el-tabs__item:hover{color:#757575;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#757575;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:#757575}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#757575;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#757575}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#757575;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#757575}.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:#757575;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#757575}.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:#757575}.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}.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__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:#757575;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;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 #757575;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#757575}.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:#757575;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:#757575;stroke-linecap:round}.el-loading-spinner i{color:#757575}@-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:768px){.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:#757575;color:#757575}.el-upload:focus .el-upload-dragger{border-color:#757575}.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:#757575;font-style:normal}.el-upload-dragger:hover{border-color:#757575}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #757575}.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:#757575}.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:#757575;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:#757575}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#757575;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#757575;border-color:#757575}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#757575}.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:#757575}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#757575}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#757575}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #757575;box-shadow:0 0 3px 2px #757575}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#757575;border-color:#757575}.el-color-dropdown__link-btn{cursor:pointer;color:#757575;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#757575}.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-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;line-height:16px;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__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:#757575;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#757575;border-color:rgb(214, 214, 214);background-color:rgb(241, 241, 241)}.el-button:active{color:rgb(105, 105, 105);border-color:rgb(105, 105, 105);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:#757575;color:#757575}.el-button.is-active,.el-button.is-plain:active{color:rgb(105, 105, 105);border-color:rgb(105, 105, 105)}.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:#757575;border-color:#757575}.el-button--primary:focus,.el-button--primary:hover{background:rgb(145, 145, 145);border-color:rgb(145, 145, 145);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(105, 105, 105);border-color:rgb(105, 105, 105);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:rgb(186, 186, 186);border-color:rgb(186, 186, 186)}.el-button--primary.is-plain{color:#757575;background:rgb(241, 241, 241);border-color:rgb(200, 200, 200)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#757575;border-color:#757575;color:#fff}.el-button--primary.is-plain:active{background:rgb(105, 105, 105);border-color:rgb(105, 105, 105);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:rgb(172, 172, 172);background-color:rgb(241, 241, 241);border-color:rgb(227, 227, 227)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#757575;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(145, 145, 145);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(105, 105, 105);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#757575}.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:#757575;border-color:#757575}.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:#757575}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#757575}.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:#757575}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#757575}.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:#757575;border-color:#757575;-webkit-box-shadow:-1px 0 0 0 rgb(172, 172, 172);box-shadow:-1px 0 0 0 rgb(172, 172, 172)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#757575}.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:#757575}.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:#757575;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#757575}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/element-#9463F7/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#9463F7}.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:#9463F7}.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;margin:0 2px;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:#9463F7}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#9463F7;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#9463F7}.el-pager li.active{color:#9463F7;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;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);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:#9463F7}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(244, 239, 254);color:rgb(169, 130, 249)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #9463F7;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__title.is-active{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 #9463F7;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:rgb(244, 239, 254)}.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:#9463F7}.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:rgb(244, 239, 254)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(244, 239, 254)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#9463F7}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#9463F7}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#9463F7;background:#9463F7}.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:#9463F7}.el-radio__input.is-focus .el-radio__inner{border-color:#9463F7}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#9463F7}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #9463F7;box-shadow:0 0 2px 2px #9463F7}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#9463F7}.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:#9463F7;border-color:#9463F7;-webkit-box-shadow:-1px 0 0 0 #9463F7;box-shadow:-1px 0 0 0 #9463F7}.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){-webkit-box-shadow:0 0 2px 2px #9463F7;box-shadow:0 0 2px 2px #9463F7}.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:#9463F7}.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__input:focus~.el-switch__core{outline:#9463F7 solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#9463F7;background-color:#9463F7}.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:#9463F7;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:\"\\E611\";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:#9463F7;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#9463F7}.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);line-height:16px;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:#9463F7}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#9463F7}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#9463F7}.el-table .descending .sort-caret.descending{border-top-color:#9463F7}.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,.el-table__body tr.current-row>td,.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:rgb(244, 239, 254)}.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-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-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:rgb(244, 239, 254);color:rgb(169, 130, 249)}.el-table-filter__list-item.is-active{background-color:#9463F7;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:#9463F7}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#9463F7;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:#9463F7}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#9463F7}.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:#9463F7}.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-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}.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:#9463F7;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#9463F7}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#9463F7}.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.is-right .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:#9463F7}.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:#9463F7;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}.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-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--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:#9463F7}.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:#9463F7}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#9463F7}.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:#9463F7}.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:#9463F7}.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;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:#9463F7}.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)}.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-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:#9463F7}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#9463F7;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#9463F7;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:#9463F7}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #9463F7 inset;box-shadow:0 0 2px 2px #9463F7 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:#9463F7}.el-tabs__item:hover{color:#9463F7;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#9463F7;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:#9463F7}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#9463F7;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#9463F7}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#9463F7;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#9463F7}.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:#9463F7;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#9463F7}.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:#9463F7}.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}.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__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:#9463F7;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;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 #9463F7;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#9463F7}.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:#9463F7;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:#9463F7;stroke-linecap:round}.el-loading-spinner i{color:#9463F7}@-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:768px){.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:#9463F7;color:#9463F7}.el-upload:focus .el-upload-dragger{border-color:#9463F7}.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:#9463F7;font-style:normal}.el-upload-dragger:hover{border-color:#9463F7}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #9463F7}.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:#9463F7}.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:#9463F7;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:#9463F7}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#9463F7;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#9463F7;border-color:#9463F7}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#9463F7}.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:#9463F7}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#9463F7}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#9463F7}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #9463F7;box-shadow:0 0 3px 2px #9463F7}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#9463F7;border-color:#9463F7}.el-color-dropdown__link-btn{cursor:pointer;color:#9463F7;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#9463F7}.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-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;line-height:16px;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__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:#9463F7;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#9463F7;border-color:rgb(223, 208, 253);background-color:rgb(244, 239, 254)}.el-button:active{color:rgb(133, 89, 222);border-color:rgb(133, 89, 222);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:#9463F7;color:#9463F7}.el-button.is-active,.el-button.is-plain:active{color:rgb(133, 89, 222);border-color:rgb(133, 89, 222)}.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:#9463F7;border-color:#9463F7}.el-button--primary:focus,.el-button--primary:hover{background:rgb(169, 130, 249);border-color:rgb(169, 130, 249);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(133, 89, 222);border-color:rgb(133, 89, 222);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:rgb(202, 177, 251);border-color:rgb(202, 177, 251)}.el-button--primary.is-plain{color:#9463F7;background:rgb(244, 239, 254);border-color:rgb(212, 193, 252)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#9463F7;border-color:#9463F7;color:#fff}.el-button--primary.is-plain:active{background:rgb(133, 89, 222);border-color:rgb(133, 89, 222);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:rgb(191, 161, 250);background-color:rgb(244, 239, 254);border-color:rgb(234, 224, 253)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#9463F7;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(169, 130, 249);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(133, 89, 222);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#9463F7}.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:#9463F7;border-color:#9463F7}.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:#9463F7}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#9463F7}.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:#9463F7}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#9463F7}.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:#9463F7;border-color:#9463F7;-webkit-box-shadow:-1px 0 0 0 rgb(191, 161, 250);box-shadow:-1px 0 0 0 rgb(191, 161, 250)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#9463F7}.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:#9463F7}.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:#9463F7;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#9463F7}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/element-#997B71/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#997B71}.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:#997B71}.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;margin:0 2px;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:#997B71}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#997B71;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#997B71}.el-pager li.active{color:#997B71;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;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);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:#997B71}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(245, 242, 241);color:rgb(173, 149, 141)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #997B71;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__title.is-active{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 #997B71;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:rgb(245, 242, 241)}.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:#997B71}.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:rgb(245, 242, 241)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(245, 242, 241)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#997B71}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#997B71}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#997B71;background:#997B71}.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:#997B71}.el-radio__input.is-focus .el-radio__inner{border-color:#997B71}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#997B71}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #997B71;box-shadow:0 0 2px 2px #997B71}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#997B71}.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:#997B71;border-color:#997B71;-webkit-box-shadow:-1px 0 0 0 #997B71;box-shadow:-1px 0 0 0 #997B71}.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){-webkit-box-shadow:0 0 2px 2px #997B71;box-shadow:0 0 2px 2px #997B71}.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:#997B71}.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__input:focus~.el-switch__core{outline:#997B71 solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#997B71;background-color:#997B71}.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:#997B71;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:\"\\E611\";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:#997B71;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#997B71}.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);line-height:16px;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:#997B71}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#997B71}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#997B71}.el-table .descending .sort-caret.descending{border-top-color:#997B71}.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,.el-table__body tr.current-row>td,.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:rgb(245, 242, 241)}.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-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-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:rgb(245, 242, 241);color:rgb(173, 149, 141)}.el-table-filter__list-item.is-active{background-color:#997B71;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:#997B71}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#997B71;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:#997B71}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#997B71}.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:#997B71}.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-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}.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:#997B71;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#997B71}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#997B71}.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.is-right .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:#997B71}.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:#997B71;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}.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-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--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:#997B71}.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:#997B71}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#997B71}.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:#997B71}.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:#997B71}.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;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:#997B71}.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)}.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-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:#997B71}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#997B71;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#997B71;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:#997B71}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #997B71 inset;box-shadow:0 0 2px 2px #997B71 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:#997B71}.el-tabs__item:hover{color:#997B71;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#997B71;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:#997B71}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#997B71;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#997B71}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#997B71;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#997B71}.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:#997B71;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#997B71}.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:#997B71}.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}.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__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:#997B71;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;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 #997B71;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#997B71}.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:#997B71;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:#997B71;stroke-linecap:round}.el-loading-spinner i{color:#997B71}@-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:768px){.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:#997B71;color:#997B71}.el-upload:focus .el-upload-dragger{border-color:#997B71}.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:#997B71;font-style:normal}.el-upload-dragger:hover{border-color:#997B71}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #997B71}.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:#997B71}.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:#997B71;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:#997B71}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#997B71;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#997B71;border-color:#997B71}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#997B71}.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:#997B71}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#997B71}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#997B71}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #997B71;box-shadow:0 0 3px 2px #997B71}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#997B71;border-color:#997B71}.el-color-dropdown__link-btn{cursor:pointer;color:#997B71;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#997B71}.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-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;line-height:16px;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__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:#997B71;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#997B71;border-color:rgb(224, 215, 212);background-color:rgb(245, 242, 241)}.el-button:active{color:rgb(138, 111, 102);border-color:rgb(138, 111, 102);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:#997B71;color:#997B71}.el-button.is-active,.el-button.is-plain:active{color:rgb(138, 111, 102);border-color:rgb(138, 111, 102)}.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:#997B71;border-color:#997B71}.el-button--primary:focus,.el-button--primary:hover{background:rgb(173, 149, 141);border-color:rgb(173, 149, 141);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(138, 111, 102);border-color:rgb(138, 111, 102);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:rgb(204, 189, 184);border-color:rgb(204, 189, 184)}.el-button--primary.is-plain{color:#997B71;background:rgb(245, 242, 241);border-color:rgb(214, 202, 198)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#997B71;border-color:#997B71;color:#fff}.el-button--primary.is-plain:active{background:rgb(138, 111, 102);border-color:rgb(138, 111, 102);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:rgb(194, 176, 170);background-color:rgb(245, 242, 241);border-color:rgb(235, 229, 227)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#997B71;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(173, 149, 141);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(138, 111, 102);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#997B71}.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:#997B71;border-color:#997B71}.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:#997B71}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#997B71}.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:#997B71}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#997B71}.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:#997B71;border-color:#997B71;-webkit-box-shadow:-1px 0 0 0 rgb(194, 176, 170);box-shadow:-1px 0 0 0 rgb(194, 176, 170)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#997B71}.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:#997B71}.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:#997B71;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#997B71}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/element-#EB6709/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#EB6709}.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:#EB6709}.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;margin:0 2px;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:#EB6709}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#EB6709;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#EB6709}.el-pager li.active{color:#EB6709;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;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);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:#EB6709}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(253, 240, 230);color:rgb(239, 133, 58)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #EB6709;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__title.is-active{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 #EB6709;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:rgb(253, 240, 230)}.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:#EB6709}.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:rgb(253, 240, 230)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(253, 240, 230)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#EB6709}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#EB6709}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#EB6709;background:#EB6709}.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:#EB6709}.el-radio__input.is-focus .el-radio__inner{border-color:#EB6709}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#EB6709}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #EB6709;box-shadow:0 0 2px 2px #EB6709}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#EB6709}.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:#EB6709;border-color:#EB6709;-webkit-box-shadow:-1px 0 0 0 #EB6709;box-shadow:-1px 0 0 0 #EB6709}.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){-webkit-box-shadow:0 0 2px 2px #EB6709;box-shadow:0 0 2px 2px #EB6709}.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:#EB6709}.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__input:focus~.el-switch__core{outline:#EB6709 solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#EB6709;background-color:#EB6709}.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:#EB6709;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:\"\\E611\";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:#EB6709;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#EB6709}.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);line-height:16px;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:#EB6709}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#EB6709}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#EB6709}.el-table .descending .sort-caret.descending{border-top-color:#EB6709}.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,.el-table__body tr.current-row>td,.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:rgb(253, 240, 230)}.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-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-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:rgb(253, 240, 230);color:rgb(239, 133, 58)}.el-table-filter__list-item.is-active{background-color:#EB6709;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:#EB6709}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#EB6709;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:#EB6709}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#EB6709}.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:#EB6709}.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-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}.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:#EB6709;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#EB6709}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#EB6709}.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.is-right .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:#EB6709}.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:#EB6709;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}.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-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--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:#EB6709}.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:#EB6709}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#EB6709}.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:#EB6709}.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:#EB6709}.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;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:#EB6709}.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)}.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-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:#EB6709}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#EB6709;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#EB6709;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:#EB6709}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #EB6709 inset;box-shadow:0 0 2px 2px #EB6709 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:#EB6709}.el-tabs__item:hover{color:#EB6709;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#EB6709;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:#EB6709}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#EB6709;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#EB6709}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#EB6709;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#EB6709}.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:#EB6709;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#EB6709}.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:#EB6709}.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}.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__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:#EB6709;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;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 #EB6709;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#EB6709}.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:#EB6709;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:#EB6709;stroke-linecap:round}.el-loading-spinner i{color:#EB6709}@-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:768px){.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:#EB6709;color:#EB6709}.el-upload:focus .el-upload-dragger{border-color:#EB6709}.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:#EB6709;font-style:normal}.el-upload-dragger:hover{border-color:#EB6709}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #EB6709}.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:#EB6709}.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:#EB6709;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:#EB6709}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#EB6709;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#EB6709;border-color:#EB6709}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#EB6709}.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:#EB6709}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#EB6709}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#EB6709}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #EB6709;box-shadow:0 0 3px 2px #EB6709}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#EB6709;border-color:#EB6709}.el-color-dropdown__link-btn{cursor:pointer;color:#EB6709;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#EB6709}.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-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;line-height:16px;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__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:#EB6709;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#EB6709;border-color:rgb(249, 209, 181);background-color:rgb(253, 240, 230)}.el-button:active{color:rgb(212, 93, 8);border-color:rgb(212, 93, 8);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:#EB6709;color:#EB6709}.el-button.is-active,.el-button.is-plain:active{color:rgb(212, 93, 8);border-color:rgb(212, 93, 8)}.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:#EB6709;border-color:#EB6709}.el-button--primary:focus,.el-button--primary:hover{background:rgb(239, 133, 58);border-color:rgb(239, 133, 58);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(212, 93, 8);border-color:rgb(212, 93, 8);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:rgb(245, 179, 132);border-color:rgb(245, 179, 132)}.el-button--primary.is-plain{color:#EB6709;background:rgb(253, 240, 230);border-color:rgb(247, 194, 157)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#EB6709;border-color:#EB6709;color:#fff}.el-button--primary.is-plain:active{background:rgb(212, 93, 8);border-color:rgb(212, 93, 8);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:rgb(243, 164, 107);background-color:rgb(253, 240, 230);border-color:rgb(251, 225, 206)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#EB6709;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(239, 133, 58);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(212, 93, 8);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#EB6709}.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:#EB6709;border-color:#EB6709}.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:#EB6709}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#EB6709}.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:#EB6709}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#EB6709}.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:#EB6709;border-color:#EB6709;-webkit-box-shadow:-1px 0 0 0 rgb(243, 164, 107);box-shadow:-1px 0 0 0 rgb(243, 164, 107)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#EB6709}.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:#EB6709}.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:#EB6709;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#EB6709}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/element-#F74584/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#F74584}.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:#F74584}.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;margin:0 2px;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:#F74584}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#F74584;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#F74584}.el-pager li.active{color:#F74584;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;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);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:#F74584}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(254, 236, 243);color:rgb(249, 106, 157)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #F74584;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__title.is-active{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 #F74584;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:rgb(254, 236, 243)}.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:#F74584}.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:rgb(254, 236, 243)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(254, 236, 243)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#F74584}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#F74584}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#F74584;background:#F74584}.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:#F74584}.el-radio__input.is-focus .el-radio__inner{border-color:#F74584}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#F74584}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #F74584;box-shadow:0 0 2px 2px #F74584}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#F74584}.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:#F74584;border-color:#F74584;-webkit-box-shadow:-1px 0 0 0 #F74584;box-shadow:-1px 0 0 0 #F74584}.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){-webkit-box-shadow:0 0 2px 2px #F74584;box-shadow:0 0 2px 2px #F74584}.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:#F74584}.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__input:focus~.el-switch__core{outline:#F74584 solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#F74584;background-color:#F74584}.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:#F74584;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:\"\\E611\";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:#F74584;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#F74584}.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);line-height:16px;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:#F74584}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#F74584}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#F74584}.el-table .descending .sort-caret.descending{border-top-color:#F74584}.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,.el-table__body tr.current-row>td,.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:rgb(254, 236, 243)}.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-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-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:rgb(254, 236, 243);color:rgb(249, 106, 157)}.el-table-filter__list-item.is-active{background-color:#F74584;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:#F74584}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#F74584;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:#F74584}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#F74584}.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:#F74584}.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-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}.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:#F74584;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#F74584}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#F74584}.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.is-right .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:#F74584}.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:#F74584;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}.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-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--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:#F74584}.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:#F74584}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#F74584}.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:#F74584}.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:#F74584}.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;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:#F74584}.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)}.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-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:#F74584}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#F74584;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#F74584;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:#F74584}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #F74584 inset;box-shadow:0 0 2px 2px #F74584 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:#F74584}.el-tabs__item:hover{color:#F74584;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#F74584;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:#F74584}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#F74584;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#F74584}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#F74584;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#F74584}.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:#F74584;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#F74584}.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:#F74584}.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}.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__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:#F74584;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;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 #F74584;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#F74584}.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:#F74584;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:#F74584;stroke-linecap:round}.el-loading-spinner i{color:#F74584}@-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:768px){.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:#F74584;color:#F74584}.el-upload:focus .el-upload-dragger{border-color:#F74584}.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:#F74584;font-style:normal}.el-upload-dragger:hover{border-color:#F74584}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #F74584}.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:#F74584}.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:#F74584;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:#F74584}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#F74584;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#F74584;border-color:#F74584}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#F74584}.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:#F74584}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#F74584}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#F74584}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #F74584;box-shadow:0 0 3px 2px #F74584}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#F74584;border-color:#F74584}.el-color-dropdown__link-btn{cursor:pointer;color:#F74584;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#F74584}.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-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;line-height:16px;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__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:#F74584;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#F74584;border-color:rgb(253, 199, 218);background-color:rgb(254, 236, 243)}.el-button:active{color:rgb(222, 62, 119);border-color:rgb(222, 62, 119);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:#F74584;color:#F74584}.el-button.is-active,.el-button.is-plain:active{color:rgb(222, 62, 119);border-color:rgb(222, 62, 119)}.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:#F74584;border-color:#F74584}.el-button--primary:focus,.el-button--primary:hover{background:rgb(249, 106, 157);border-color:rgb(249, 106, 157);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(222, 62, 119);border-color:rgb(222, 62, 119);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:rgb(251, 162, 194);border-color:rgb(251, 162, 194)}.el-button--primary.is-plain{color:#F74584;background:rgb(254, 236, 243);border-color:rgb(252, 181, 206)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#F74584;border-color:#F74584;color:#fff}.el-button--primary.is-plain:active{background:rgb(222, 62, 119);border-color:rgb(222, 62, 119);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:rgb(250, 143, 181);background-color:rgb(254, 236, 243);border-color:rgb(253, 218, 230)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#F74584;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(249, 106, 157);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(222, 62, 119);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#F74584}.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:#F74584;border-color:#F74584}.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:#F74584}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#F74584}.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:#F74584}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#F74584}.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:#F74584;border-color:#F74584;-webkit-box-shadow:-1px 0 0 0 rgb(250, 143, 181);box-shadow:-1px 0 0 0 rgb(250, 143, 181)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#F74584}.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:#F74584}.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:#F74584;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#F74584}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/element-#FCB900/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#FCB900}.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:#FCB900}.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;margin:0 2px;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:#FCB900}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#FCB900;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#FCB900}.el-pager li.active{color:#FCB900;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;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);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:#FCB900}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(255, 248, 230);color:rgb(253, 199, 51)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #FCB900;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__title.is-active{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 #FCB900;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:rgb(255, 248, 230)}.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:#FCB900}.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:rgb(255, 248, 230)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(255, 248, 230)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#FCB900}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#FCB900}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#FCB900;background:#FCB900}.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:#FCB900}.el-radio__input.is-focus .el-radio__inner{border-color:#FCB900}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#FCB900}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #FCB900;box-shadow:0 0 2px 2px #FCB900}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#FCB900}.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:#FCB900;border-color:#FCB900;-webkit-box-shadow:-1px 0 0 0 #FCB900;box-shadow:-1px 0 0 0 #FCB900}.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){-webkit-box-shadow:0 0 2px 2px #FCB900;box-shadow:0 0 2px 2px #FCB900}.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:#FCB900}.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__input:focus~.el-switch__core{outline:#FCB900 solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#FCB900;background-color:#FCB900}.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:#FCB900;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:\"\\E611\";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:#FCB900;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#FCB900}.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);line-height:16px;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:#FCB900}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#FCB900}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#FCB900}.el-table .descending .sort-caret.descending{border-top-color:#FCB900}.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,.el-table__body tr.current-row>td,.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:rgb(255, 248, 230)}.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-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-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:rgb(255, 248, 230);color:rgb(253, 199, 51)}.el-table-filter__list-item.is-active{background-color:#FCB900;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:#FCB900}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#FCB900;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:#FCB900}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#FCB900}.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:#FCB900}.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-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}.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:#FCB900;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#FCB900}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#FCB900}.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.is-right .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:#FCB900}.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:#FCB900;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}.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-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--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:#FCB900}.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:#FCB900}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#FCB900}.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:#FCB900}.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:#FCB900}.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;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:#FCB900}.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)}.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-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:#FCB900}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#FCB900;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#FCB900;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:#FCB900}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #FCB900 inset;box-shadow:0 0 2px 2px #FCB900 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:#FCB900}.el-tabs__item:hover{color:#FCB900;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#FCB900;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:#FCB900}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#FCB900;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#FCB900}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#FCB900;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#FCB900}.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:#FCB900;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#FCB900}.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:#FCB900}.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}.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__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:#FCB900;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;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 #FCB900;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#FCB900}.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:#FCB900;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:#FCB900;stroke-linecap:round}.el-loading-spinner i{color:#FCB900}@-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:768px){.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:#FCB900;color:#FCB900}.el-upload:focus .el-upload-dragger{border-color:#FCB900}.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:#FCB900;font-style:normal}.el-upload-dragger:hover{border-color:#FCB900}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #FCB900}.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:#FCB900}.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:#FCB900;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:#FCB900}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#FCB900;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#FCB900;border-color:#FCB900}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#FCB900}.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:#FCB900}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#FCB900}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#FCB900}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #FCB900;box-shadow:0 0 3px 2px #FCB900}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#FCB900;border-color:#FCB900}.el-color-dropdown__link-btn{cursor:pointer;color:#FCB900;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#FCB900}.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-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;line-height:16px;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__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:#FCB900;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#FCB900;border-color:rgb(254, 234, 179);background-color:rgb(255, 248, 230)}.el-button:active{color:rgb(227, 167, 0);border-color:rgb(227, 167, 0);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:#FCB900;color:#FCB900}.el-button.is-active,.el-button.is-plain:active{color:rgb(227, 167, 0);border-color:rgb(227, 167, 0)}.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:#FCB900;border-color:#FCB900}.el-button--primary:focus,.el-button--primary:hover{background:rgb(253, 199, 51);border-color:rgb(253, 199, 51);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(227, 167, 0);border-color:rgb(227, 167, 0);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:rgb(254, 220, 128);border-color:rgb(254, 220, 128)}.el-button--primary.is-plain{color:#FCB900;background:rgb(255, 248, 230);border-color:rgb(254, 227, 153)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#FCB900;border-color:#FCB900;color:#fff}.el-button--primary.is-plain:active{background:rgb(227, 167, 0);border-color:rgb(227, 167, 0);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:rgb(253, 213, 102);background-color:rgb(255, 248, 230);border-color:rgb(254, 241, 204)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#FCB900;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(253, 199, 51);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(227, 167, 0);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#FCB900}.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:#FCB900;border-color:#FCB900}.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:#FCB900}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#FCB900}.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:#FCB900}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#FCB900}.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:#FCB900;border-color:#FCB900;-webkit-box-shadow:-1px 0 0 0 rgb(253, 213, 102);box-shadow:-1px 0 0 0 rgb(253, 213, 102)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#FCB900}.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:#FCB900}.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:#FCB900;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#FCB900}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/element-#FF4C52/index.css",
    "content": "@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}@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-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-info:before{content:\"\\e61a\"}.el-icon-error:before{content:\"\\e62c\"}.el-icon-success:before{content:\"\\e62d\"}.el-icon-warning:before{content:\"\\e62e\"}.el-icon-question:before{content:\"\\e634\"}.el-icon-back:before{content:\"\\e606\"}.el-icon-arrow-left:before{content:\"\\e600\"}.el-icon-arrow-down:before{content:\"\\e603\"}.el-icon-arrow-right:before{content:\"\\e604\"}.el-icon-arrow-up:before{content:\"\\e605\"}.el-icon-caret-left:before{content:\"\\e60a\"}.el-icon-caret-bottom:before{content:\"\\e60b\"}.el-icon-caret-top:before{content:\"\\e60c\"}.el-icon-caret-right:before{content:\"\\e60e\"}.el-icon-d-arrow-left:before{content:\"\\e610\"}.el-icon-d-arrow-right:before{content:\"\\e613\"}.el-icon-minus:before{content:\"\\e621\"}.el-icon-plus:before{content:\"\\e62b\"}.el-icon-remove:before{content:\"\\e635\"}.el-icon-circle-plus:before{content:\"\\e601\"}.el-icon-remove-outline:before{content:\"\\e63c\"}.el-icon-circle-plus-outline:before{content:\"\\e602\"}.el-icon-close:before{content:\"\\e60f\"}.el-icon-check:before{content:\"\\e611\"}.el-icon-circle-close:before{content:\"\\e607\"}.el-icon-circle-check:before{content:\"\\e639\"}.el-icon-circle-close-outline:before{content:\"\\e609\"}.el-icon-circle-check-outline:before{content:\"\\e63e\"}.el-icon-zoom-out:before{content:\"\\e645\"}.el-icon-zoom-in:before{content:\"\\e641\"}.el-icon-d-caret:before{content:\"\\e615\"}.el-icon-sort:before{content:\"\\e640\"}.el-icon-sort-down:before{content:\"\\e630\"}.el-icon-sort-up:before{content:\"\\e631\"}.el-icon-tickets:before{content:\"\\e63f\"}.el-icon-document:before{content:\"\\e614\"}.el-icon-goods:before{content:\"\\e618\"}.el-icon-sold-out:before{content:\"\\e63b\"}.el-icon-news:before{content:\"\\e625\"}.el-icon-message:before{content:\"\\e61b\"}.el-icon-date:before{content:\"\\e608\"}.el-icon-printer:before{content:\"\\e62f\"}.el-icon-time:before{content:\"\\e642\"}.el-icon-bell:before{content:\"\\e622\"}.el-icon-mobile-phone:before{content:\"\\e624\"}.el-icon-service:before{content:\"\\e63a\"}.el-icon-view:before{content:\"\\e643\"}.el-icon-menu:before{content:\"\\e620\"}.el-icon-more:before{content:\"\\e646\"}.el-icon-more-outline:before{content:\"\\e626\"}.el-icon-star-on:before{content:\"\\e637\"}.el-icon-star-off:before{content:\"\\e63d\"}.el-icon-location:before{content:\"\\e61d\"}.el-icon-location-outline:before{content:\"\\e61f\"}.el-icon-phone:before{content:\"\\e627\"}.el-icon-phone-outline:before{content:\"\\e628\"}.el-icon-picture:before{content:\"\\e629\"}.el-icon-picture-outline:before{content:\"\\e62a\"}.el-icon-delete:before{content:\"\\e612\"}.el-icon-search:before{content:\"\\e619\"}.el-icon-edit:before{content:\"\\e61c\"}.el-icon-edit-outline:before{content:\"\\e616\"}.el-icon-rank:before{content:\"\\e632\"}.el-icon-refresh:before{content:\"\\e633\"}.el-icon-share:before{content:\"\\e636\"}.el-icon-setting:before{content:\"\\e638\"}.el-icon-upload:before{content:\"\\e60d\"}.el-icon-upload2:before{content:\"\\e644\"}.el-icon-download:before{content:\"\\e617\"}.el-icon-loading:before{content:\"\\e61e\"}.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-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.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;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#FF4C52}.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:#FF4C52}.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;margin:0 2px;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:#FF4C52}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#FF4C52;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,.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-radio,.el-table th{-webkit-user-select:none}.el-date-table,.el-radio,.el-table th{-moz-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-dialog,.el-dialog__footer{-webkit-box-sizing:border-box}.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:#FF4C52}.el-pager li.active{color:#FF4C52;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;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);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:#FF4C52}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;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}.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;overflow:auto;background-color:#fff;border:1px solid #e4e7ed;border-radius:4px}.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: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 .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.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:rgb(255, 237, 238);color:rgb(255, 112, 117)}.el-dropdown-menu__item--divided:before,.el-menu,.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-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}.el-menu::after,.el-menu::before,.el-radio__inner::after,.el-switch__core:after{content:\"\"}.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}.el-menu::after,.el-menu::before{display:table}.el-menu::after{clear:both}.el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.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 #FF4C52;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__title.is-active{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 #FF4C52;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:rgb(255, 237, 238)}.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:#FF4C52}.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:rgb(255, 237, 238)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(255, 237, 238)}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-submenu.is-active .el-submenu__title{border-bottom-color:#FF4C52}.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,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline: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:#FF4C52}.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+.el-radio{margin-left:30px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;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:#FF4C52;background:#FF4C52}.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:#FF4C52}.el-radio__input.is-focus .el-radio__inner{border-color:#FF4C52}.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-button__inner,.el-switch__core{-webkit-box-sizing:border-box;vertical-align:middle}.el-radio__inner:hover{border-color:#FF4C52}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #FF4C52;box-shadow:0 0 2px 2px #FF4C52}.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__inner{line-height:1;white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;margin:0;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:#FF4C52}.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:#FF4C52;border-color:#FF4C52;-webkit-box-shadow:-1px 0 0 0 #FF4C52;box-shadow:-1px 0 0 0 #FF4C52}.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){-webkit-box-shadow:0 0 2px 2px #FF4C52;box-shadow:0 0 2px 2px #FF4C52}.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:#FF4C52}.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__input:focus~.el-switch__core{outline:#FF4C52 solid 1px}.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}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{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:#FF4C52;background-color:#FF4C52}.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:#FF4C52;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:\"\\E611\";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:#FF4C52;font-weight:700}.el-select-dropdown__item span{line-height:34px!important}.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: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:#FF4C52}.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);line-height:16px;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:#FF4C52}.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{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-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--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}.el-table th div,.el-table th>.cell{-webkit-box-sizing:border-box;display:inline-block}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-left,.el-table th.is-left{text-align:left}.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:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.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{white-space:nowrap;overflow:hidden;user-select:none;text-align:left}.el-table th div{line-height:40px;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#FF4C52}.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;white-space:normal;word-break:break-all;line-height:23px}.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:#FF4C52}.el-table .descending .sort-caret.descending{border-top-color:#FF4C52}.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,.el-table__body tr.current-row>td,.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:rgb(255, 237, 238)}.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-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-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:rgb(255, 237, 238);color:rgb(255, 112, 117)}.el-table-filter__list-item.is-active{background-color:#FF4C52;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:#FF4C52}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;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;user-select:none}.el-slider__button-wrapper,.el-time-panel{-ms-user-select:none;-moz-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;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-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.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:#FF4C52;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:#FF4C52}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#FF4C52}.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:#FF4C52}.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-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}.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:#FF4C52;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:20px 3px;cursor:pointer}.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{color:#606266;margin:0 auto}.el-month-table td .cell:hover,.el-month-table td.current:not(.disabled) .cell{color:#FF4C52}.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.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#FF4C52}.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.is-right .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:#FF4C52}.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:#FF4C52;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}.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-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--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:#FF4C52}.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:#FF4C52}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#FF4C52}.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:#FF4C52}.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:#FF4C52}.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;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:#FF4C52}.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)}.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-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:#FF4C52}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.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:#FF4C52;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-item__content .el-input-group,.el-form-item__label,.el-tag .el-icon-close{vertical-align:middle}.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{text-align:right;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__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 .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.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.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:#FF4C52;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:#FF4C52}.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;-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__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-alert,.el-tag{-webkit-box-sizing:border-box}.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 #FF4C52 inset;box-shadow:0 0 2px 2px #FF4C52 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:#FF4C52}.el-tabs__item:hover{color:#FF4C52;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}.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:-1px -1px 0;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#FF4C52;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:#FF4C52}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.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__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .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.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,.el-tabs--right .el-tabs__nav{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__nav-next,.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-next,.el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-next,.el-tabs--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__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}.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-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.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}.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:rgba(64,158,255,.1);padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#FF4C52;border-radius:4px;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.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;top:-1px;right:-5px;color:#FF4C52}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#FF4C52;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.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-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:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#FF4C52}.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:#FF4C52;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>.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:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;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-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.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;color:#c0c4cc;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}.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:#FF4C52}.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:#FF4C52}.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}.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__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:#FF4C52;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;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 #FF4C52;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-button,.el-checkbox,.el-step__icon-inner{-webkit-user-select:none;-moz-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.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:#FF4C52}.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:#FF4C52;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:#FF4C52;stroke-linecap:round}.el-loading-spinner i{color:#FF4C52}@-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:768px){.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:#FF4C52;color:#FF4C52}.el-upload:focus .el-upload-dragger{border-color:#FF4C52}.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:#FF4C52;font-style:normal}.el-upload-dragger:hover{border-color:#FF4C52}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #FF4C52}.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:#FF4C52}.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:#FF4C52;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:#FF4C52}.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}.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{display:inline-block}.el-progress--circle .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{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-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:#FF4C52;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.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,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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-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:#FF4C52;border-color:#FF4C52}.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;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox{-ms-user-select:none;font-weight:500}.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:#FF4C52}.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:#FF4C52}.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{overflow-x:hidden;position:relative}.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;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.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{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.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::-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-carousel__mask,.el-cascader-menu,.el-cascader-menu__item.is-disabled:hover,.el-collapse-item__header,.el-collapse-item__wrap{background-color:#fff}.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-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.el-scrollbar__bar.is-horizontal>div{height:100%}.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%;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;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-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;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:#FF4C52}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;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-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-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{-webkit-transition:none;transition:none}.el-cascader .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-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-cascader .el-icon-circle-close:hover{color:#909399}.el-cascader__clearIcon{z-index:2;position:relative}.el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#606266;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.el-cascader__label span{color:#000}.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-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;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-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;outline:0}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\"\\e604\";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.el-cascader-menu__item.is-disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-active{color:#FF4C52}.el-cascader-menu__item:focus:not(:active),.el-cascader-menu__item:hover{background-color:#f5f7fa}.el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.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 #FF4C52;box-shadow:0 0 3px 2px #FF4C52}.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(transparent));background:linear-gradient(to top,#000,transparent)}.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:#FF4C52;border-color:#FF4C52}.el-color-dropdown__link-btn{cursor:pointer;color:#FF4C52;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,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{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:#FF4C52}.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-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;line-height:16px;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__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:#FF4C52;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-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}.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-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;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#FF4C52;border-color:rgb(255, 201, 203);background-color:rgb(255, 237, 238)}.el-button:active{color:rgb(230, 68, 74);border-color:rgb(230, 68, 74);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:#FF4C52;color:#FF4C52}.el-button.is-active,.el-button.is-plain:active{color:rgb(230, 68, 74);border-color:rgb(230, 68, 74)}.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:#FF4C52;border-color:#FF4C52}.el-button--primary:focus,.el-button--primary:hover{background:rgb(255, 112, 117);border-color:rgb(255, 112, 117);color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:rgb(230, 68, 74);border-color:rgb(230, 68, 74);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:rgb(255, 166, 169);border-color:rgb(255, 166, 169)}.el-button--primary.is-plain{color:#FF4C52;background:rgb(255, 237, 238);border-color:rgb(255, 183, 186)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#FF4C52;border-color:#FF4C52;color:#fff}.el-button--primary.is-plain:active{background:rgb(230, 68, 74);border-color:rgb(230, 68, 74);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:rgb(255, 148, 151);background-color:rgb(255, 237, 238);border-color:rgb(255, 219, 220)}.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--small,.el-button--small.is-round{padding:9px 15px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--text{color:#FF4C52;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(255, 112, 117);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(230, 68, 74);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.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: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: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-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-size:14px;cursor:pointer;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:#FF4C52}.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:#FF4C52;border-color:#FF4C52}.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:#FF4C52}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#FF4C52}.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:#FF4C52}.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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-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{position:relative;display:inline-block}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox+.el-checkbox{margin-left:30px}.el-checkbox-button__inner{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;-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:#FF4C52}.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:#FF4C52;border-color:#FF4C52;-webkit-box-shadow:-1px 0 0 0 rgb(255, 148, 151);box-shadow:-1px 0 0 0 rgb(255, 148, 151)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#FF4C52}.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:#FF4C52}.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:#FF4C52;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}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#FF4C52}.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-container,.el-header{-webkit-box-sizing:border-box}.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;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;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside,.el-main{overflow:auto;-webkit-box-sizing:border-box}.el-aside{box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;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}"
  },
  {
    "path": "src/element-ui-theme/index.js",
    "content": "/**\n * element-ui组件主题\n *\n * tips:\n *  1. 此处只包含element-ui组件主题\n *  2. 要达到整站主题修改效果, 请确保[import './element-[#17B3A3]/index.css']当前主题色与[/src/assets/scss/_variables.scss]文件中[$--color-primary]属性值一致\n */\nimport './element-#17B3A3/index.css' // 当前主题色\nexport default {\n  list: [\n    '#0BB2D4', // 青色\n    '#3E8EF7', // 蓝色\n    '#11C26D', // 绿色\n    '#17B3A3', // 蓝绿色\n    '#667AFA', // 靛青色\n    '#997B71', // 棕色\n    '#9463F7', // 紫色\n    '#757575', // 灰色\n    '#EB6709', // 橙色\n    '#F74584', // 粉红色\n    '#FCB900', // 黄色\n    '#FF4C52'  // 红色\n  ]\n}\n"
  },
  {
    "path": "src/icons/iconfont.js",
    "content": ""
  },
  {
    "path": "src/icons/index.js",
    "content": "/**\n * 字体图标, 统一使用SVG Sprite矢量图标(http://www.iconfont.cn/）\n *\n * 使用:\n *  1. 在阿里矢量图标站创建一个项目, 并添加图标(这一步非必须, 创建方便项目图标管理)\n *  2-1. 添加icon, 选中新增的icon图标, 复制代码 -> 下载 -> SVG下载 -> 粘贴代码(重命名)\n *  2-2. 添加icons, 下载图标库对应[iconfont.js]文件, 替换项目[./iconfont.js]文件\n *  3. 组件模版中使用 [<icon-svg name=\"canyin\"></icon-svg>]\n *\n * 注意:\n *  1. 通过2-2 添加icons, getNameList方法无法返回对应数据\n */\nimport Vue from 'vue'\nimport IconSvg from '@/components/icon-svg'\nimport './iconfont.js'\n\nVue.component('IconSvg', IconSvg)\n\nconst svgFiles = require.context('./svg', true, /\\.svg$/)\nconst iconList = svgFiles.keys().map(item => svgFiles(item))\n\nexport default {\n  // 获取图标icon-(*).svg名称列表, 例如[shouye, xitong, zhedie, ...]\n  getNameList () {\n    return iconList.map(item => item.default.id.replace('icon-', ''))\n  }\n}\n"
  },
  {
    "path": "src/main.js",
    "content": "import Vue from 'vue'\nimport App from '@/App'\nimport router from '@/router'                 // api: https://github.com/vuejs/vue-router\nimport store from '@/store'                   // api: https://github.com/vuejs/vuex\nimport VueCookie from 'vue-cookie'            // api: https://github.com/alfhen/vue-cookie\nimport '@/element-ui'                         // api: https://github.com/ElemeFE/element\nimport '@/icons'                              // api: http://www.iconfont.cn/\nimport '@/element-ui-theme'\nimport '@/assets/scss/index.scss'\nimport httpRequest from '@/utils/httpRequest' // api: https://github.com/axios/axios\nimport { isAuth } from '@/utils'\nimport cloneDeep from 'lodash/cloneDeep'\n\nVue.use(VueCookie)\nVue.config.productionTip = false\n\n// 非生产环境, 适配mockjs模拟数据                 // api: https://github.com/nuysoft/Mock\nif (process.env.NODE_ENV !== 'production') {\n  require('@/mock')\n}\n\n// 挂载全局\nVue.prototype.$http = httpRequest // ajax请求方法\nVue.prototype.isAuth = isAuth     // 权限方法\n\n// 保存整站vuex本地储存初始状态\nwindow.SITE_CONFIG['storeState'] = cloneDeep(store.state)\n\n/* eslint-disable no-new */\nnew Vue({\n  el: '#app',\n  router,\n  store,\n  template: '<App/>',\n  components: { App }\n})\n"
  },
  {
    "path": "src/mock/index.js",
    "content": "import Mock from 'mockjs'\nimport * as common from './modules/common'\nimport * as jobSchedule from './modules/job-schedule'\nimport * as oss from './modules/oss'\nimport * as sysConfig from './modules/sys-config'\nimport * as sysLog from './modules/sys-log'\nimport * as sysMenu from './modules/sys-menu'\nimport * as sysRole from './modules/sys-role'\nimport * as sysUser from './modules/sys-user'\n\n// tips\n// 1. 开启/关闭[业务模块]拦截, 通过调用fnCreate方法[isOpen参数]设置.\n// 2. 开启/关闭[业务模块中某个请求]拦截, 通过函数返回对象中的[isOpen属性]设置.\nfnCreate(common, false)\nfnCreate(jobSchedule, false)\nfnCreate(oss, false)\nfnCreate(sysConfig, false)\nfnCreate(sysLog, false)\nfnCreate(sysMenu, false)\nfnCreate(sysRole, false)\nfnCreate(sysUser, false)\n\n/**\n * 创建mock模拟数据\n * @param {*} mod 模块\n * @param {*} isOpen 是否开启?\n */\nfunction fnCreate (mod, isOpen = true) {\n  if (isOpen) {\n    for (var key in mod) {\n      ((res) => {\n        if (res.isOpen !== false) {\n          Mock.mock(new RegExp(res.url), res.type, (opts) => {\n            opts['data'] = opts.body ? JSON.parse(opts.body) : null\n            delete opts.body\n            console.log('\\n')\n            console.log('%cmock拦截, 请求: ', 'color:blue', opts)\n            console.log('%cmock拦截, 响应: ', 'color:blue', res.data)\n            return res.data\n          })\n        }\n      })(mod[key]() || {})\n    }\n  }\n}\n"
  },
  {
    "path": "src/mock/modules/common.js",
    "content": "import Mock from 'mockjs'\n\n// 登录\nexport function login () {\n  return {\n    // isOpen: false,\n    url: '/sys/login',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'expire': Mock.Random.natural(60 * 60 * 1, 60 * 60 * 12),\n      'token': Mock.Random.string('abcdefghijklmnopqrstuvwxyz0123456789', 32)\n    }\n  }\n}\n\n// 退出\nexport function logout () {\n  return {\n    // isOpen: false,\n    url: '/sys/logout',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n"
  },
  {
    "path": "src/mock/modules/job-schedule.js",
    "content": "import Mock from 'mockjs'\n\n// 生成数据列表\nvar dataList = []\nfor (let i = 0; i < Math.floor(Math.random() * 10 + 1); i++) {\n  let name = Mock.Random.name()\n  dataList.push(Mock.mock({\n    'jobId': '@increment',\n    'beanName': name,\n    'methodName': name,\n    'params': '-',\n    'cronExpression': '0 0/30 * * * ?',\n    'status': 1,\n    'remark': '@csentence',\n    'createTime': '@datetime'\n  }))\n}\n\n// 获取定时任务列表\nexport function list () {\n  return {\n    // isOpen: false,\n    url: '/sys/schedule/list',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'page': {\n        'totalCount': dataList.length,\n        'pageSize': 10,\n        'totalPage': 1,\n        'currPage': 1,\n        'list': dataList\n      }\n    }\n  }\n}\n\n// 获取定时任务信息\nexport function info () {\n  return {\n    // isOpen: false,\n    url: '/sys/schedule/info',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'user': dataList[0]\n    }\n  }\n}\n\n// 添加定时任务\nexport function add () {\n  return {\n    // isOpen: false,\n    url: '/sys/schedule/save',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 修改定时任务\nexport function update () {\n  return {\n    // isOpen: false,\n    url: '/sys/schedule/update',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 删除定时任务\nexport function del () {\n  return {\n    // isOpen: false,\n    url: '/sys/schedule/delete',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 运行定时任务\nexport function run () {\n  return {\n    // isOpen: false,\n    url: '/sys/schedule/run',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 暂停定时任务\nexport function pause () {\n  return {\n    // isOpen: false,\n    url: '/sys/schedule/pause',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 恢复定时任务\nexport function resume () {\n  return {\n    // isOpen: false,\n    url: '/sys/schedule/resume',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n"
  },
  {
    "path": "src/mock/modules/oss.js",
    "content": "import Mock from 'mockjs'\n\n// 生成数据列表\nvar dataList = []\nfor (let i = 0; i < Math.floor(Math.random() * 10 + 1); i++) {\n  dataList.push(Mock.mock({\n    'id': '@increment',\n    'url': 'http://oapk0ekso.bkt.clouddn.com/upload/@date(\"yyyyMMdd\")/@guid().png',\n    'createDate': '@datetime'\n  }))\n}\n\n// 获取文件列表\nexport function list () {\n  return {\n    // isOpen: false,\n    url: '/sys/oss/list',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'page': {\n        'totalCount': dataList.length,\n        'pageSize': 10,\n        'totalPage': 1,\n        'currPage': 1,\n        'list': dataList\n      }\n    }\n  }\n}\n\n// 获取云存储配置信息\nexport function config () {\n  return {\n    // isOpen: false,\n    url: '/sys/oss/config',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'config': {\n        'type': 1,\n        'qiniuDomain': 'http:// oapk0ekso.bkt.clouddn.com',\n        'qiniuPrefix': 'upload',\n        'qiniuAccessKey': '2fIEkyYuNXatF4HIXlMbUY6dA-rDQpuADPxtnAHZ',\n        'qiniuSecretKey': 'G4F9gqYRJd5K56pDGaWQrGIzV8me4rT7mQQUKfmk',\n        'qiniuBucketName': 'xiaolu-vido',\n        'aliyunDomain': '',\n        'aliyunPrefix': '',\n        'aliyunEndPoint': '',\n        'aliyunAccessKeyId': '',\n        'aliyunAccessKeySecret': '',\n        'aliyunBucketName': '',\n        'qcloudDomain': '',\n        'qcloudPrefix': '',\n        'qcloudAppId': null,\n        'qcloudSecretId': '',\n        'qcloudSecretKey': '',\n        'qcloudBucketName': '',\n        'qcloudRegion': null\n      }\n    }\n  }\n}\n\n// 保存云存储配置信息\nexport function addConfig () {\n  return {\n    // isOpen: false,\n    url: '/sys/oss/saveConfig',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 删除文件\nexport function del () {\n  return {\n    // isOpen: false,\n    url: '/sys/oss/delete',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n"
  },
  {
    "path": "src/mock/modules/sys-config.js",
    "content": "import Mock from 'mockjs'\n\n// 生成数据列表\nvar dataList = []\nfor (let i = 0; i < Math.floor(Math.random() * 10 + 1); i++) {\n  dataList.push(Mock.mock({\n    'id': '@increment',\n    'paramKey': '@first',\n    'paramValue': '@last',\n    'remark': '@csentence'\n  }))\n}\n\n// 获取参数列表\nexport function list () {\n  return {\n    // isOpen: false,\n    url: '/sys/config/list',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'page': {\n        'totalCount': dataList.length,\n        'pageSize': 10,\n        'totalPage': 1,\n        'currPage': 1,\n        'list': dataList\n      }\n    }\n  }\n}\n\n// 获取参数信息\nexport function info () {\n  return {\n    // isOpen: false,\n    url: '/sys/config/info',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'config': dataList[0]\n    }\n  }\n}\n\n// 添加参数\nexport function add () {\n  return {\n    // isOpen: false,\n    url: '/sys/config/save',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 修改参数\nexport function update () {\n  return {\n    // isOpen: false,\n    url: '/sys/config/update',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 删除参数\nexport function del () {\n  return {\n    // isOpen: false,\n    url: '/sys/config/delete',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n"
  },
  {
    "path": "src/mock/modules/sys-log.js",
    "content": "import Mock from 'mockjs'\n\n// 生成数据列表\nvar dataList = []\nfor (let i = 0; i < Math.floor(Math.random() * 10 + 1); i++) {\n  dataList.push(Mock.mock({\n    'id': '@increment',\n    'username': '@name',\n    'operation': '保存角色',\n    'method': 'io.renren.modules.sys.controller.SysRoleController.save()',\n    'params': '{\\'roleId\\':1,\\'roleName\\':\\'aaa\\',\\'remark\\':\\'111\\',\\'createUserId\\':1,\\'menuIdList\\':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,29,30],\\'createTime\\':\\'Mar 8,2018 2:29:31 PM\\'}',\n    'time|1-100': 100,\n    'ip': '@ip',\n    'createDate': '@datetime'\n  }))\n}\nvar scheduleDataList = []\nfor (let i = 0; i < Math.floor(Math.random() * 10 + 1); i++) {\n  let name = Mock.Random.name()\n  scheduleDataList.push(Mock.mock({\n    'logId': '@increment',\n    'jobId': '@increment(1000)',\n    'beanName': name,\n    'methodName': name,\n    'params': '-',\n    'status|0-1': 1,\n    'error': null,\n    'times|1-1000': 1000,\n    'createTime': '@datetime'\n  }))\n}\n\n// 获取日志列表\nexport function list () {\n  return {\n    // isOpen: false,\n    url: '/sys/log/list',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'page': {\n        'totalCount': dataList.length,\n        'pageSize': 10,\n        'totalPage': 1,\n        'currPage': 1,\n        'list': dataList\n      }\n    }\n  }\n}\n\n// 获取定时任务日志列表\nexport function scheduleList () {\n  return {\n    // isOpen: false,\n    url: '/sys/scheduleLog/list',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'page': {\n        'totalCount': scheduleDataList.length,\n        'pageSize': 10,\n        'totalPage': 1,\n        'currPage': 1,\n        'list': scheduleDataList\n      }\n    }\n  }\n}\n\n// 获取定时任务日志信息\nexport function scheduleInfo () {\n  let name = Mock.Random.name()\n  return {\n    // isOpen: false,\n    url: '/sys/scheduleLog/info',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'log': {\n        'logId': 1225,\n        'jobId': 3,\n        'beanName': name,\n        'methodName': name,\n        'params': null,\n        'status': 1,\n        'error': `org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '${name}' available`,\n        'times': Mock.Random.integer(1, 1000),\n        'createTime': Mock.Random.datetime\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/mock/modules/sys-menu.js",
    "content": "// 生成数据列表\nvar dataList = [\n  {\n    'menuId': 1,\n    'parentId': 0,\n    'parentName': null,\n    'name': '系统管理',\n    'url': null,\n    'perms': null,\n    'type': 0,\n    'icon': 'system',\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 2,\n    'parentId': 1,\n    'parentName': '系统管理',\n    'name': '管理员列表',\n    'url': 'sys/user',\n    'perms': null,\n    'type': 1,\n    'icon': 'admin',\n    'orderNum': 1,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 3,\n    'parentId': 1,\n    'parentName': '系统管理',\n    'name': '角色管理',\n    'url': 'sys/role',\n    'perms': null,\n    'type': 1,\n    'icon': 'role',\n    'orderNum': 2,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 4,\n    'parentId': 1,\n    'parentName': '系统管理',\n    'name': '菜单管理',\n    'url': 'sys/menu',\n    'perms': null,\n    'type': 1,\n    'icon': 'menu',\n    'orderNum': 3,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 5,\n    'parentId': 1,\n    'parentName': '系统管理',\n    'name': 'SQL监控',\n    'url': 'http://demo.renren.io/renren-fast/druid/sql.html',\n    'perms': null,\n    'type': 1,\n    'icon': 'sql',\n    'orderNum': 4,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 6,\n    'parentId': 1,\n    'parentName': '系统管理',\n    'name': '定时任务',\n    'url': 'job/schedule',\n    'perms': null,\n    'type': 1,\n    'icon': 'job',\n    'orderNum': 5,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 7,\n    'parentId': 6,\n    'parentName': '定时任务',\n    'name': '查看',\n    'url': null,\n    'perms': 'sys:schedule:list,sys:schedule:info',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 8,\n    'parentId': 6,\n    'parentName': '定时任务',\n    'name': '新增',\n    'url': null,\n    'perms': 'sys:schedule:save',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 9,\n    'parentId': 6,\n    'parentName': '定时任务',\n    'name': '修改',\n    'url': null,\n    'perms': 'sys:schedule:update',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 10,\n    'parentId': 6,\n    'parentName': '定时任务',\n    'name': '删除',\n    'url': null,\n    'perms': 'sys:schedule:delete',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 11,\n    'parentId': 6,\n    'parentName': '定时任务',\n    'name': '暂停',\n    'url': null,\n    'perms': 'sys:schedule:pause',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 12,\n    'parentId': 6,\n    'parentName': '定时任务',\n    'name': '恢复',\n    'url': null,\n    'perms': 'sys:schedule:resume',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 13,\n    'parentId': 6,\n    'parentName': '定时任务',\n    'name': '立即执行',\n    'url': null,\n    'perms': 'sys:schedule:run',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 14,\n    'parentId': 6,\n    'parentName': '定时任务',\n    'name': '日志列表',\n    'url': null,\n    'perms': 'sys:schedule:log',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 15,\n    'parentId': 2,\n    'parentName': '管理员列表',\n    'name': '查看',\n    'url': null,\n    'perms': 'sys:user:list,sys:user:info',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 16,\n    'parentId': 2,\n    'parentName': '管理员列表',\n    'name': '新增',\n    'url': null,\n    'perms': 'sys:user:save,sys:role:select',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 17,\n    'parentId': 2,\n    'parentName': '管理员列表',\n    'name': '修改',\n    'url': null,\n    'perms': 'sys:user:update,sys:role:select',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 18,\n    'parentId': 2,\n    'parentName': '管理员列表',\n    'name': '删除',\n    'url': null,\n    'perms': 'sys:user:delete',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 19,\n    'parentId': 3,\n    'parentName': '角色管理',\n    'name': '查看',\n    'url': null,\n    'perms': 'sys:role:list,sys:role:info',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 20,\n    'parentId': 3,\n    'parentName': '角色管理',\n    'name': '新增',\n    'url': null,\n    'perms': 'sys:role:save,sys:menu:list',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 21,\n    'parentId': 3,\n    'parentName': '角色管理',\n    'name': '修改',\n    'url': null,\n    'perms': 'sys:role:update,sys:menu:list',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 22,\n    'parentId': 3,\n    'parentName': '角色管理',\n    'name': '删除',\n    'url': null,\n    'perms': 'sys:role:delete',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 23,\n    'parentId': 4,\n    'parentName': '菜单管理',\n    'name': '查看',\n    'url': null,\n    'perms': 'sys:menu:list,sys:menu:info',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 24,\n    'parentId': 4,\n    'parentName': '菜单管理',\n    'name': '新增',\n    'url': null,\n    'perms': 'sys:menu:save,sys:menu:select',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 25,\n    'parentId': 4,\n    'parentName': '菜单管理',\n    'name': '修改',\n    'url': null,\n    'perms': 'sys:menu:update,sys:menu:select',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 26,\n    'parentId': 4,\n    'parentName': '菜单管理',\n    'name': '删除',\n    'url': null,\n    'perms': 'sys:menu:delete',\n    'type': 2,\n    'icon': null,\n    'orderNum': 0,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 27,\n    'parentId': 1,\n    'parentName': '系统管理',\n    'name': '参数管理',\n    'url': 'sys/config',\n    'perms': 'sys:config:list,sys:config:info,sys:config:save,sys:config:update,sys:config:delete',\n    'type': 1,\n    'icon': 'config',\n    'orderNum': 6,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 29,\n    'parentId': 1,\n    'parentName': '系统管理',\n    'name': '系统日志',\n    'url': 'sys/log',\n    'perms': 'sys:log:list',\n    'type': 1,\n    'icon': 'log',\n    'orderNum': 7,\n    'open': null,\n    'list': null\n  },\n  {\n    'menuId': 30,\n    'parentId': 1,\n    'parentName': '系统管理',\n    'name': '文件上传',\n    'url': 'oss/oss',\n    'perms': 'sys:oss:all',\n    'type': 1,\n    'icon': 'oss',\n    'orderNum': 6,\n    'open': null,\n    'list': null\n  }\n]\nvar navDataList = [\n  {\n    'menuId': 1,\n    'parentId': 0,\n    'parentName': null,\n    'name': '系统管理',\n    'url': null,\n    'perms': null,\n    'type': 0,\n    'icon': 'system',\n    'orderNum': 0,\n    'open': null,\n    'list': [\n      {\n        'menuId': 2,\n        'parentId': 1,\n        'parentName': null,\n        'name': '管理员列表',\n        'url': 'sys/user',\n        'perms': null,\n        'type': 1,\n        'icon': 'admin',\n        'orderNum': 1,\n        'open': null,\n        'list': null\n      },\n      {\n        'menuId': 3,\n        'parentId': 1,\n        'parentName': null,\n        'name': '角色管理',\n        'url': 'sys/role',\n        'perms': null,\n        'type': 1,\n        'icon': 'role',\n        'orderNum': 2,\n        'open': null,\n        'list': null\n      },\n      {\n        'menuId': 4,\n        'parentId': 1,\n        'parentName': null,\n        'name': '菜单管理',\n        'url': 'sys/menu',\n        'perms': null,\n        'type': 1,\n        'icon': 'menu',\n        'orderNum': 3,\n        'open': null,\n        'list': null\n      },\n      {\n        'menuId': 5,\n        'parentId': 1,\n        'parentName': null,\n        'name': 'SQL监控',\n        'url': 'http://demo.renren.io/renren-fast/druid/sql.html',\n        'perms': null,\n        'type': 1,\n        'icon': 'sql',\n        'orderNum': 4,\n        'open': null,\n        'list': null\n      },\n      {\n        'menuId': 6,\n        'parentId': 1,\n        'parentName': null,\n        'name': '定时任务',\n        'url': 'job/schedule',\n        'perms': null,\n        'type': 1,\n        'icon': 'job',\n        'orderNum': 5,\n        'open': null,\n        'list': null\n      },\n      {\n        'menuId': 27,\n        'parentId': 1,\n        'parentName': null,\n        'name': '参数管理',\n        'url': 'sys/config',\n        'perms': 'sys:config:list,sys:config:info,sys:config:save,sys:config:update,sys:config:delete',\n        'type': 1,\n        'icon': 'config',\n        'orderNum': 6,\n        'open': null,\n        'list': null\n      },\n      {\n        'menuId': 30,\n        'parentId': 1,\n        'parentName': null,\n        'name': '文件上传',\n        'url': 'oss/oss',\n        'perms': 'sys:oss:all',\n        'type': 1,\n        'icon': 'oss',\n        'orderNum': 6,\n        'open': null,\n        'list': null\n      },\n      {\n        'menuId': 29,\n        'parentId': 1,\n        'parentName': null,\n        'name': '系统日志',\n        'url': 'sys/log',\n        'perms': 'sys:log:list',\n        'type': 1,\n        'icon': 'log',\n        'orderNum': 7,\n        'open': null,\n        'list': null\n      }\n    ]\n  }\n]\n\n// 获取导航菜单列表 / 权限\nexport function nav () {\n  return {\n    // isOpen: false,\n    url: '/sys/menu/nav',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'menuList': navDataList,\n      'permissions': [\n        'sys:schedule:info',\n        'sys:menu:update',\n        'sys:menu:delete',\n        'sys:config:info',\n        'sys:menu:list',\n        'sys:config:save',\n        'sys:config:update',\n        'sys:schedule:resume',\n        'sys:user:delete',\n        'sys:config:list',\n        'sys:user:update',\n        'sys:role:list',\n        'sys:menu:info',\n        'sys:menu:select',\n        'sys:schedule:update',\n        'sys:schedule:save',\n        'sys:role:select',\n        'sys:user:list',\n        'sys:menu:save',\n        'sys:role:save',\n        'sys:schedule:log',\n        'sys:role:info',\n        'sys:schedule:delete',\n        'sys:role:update',\n        'sys:schedule:list',\n        'sys:user:info',\n        'sys:schedule:run',\n        'sys:config:delete',\n        'sys:role:delete',\n        'sys:user:save',\n        'sys:schedule:pause',\n        'sys:log:list',\n        'sys:oss:all'\n      ]\n    }\n  }\n}\n\n// 获取菜单列表\nexport function list () {\n  return {\n    // isOpen: false,\n    url: '/sys/menu/list',\n    type: 'get',\n    data: dataList\n  }\n}\n\n// 获取上级菜单\nexport function select () {\n  let dataList = JSON.parse(JSON.stringify(navDataList))\n  dataList = dataList.concat(dataList[0].list)\n  return {\n    // isOpen: false,\n    url: '/sys/menu/select',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'menuList': dataList\n    }\n  }\n}\n\n// 获取菜单信息\nexport function info () {\n  return {\n    // isOpen: false,\n    url: '/sys/menu/info',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'menu': dataList[0]\n    }\n  }\n}\n\n// 添加菜单\nexport function add () {\n  return {\n    // isOpen: false,\n    url: '/sys/menu/save',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 修改菜单\nexport function update () {\n  return {\n    // isOpen: false,\n    url: '/sys/menu/update',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 删除菜单\nexport function del () {\n  return {\n    // isOpen: false,\n    url: '/sys/menu/delete',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n"
  },
  {
    "path": "src/mock/modules/sys-role.js",
    "content": "import Mock from 'mockjs'\n\n// 生成数据列表\nvar dataList = []\nfor (let i = 0; i < Math.floor(Math.random() * 10 + 1); i++) {\n  dataList.push(Mock.mock({\n    'roleId': '@increment',\n    'roleName': '@name',\n    'remark': '@csentence',\n    'createUserId': 1,\n    'menuIdList': '@range(1, 10, 2)',\n    'createTime': '@datetime'\n  }))\n}\n\n// 获取角色列表\nexport function list () {\n  return {\n    // isOpen: false,\n    url: '/sys/role/list',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'page': {\n        'totalCount': dataList.length,\n        'pageSize': 10,\n        'totalPage': 1,\n        'currPage': 1,\n        'list': dataList\n      }\n    }\n  }\n}\n\n// 获取角色列表, 根据当前用户\nexport function select () {\n  return {\n    // isOpen: false,\n    url: '/sys/role/select',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'list': dataList\n    }\n  }\n}\n\n// 获取角色信息\nexport function info () {\n  return {\n    // isOpen: false,\n    url: '/sys/role/info',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'role': dataList[0]\n    }\n  }\n}\n\n// 添加角色\nexport function add () {\n  return {\n    // isOpen: false,\n    url: '/sys/role/save',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 修改角色\nexport function update () {\n  return {\n    // isOpen: false,\n    url: '/sys/role/update',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 删除角色\nexport function del () {\n  return {\n    // isOpen: false,\n    url: '/sys/role/delete',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n"
  },
  {
    "path": "src/mock/modules/sys-user.js",
    "content": "import Mock from 'mockjs'\n\n// 生成数据列表\nvar dataList = []\nfor (let i = 0; i < Math.floor(Math.random() * 10 + 1); i++) {\n  dataList.push(Mock.mock({\n    'userId': '@increment',\n    'username': '@name',\n    'email': '@email',\n    'mobile': /^1[0-9]{10}$/,\n    'status': 1,\n    'roleIdList': null,\n    'createUserId': 1,\n    'createTime': 'datetime'\n  }))\n}\n\n// 获取用户列表\nexport function list () {\n  return {\n    // isOpen: false,\n    url: '/sys/user/list',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'page': {\n        'totalCount': dataList.length,\n        'pageSize': 10,\n        'totalPage': 1,\n        'currPage': 1,\n        'list': dataList\n      }\n    }\n  }\n}\n\n// 获取用户信息\nexport function info () {\n  return {\n    // isOpen: false,\n    url: '/sys/user/info',\n    type: 'get',\n    data: {\n      'msg': 'success',\n      'code': 0,\n      'user': dataList[0]\n    }\n  }\n}\n\n// 修改密码\nexport function updatePassword () {\n  return {\n    // isOpen: false,\n    url: '/sys/user/password',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 添加用户\nexport function add () {\n  return {\n    // isOpen: false,\n    url: '/sys/user/save',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 修改用户\nexport function update () {\n  return {\n    // isOpen: false,\n    url: '/sys/user/update',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n\n// 删除用户\nexport function del () {\n  return {\n    // isOpen: false,\n    url: '/sys/user/delete',\n    type: 'post',\n    data: {\n      'msg': 'success',\n      'code': 0\n    }\n  }\n}\n"
  },
  {
    "path": "src/router/import-development.js",
    "content": "module.exports = file => require('@/views/' + file + '.vue').default\n"
  },
  {
    "path": "src/router/import-production.js",
    "content": "module.exports = file => () => import('@/views/' + file + '.vue')\n"
  },
  {
    "path": "src/router/index.js",
    "content": "/* eslint-disable no-unused-vars */\n// @ts-nocheck\n/**\n * 全站路由配置\n *\n * 建议:\n * 1. 代码中路由统一使用name属性跳转(不使用path属性)\n */\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport http from '@/utils/httpRequest'\nimport { isURL } from '@/utils/validate'\nimport { clearLoginInfo } from '@/utils'\n\nVue.use(Router)\n\n// 开发环境不使用懒加载, 因为懒加载页面太多的话会造成webpack热更新太慢, 所以只有生产环境使用懒加载\nconst _import = require('./import-' + process.env.NODE_ENV)\n\n// 全局路由(无需嵌套上左右整体布局)\nconst globalRoutes = [\n  { path: '/404', component: _import('common/404'), name: '404', meta: { title: '404未找到' } },\n  { path: '/login', component: _import('common/login'), name: 'login', meta: { title: '登录' } }\n]\n\n// 主入口路由(需嵌套上左右整体布局)\nconst mainRoutes = {\n  path: '/',\n  component: _import('main'),\n  name: 'main',\n  redirect: { name: 'home' },\n  meta: { title: '主入口整体布局' },\n  children: [\n    // 通过meta对象设置路由展示方式\n    // 1. isTab: 是否通过tab展示内容, true: 是, false: 否\n    // 2. iframeUrl: 是否通过iframe嵌套展示内容, '以http[s]://开头': 是, '': 否\n    // 提示: 如需要通过iframe嵌套展示内容, 但不通过tab打开, 请自行创建组件使用iframe处理!\n    { path: '/home', component: _import('common/home'), name: 'home', meta: { title: '首页' } },\n    { path: '/theme', component: _import('common/theme'), name: 'theme', meta: { title: '主题' } },\n    { path: '/demo-echarts', component: _import('demo/echarts'), name: 'demo-echarts', meta: { title: 'demo-echarts', isTab: true } },\n    { path: '/demo-ueditor', component: _import('demo/ueditor'), name: 'demo-ueditor', meta: { title: 'demo-ueditor', isTab: true } },\n    { path: '/flow-editor', component: _import('demo/FlowEditor'), name: '动态表单', meta: { title: '动态表单', isTab: true } }\n  ],\n  beforeEnter (to, from, next) {\n    // let token = Vue.cookie.get('token')\n    // if (!token || !/\\S/.test(token)) {\n    //   clearLoginInfo()\n    //   next({ name: 'login' })\n    // }\n    next()\n  }\n}\n\nconst router = new Router({\n  mode: 'hash',\n  scrollBehavior: () => ({ y: 0 }),\n  isAddDynamicMenuRoutes: true, // 是否已经添加动态(菜单)路由\n  routes: globalRoutes.concat(mainRoutes)\n})\n\nrouter.beforeEach((to, from, next) => {\n  // 添加动态(菜单)路由\n  // 1. 已经添加 or 全局路由, 直接访问\n  // 2. 获取菜单列表, 添加并保存本地存储\n  next()\n  // if (router.options.isAddDynamicMenuRoutes || fnCurrentRouteType(to, globalRoutes) === 'global') {\n  //   next()\n  // } else {\n  //   http({\n  //     url: http.adornUrl('/sys/menu/nav'),\n  //     method: 'get',\n  //     params: http.adornParams()\n  //   }).then(({data}) => {\n  //     if (data && data.code === 0) {\n  //       fnAddDynamicMenuRoutes(data.menuList)\n  //       router.options.isAddDynamicMenuRoutes = true\n  //       sessionStorage.setItem('menuList', JSON.stringify(data.menuList || '[]'))\n  //       sessionStorage.setItem('permissions', JSON.stringify(data.permissions || '[]'))\n  //       next({ ...to, replace: true })\n  //     } else {\n  //       sessionStorage.setItem('menuList', '[]')\n  //       sessionStorage.setItem('permissions', '[]')\n  //       next()\n  //     }\n  //   }).catch((e) => {\n  //     console.log(`%c${e} 请求菜单列表和权限失败，跳转至登录页！！`, 'color:blue')\n  //     router.push({ name: 'login' })\n  //   })\n  // }\n})\n\n/**\n * 判断当前路由类型, global: 全局路由, main: 主入口路由\n * @param {*} route 当前路由\n */\nfunction fnCurrentRouteType (route, globalRoutes = []) {\n  var temp = []\n  for (var i = 0; i < globalRoutes.length; i++) {\n    if (route.path === globalRoutes[i].path) {\n      return 'global'\n    } else if (globalRoutes[i].children && globalRoutes[i].children.length >= 1) {\n      temp = temp.concat(globalRoutes[i].children)\n    }\n  }\n  return temp.length >= 1 ? fnCurrentRouteType(route, temp) : 'main'\n}\n\n/**\n * 添加动态(菜单)路由\n * @param {*} menuList 菜单列表\n * @param {*} routes 递归创建的动态(菜单)路由\n */\nfunction fnAddDynamicMenuRoutes (menuList = [], routes = []) {\n  var temp = []\n  for (var i = 0; i < menuList.length; i++) {\n    if (menuList[i].list && menuList[i].list.length >= 1) {\n      temp = temp.concat(menuList[i].list)\n    } else if (menuList[i].url && /\\S/.test(menuList[i].url)) {\n      menuList[i].url = menuList[i].url.replace(/^\\//, '')\n      var route = {\n        path: menuList[i].url.replace('/', '-'),\n        component: null,\n        name: menuList[i].url.replace('/', '-'),\n        meta: {\n          menuId: menuList[i].menuId,\n          title: menuList[i].name,\n          isDynamic: true,\n          isTab: true,\n          iframeUrl: ''\n        }\n      }\n      // url以http[s]://开头, 通过iframe展示\n      if (isURL(menuList[i].url)) {\n        route['path'] = `i-${menuList[i].menuId}`\n        route['name'] = `i-${menuList[i].menuId}`\n        route['meta']['iframeUrl'] = menuList[i].url\n      } else {\n        try {\n          route['component'] = _import(`modules/${menuList[i].url}`) || null\n        } catch (e) {}\n      }\n      routes.push(route)\n    }\n  }\n  if (temp.length >= 1) {\n    fnAddDynamicMenuRoutes(temp, routes)\n  } else {\n    mainRoutes.name = 'main-dynamic'\n    mainRoutes.children = routes\n    router.addRoutes([\n      mainRoutes,\n      { path: '*', redirect: { name: '404' } }\n    ])\n    sessionStorage.setItem('dynamicMenuRoutes', JSON.stringify(mainRoutes.children || '[]'))\n    console.log('\\n')\n    console.log('%c!<-------------------- 动态(菜单)路由 s -------------------->', 'color:blue')\n    console.log(mainRoutes.children)\n    console.log('%c!<-------------------- 动态(菜单)路由 e -------------------->', 'color:blue')\n  }\n}\n\nexport default router\n"
  },
  {
    "path": "src/store/index.js",
    "content": "// @ts-nocheck\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport cloneDeep from 'lodash/cloneDeep'\nimport common from './modules/common'\nimport user from './modules/user'\nimport formDesign from './modules/formDesign'\n\nVue.use(Vuex)\n\nexport default new Vuex.Store({\n  modules: {\n    common,\n    user,\n    formDesign\n  },\n  mutations: {\n    // 重置vuex本地储存状态\n    resetStore (state) {\n      Object.keys(state).forEach((key) => {\n        state[key] = cloneDeep(window.SITE_CONFIG['storeState'][key])\n      })\n    }\n  },\n  strict: process.env.NODE_ENV !== 'production'\n})\n"
  },
  {
    "path": "src/store/modules/common.js",
    "content": "export default {\n  namespaced: true,\n  state: {\n    // 页面文档可视高度(随窗口改变大小)\n    documentClientHeight: 0,\n    // 导航条, 布局风格, defalut(默认) / inverse(反向)\n    navbarLayoutType: 'default',\n    // 侧边栏, 布局皮肤, light(浅色) / dark(黑色)\n    sidebarLayoutSkin: 'dark',\n    // 侧边栏, 折叠状态\n    sidebarFold: false,\n    // 侧边栏, 菜单\n    menuList: [],\n    menuActiveName: '',\n    // 内容, 是否需要刷新\n    contentIsNeedRefresh: false,\n    // 主入口标签页\n    mainTabs: [],\n    mainTabsActiveName: ''\n  },\n  mutations: {\n    updateDocumentClientHeight (state, height) {\n      state.documentClientHeight = height\n    },\n    updateNavbarLayoutType (state, type) {\n      state.navbarLayoutType = type\n    },\n    updateSidebarLayoutSkin (state, skin) {\n      state.sidebarLayoutSkin = skin\n    },\n    updateSidebarFold (state, fold) {\n      state.sidebarFold = fold\n    },\n    updateMenuList (state, list) {\n      state.menuList = list\n    },\n    updateMenuActiveName (state, name) {\n      state.menuActiveName = name\n    },\n    updateContentIsNeedRefresh (state, status) {\n      state.contentIsNeedRefresh = status\n    },\n    updateMainTabs (state, tabs) {\n      state.mainTabs = tabs\n    },\n    updateMainTabsActiveName (state, name) {\n      state.mainTabsActiveName = name\n    }\n  }\n}\n"
  },
  {
    "path": "src/store/modules/formDesign.js",
    "content": "/*\n * @Author: your name\n * @Date: 2019-10-31 14:43:17\n * @LastEditTime: 2019-12-10 11:17:59\n * @LastEditors: Please set LastEditors\n * @Description: In User Settings Edit\n * @FilePath: \\web-oa\\src\\store\\modules\\formDesign.js\n */\nimport common from '@/utils/common'\n\nexport default {\n  namespaced: true,\n  state: {\n    showType: '',\n    activeKey: '',\n    formList: [],\n    activeForm: null,\n    rules: {},\n    grid: {}\n    // ruleForm: {}\n  },\n  mutations: {\n    updateShowType (state, value) {\n      state.showType = value\n    },\n    updateActiveKey (state, value) {\n      state.activeKey = value\n    },\n    updateFormList (state, value) {\n      state.formList = value\n      value.forEach(element => {\n        if (element.type !== 'grid') {\n          state.rules[element.key] = [{ required: element.options.required, message: '必填项不能为空', trigger: 'blur' }]\n        } else {\n          element.cols.forEach(element2 => {\n            element2.list.forEach(element3 => {\n              if (element3.type !== 'grid') { state.rules[element3.key] = [{ required: element3.options.required, message: '必填项不能为空', trigger: 'blur' }] }\n            })\n          })\n        }\n        // state.ruleForm[element.key] = element.value\n      })\n      console.log('state.rules', state.rules)\n    },\n    updateActiveForm (state, value) {\n      state.activeForm = value\n    },\n    updateRules (state, value) {\n      state.rules = value\n    },\n    updateGrid (state, value) {\n      state.grid[value.key] = value.value\n    }\n  },\n  actions: {\n    setFormList ({ commit }, value) {\n      window.localStorage.formList = JSON.stringify(value)\n      commit('updateFormList', value)\n    },\n    addFormList ({ commit, state }, form) {\n      console.log('addFormList')\n      // let newFormList = JSON.parse(window.localStorage.formList).push(form);\n\n      let newFormList = common.deepClone(state.formList)\n      newFormList.push(form)\n      window.localStorage.formList = JSON.stringify(newFormList)\n      commit('updateFormList', newFormList)\n    },\n    removeFormList ({ commit }, key) {\n      let newFormList = JSON.parse(window.localStorage.formList)\n      let delIndex = -1\n      for (let i = 0; i < newFormList.length; i++) {\n        const element = newFormList[i]\n\n        if (element.key === key) {\n          delIndex = i\n        }\n      }\n      if (delIndex !== -1) {\n        newFormList.splice(delIndex, 1)\n      } else {\n        console.warn('未找到此表单key', key)\n      }\n      window.localStorage.formList = JSON.stringify(newFormList)\n      commit('updateFormList', newFormList)\n    }\n  },\n  getters: {\n    getFormRules (state) {\n      let rules = {}\n      state.formList.forEach(element => {\n        rules[element.key] = [{ required: element.options.required, message: '必填项不能为空', trigger: 'blur' }]\n      })\n      console.log('rules', rules)\n      return rules\n    }\n  }\n}\n"
  },
  {
    "path": "src/store/modules/user.js",
    "content": "export default {\n  namespaced: true,\n  state: {\n    id: 0,\n    name: ''\n  },\n  mutations: {\n    updateId (state, id) {\n      state.id = id\n    },\n    updateName (state, name) {\n      state.name = name\n    }\n  }\n}\n"
  },
  {
    "path": "src/utils/bus.js",
    "content": "/* eslint-disable */\nimport Vue from 'vue'\n\nconst bus = new Vue();\nexport default bus;"
  },
  {
    "path": "src/utils/common.js",
    "content": "/* eslint-disable no-undef */\n/*\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-09-30 12:28:10\n * @LastEditTime: 2019-12-10 11:36:46\n * @LastEditors: Please set LastEditors\n */\nconst STORAGE_USER_KEY = 'STORAGE_USER_KEY'\n\nexport default {\n  // 获取\n  getLocal (key = STORAGE_USER_KEY) {\n    // console.log('get local operation')\n    return JSON.parse(window.localStorage.getItem(key))\n  },\n  // 设置用\n  setLocal (res, key = STORAGE_USER_KEY, isSaveOldData = false) {\n    // 第三个参数是true的话,会增加数据而不是重新设置,res必须是数组\n    if (isSaveOldData) {\n      if (this.getLocal(key)) {\n        let oldData = this.getLocal(key)\n        return window.localStorage.setItem(key, JSON.stringify(oldData.concat(res)))\n      }\n    }\n    return window.localStorage.setItem(key, JSON.stringify(res))\n  },\n  deepClone (obj) {\n    var o\n    if (typeof obj === 'object') {\n      if (obj === null) {\n        o = null\n      } else {\n        if (obj instanceof Array) {\n          o = []\n          for (var i = 0, len = obj.length; i < len; i++) {\n            o.push(this.deepClone(obj[i]))\n          }\n        } else {\n          o = {}\n          for (var j in obj) {\n            o[j] = this.deepClone(obj[j])\n          }\n        }\n      }\n    } else {\n      o = obj\n    }\n    return o\n  },\n  getGuid () {\n    function S4 () {\n      return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)\n    }\n    return (S4() + S4() + '-' + S4() + '-' + S4() + '-' + S4() + '-' + S4() + S4() + S4())\n  },\n  getGuid2 () {\n    function S4 () {\n      return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)\n    }\n    return S4() + S4()\n  },\n  isEmpty (value) {\n    let result = false\n    if (value == null || value === undefined) {\n      result = true\n    }\n    if (typeof value === 'string' && (value.replace(/\\s+/g, '') === '' || value === '')) {\n      result = true\n    }\n    if (typeof value === 'object' && value instanceof Array && value.length === 0) {\n      result = true\n    }\n    return result\n  },\n  formatTime (time) {\n    //   格式：yyyy-MM-dd hh:mm:ss\n    let date = new Date(Number(time))\n    let Y = date.getFullYear() + '-'\n    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'\n    let D = date.getDate() < 10 ? '0' + date.getDate() + ' ' : date.getDate() + ' '\n    let h = date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':'\n    let m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes() + ':'\n    let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()\n    return Y + M + D + h + m + s\n  },\n  formatTime2 (time) {\n    //   格式：yyyy-MM-dd hh:mm:ss\n    let date = new Date(Number(time))\n    let Y = date.getFullYear() + '-'\n    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'\n    let D = date.getDate() < 10 ? '0' + date.getDate() + ' ' : date.getDate() + ' '\n    let h = date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':'\n    let m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()\n    return Y + M + D + h + m\n  },\n  formatDate (time) {\n    //   格式：yyyy-MM-dd\n    let date = new Date(Number(time))\n    let Y = date.getFullYear() + '-'\n    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'\n    let D = date.getDate() < 10 ? '0' + date.getDate() + ' ' : date.getDate() + ' '\n    return Y + M + D\n  },\n  formatDateCN (time) {\n    //   格式：yyyy-MM-dd\n    let date = new Date(Number(time))\n    let Y = date.getFullYear() + '年'\n    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '月'\n    let D = date.getDate() < 10 ? '0' + date.getDate() + '日' : date.getDate() + '日'\n    return Y + M + D\n  },\n  /**\n    * 字符串转数组\n    * @param {*} value\n    * @returns\n    */\n  stringToArray (value) {\n    if (this.isEmpty(value)) return []\n    if (typeof value !== 'string') return []\n    if (value.indexOf(',') < 0) return [value]\n    let array = value.split(',')\n    return array\n  },\n  /**\n   * 数组转字符串\n   * @param {*} value\n   * @returns\n   */\n  arrayToString (value) {\n    if (typeof value === 'object' && value instanceof Array) {\n      if (value.length === 0) return ''\n      let str = ''\n      value.forEach(element => {\n        str += element + ','\n      })\n      return str.substr(0, str.length - 1)\n    } else {\n      return ''\n    }\n  },\n  isPhone (value) {\n    var myreg = /^[1][3,4,5,7,8][0-9]{9}$/\n    if (!myreg.test(value)) {\n      return false\n    } else {\n      return true\n    }\n  },\n  isIDCardNo (value) {\n    var myreg = /^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$|^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$/\n    if (!myreg.test(value)) {\n      return false\n    } else {\n      return true\n    }\n  },\n  /**\n     * resultFul的返回码判断\n     * @param {*} res\n     * @returns boolean\n     */\n  isOk (res) {\n    if (this.isEmpty(res.data)) {\n      // Modal.warning({\n      //     title: '系统提示',\n      //     content: \"未能获取数据\",\n      // });\n      console.error('接口返回的结果集为空')\n      return false\n    } else {\n      if (res.data.resultCode !== 0) {\n        this.$message({\n          message: res.data.msg,\n          type: 'warning'\n        })\n        return false\n      } else {\n        return true\n      }\n    }\n  },\n  loading: {\n    show () {\n      if (window.layer) {\n        layer.load(2, {\n          shade: [0.2, '#fff']\n        })\n      }\n    },\n    hide () {\n      if (window.layer) {\n        layer.closeAll('loading')\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/utils/httpRequest.js",
    "content": "import Vue from 'vue'\nimport axios from 'axios'\nimport router from '@/router'\nimport qs from 'qs'\nimport merge from 'lodash/merge'\nimport { clearLoginInfo } from '@/utils'\n\nconst http = axios.create({\n  timeout: 1000 * 30,\n  withCredentials: true,\n  headers: {\n    'Content-Type': 'application/json; charset=utf-8'\n  }\n})\n\n/**\n * 请求拦截\n */\nhttp.interceptors.request.use(config => {\n  config.headers['token'] = Vue.cookie.get('token') // 请求头带上token\n  return config\n}, error => {\n  return Promise.reject(error)\n})\n\n/**\n * 响应拦截\n */\nhttp.interceptors.response.use(response => {\n  if (response.data && response.data.code === 401) { // 401, token失效\n    clearLoginInfo()\n    router.push({ name: 'login' })\n  }\n  return response\n}, error => {\n  return Promise.reject(error)\n})\n\n/**\n * 请求地址处理\n * @param {*} actionName action方法名称\n */\nhttp.adornUrl = (actionName) => {\n  // 非生产环境 && 开启代理, 接口前缀统一使用[/proxyApi/]前缀做代理拦截!\n  return (process.env.NODE_ENV !== 'production' && process.env.OPEN_PROXY ? '/proxyApi/' : window.SITE_CONFIG.baseUrl) + actionName\n}\n\n/**\n * get请求参数处理\n * @param {*} params 参数对象\n * @param {*} openDefultParams 是否开启默认参数?\n */\nhttp.adornParams = (params = {}, openDefultParams = true) => {\n  var defaults = {\n    't': new Date().getTime()\n  }\n  return openDefultParams ? merge(defaults, params) : params\n}\n\n/**\n * post请求数据处理\n * @param {*} data 数据对象\n * @param {*} openDefultdata 是否开启默认数据?\n * @param {*} contentType 数据格式\n *  json: 'application/json; charset=utf-8'\n *  form: 'application/x-www-form-urlencoded; charset=utf-8'\n */\nhttp.adornData = (data = {}, openDefultdata = true, contentType = 'json') => {\n  var defaults = {\n    't': new Date().getTime()\n  }\n  data = openDefultdata ? merge(defaults, data) : data\n  return contentType === 'json' ? JSON.stringify(data) : qs.stringify(data)\n}\n\nexport default http\n"
  },
  {
    "path": "src/utils/index.js",
    "content": "import Vue from 'vue'\nimport router from '@/router'\nimport store from '@/store'\n\n/**\n * 获取uuid\n */\nexport function getUUID () {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n    return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16)\n  })\n}\n\n/**\n * 是否有权限\n * @param {*} key\n */\nexport function isAuth (key) {\n  return JSON.parse(sessionStorage.getItem('permissions') || '[]').indexOf(key) !== -1 || false\n}\n\n/**\n * 树形数据转换\n * @param {*} data\n * @param {*} id\n * @param {*} pid\n */\nexport function treeDataTranslate (data, id = 'id', pid = 'parentId') {\n  var res = []\n  var temp = {}\n  for (var i = 0; i < data.length; i++) {\n    temp[data[i][id]] = data[i]\n  }\n  for (var k = 0; k < data.length; k++) {\n    if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) {\n      if (!temp[data[k][pid]]['children']) {\n        temp[data[k][pid]]['children'] = []\n      }\n      if (!temp[data[k][pid]]['_level']) {\n        temp[data[k][pid]]['_level'] = 1\n      }\n      data[k]['_level'] = temp[data[k][pid]]._level + 1\n      temp[data[k][pid]]['children'].push(data[k])\n    } else {\n      res.push(data[k])\n    }\n  }\n  return res\n}\n\n/**\n * 清除登录信息\n */\nexport function clearLoginInfo () {\n  Vue.cookie.delete('token')\n  store.commit('resetStore')\n  router.options.isAddDynamicMenuRoutes = false\n}\n"
  },
  {
    "path": "src/utils/validate.js",
    "content": "/**\n * 邮箱\n * @param {*} s\n */\nexport function isEmail (s) {\n  return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)\n}\n\n/**\n * 手机号码\n * @param {*} s\n */\nexport function isMobile (s) {\n  return /^1[0-9]{10}$/.test(s)\n}\n\n/**\n * 电话号码\n * @param {*} s\n */\nexport function isPhone (s) {\n  return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)\n}\n\n/**\n * URL地址\n * @param {*} s\n */\nexport function isURL (s) {\n  return /^http[s]?:\\/\\/.*/.test(s)\n}\n"
  },
  {
    "path": "src/views/common/404.vue",
    "content": "<template>\n  <div class=\"site-wrapper site-page--not-found\">\n    <div class=\"site-content__wrapper\">\n      <div class=\"site-content\">\n        <h2 class=\"not-found-title\">400</h2>\n        <p class=\"not-found-desc\">抱歉！您访问的页面<em>失联</em>啦 ...</p>\n        <el-button @click=\"$router.go(-1)\">返回上一页</el-button>\n        <el-button type=\"primary\" class=\"not-found-btn-gohome\" @click=\"$router.push({ name: 'home' })\">进入首页</el-button>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\n  export default {\n  }\n</script>\n\n<style lang=\"scss\">\n  .site-wrapper.site-page--not-found {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden;\n    .site-content__wrapper {\n      padding: 0;\n      margin: 0;\n      background-color: #fff;\n    }\n    .site-content {\n      position: fixed;\n      top: 15%;\n      left: 50%;\n      z-index: 2;\n      padding: 30px;\n      text-align: center;\n      transform: translate(-50%, 0);\n    }\n    .not-found-title {\n      margin: 20px 0 15px;\n      font-size: 10em;\n      font-weight: 400;\n      color: rgb(55, 71, 79);\n    }\n    .not-found-desc {\n      margin: 0 0 30px;\n      font-size: 26px;\n      text-transform: uppercase;\n      color: rgb(118, 131, 143);\n      > em {\n        font-style: normal;\n        color: #ee8145;\n      }\n    }\n    .not-found-btn-gohome {\n      margin-left: 30px;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/views/common/home.vue",
    "content": "<template>\n  <div class=\"mod-home\">\n    <h3>项目介绍</h3>\n    <ul>\n      <li>renren-fast-vue基于vue、element-ui构建开发，实现<a href=\"https://gitee.com/renrenio/renren-fast\" target=\"_blank\">renren-fast</a>后台管理前端功能，提供一套更优的前端解决方案</li>\n      <li>前后端分离，通过token进行数据交互，可独立部署</li>\n      <li>主题定制，通过scss变量统一一站式定制</li>\n      <li>动态菜单，通过菜单管理统一管理访问路由</li>\n      <li>数据切换，通过mock配置对接口数据／mock模拟数据进行切换</li>\n      <li>发布时，可动态配置CDN静态资源／切换新旧版本</li>\n      <li>演示地址：<a href=\"http://fast.demo.renren.io\" target=\"_blank\">fast.demo.renren.io</a> (账号密码：admin/admin)</li>\n    </ul>\n    <h3>获取帮助</h3>\n    <ul>\n      <li>官方社区：<a href=\"//renren.io\" target=\"_blank\">renren.io</a></li>\n      <li>前端Git地址：<a href=\"//github.com/daxiongYang/renren-fast-vue\" target=\"_blank\">github.com/daxiongYang/renren-fast-vue</a></li>\n      <li>后台Git地址：<a href=\"//git.oschina.net/renrenio/renren-fast\" target=\"_blank\">git.oschina.net/renrenio/renren-fast</a></li>\n      <li>代码生成器：<a href=\"//git.oschina.net/renrenio/renren-generator\" target=\"_blank\">git.oschina.net/renrenio/renren-generator</a></li>\n      <li>如需关注项目最新动态，请Watch、Star项目，同时也是对项目最好的支持</li>\n    </ul>\n    <h3>官方QQ群</h3>\n    <ul>\n      <li>高级群：324780204(大牛云集，跟大牛学习新技能)</li>\n      <li>普通群：145799952(学习交流，互相解答各种疑问)</li>\n    </ul>\n  </div>\n</template>\n\n<script>\n  export default {\n  }\n</script>\n\n<style>\n  .mod-home {\n    line-height: 1.5;\n  }\n</style>\n\n"
  },
  {
    "path": "src/views/common/login.vue",
    "content": "<template>\n  <div class=\"site-wrapper site-page--login\">\n    <div class=\"site-content__wrapper\">\n      <div class=\"site-content\">\n        <div class=\"brand-info\">\n          <h2 class=\"brand-info__text\">renren-fast-vue</h2>\n          <p class=\"brand-info__intro\">renren-fast-vue基于vue、element-ui构建开发，实现renren-fast后台管理前端功能，提供一套更优的前端解决方案。</p>\n        </div>\n        <div class=\"login-main\">\n          <h3 class=\"login-title\">管理员登录</h3>\n          <el-form :model=\"dataForm\" :rules=\"dataRule\" ref=\"dataForm\" @keyup.enter.native=\"dataFormSubmit()\" status-icon>\n            <el-form-item prop=\"userName\">\n              <el-input v-model=\"dataForm.userName\" placeholder=\"帐号\"></el-input>\n            </el-form-item>\n            <el-form-item prop=\"password\">\n              <el-input v-model=\"dataForm.password\" type=\"password\" placeholder=\"密码\"></el-input>\n            </el-form-item>\n            <el-form-item prop=\"captcha\">\n              <el-row :gutter=\"20\">\n                <el-col :span=\"14\">\n                  <el-input v-model=\"dataForm.captcha\" placeholder=\"验证码\">\n                  </el-input>\n                </el-col>\n                <el-col :span=\"10\" class=\"login-captcha\">\n                  <img :src=\"captchaPath\" @click=\"getCaptcha()\" alt=\"\">\n                </el-col>\n              </el-row>\n            </el-form-item>\n            <el-form-item>\n              <el-button class=\"login-btn-submit\" type=\"primary\" @click=\"dataFormSubmit()\">登录</el-button>\n            </el-form-item>\n          </el-form>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\n  import { getUUID } from '@/utils'\n  export default {\n    data () {\n      return {\n        dataForm: {\n          userName: '',\n          password: '',\n          uuid: '',\n          captcha: ''\n        },\n        dataRule: {\n          userName: [\n            { required: true, message: '帐号不能为空', trigger: 'blur' }\n          ],\n          password: [\n            { required: true, message: '密码不能为空', trigger: 'blur' }\n          ],\n          captcha: [\n            // { required: true, message: '验证码不能为空', trigger: 'blur' }\n          ]\n        },\n        captchaPath: ''\n      }\n    },\n    created () {\n      this.getCaptcha()\n    },\n    methods: {\n      // 提交表单\n      dataFormSubmit () {\n        this.$refs['dataForm'].validate((valid) => {\n          if (valid) {\n            this.$cookie.set('token', 'data.token')\n            this.$router.replace({ name: 'home' })\n  \n          // this.$http({\n          //   url: this.$http.adornUrl('/sys/login'),\n          //   method: 'post',\n          //   data: this.$http.adornData({\n          //     'username': this.dataForm.userName,\n          //     'password': this.dataForm.password,\n          //     'uuid': this.dataForm.uuid,\n          //     'captcha': this.dataForm.captcha\n          //   })\n          // }).then(({data}) => {\n          //   if (data && data.code === 0) {\n          //     this.$cookie.set('token', data.token)\n          //     this.$router.replace({ name: 'home' })\n          //   } else {\n          //     this.getCaptcha()\n          //     this.$message.error(data.msg)\n          //   }\n          // }).catch(res => {\n          //   this.$cookie.set('token', 'data.token')\n          //   this.$router.replace({ name: 'home' })\n          // })\n          }\n        })\n      },\n      // 获取验证码\n      getCaptcha () {\n        this.dataForm.uuid = getUUID()\n        this.captchaPath = this.$http.adornUrl(`/captcha.jpg?uuid=${this.dataForm.uuid}`)\n      }\n    }\n  }\n</script>\n\n<style lang=\"scss\">\n  .site-wrapper.site-page--login {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    background-color: rgba(38, 50, 56, .6);\n    overflow: hidden;\n    &:before {\n      position: fixed;\n      top: 0;\n      left: 0;\n      z-index: -1;\n      width: 100%;\n      height: 100%;\n      content: \"\";\n      background-image: url(~@/assets/img/login_bg.jpg);\n      background-size: cover;\n    }\n    .site-content__wrapper {\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      padding: 0;\n      margin: 0;\n      overflow-x: hidden;\n      overflow-y: auto;\n      background-color: transparent;\n    }\n    .site-content {\n      min-height: 100%;\n      padding: 30px 500px 30px 30px;\n    }\n    .brand-info {\n      margin: 220px 100px 0 90px;\n      color: #fff;\n    }\n    .brand-info__text {\n      margin:  0 0 22px 0;\n      font-size: 48px;\n      font-weight: 400;\n      text-transform : uppercase;\n    }\n    .brand-info__intro {\n      margin: 10px 0;\n      font-size: 16px;\n      line-height: 1.58;\n      opacity: .6;\n    }\n    .login-main {\n      position: absolute;\n      top: 0;\n      right: 0;\n      padding: 150px 60px 180px;\n      width: 470px;\n      min-height: 100%;\n      background-color: #fff;\n    }\n    .login-title {\n      font-size: 16px;\n    }\n    .login-captcha {\n      overflow: hidden;\n      > img {\n        width: 100%;\n        cursor: pointer;\n      }\n    }\n    .login-btn-submit {\n      width: 100%;\n      margin-top: 38px;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/views/common/theme.vue",
    "content": "<template>\n  <el-form>\n    <h2>布局设置</h2>\n    <el-form-item label=\"导航条类型\">\n      <el-radio-group v-model=\"navbarLayoutType\">\n        <el-radio label=\"default\" border>default</el-radio>\n        <el-radio label=\"inverse\" border>inverse</el-radio>\n      </el-radio-group>\n    </el-form-item>\n    <el-form-item label=\"侧边栏皮肤\">\n      <el-radio-group v-model=\"sidebarLayoutSkin\">\n        <el-radio label=\"light\" border>light</el-radio>\n        <el-radio label=\"dark\" border>dark</el-radio>\n      </el-radio-group>\n    </el-form-item>\n  </el-form>\n</template>\n\n<script>\n  export default {\n    computed: {\n      navbarLayoutType: {\n        get () { return this.$store.state.common.navbarLayoutType },\n        set (val) { this.$store.commit('common/updateNavbarLayoutType', val) }\n      },\n      sidebarLayoutSkin: {\n        get () { return this.$store.state.common.sidebarLayoutSkin },\n        set (val) { this.$store.commit('common/updateSidebarLayoutSkin', val) }\n      }\n    }\n  }\n</script>\n\n"
  },
  {
    "path": "src/views/demo/FlowEditor.vue",
    "content": "<!--\n * @Description: In User Settings Edit\n * @Author: your name\n * @Date: 2019-07-23 12:08:49\n * @LastEditTime: 2019-12-10 11:28:17\n * @LastEditors: Please set LastEditors\n -->\n<template>\n  <el-dialog\n    :close-on-click-modal=\"false\"\n    :visible.sync=\"visible\"\n    append-to-body\n    fullscreen\n    :show-close=\"false\"\n    custom-class=\"form-design-main\"\n  >\n    <div>\n      <el-row style=\"margin-top: 17px;\">\n        <el-col style=\"width: 230px;position: fixed;top: 28px;\">\n          <FDMenu />\n        </el-col>\n        <el-col\n          style=\"height:100%; width: calc(100% - 505px); margin-left:240px;overflow-y: auto;\"\n          :class=\"{'fd-main': $store.state.formDesign.formList.length == 0}\"\n          id=\"form-center\"\n        >\n          <Panel :formAttr=\"formAttr\" v-if=\"!formAttr.isTabs\" />\n          <el-tabs :type=\"formAttr.tabType\" v-else v-model=\"tabIndex\" @tab-click=\"tabHandleClick\">\n            <el-tab-pane\n              :label=\"item.name\"\n              :name=\"String(i)\"\n              v-for=\"(item, i) in formAttr.tabs\"\n              :key=\"i\"\n            >\n              <Panel ref=\"Panel\" :formAttr=\"formAttr\" @callBack=\"formListCallBack\" />\n            </el-tab-pane>\n          </el-tabs>\n          <!-- <nestedExample /> -->\n        </el-col>\n        <el-col\n          style=\"width: 265px;position: fixed;top: 15px;right: 0px;overflow-y: auto;\"\n          id=\"form-attr\"\n        >\n          <div style=\"margin-bottom: 10px;\">\n            <el-button\n              type=\"primary\"\n              @click=\"dialogVisible = true\"\n              icon=\"el-icon-check\"\n              size=\"mini\"\n              style=\"margin: 0 5px 10px 10px;\"\n            >保存</el-button>\n            <el-button\n              v-if=\"showNewVersion\"\n              type=\"primary\"\n              @click=\"dialogVisible_newVersion = true\"\n              icon=\"el-icon-check\"\n              size=\"mini\"\n              style=\"margin: 0 5px 10px 10px;\"\n            >保存新版本</el-button>\n            <el-button\n              type=\"info\"\n              @click=\"showPreview\"\n              icon=\"el-icon-view\"\n              size=\"mini\"\n              style=\"margin: 0 5px 10px 10px;\"\n            >预览</el-button>\n            <el-button\n              type=\"danger\"\n              plain\n              @click=\"visible = false\"\n              icon=\"el-icon-close\"\n              size=\"mini\"\n              style=\"margin: 0 5px 10px 10px;\"\n            >关闭</el-button>\n          </div>\n          <el-tabs\n            class=\"form-design\"\n            v-model=\"activeName\"\n            @tab-click=\"handleClick\"\n            style=\"border-left: 1px solid #eee;padding: 0 10px;overflow: auto;height: 100%;\"\n            id=\"form-design-right\"\n          >\n            <el-tab-pane label=\"字段属性\" name=\"1\" v-show=\"$store.state.formDesign.showType\">\n              <FDInput\n                v-show=\"$store.state.formDesign.showType === 'input'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n                :defaultValueList=\"defaultValueList\"\n              />\n              <FDTextArea\n                v-show=\"$store.state.formDesign.showType === 'textarea'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n              />\n              <FDIdea\n                v-show=\"$store.state.formDesign.showType === 'idea'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n              />\n              <FDRadio\n                v-show=\"$store.state.formDesign.showType === 'radio'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n              />\n              <FDNumber\n                v-show=\"$store.state.formDesign.showType === 'number'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n              />\n              <FDCheckbox\n                v-show=\"$store.state.formDesign.showType === 'checkbox'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n              />\n              <FDDateTime\n                v-show=\"$store.state.formDesign.showType === 'datetime'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n              />\n              <FDSelect\n                v-show=\"$store.state.formDesign.showType === 'select'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n              />\n              <FDSwitch\n                v-show=\"$store.state.formDesign.showType === 'switch'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n              />\n              <FDImg\n                v-show=\"$store.state.formDesign.showType === 'img'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n              />\n              <FDTitle\n                v-show=\"$store.state.formDesign.showType === 'title'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n              />\n              <FDGrid\n                v-show=\"$store.state.formDesign.showType === 'grid'\"\n                :propData=\"$store.state.formDesign.activeForm\"\n              />\n            </el-tab-pane>\n            <el-tab-pane label=\"表单属性\" name=\"2\">\n              <el-form label-position=\"top\" label-width=\"80px\" size=\"mini\">\n                <el-form-item label=\"标签对齐方式\">\n                  <el-radio-group v-model=\"formAttr.align\">\n                    <el-radio-button label=\"left\">左对齐</el-radio-button>\n                    <el-radio-button label=\"right\">右对齐</el-radio-button>\n                    <el-radio-button label=\"top\">顶部对齐</el-radio-button>\n                  </el-radio-group>\n                </el-form-item>\n                <el-form-item label=\"组件尺寸\">\n                  <el-radio-group v-model=\"formAttr.size\">\n                    <el-radio-button label=\"large\">大</el-radio-button>\n                    <el-radio-button label=\"medium\">中等</el-radio-button>\n                    <el-radio-button label=\"small \">小</el-radio-button>\n                    <el-radio-button label=\"mini \">迷你</el-radio-button>\n                  </el-radio-group>\n                </el-form-item>\n                <el-form-item label=\"表单字段宽度\">\n                  <el-input v-model=\"formAttr.labelWidth\"></el-input>\n                </el-form-item>\n\n                <el-form-item label=\"启用tab表单\">\n                  <el-switch v-model=\"formAttr.isTabs\" @change=\"changeTabMode\"></el-switch>\n                </el-form-item>\n                <el-form-item label=\"tab模式\" v-show=\"formAttr.isTabs\">\n                  <el-radio-group v-model=\"formAttr.tabType\">\n                    <el-radio-button label>简洁</el-radio-button>\n                    <el-radio-button label=\"card\">选项卡</el-radio-button>\n                    <el-radio-button label=\"border-card \">卡片化</el-radio-button>\n                  </el-radio-group>\n                </el-form-item>\n                <el-form-item label=\"tab选项配置\" v-show=\"formAttr.isTabs\">\n                  <div>\n                    <ul style=\"list-style: none;padding: 0;\">\n                      <li v-for=\"(item, i) in formAttr.tabs\" :key=\"i\" style=\"margin-bottom: 10px;\">\n                        <el-input\n                          size=\"small\"\n                          style=\"width:200px;\"\n                          :title=\"item.name\"\n                          v-model=\"item.name\"\n                        ></el-input>\n                        <i class=\"el-icon-circle-close\" style=\"color: red;\" @click=\"subOption(i)\"></i>\n                      </li>\n                      <li style=\"margin: 10px;\">\n                        <i\n                          class=\"el-icon-circle-plus\"\n                          style=\"color: #17B3A3;\"\n                          title=\"增加选项\"\n                          @click=\"addOption\"\n                        ></i>\n                      </li>\n                    </ul>\n                  </div>\n                </el-form-item>\n              </el-form>\n            </el-tab-pane>\n          </el-tabs>\n        </el-col>\n      </el-row>\n\n      <el-dialog title=\"表单预览\" :visible.sync=\"dialogFormVisible\" append-to-body custom-class=\"form-design-main\">\n        <el-form\n          :label-position=\"formAttr.align\"\n          :label-width=\"formAttr.labelWidth\"\n          :size=\"formAttr.size\"\n          :rules=\"rules\"\n          v-if=\"!formAttr.isTabs\"\n        >\n          <template v-for=\"(item, i) in $store.state.formDesign.formList\">\n            <el-form-item\n              :label=\"item.title\"\n              :prop=\"item.key\"\n              v-if=\"item.type !== 'grid' && item.type !== 'title'\"\n              :key=\"i\"\n            >\n              <el-input\n                v-if=\"item.type === 'input'\"\n                :placeholder=\"item.options.placeholder\"\n                :disabled=\"item.options.disabled\"\n                :readonly=\"item.options.readonly\"\n                :style=\"{width: item.options.width}\"\n              ></el-input>\n              <el-input\n                v-if=\"item.type === 'textarea'\"\n                :placeholder=\"item.options.placeholder\"\n                :disabled=\"item.options.disabled\"\n                :readonly=\"item.options.readonly\"\n                type=\"textarea\"\n                :rows=\"5\"\n                :style=\"{width: item.options.width}\"\n              ></el-input>\n              <template v-if=\"item.type === 'idea'\">\n                <el-input\n                  v-model=\"item.options.defaultValue\"\n                  :placeholder=\"item.options.placeholder\"\n                  :disabled=\"item.options.disabled\"\n                  :readonly=\"true\"\n                  type=\"textarea\"\n                  :rows=\"5\"\n                  :style=\"{width: item.options.width}\"\n                  :id=\"item.key\"\n                ></el-input>\n                <el-button\n                  type=\"text\"\n                  @click=\"ideaDialogVisible = true;markIdeaKey(item.key);\"\n                  :disabled=\"item.options.disabled\"\n                >选择快捷意见</el-button>\n              </template>\n              <el-input-number\n                v-if=\"item.type === 'number'\"\n                :disabled=\"item.options.disabled\"\n                :readonly=\"item.options.readonly\"\n                :style=\"{width: item.options.width}\"\n                :min=\"item.options.min\"\n                :max=\"item.options.max\"\n              ></el-input-number>\n              <el-radio-group\n                v-if=\"item.type === 'radio'\"\n                v-model=\"item.options.defaultValue\"\n                :disabled=\"item.options.disabled\"\n                :readonly=\"item.options.readonly\"\n                :style=\"{width: item.options.width}\"\n              >\n                <el-radio\n                  v-for=\"(item, i) in item.options.option\"\n                  :label=\"item.value\"\n                  :key=\"i\"\n                >{{item.label}}</el-radio>\n              </el-radio-group>\n              <el-checkbox-group\n                v-if=\"item.type === 'checkbox'\"\n                v-model=\"item.options.defaultValue\"\n                :disabled=\"item.options.disabled\"\n                :style=\"{width: item.options.width}\"\n              >\n                <el-checkbox\n                  v-for=\"(item, i) in item.options.option\"\n                  :label=\"item.value\"\n                  :key=\"i\"\n                >{{item.label}}</el-checkbox>\n              </el-checkbox-group>\n              <el-select\n                v-if=\"item.type === 'select'\"\n                :placeholder=\"item.options.placeholder\"\n                :style=\"{width: item.options.width}\"\n                :readonly=\"item.options.readonly\"\n                :disabled=\"item.options.disabled\"\n              >\n                <el-option\n                  v-for=\"(item, i) in item.options.option\"\n                  :key=\"i\"\n                  :label=\"item.label\"\n                  :value=\"item.value\"\n                ></el-option>\n              </el-select>\n              <el-switch\n                v-if=\"item.type === 'switch'\"\n                v-model=\"item.options.defaultValue\"\n                active-color=\"#13ce66\"\n                inactive-color=\"#EEEEEE\"\n                :style=\"{width: item.options.width}\"\n                :readonly=\"item.options.readonly\"\n                :disabled=\"item.options.disabled\"\n              ></el-switch>\n              <el-date-picker\n                type=\"datetime\"\n                v-if=\"item.type === 'datetime'\"\n                :placeholder=\"item.options.placeholder\"\n                :style=\"{width: item.options.width}\"\n                :disabled=\"item.options.disabled\"\n              ></el-date-picker>\n              <el-upload\n                v-if=\"item.type === 'img'\"\n                class=\"upload-demo\"\n                action=\"https://jsonplaceholder.typicode.com/posts/\"\n                :limit=\"1\"\n                :file-list=\"[{name: '图片.jpeg', url: item.options.defaultValue}]\"\n                :disabled=\"item.options.disabled\"\n                :readonly=\"true\"\n              >\n                <el-button size=\"small\" type=\"primary\">点击上传</el-button>\n                <div slot=\"tip\" class=\"el-upload__tip\">只能上传jpg/png文件，且不超过500kb</div>\n              </el-upload>\n            </el-form-item>\n            <p\n              v-if=\"item.type === 'title'\"\n              :style=\"{'text-align': item.options.align, 'font-size': item.options.fontSize, 'margin-bottom': '5px'}\"\n              :key=\"i\"\n            >{{item.value}}</p>\n            <el-row v-if=\"item.type === 'grid'\" :key=\"i\" :gutter=\"10\">\n              <el-col :span=\"col.span\" v-for=\"(col, j) in item.cols\" :key=\"j\" class=\"col\">\n                <template v-for=\"(item2, j) in col.list\">\n                  <el-form-item\n                    :label=\"item2.title\"\n                    :prop=\"item2.key\"\n                    v-if=\"item2.type !== 'title'\"\n                    :key=\"j\"\n                  >\n                    <el-input\n                      v-if=\"item2.type === 'input'\"\n                      :placeholder=\"item2.options.placeholder\"\n                      :disabled=\"item2.options.disabled\"\n                      :readonly=\"item2.options.readonly\"\n                      :style=\"{width: item2.options.width}\"\n                    ></el-input>\n                    <el-input\n                      v-if=\"item2.type === 'textarea'\"\n                      :placeholder=\"item2.options.placeholder\"\n                      :disabled=\"item2.options.disabled\"\n                      :readonly=\"item2.options.readonly\"\n                      type=\"textarea\"\n                      :rows=\"5\"\n                      :style=\"{width: item2.options.width}\"\n                    ></el-input>\n                    <el-input-number\n                      v-if=\"item2.type === 'number'\"\n                      :disabled=\"item2.options.disabled\"\n                      :readonly=\"item2.options.readonly\"\n                      :style=\"{width: item2.options.width}\"\n                      :min=\"item2.options.min\"\n                      :max=\"item2.options.max\"\n                    ></el-input-number>\n                    <el-radio-group\n                      v-if=\"item2.type === 'radio'\"\n                      v-model=\"item2.options.defaultValue\"\n                      :disabled=\"item2.options.disabled\"\n                      :readonly=\"item2.options.readonly\"\n                      :style=\"{width: item2.options.width}\"\n                    >\n                      <el-radio\n                        v-for=\"(item2, i) in item2.options.option\"\n                        :label=\"item2.value\"\n                        :key=\"i\"\n                      >{{item.label}}</el-radio>\n                    </el-radio-group>\n                    <el-checkbox-group\n                      v-if=\"item2.type === 'checkbox'\"\n                      v-model=\"item2.options.defaultValue\"\n                      :disabled=\"item2.options.disabled\"\n                      :readonly=\"item2.options.readonly\"\n                      :style=\"{width: item2.options.width}\"\n                    >\n                      <el-checkbox\n                        v-for=\"(item2, i) in item2.options.option\"\n                        :label=\"item2.value\"\n                        :key=\"i\"\n                      >{{item2.label}}</el-checkbox>\n                    </el-checkbox-group>\n                    <el-select\n                      v-if=\"item2.type === 'select'\"\n                      :placeholder=\"item2.options.placeholder\"\n                      :style=\"{width: item2.options.width}\"\n                      :readonly=\"item2.options.readonly\"\n                      :disabled=\"item2.options.disabled\"\n                    >\n                      <el-option\n                        v-for=\"(item2, i) in item2.options.option\"\n                        :key=\"i\"\n                        :label=\"item2.label\"\n                        :value=\"item2.value\"\n                      ></el-option>\n                    </el-select>\n                    <el-switch\n                      v-if=\"item2.type === 'switch'\"\n                      v-model=\"item2.options.defaultValue\"\n                      active-color=\"#13ce66\"\n                      inactive-color=\"#EEEEEE\"\n                      :style=\"{width: item2.options.width}\"\n                      :readonly=\"iitem2tem.options.readonly\"\n                      :disabled=\"item2.options.disabled\"\n                    ></el-switch>\n                    <el-date-picker\n                      type=\"datetime\"\n                      v-if=\"item2.type === 'datetime'\"\n                      :placeholder=\"item2.options.placeholder\"\n                      :style=\"{width: item2.options.width}\"\n                      :disabled=\"item2.options.disabled\"\n                    ></el-date-picker>\n                  </el-form-item>\n                  <p\n                    v-if=\"item2.type === 'title'\"\n                    :style=\"{'text-align': item2.options.align, 'font-size': item2.options.fontSize, 'margin-bottom': '5px'}\"\n                    :key=\"j\"\n                  >{{item2.value}}</p>\n                </template>\n              </el-col>\n            </el-row>\n          </template>\n          <el-form-item>\n            <el-button type=\"primary\" @click=\"submitForm('rules')\">模拟提交表单</el-button>\n          </el-form-item>\n        </el-form>\n\n        <el-tabs\n          :type=\"formAttr.tabType\"\n          v-else\n          @tab-click=\"tabHandleClick_preview\"\n          v-model=\"tabIndex\"\n        >\n          <el-tab-pane\n            :label=\"item.name\"\n            :name=\"String(i)\"\n            v-for=\"(item, i) in formAttr.tabs\"\n            :key=\"i\"\n          >\n            <el-form\n              :label-position=\"formAttr.align\"\n              :label-width=\"formAttr.labelWidth\"\n              :size=\"formAttr.size\"\n              :rules=\"rules\"\n            >\n              <template v-for=\"(item, i) in $store.state.formDesign.formList\">\n                <el-form-item\n                  :label=\"item.title\"\n                  :prop=\"item.key\"\n                  v-if=\"item.type !== 'grid' && item.type !== 'title'\"\n                  :key=\"i\"\n                >\n                  <el-input\n                    v-if=\"item.type === 'input'\"\n                    :placeholder=\"item.options.placeholder\"\n                    :disabled=\"item.options.disabled\"\n                    :readonly=\"item.options.readonly\"\n                    :style=\"{width: item.options.width}\"\n                  ></el-input>\n                  <el-input\n                    v-if=\"item.type === 'textarea'\"\n                    :placeholder=\"item.options.placeholder\"\n                    :disabled=\"item.options.disabled\"\n                    :readonly=\"item.options.readonly\"\n                    type=\"textarea\"\n                    :rows=\"5\"\n                    :style=\"{width: item.options.width}\"\n                  ></el-input>\n                  <el-input-number\n                    v-if=\"item.type === 'number'\"\n                    :disabled=\"item.options.disabled\"\n                    :readonly=\"item.options.readonly\"\n                    :style=\"{width: item.options.width}\"\n                    :min=\"item.options.min\"\n                    :max=\"item.options.max\"\n                  ></el-input-number>\n                  <el-radio-group\n                    v-if=\"item.type === 'radio'\"\n                    v-model=\"item.options.defaultValue\"\n                    :disabled=\"item.options.disabled\"\n                    :readonly=\"item.options.readonly\"\n                    :style=\"{width: item.options.width}\"\n                  >\n                    <el-radio\n                      v-for=\"(item, i) in item.options.option\"\n                      :label=\"item.value\"\n                      :key=\"i\"\n                    >{{item.label}}</el-radio>\n                  </el-radio-group>\n                  <el-checkbox-group\n                    v-if=\"item.type === 'checkbox'\"\n                    v-model=\"item.options.defaultValue\"\n                    :disabled=\"item.options.disabled\"\n                    :readonly=\"item.options.readonly\"\n                    :style=\"{width: item.options.width}\"\n                  >\n                    <el-checkbox\n                      v-for=\"(item, i) in item.options.option\"\n                      :label=\"item.value\"\n                      :key=\"i\"\n                    >{{item.label}}</el-checkbox>\n                  </el-checkbox-group>\n                  <el-select\n                    v-if=\"item.type === 'select'\"\n                    :placeholder=\"item.options.placeholder\"\n                    :style=\"{width: item.options.width}\"\n                    :readonly=\"item.options.readonly\"\n                    :disabled=\"item.options.disabled\"\n                  >\n                    <el-option\n                      v-for=\"(item, i) in item.options.option\"\n                      :key=\"i\"\n                      :label=\"item.label\"\n                      :value=\"item.value\"\n                    ></el-option>\n                  </el-select>\n                  <el-switch\n                    v-if=\"item.type === 'switch'\"\n                    v-model=\"item.options.defaultValue\"\n                    active-color=\"#13ce66\"\n                    inactive-color=\"#EEEEEE\"\n                    :style=\"{width: item.options.width}\"\n                    :readonly=\"item.options.readonly\"\n                    :disabled=\"item.options.disabled\"\n                  ></el-switch>\n                  <el-date-picker\n                    type=\"datetime\"\n                    v-if=\"item.type === 'datetime'\"\n                    :placeholder=\"item.options.placeholder\"\n                    :style=\"{width: item.options.width}\"\n                    :disabled=\"item.options.disabled\"\n                  ></el-date-picker>\n                </el-form-item>\n                <p\n                  v-if=\"item.type === 'title'\"\n                  :style=\"{'text-align': item.options.align, 'font-size': item.options.fontSize, 'margin-bottom': '5px'}\"\n                  :key=\"i\"\n                >{{item.value}}</p>\n                <el-row v-if=\"item.type === 'grid'\" :key=\"i\">\n                  <el-col\n                    :span=\"col.span\"\n                    v-for=\"(col, j) in item.cols\"\n                    :key=\"j\"\n                    class=\"col\"\n                    style=\"padding: 5px;\"\n                  >\n                    <template v-for=\"(item2, j) in col.list\">\n                      <el-form-item\n                        :label=\"item2.title\"\n                        :prop=\"item2.key\"\n                        v-if=\"item2.type !== 'title'\"\n                        :key=\"j\"\n                      >\n                        <el-input\n                          v-if=\"item2.type === 'input'\"\n                          :placeholder=\"item2.options.placeholder\"\n                          :disabled=\"item2.options.disabled\"\n                          :readonly=\"item2.options.readonly\"\n                          :style=\"{width: item2.options.width}\"\n                        ></el-input>\n                        <el-input\n                          v-if=\"item2.type === 'textarea'\"\n                          :placeholder=\"item2.options.placeholder\"\n                          :disabled=\"item2.options.disabled\"\n                          :readonly=\"item2.options.readonly\"\n                          type=\"textarea\"\n                          :rows=\"5\"\n                          :style=\"{width: item2.options.width}\"\n                        ></el-input>\n                        <el-input-number\n                          v-if=\"item2.type === 'number'\"\n                          :disabled=\"item2.options.disabled\"\n                          :readonly=\"item2.options.readonly\"\n                          :style=\"{width: item2.options.width}\"\n                          :min=\"item2.options.min\"\n                          :max=\"item2.options.max\"\n                        ></el-input-number>\n                        <el-radio-group\n                          v-if=\"item2.type === 'radio'\"\n                          v-model=\"item2.options.defaultValue\"\n                          :disabled=\"item2.options.disabled\"\n                          :readonly=\"item2.options.readonly\"\n                          :style=\"{width: item2.options.width}\"\n                        >\n                          <el-radio\n                            v-for=\"(item2, i) in item2.options.option\"\n                            :label=\"item2.value\"\n                            :key=\"i\"\n                          >{{item.label}}</el-radio>\n                        </el-radio-group>\n                        <el-checkbox-group\n                          v-if=\"item2.type === 'checkbox'\"\n                          v-model=\"item2.options.defaultValue\"\n                          :disabled=\"item2.options.disabled\"\n                          :readonly=\"item2.options.readonly\"\n                          :style=\"{width: item2.options.width}\"\n                        >\n                          <el-checkbox\n                            v-for=\"(item2, i) in item2.options.option\"\n                            :label=\"item2.value\"\n                            :key=\"i\"\n                          >{{item2.label}}</el-checkbox>\n                        </el-checkbox-group>\n                        <el-select\n                          v-if=\"item2.type === 'select'\"\n                          :placeholder=\"item2.options.placeholder\"\n                          :style=\"{width: item2.options.width}\"\n                          :readonly=\"item2.options.readonly\"\n                          :disabled=\"item2.options.disabled\"\n                        >\n                          <el-option\n                            v-for=\"(item2, i) in item2.options.option\"\n                            :key=\"i\"\n                            :label=\"item2.label\"\n                            :value=\"item2.value\"\n                          ></el-option>\n                        </el-select>\n                        <el-switch\n                          v-if=\"item2.type === 'switch'\"\n                          v-model=\"item2.options.defaultValue\"\n                          active-color=\"#13ce66\"\n                          inactive-color=\"#EEEEEE\"\n                          :style=\"{width: item2.options.width}\"\n                          :readonly=\"iitem2tem.options.readonly\"\n                          :disabled=\"item2.options.disabled\"\n                        ></el-switch>\n                        <el-date-picker\n                          type=\"datetime\"\n                          v-if=\"item2.type === 'datetime'\"\n                          :placeholder=\"item2.options.placeholder\"\n                          :style=\"{width: item2.options.width}\"\n                          :disabled=\"item2.options.disabled\"\n                        ></el-date-picker>\n                      </el-form-item>\n                      <p\n                        v-if=\"item2.type === 'title'\"\n                        :style=\"{'text-align': item2.options.align, 'font-size': item2.options.fontSize, 'margin-bottom': '5px'}\"\n                        :key=\"j\"\n                      >{{item2.value}}</p>\n                    </template>\n                  </el-col>\n                </el-row>\n              </template>\n              <el-form-item>\n                <el-button type=\"primary\" @click=\"submitForm('rules')\">模拟提交表单</el-button>\n              </el-form-item>\n            </el-form>\n          </el-tab-pane>\n        </el-tabs>\n\n        <div slot=\"footer\" class=\"dialog-footer\">\n          <el-button @click=\"dialogFormVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"dialogFormVisible = false\">确 定</el-button>\n        </div>\n      </el-dialog>\n\n      <el-dialog title=\"保存\" :visible.sync=\"dialogVisible\" append-to-body>\n        <el-form :model=\"saveData\" @keyup.enter.native=\"getDataList()\" label-position=\"left\">\n          <el-form-item label=\"名称\">\n            <el-input v-model=\"saveData.name\" placeholder=\"名称\" clearable style=\"width: 100%;\"></el-input>\n          </el-form-item>\n          <!-- <el-form-item label=\"编码\">\n            <el-input v-model=\"saveData.code\" placeholder=\"编码\" clearable style=\"width: 100%;\"></el-input>\n          </el-form-item> -->\n          <el-form-item label=\"备注\">\n            <el-input\n              style=\"width: 100%;\"\n              type=\"textarea\"\n              :autosize=\"{ minRows: 2, maxRows: 4}\"\n              placeholder=\"请输入内容\"\n              v-model=\"saveData.remarks\"\n            ></el-input>\n          </el-form-item>\n        </el-form>\n        <div slot=\"footer\" class=\"dialog-footer\">\n          <el-button @click=\"dialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"save\">确 定</el-button>\n        </div>\n      </el-dialog>\n\n      <el-dialog title=\"保存新版本\" :visible.sync=\"dialogVisible_newVersion\" append-to-body>\n        <el-form :model=\"saveData\" @keyup.enter.native=\"getDataList()\" label-position=\"left\">\n          <el-form-item label=\"名称\">\n            <el-input v-model=\"saveData.name\" placeholder=\"名称\" clearable style=\"width: 100%;\"></el-input>\n          </el-form-item>\n          <!-- <el-form-item label=\"编码\">\n            <el-input v-model=\"saveData.code\" placeholder=\"编码\" clearable style=\"width: 100%;\"></el-input>\n          </el-form-item> -->\n          <el-form-item label=\"备注\">\n            <el-input\n              style=\"width: 100%;\"\n              type=\"textarea\"\n              :autosize=\"{ minRows: 2, maxRows: 4}\"\n              placeholder=\"请输入内容\"\n              v-model=\"saveData.remarks\"\n            ></el-input>\n          </el-form-item>\n        </el-form>\n        <div slot=\"footer\" class=\"dialog-footer\">\n          <el-button @click=\"dialogVisible = false\">取 消</el-button>\n          <el-button type=\"primary\" @click=\"saveNewVersion\">确 定</el-button>\n        </div>\n      </el-dialog>\n\n      <el-dialog\n        title=\"选择意见\"\n        :visible.sync=\"ideaDialogVisible\"\n        append-to-body\n        modal-append-to-body\n        width=\"30%\"\n      >\n        <el-tabs v-model=\"ideaTabIndex\">\n          <el-tab-pane label=\"个人意见\" name=\"1\">\n            <el-table :data=\"idea.personal\" style=\"width: 100%\">\n              <el-table-column type=\"index\" label=\"序号\" width=\"180\"></el-table-column>\n              <el-table-column prop=\"ideaNotes\" label=\"意见内容\" width=\"180\">\n                <template slot-scope=\"scope\">\n                  <a\n                    href=\"javascript:void(0);\"\n                    @click=\"appendNote(scope.row.ideaNotes)\"\n                  >{{scope.row.ideaNotes}}</a>\n                </template>\n              </el-table-column>\n            </el-table>\n          </el-tab-pane>\n          <el-tab-pane label=\"公共意见\" name=\"2\">\n            <el-table :data=\"idea.public\" style=\"width: 100%\">\n              <el-table-column type=\"index\" label=\"序号\" width=\"180\"></el-table-column>\n              <el-table-column prop=\"ideaNotes\" label=\"意见内容\" width=\"180\">\n                <template slot-scope=\"scope\">\n                  <a\n                    href=\"javascript:void(0);\"\n                    @click=\"appendNote(scope.row.ideaNotes)\"\n                  >{{scope.row.ideaNotes}}</a>\n                </template>\n              </el-table-column>\n            </el-table>\n          </el-tab-pane>\n        </el-tabs>\n        <span slot=\"footer\" class=\"dialog-footer\">\n          <el-button type=\"primary\" @click=\"ideaDialogVisible = false\">确 定</el-button>\n        </span>\n      </el-dialog>\n    </div>\n  </el-dialog>\n</template>\n\n<script>\nimport FDInput from '@/components/form-design/FDInput'\nimport FDTextArea from '@/components/form-design/FDTextArea'\nimport FDIdea from '@/components/form-design/FDIdea'\nimport FDNumber from '@/components/form-design/FDNumber'\nimport FDRadio from '@/components/form-design/FDRadio'\nimport FDCheckbox from '@/components/form-design/FDCheckbox'\nimport FDDateTime from '@/components/form-design/FDDateTime'\nimport FDSelect from '@/components/form-design/FDSelect'\nimport FDSwitch from '@/components/form-design/FDSwitch'\nimport FDImg from '@/components/form-design/FDImg'\nimport Panel from '@/components/form-design/Panel'\nimport Test from '@/components/form-design/Test'\nimport FDMenu from '@/components/form-design/FDMenu'\nimport FDGrid from '@/components/form-design/FDGrid'\nimport nestedExample from '@/components/form-design/nestedExample'\nimport common from '@/utils/common'\nimport FDTitle from '@/components/form-design/FDTitle'\nimport bus from '@/utils/bus'\nexport default {\n  components: {\n    FDInput,\n    FDTextArea,\n    FDNumber,\n    FDRadio,\n    FDCheckbox,\n    FDDateTime,\n    FDSelect,\n    FDSwitch,\n    FDImg,\n    Panel,\n    Test,\n    FDMenu,\n    nestedExample,\n    FDGrid,\n    FDTitle,\n    FDIdea\n  },\n  data () {\n    return {\n      visible: false,\n      activeName: '2',\n      formAttr: {\n        align: 'left',\n        size: 'medium',\n        labelWidth: '80px',\n        isTabs: false,\n        tabType: 'card',\n        tabs: [\n          {\n            name: 'tab1',\n            formList: []\n          }\n        ]\n      },\n      dialogFormVisible: false,\n      dataListLoading: false,\n      dialogVisible: false,\n      dialogVisible_newVersion: false,\n      tabIndex: '0',\n      saveData: {\n        code: '',\n        columnList: [\n        ],\n        content: '',\n        name: '',\n        remarks: ''\n      },\n      dataForm: {\n        name: '',\n        code: ''\n      },\n      dataList: [],\n      pageIndex: 1,\n      pageSize: 10,\n      totalPage: 0,\n      // eslint-disable-next-line no-dupe-keys\n      dataListLoading: false,\n      columnList: [],\n      columnList_extend: [],\n      rules: {},\n      timer: null,\n      idea: {\n        personal: [\n          {\n            'ideaId': '402880ee6c3df518016c3e5251980008',\n            'mainType': 1,\n            'userId': null,\n            'ideaNotes': '这是一条模拟个人意见文本',\n            'sortOrder': null,\n            'state': 1\n          }\n        ],\n        public: [\n          {\n            'ideaId': '402880ee6c3df518016c3e5251980008',\n            'mainType': 1,\n            'userId': null,\n            'ideaNotes': '这是一条模拟公共意见文本',\n            'sortOrder': null,\n            'state': 1\n          }\n        ]\n      },\n      ideaDialogVisible: false,\n      ideaTabIndex: '1',\n      defaultValueList: [],\n      id: ''\n    }\n  },\n  computed: {\n    showNewVersion () {\n      return !common.isEmpty(this.id)\n    }\n  },\n  methods: {\n    reset () {\n      this.saveData = {\n        code: '',\n        columnList: [\n        ],\n        content: '',\n        name: '',\n        remarks: ''\n      }\n\n      this.formAttr = {\n        align: 'left',\n        size: 'medium',\n        labelWidth: '80px',\n        isTabs: false,\n        tabType: 'card',\n        tabs: [\n          {\n            name: 'tab1',\n            formList: []\n          }\n        ]\n      }\n      this.id = ''\n    },\n    showPreview () {\n      this.dialogFormVisible = true\n      this.tabIndex = '0'\n      if (this.formAttr.isTabs) {\n        this.$store.dispatch('formDesign/setFormList', this.formAttr.tabs[0].formList)\n      }\n      this.initFormRule()\n    },\n    formListCallBack (formList) {\n      this.formAttr.tabs[Number(this.tabIndex)].formList = this.$store.state.formDesign.formList\n      console.log('this.formAttr', this.formAttr)\n    },\n    tabHandleClick (tab, event) {\n      console.log(\n        'this.$store.state.formDesign.formList = ',\n        this.$store.state.formDesign.formList\n      )\n      console.log(tab, event)\n      this.$refs.Panel[Number(this.tabIndex)].init(\n        common.deepClone(this.formAttr.tabs[Number(this.tabIndex)].formList)\n      )\n      // this.$refs.Panel[Number(this.tabIndex)].init(this.$store.state.formDesign.formList);\n    },\n    tabHandleClick_preview (tab, event) {\n      console.log('tab.index', tab.index)\n      this.$store.dispatch(\n        'formDesign/setFormList',\n        common.deepClone(this.formAttr.tabs[Number(tab.index)].formList)\n      )\n      let formList = this.formAttr.tabs[Number(tab.index)].formList\n      let rules = {}\n      formList.forEach(element => {\n        if (element.options.required) {\n          rules[element.key] = [{ required: element.options.required, message: '必填项不能为空', trigger: 'blur' }]\n        }\n      })\n      this.rules = rules\n    },\n    addOption () {\n      this.formAttr.tabs.push({\n        name: `tab${this.formAttr.tabs.length + 1}`,\n        formList: []\n      })\n    },\n    subOption (index) {\n      this.formAttr.tabs.splice(index, 1)\n    },\n    handleClick (tab, event) {\n      console.log(tab, event)\n    },\n\n    submitForm (formName) {\n      this.$refs[formName].validate(valid => {\n        if (valid) {\n          alert('submit!')\n        } else {\n          console.log('error submit!!')\n          return false\n        }\n      })\n    },\n    packData (formList, tabName = null) {\n      for (let i = 0; i < formList.length; i++) {\n        const element = formList[i]\n        if (element.type !== 'grid') {\n          // eslint-disable-next-line no-unused-vars\n          let exist = false\n\n          this.columnList.forEach(element2 => {\n            if (element2.code === element.code) {\n              exist = true\n              element2.code = element.code\n              element2.placeholder = element.options.placeholder\n              // element2.defaultValue = element.options.defaultValue\n              element2.isReadonly = element.options.readonly\n              element2.name = element.title\n            }\n          })\n\n          if (exist) continue\n          switch (element.type) {\n            case 'input':\n              this.columnList_extend.push({\n                key: element.key,\n                code: element.code,\n                tableColumnCode: element.tableColumnCode,\n                placeholder: element.options.placeholder,\n                // defaultValue: element.options.defaultValue,\n                formType: element.formType,\n                isReadonly: element.options.readonly,\n                len: element.options.maxlength,\n                name: element.title,\n                tabName: tabName\n              })\n              break\n            case 'textarea':\n              this.columnList_extend.push({\n                key: element.key,\n                code: element.code,\n                tableColumnCode: element.tableColumnCode,\n                placeholder: element.options.placeholder,\n                // defaultValue: element.options.defaultValue,\n                formType: element.formType,\n                isReadonly: element.options.readonly,\n                len: element.options.maxlength,\n                name: element.title,\n                tabName: tabName\n              })\n              break\n            case 'idea':\n              this.columnList_extend.push({\n                key: element.key,\n                code: element.code,\n                tableColumnCode: element.tableColumnCode,\n                placeholder: element.options.placeholder,\n                // defaultValue: element.options.defaultValue,\n                formType: element.formType,\n                isReadonly: element.options.readonly,\n                len: element.options.maxlength,\n                name: element.title,\n                tabName: tabName\n              })\n              break\n            case 'number':\n              this.columnList_extend.push({\n                key: element.key,\n                code: element.code,\n                tableColumnCode: element.tableColumnCode,\n                placeholder: element.options.placeholder,\n                // defaultValue: element.options.defaultValue,\n                formType: element.formType,\n                isReadonly: element.options.readonly,\n                len: element.options.maxlength,\n                name: element.title,\n                tabName: tabName\n              })\n              break\n            case 'radio':\n              this.columnList_extend.push({\n                key: element.key,\n                code: element.code,\n                tableColumnCode: element.tableColumnCode,\n                placeholder: element.options.placeholder,\n                // defaultValue: element.options.defaultValue,\n                formType: element.formType,\n                isReadonly: element.options.readonly,\n                len: element.options.maxlength,\n                name: element.title,\n                tabName: tabName\n              })\n              break\n            case 'checkbox':\n              this.columnList_extend.push({\n                key: element.key,\n                code: element.code,\n                tableColumnCode: element.tableColumnCode,\n                placeholder: element.options.placeholder,\n                defaultValue: '',\n                formType: element.formType,\n                isReadonly: element.options.readonly,\n                len: element.options.maxlength,\n                name: element.title,\n                tabName: tabName\n              })\n              break\n            case 'datetime':\n              this.columnList_extend.push({\n                key: element.key,\n                code: element.code,\n                tableColumnCode: element.tableColumnCode,\n                placeholder: element.options.placeholder,\n                // defaultValue: element.options.defaultValue,\n                formType: element.formType,\n                isReadonly: element.options.readonly,\n                len: element.options.maxlength,\n                name: element.title,\n                tabName: tabName\n              })\n              break\n            case 'select':\n              this.columnList_extend.push({\n                key: element.key,\n                code: element.code,\n                tableColumnCode: element.tableColumnCode,\n                placeholder: element.options.placeholder,\n                // defaultValue: element.options.defaultValue,\n                formType: element.formType,\n                isReadonly: element.options.readonly,\n                len: element.options.maxlength,\n                name: element.title,\n                tabName: tabName\n              })\n              break\n            case 'switch':\n              this.columnList_extend.push({\n                key: element.key,\n                code: element.code,\n                tableColumnCode: element.tableColumnCode,\n                placeholder: element.options.placeholder,\n                // defaultValue: element.options.defaultValue,\n                formType: element.formType,\n                isReadonly: element.options.readonly,\n                len: element.options.maxlength,\n                name: element.title,\n                tabName: tabName\n              })\n              break\n            default:\n              break\n          }\n        } else {\n          element.cols.forEach(element2 => {\n            this.packData(element2.list, tabName)\n          })\n        }\n      }\n    },\n    markIdeaKey (ideaKey) {\n      sessionStorage.ideaKey = ideaKey\n    },\n    appendNote (note) {\n      const realname = '管理员'\n      const nowDate = common.formatDateCN(new Date().getTime())\n      const result = `${note}\\n\\n                                                  ${realname}\\n                                                  ${nowDate}`\n      // let newFormList = common.deepClone(this.$store.state.formDesign.formList)\n      // newFormList.forEach((el) => {\n      //   if (el.type === 'idea' && el.key === sessionStorage.ideaKey) {\n      //     el.options.defaultValue = result\n      //     this.$emit('syncList', newFormList)\n      //     this.$store.dispatch(\n      //       'formDesign/setFormList',\n      //       common.deepClone(newFormList)\n      //     )\n      //   }\n      // })\n\n      this.ideaDialogVisible = false\n      window.document.getElementById(sessionStorage.ideaKey).value = result\n    },\n    // 保存数据\n    save () {\n      console.log(this.saveData)\n      if (!this.verify()) return\n      if (this.formAttr.isTabs) {\n        this.formAttr.tabs.forEach(element => {\n          this.packData(common.deepClone(element.formList), element.name)\n        })\n      } else {\n        this.packData(common.deepClone(this.$store.state.formDesign.formList))\n      }\n      console.log('this.columnList', this.columnList)\n      console.log('this.columnList_extend', this.columnList_extend)\n      // return\n      // eslint-disable-next-line camelcase\n      let all_columnList = []\n      // eslint-disable-next-line camelcase\n      let all_formListCode = []\n      console.log('this.formAttr', this.formAttr)\n      if (this.formAttr.isTabs) {\n        this.formAttr.tabs.forEach(element => {\n          element.formList.forEach(element2 => {\n            if (element2.type === 'grid') {\n              element2.cols.forEach(element3 => {\n                element3.list.forEach(element4 => {\n                  all_formListCode.push(element4.code)\n                })\n              })\n            } else {\n              if (element2.type !== 'title') { all_formListCode.push(element2.code) }\n            }\n          })\n        })\n      } else {\n        this.$store.state.formDesign.formList.forEach(element => {\n          if (element.type === 'grid') {\n            element.cols.forEach(element2 => {\n              element2.list.forEach(element3 => {\n                all_formListCode.push(element3.code)\n              })\n            })\n          } else {\n            if (element.type !== 'title') { all_formListCode.push(element.code) }\n          }\n        })\n      }\n      console.log('all_formListCode', all_formListCode)\n      let tempArray = [...this.columnList, ...this.columnList_extend]\n      for (let i = 0; i < tempArray.length; i++) {\n        const element = tempArray[i]\n        if (all_formListCode.includes(element.code)) {\n          all_columnList.push(element)\n        }\n      }\n      // console.log('all_columnList', all_columnList)\n      // console.log('this.formAttr.tabs', this.formAttr.tabs)\n\n      let result = []\n      // 解决排序问题\n      if (this.formAttr.isTabs) {\n        this.formAttr.tabs.forEach(el1 => {\n          el1.formList.forEach(el2 => {\n            if (el2.type === 'grid') {\n              el2.cols.forEach(el3 => {\n                el3.list.forEach(el4 => {\n                  all_columnList.forEach(el5 => {\n                    if (el4.key === el5.key && el4.code === el5.code) {\n                      result.push(el5)\n                    }\n                  })\n                })\n              })\n            } else {\n              all_columnList.forEach(el5 => {\n                if (el2.key === el5.key) {\n                  result.push(el5)\n                }\n              })\n            }\n          })\n        })\n      } else {\n        common.deepClone(this.$store.state.formDesign.formList).forEach(el2 => {\n          if (el2.type === 'grid') {\n            el2.cols.forEach(el3 => {\n              el3.list.forEach(el4 => {\n                all_columnList.forEach(el5 => {\n                  if (el4.key === el5.key) {\n                    result.push(el5)\n                  }\n                })\n              })\n            })\n          } else {\n            all_columnList.forEach(el5 => {\n              if (el2.key === el5.key) {\n                result.push(el5)\n              }\n            })\n          }\n        })\n      }\n\n      console.log('排序后columnListresult', common.deepClone(result))\n\n      this.saveData.columnList = common.deepClone(result)\n      this.saveData.content = JSON.stringify({\n        formList: this.$store.state.formDesign.formList,\n        formAttr: this.formAttr\n      })\n      this.columnList = []\n      this.dataListLoading = true\n      console.log('this.saveData', common.deepClone(this.saveData))\n      common.loading.show()\n      this.$http({\n        url: this.$http.adornUrl('/api-flow/dycform/save'),\n        method: 'put',\n        data: this.$http.adornData(this.saveData)\n      })\n        .then(({ data }) => {\n          common.loading.hide()\n          if (data && data.code === 0) {\n            this.$message({\n              message: '保存成功',\n              type: 'success'\n            })\n            this.dialogVisible = false\n            this.visible = false\n            this.$emit('refreshDataList')\n          } else {\n            this.$message.error(data.msg)\n          }\n        })\n        .catch(() => { common.loading.hide() })\n    },\n    saveNewVersion () {\n      console.log(this.saveData)\n      if (!this.verify()) return\n      if (this.formAttr.isTabs) {\n        this.formAttr.tabs.forEach(element => {\n          this.packData(common.deepClone(element.formList), element.name)\n        })\n      } else {\n        this.packData(common.deepClone(this.$store.state.formDesign.formList))\n      }\n      console.log('this.columnList', this.columnList)\n      console.log('this.columnList_extend', this.columnList_extend)\n      // return\n      // eslint-disable-next-line camelcase\n      let all_columnList = []\n      // eslint-disable-next-line camelcase\n      let all_formListCode = []\n      console.log('this.formAttr', this.formAttr)\n      if (this.formAttr.isTabs) {\n        this.formAttr.tabs.forEach(element => {\n          element.formList.forEach(element2 => {\n            if (element2.type === 'grid') {\n              element2.cols.forEach(element3 => {\n                element3.list.forEach(element4 => {\n                  all_formListCode.push(element4.code)\n                })\n              })\n            } else {\n              if (element2.type !== 'title') { all_formListCode.push(element2.code) }\n            }\n          })\n        })\n      } else {\n        this.$store.state.formDesign.formList.forEach(element => {\n          if (element.type === 'grid') {\n            element.cols.forEach(element2 => {\n              element2.list.forEach(element3 => {\n                all_formListCode.push(element3.code)\n              })\n            })\n          } else {\n            if (element.type !== 'title') { all_formListCode.push(element.code) }\n          }\n        })\n      }\n      console.log('all_formListCode', all_formListCode)\n      let tempArray = [...this.columnList, ...this.columnList_extend]\n      for (let i = 0; i < tempArray.length; i++) {\n        const element = tempArray[i]\n        if (all_formListCode.includes(element.code)) {\n          all_columnList.push(element)\n        }\n      }\n      console.log('all_columnList', all_columnList)\n\n      let result = []\n      // 解决排序问题\n      if (this.formAttr.isTabs) {\n        this.formAttr.tabs.forEach(el1 => {\n          el1.formList.forEach(el2 => {\n            if (el2.type === 'grid') {\n              el2.cols.forEach(el3 => {\n                el3.list.forEach(el4 => {\n                  all_columnList.forEach(el5 => {\n                    if (el4.key === el5.key && el4.code === el5.code) {\n                      result.push(el5)\n                    }\n                  })\n                })\n              })\n            } else {\n              all_columnList.forEach(el5 => {\n                if (el2.key === el5.key) {\n                  result.push(el5)\n                }\n              })\n            }\n          })\n        })\n      } else {\n        common.deepClone(this.$store.state.formDesign.formList).forEach(el2 => {\n          if (el2.type === 'grid') {\n            el2.cols.forEach(el3 => {\n              el3.list.forEach(el4 => {\n                all_columnList.forEach(el5 => {\n                  if (el4.key === el5.key) {\n                    result.push(el5)\n                  }\n                })\n              })\n            })\n          } else {\n            all_columnList.forEach(el5 => {\n              if (el2.key === el5.key) {\n                result.push(el5)\n              }\n            })\n          }\n        })\n      }\n\n      this.saveData.columnList = common.deepClone(result)\n      this.saveData.content = JSON.stringify({\n        formList: this.$store.state.formDesign.formList,\n        formAttr: this.formAttr\n      })\n      this.columnList = []\n      this.dataListLoading = true\n      console.log('this.saveData', common.deepClone(this.saveData))\n      common.loading.show()\n      this.$http({\n        url: this.$http.adornUrl('/api-flow/dycform/saveAsNewVersion'),\n        method: 'put',\n        data: this.$http.adornData(this.saveData)\n      })\n        .then(({ data }) => {\n          common.loading.hide()\n          if (data && data.code === 0) {\n            this.$message({\n              message: '保存新版本成功',\n              type: 'success'\n            })\n            this.dialogVisible_newVersion = false\n            this.visible = false\n            this.$emit('refreshDataList')\n          } else {\n            this.$message.error(data.msg)\n          }\n        })\n        .catch(() => { })\n    },\n    init (id = '') {\n      this.visible = true\n      this.columnList = []\n      this.columnList_extend = []\n      this.activeName = '2'\n      this.tabIndex = '0'\n      this.reset()\n      this.$nextTick(() => {\n        if (common.isEmpty(id)) {\n          this.$store.dispatch('formDesign/setFormList', [])\n          return\n        }\n        this.id = id\n        this.$http({\n          url: this.$http.adornUrl('/api-flow/dycform/get2'),\n          method: 'get',\n          params: this.$http.adornParams({ id })\n        })\n          .then(({ data }) => {\n            if (data && data.code === 0) {\n              const {defaultValueList, dycFormVo} = data.resultData\n              this.defaultValueList = defaultValueList\n              this.saveData = common.deepClone(dycFormVo)\n              this.columnList = common.deepClone(dycFormVo.columnList)\n              this.columnList_extend = []\n              // eslint-disable-next-line no-unused-vars\n\n              let content = JSON.parse(dycFormVo.content)\n              this.formAttr = content.formAttr\n\n              if (this.formAttr.isTabs) {\n                this.$store.dispatch(\n                  'formDesign/setFormList',\n                  this.formAttr.tabs[0].formList\n                )\n              } else {\n                this.$store.dispatch('formDesign/setFormList', content.formList)\n              }\n            } else {\n              this.$message.error(data.msg)\n            }\n          })\n          .catch(() => { })\n      })\n    },\n    verify () {\n      if (common.isEmpty(this.saveData.name)) {\n        this.$message({\n          message: '表单名称不能为空',\n          type: 'warning'\n        })\n        return false\n      }\n      // if (common.isEmpty(this.saveData.code)) {\n      //   this.$message({\n      //     message: '表单编码不能为空',\n      //     type: 'warning'\n      //   })\n      //   return false\n      // }\n      // if (common.isEmpty(this.saveData.content)) {\n      //   this.$message({\n      //     message: '表单内容不能为空',\n      //     type: 'warning'\n      //   })\n      //   return false\n      // }\n      return true\n    },\n    // 获取数据列表\n    getDataList () {\n      this.dataListLoading = true\n      this.$http({\n        url: this.$http.adornUrl('/api-flow/dyctable/list'),\n        method: 'post',\n        params: this.$http.adornParams(\n          {\n            pageNo: this.pageIndex,\n            pageSize: this.pageSize,\n            name: this.dataForm.name,\n            code: this.dataForm.code\n          },\n          false\n        )\n      }).then(({ data }) => {\n        if (data && data.code === 0) {\n          this.dataList = data.resultData.resultList\n          this.totalPage = data.resultData.sum\n        } else {\n          this.dataList = []\n          this.totalPage = 0\n        }\n        this.dataListLoading = false\n      })\n    },\n    changeTabMode (value) {\n      if (value) {\n        let formAttr = common.deepClone(this.formAttr)\n        formAttr.tabType = 'card'\n        formAttr.tabs = [\n          {\n            name: 'tab1',\n            formList: this.$store.state.formDesign.formList\n          }\n        ]\n        this.formAttr = formAttr\n      }\n    },\n    initFormRule () {\n      if (this.formAttr.isTabs) {\n        let formList = this.formAttr.tabs[0].formList\n        let rules = {}\n        formList.forEach(element => {\n          if (element.options.required) {\n            rules[element.key] = [{ required: element.options.required, message: '必填项不能为空', trigger: 'blur' }]\n          }\n        })\n        this.rules = rules\n      } else {\n        let formList = this.$store.state.formDesign.formList\n        let rules = {}\n        formList.forEach(element => {\n          if (element.options.required) {\n            rules[element.key] = [{ required: element.options.required, message: '必填项不能为空', trigger: 'blur' }]\n          }\n        })\n        this.rules = rules\n      }\n    }\n  },\n  mounted () {\n    this.reset()\n\n    bus.$on('update.activeName', (value) => {\n      this.activeName = value\n    })\n    this.timer = setInterval(() => {\n      // console.log(document.body.clientHeight)\n      // console.log(document.documentElement.clientHeight)\n      let height = document.documentElement.clientHeight\n      try {\n        window.document.getElementById('form-attr').style.maxHeight = Number(height - 20) + 'px'\n        window.document.getElementById('form-center').style.height = Number(height - 20) + 'px'\n      } catch (error) {\n        // console.info(error)\n      }\n      // window.document.getElementById('form-attr').style.height = Number(document.body.clientHeight - 80) + 'px'\n      // window.document.getElementById('form-design-right').style.height = Number(document.body.clientHeight - 20) + 'px'\n    }, 1000)\n\n    this.init()\n  },\n  filters: {\n    labelWidth (value) {\n      return `${value}px`\n    }\n  },\n  beforeDestroy () {\n    window.clearInterval(this.timer)\n    this.$store.dispatch('formDesign/setFormList', [])\n  }\n}\n</script>\n\n<style lang=\"css\" scoped>\n.form-design .el-tabs__nav {\n  width: 100%;\n}\n.form-design .el-tabs__nav .el-tabs__active-bar {\n  width: 50%;\n  transform: translateX(0px);\n}\n.form-design .el-tabs__nav .el-tabs__item {\n  width: 50%;\n  text-align: center;\n}\n.form-design .el-tabs__header {\n  position: fixed;\n  width: 232px;\n  height: 40px;\n  z-index: 1;\n  background-color: #fff;\n}\n.form-design .el-tabs__content {\n  position: relative;\n  top: 55px;\n}\n.form-design .el-form-item__label {\n  line-height: 20px;\n}\n.fd-main {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUMAAADXCAYAAACAszPmAAAAAXNSR0IArs4c6QAADXRJREFUeAHt3cuLZGcZB+BvLk2PM0ZxFMdJXEQCYRIialrUmPgXuM0qkI3GnVl4ScBtUEFFXOhCEBQ3oiDi36BGkWQ0gpgIZgK59EhIxhBn0nMfz+nqwq6e6upT019933vqPAVxuuty3vc8b/fPU3UufWB9ff1GciNAgMDABQ6363/y5MmBM8y3+mfPnmU2H5lnEwgt0P5OHwzdoeYIECBQSEAYFoJWhgCB2ALCMPZ8dEeAQCEBYVgIWhkCBGILCMPY89EdAQKFBIRhIWhlCBCILbB5aE3sFnVHgEAtgfaQk0Xddh7St6haO+vstj4zw/DPr26knz/3dnrr4vXN199/cjV9/cHjm19/9w/n0nP/vjSx3I9/aDU9+VA/Hv/e0+fSX89O9v/J21fTVz876n9ixeb4ZlEDnaOFqU/t+gMx9cXuJDAAgZlvk3/6l/8HYWtx9frynKxy/vIo4LfP+Nn1S+nbv3tz+12+JkBgIAIH2tPxdttqeOTXo03kb306pZUmNg/NjM5+ibW5/s7VyZ6feiala839v3h49hk57dbfbma2DCdNfddvgUX+PO/8HVpUrZ11pk2krT3zbfL4RW0ILlMQtut18EBK714Zr6F/CRAYusDMMPxE8xnhlWZTaeXg5aE7WX8CBJZcYGYYPrG1s2RRm69Lbmv1CBDokcDMMOzRemRp9f7bj6RrS7STKAuKhRAYiMDMMGwPn2lvj941DI2vPPC+YayotSRA4CaBmfuH2+MIdx5LeNMS3EGAAIElEJi5ZbgE6zfXKoy3hMcHjs/14q0nd9mNfyvL9RoCBBYrIAy3+doK3obhSwIDE5j5NnlgFlaXAIEBC8zcMmzPNR7dJs/hjer13Bsp/fZMSv+9Murw3mZ/yBfvHX39k3+k9MJ/Jju/p3n8sW2Pjx8dn3kz+1zrs2n24ynr49POpX7gw0fS45+x02c8N//mFyj5sU/JWtOkZobh+LOzvhxn+JsXU7qw7RS79tS6Zbmdv3TzudR/evViOv/7N9M3Pvf+ZVlN60GgmsDMc5PHXfUlDL/29Kjjpz6V0pFDy3UK4bRzqb/5bEpXmozc61zq8Rz9S4DAdIE9z03+TnOc4eHmU8VHPjJ9AVHvPdScd+xc6qjT0ReBmAIzd6D8rT3OcMc1/2Kuxqir9jPCu97TbBXOfPMfeQ30RoBALYGlio3xzpJamOoSINBfgZlh+MFjh9LrF66lJ/84WsGPNXuX+3Cl6758xrnfH5v2XOrLy7SXaL8gXk9gHwIzw/Cx+9+bfvzsW+ncxmhPZvTfuxfPXUntWSRDOZf6oZXmOKLmmowvvPB6uuOOOzZ/DF577bV04cKFiR+JY8eOeZzPIH4+XnnllbSxsTHx87+2tjbx/W7fzAzD+06sph99/sTU144Pu5n6YHNnjcfb4wPbs0iGEoa72bufwFAFVlZW0tWro+PrrlzZOuC4I0anQ2s6Lqv608YHS3//weqtFGngZ/9sjh9qbo+vvatIPUUI9EngpZdeSm0gdtky3PPQmj6t+BB7/fsb14a42taZQCeBo0ePpsuXu1+lf+bb5HHFoeyQGK+vfwkQ6L/AiRPTP+Lbbc06heFuL452/ymn6UYbiX4I9EZgqcLwS1sXXeiNvkYJEFiYQHtkRXs7depUpxpLFYad1niJnnTfBw6l5sxDNwIEpgjsPMRsylMm7lqqMGwv09XehrKFaC/yaN7+l0AOgaUKw53XK8wBZBkECAxDYOaFGoZB0N+1/MEzG6n9z40Agf0LLNWW4fHmwtznmotyP7F1LnV7Jesv3DNC6nKl651blvu9kvVHm8/0vrx1QPQPT2+knccFzvP4r56/lJ5/c9uVa5vVOtucN378iE8N9/9rYAnLKNCehjrPbanC8OHm7zv/8l8pvb11nGXtc6kvXrzYzCLP2SHr56834Td56e4TRw+kR+87Ms+8PZfAYATG5+t3XeFOp+MN5aDrrn+DofXY67mnT5/enMHdd9/ddRaeR4DAAgRuu+22PZfa/k77zHBPJk8gQKCPAu1xhuNjDbv0v1Rvk7ussOcQIDAMgXmPM7RlOIyfC2tJgMAeArYM9wC61Yfn3ZN1q3W8jgCBPALCMI/jTUuZd0/WTQtwBwECRQWEYVFuxQgQKCUw77szYbigyYz3YtlCXBCwxRLYQ2De3z1huAforT48756sW63jdQQI5BHoFIZ7HWCcpxVLIUCAQD6B8bsz1zPMZ2pJBAj0UGDed2eOM+zhkLVMgEB+gU5vk/OXXf4lzrsna/lFrCGB2ALCcEHzmXdP1oLasFgCBDoKCMOOUJ5GgEC/BOZ9d9YpDF3Ca/4fgjNnzqTV1dXNS30dPOij2fkFvYLA/gTmfXfWKQz319IwX339+vXU7s16+eWX05133rmJ0O7q37mHq/1/r/HQPM7Hz8eFicCY5/djfX39pt+vGzdupLW1tYll7vaNMNxNJtP9KysrmZZkMQQIzBJog6/9b/vt8OHuEedK19vkuh5c3uVK19sW60sCBIILuNJ18AFpjwCBcgI+2S9nrRIBAoEFhGHg4WiNAIFyAsKwnLVKBAgEFhCGgYejNQIEygkIw3LWKhEgEFhAGAYejtYIECgnIAzLWatEgEBgAWEYeDhaI0CgnIAwLGetEgECgQWEYeDhaI0AgXICnc5i7nrObrm2VSJAgEBeAVuGeT0tjQCBngoIw54OTtsECOQVEIZ5PS2NAIGeCgjDng5O2wQI5BXotAPF30DJi25pBAjEE7BlGG8mOiJAoIKAMKyAriQBAvEEhGG8meiIAIEKAsKwArqSBAjEExCG8WaiIwIEKggIwwroShIgEE9AGMabiY4IEKggIAwroCtJgEA8AWEYbyY6IkCggoAwrICuJAEC8QSEYbyZ6IgAgQoCwrACupIECMQTEIbxZqIjAgQqCAjDCuhKEiAQT0AYxpuJjggQqCAgDCugK0mAQDyBThd39dfx4g1ORwQI5BWwZZjX09IIEOipgDDs6eC0TYBAXgFhmNfT0ggQ6KmAMOzp4LRNgEBegU47UPx1vLzolkaAQDwBW4bxZqIjAgQqCAjDCuhKEiAQT0AYxpuJjggQqCAgDCugK0mAQDwBYRhvJjoiQKCCgDCsgK4kAQLxBIRhvJnoiACBCgLCsAK6kgQIxBMQhvFmoiMCBCoICMMK6EoSIBBPQBjGm4mOCBCoICAMK6ArSYBAPAFhGG8mOiJAoIKAMKyAriQBAvEEhGG8meiIAIEKAsKwArqSBAjEE+h0cVd/HS/e4HREgEBeAVuGeT0tjQCBngoIw54OTtsECOQVEIZ5PS2NAIGeCgjDng5O2wQI5BXotAPFX8fLi25pBAjEE7BlGG8mOiJAoIKAMKyAriQBAvEEhGG8meiIAIEKAsKwArqSBAjEExCG8WaiIwIEKggIwwroShIgEE9AGMabiY4IEKggIAwroCtJgEA8AWEYbyY6IkCggoAwrICuJAEC8QSEYbyZ6IgAgQoCwrACupIECMQTEIbxZqIjAgQqCAjDCuhKEiAQT0AYxpuJjggQqCDQ6XqG/iBUhckoSYBAUQFbhkW5FSNAIKqAMIw6GX0RIFBUQBgW5VaMAIGoAsIw6mT0RYBAUQFhWJRbMQIEogp02pvsr+NFHZ++CBDIJWDLMJek5RAg0GsBYdjr8WmeAIFcAsIwl6TlECDQawFh2OvxaZ4AgVwCwjCXpOUQINBrAWHY6/FpngCBXALCMJek5RAg0GsBYdjr8WmeAIFcAsIwl6TlECDQawFh2OvxaZ4AgVwCwjCXpOUQINBrAWHY6/FpngCBXALCMJek5RAg0GsBYdjr8WmeAIFcAp0u4eUPQuXithwCBKIK2DKMOhl9ESBQVEAYFuVWjACBqALCMOpk9EWAQFEBYViUWzECBKIKCMOok9EXAQJFBYRhUW7FCBCIKiAMo05GXwQIFBUQhkW5FSNAIKqAMIw6GX0RIFBUQBgW5VaMAIGoAsIw6mT0RYBAUQFhWJRbMQIEogoIw6iT0RcBAkUFhGFRbsUIEIgqIAyjTkZfBAgUFRCGRbkVI0AgqoAwjDoZfREgUFRAGBblVowAgagCwjDqZPRFgEBRAWFYlFsxAgSiCgjDqJPRFwECRQWEYVFuxQgQiCogDKNORl8ECBQVEIZFuRUjQCCqgDCMOhl9ESBQVEAYFuVWjACBqALCMOpk9EWAQFEBYViUWzECBKIKCMOok9EXAQJFBYRhUW7FCBCIKiAMo05GXwQIFBUQhkW5FSNAIKqAMIw6GX0RIFBUQBgW5VaMAIGoAsIw6mT0RYBAUQFhWJRbMQIEogoIw6iT0RcBAkUFhGFRbsUIEIgqIAyjTkZfBAgUFRCGRbkVI0AgqoAwjDoZfREgUFRAGBblVowAgagCwjDqZPRFgEBRAWFYlFsxAgSiCgjDqJPRFwECRQWEYVFuxQgQiCogDKNORl8ECBQVEIZFuRUjQCCqgDCMOhl9ESBQVEAYFuVWjACBqALCMOpk9EWAQFEBYViUWzECBKIKCMOok9EXAQJFBYRhUW7FCBCIKiAMo05GXwQIFBUQhkW5FSNAIKqAMIw6GX0RIFBU4H8RUTV123y9kQAAAABJRU5ErkJggg==)\n    no-repeat center 100px;\n}\n</style>\n\n"
  },
  {
    "path": "src/views/demo/echarts.vue",
    "content": "<template>\n  <div class=\"mod-demo-echarts\">\n    <el-alert\n      title=\"提示：\"\n      type=\"warning\"\n      :closable=\"false\">\n      <div slot-scope=\"description\">\n        <p class=\"el-alert__description\">1. 此Demo只提供ECharts官方使用文档，入门部署和体验功能。具体使用请参考：http://echarts.baidu.com/index.html</p>\n      </div>\n    </el-alert>\n\n    <el-row :gutter=\"20\">\n      <el-col :span=\"24\">\n        <el-card>\n          <div id=\"J_chartLineBox\" class=\"chart-box\"></div>\n        </el-card>\n      </el-col>\n      <el-col :span=\"24\">\n        <el-card>\n          <div id=\"J_chartBarBox\" class=\"chart-box\"></div>\n        </el-card>\n      </el-col>\n      <el-col :span=\"12\">\n        <el-card>\n          <div id=\"J_chartPieBox\" class=\"chart-box\"></div>\n        </el-card>\n      </el-col>\n      <el-col :span=\"12\">\n        <el-card>\n          <div id=\"J_chartScatterBox\" class=\"chart-box\"></div>\n        </el-card>\n      </el-col>\n    </el-row>\n  </div>\n</template>\n\n<script>\n  import echarts from 'echarts'\n  export default {\n    data () {\n      return {\n        chartLine: null,\n        chartBar: null,\n        chartPie: null,\n        chartScatter: null\n      }\n    },\n    mounted () {\n      this.initChartLine()\n      this.initChartBar()\n      this.initChartPie()\n      this.initChartScatter()\n    },\n    activated () {\n      // 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug\n      if (this.chartLine) {\n        this.chartLine.resize()\n      }\n      if (this.chartBar) {\n        this.chartBar.resize()\n      }\n      if (this.chartPie) {\n        this.chartPie.resize()\n      }\n      if (this.chartScatter) {\n        this.chartScatter.resize()\n      }\n    },\n    methods: {\n      // 折线图\n      initChartLine () {\n        var option = {\n          'title': {\n            'text': '折线图堆叠'\n          },\n          'tooltip': {\n            'trigger': 'axis'\n          },\n          'legend': {\n            'data': [ '邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎' ]\n          },\n          'grid': {\n            'left': '3%',\n            'right': '4%',\n            'bottom': '3%',\n            'containLabel': true\n          },\n          'toolbox': {\n            'feature': {\n              'saveAsImage': { }\n            }\n          },\n          'xAxis': {\n            'type': 'category',\n            'boundaryGap': false,\n            'data': [ '周一', '周二', '周三', '周四', '周五', '周六', '周日' ]\n          },\n          'yAxis': {\n            'type': 'value'\n          },\n          'series': [\n            {\n              'name': '邮件营销',\n              'type': 'line',\n              'stack': '总量',\n              'data': [ 120, 132, 101, 134, 90, 230, 210 ]\n            },\n            {\n              'name': '联盟广告',\n              'type': 'line',\n              'stack': '总量',\n              'data': [ 220, 182, 191, 234, 290, 330, 310 ]\n            },\n            {\n              'name': '视频广告',\n              'type': 'line',\n              'stack': '总量',\n              'data': [ 150, 232, 201, 154, 190, 330, 410 ]\n            },\n            {\n              'name': '直接访问',\n              'type': 'line',\n              'stack': '总量',\n              'data': [ 320, 332, 301, 334, 390, 330, 320 ]\n            },\n            {\n              'name': '搜索引擎',\n              'type': 'line',\n              'stack': '总量',\n              'data': [ 820, 932, 901, 934, 1290, 1330, 1320 ]\n            }\n          ]\n        }\n        this.chartLine = echarts.init(document.getElementById('J_chartLineBox'))\n        this.chartLine.setOption(option)\n        window.addEventListener('resize', () => {\n          this.chartLine.resize()\n        })\n      },\n      // 柱状图\n      initChartBar () {\n        var option = {\n          tooltip: {\n            trigger: 'axis',\n            axisPointer: {\n              type: 'shadow'\n            }\n          },\n          legend: {\n            data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎', '百度', '谷歌', '必应', '其他']\n          },\n          grid: {\n            left: '3%',\n            right: '4%',\n            bottom: '3%',\n            containLabel: true\n          },\n          xAxis: [\n            {\n              type: 'category',\n              data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']\n            }\n          ],\n          yAxis: [\n            {\n              type: 'value'\n            }\n          ],\n          series: [\n            {\n              name: '直接访问',\n              type: 'bar',\n              data: [320, 332, 301, 334, 390, 330, 320]\n            },\n            {\n              name: '邮件营销',\n              type: 'bar',\n              stack: '广告',\n              data: [120, 132, 101, 134, 90, 230, 210]\n            },\n            {\n              name: '联盟广告',\n              type: 'bar',\n              stack: '广告',\n              data: [220, 182, 191, 234, 290, 330, 310]\n            },\n            {\n              name: '视频广告',\n              type: 'bar',\n              stack: '广告',\n              data: [150, 232, 201, 154, 190, 330, 410]\n            },\n            {\n              name: '搜索引擎',\n              type: 'bar',\n              data: [862, 1018, 964, 1026, 1679, 1600, 1570],\n              markLine: {\n                lineStyle: {\n                  normal: {\n                    type: 'dashed'\n                  }\n                },\n                data: [\n                  [{ type: 'min' }, { type: 'max' }]\n                ]\n              }\n            },\n            {\n              name: '百度',\n              type: 'bar',\n              barWidth: 5,\n              stack: '搜索引擎',\n              data: [620, 732, 701, 734, 1090, 1130, 1120]\n            },\n            {\n              name: '谷歌',\n              type: 'bar',\n              stack: '搜索引擎',\n              data: [120, 132, 101, 134, 290, 230, 220]\n            },\n            {\n              name: '必应',\n              type: 'bar',\n              stack: '搜索引擎',\n              data: [60, 72, 71, 74, 190, 130, 110]\n            },\n            {\n              name: '其他',\n              type: 'bar',\n              stack: '搜索引擎',\n              data: [62, 82, 91, 84, 109, 110, 120]\n            }\n          ]\n        }\n        this.chartBar = echarts.init(document.getElementById('J_chartBarBox'))\n        this.chartBar.setOption(option)\n        window.addEventListener('resize', () => {\n          this.chartBar.resize()\n        })\n      },\n      // 饼状图\n      initChartPie () {\n        var option = {\n          backgroundColor: '#2c343c',\n          title: {\n            text: 'Customized Pie',\n            left: 'center',\n            top: 20,\n            textStyle: {\n              color: '#ccc'\n            }\n          },\n          tooltip: {\n            trigger: 'item',\n            formatter: '{a} <br/>{b} : {c} ({d}%)'\n          },\n          visualMap: {\n            show: false,\n            min: 80,\n            max: 600,\n            inRange: {\n              colorLightness: [0, 1]\n            }\n          },\n          series: [\n            {\n              name: '访问来源',\n              type: 'pie',\n              radius: '55%',\n              center: ['50%', '50%'],\n              data: [\n                { value: 335, name: '直接访问' },\n                { value: 310, name: '邮件营销' },\n                { value: 274, name: '联盟广告' },\n                { value: 235, name: '视频广告' },\n                { value: 400, name: '搜索引擎' }\n              ].sort(function (a, b) { return a.value - b.value }),\n              roseType: 'radius',\n              label: {\n                normal: {\n                  textStyle: {\n                    color: 'rgba(255, 255, 255, 0.3)'\n                  }\n                }\n              },\n              labelLine: {\n                normal: {\n                  lineStyle: {\n                    color: 'rgba(255, 255, 255, 0.3)'\n                  },\n                  smooth: 0.2,\n                  length: 10,\n                  length2: 20\n                }\n              },\n              itemStyle: {\n                normal: {\n                  color: '#c23531',\n                  shadowBlur: 200,\n                  shadowColor: 'rgba(0, 0, 0, 0.5)'\n                }\n              },\n              animationType: 'scale',\n              animationEasing: 'elasticOut',\n              animationDelay: function (idx) {\n                return Math.random() * 200\n              }\n            }\n          ]\n        }\n        this.chartPie = echarts.init(document.getElementById('J_chartPieBox'))\n        this.chartPie.setOption(option)\n        window.addEventListener('resize', () => {\n          this.chartPie.resize()\n        })\n      },\n      // 散点图\n      initChartScatter () {\n        var option = {\n          backgroundColor: new echarts.graphic.RadialGradient(0.3, 0.3, 0.8, [\n            { offset: 0, color: '#f7f8fa' },\n            { offset: 1, color: '#cdd0d5' }\n          ]),\n          title: {\n            text: '1990 与 2015 年各国家人均寿命与 GDP'\n          },\n          legend: {\n            right: 10,\n            data: ['1990', '2015']\n          },\n          xAxis: {\n            splitLine: {\n              lineStyle: {\n                type: 'dashed'\n              }\n            }\n          },\n          yAxis: {\n            splitLine: {\n              lineStyle: {\n                type: 'dashed'\n              }\n            },\n            scale: true\n          },\n          series: [\n            {\n              name: '1990',\n              data: [\n                [28604, 77, 17096869, 'Australia', 1990],\n                [31163, 77.4, 27662440, 'Canada', 1990],\n                [1516, 68, 1154605773, 'China', 1990],\n                [13670, 74.7, 10582082, 'Cuba', 1990],\n                [28599, 75, 4986705, 'Finland', 1990],\n                [29476, 77.1, 56943299, 'France', 1990],\n                [31476, 75.4, 78958237, 'Germany', 1990],\n                [28666, 78.1, 254830, 'Iceland', 1990],\n                [1777, 57.7, 870601776, 'India', 1990],\n                [29550, 79.1, 122249285, 'Japan', 1990],\n                [2076, 67.9, 20194354, 'North Korea', 1990],\n                [12087, 72, 42972254, 'South Korea', 1990],\n                [24021, 75.4, 3397534, 'New Zealand', 1990],\n                [43296, 76.8, 4240375, 'Norway', 1990],\n                [10088, 70.8, 38195258, 'Poland', 1990],\n                [19349, 69.6, 147568552, 'Russia', 1990],\n                [10670, 67.3, 53994605, 'Turkey', 1990],\n                [26424, 75.7, 57110117, 'United Kingdom', 1990],\n                [37062, 75.4, 252847810, 'United States', 1990]\n              ],\n              type: 'scatter',\n              symbolSize: function (data) {\n                return Math.sqrt(data[2]) / 5e2\n              },\n              label: {\n                emphasis: {\n                  show: true,\n                  formatter: function (param) {\n                    return param.data[3]\n                  },\n                  position: 'top'\n                }\n              },\n              itemStyle: {\n                normal: {\n                  shadowBlur: 10,\n                  shadowColor: 'rgba(120, 36, 50, 0.5)',\n                  shadowOffsetY: 5,\n                  color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [\n                    { offset: 0, color: 'rgb(251, 118, 123)' },\n                    { offset: 1, color: 'rgb(204, 46, 72)' }\n                  ])\n                }\n              }\n            },\n            {\n              name: '2015',\n              data: [\n                [44056, 81.8, 23968973, 'Australia', 2015],\n                [43294, 81.7, 35939927, 'Canada', 2015],\n                [13334, 76.9, 1376048943, 'China', 2015],\n                [21291, 78.5, 11389562, 'Cuba', 2015],\n                [38923, 80.8, 5503457, 'Finland', 2015],\n                [37599, 81.9, 64395345, 'France', 2015],\n                [44053, 81.1, 80688545, 'Germany', 2015],\n                [42182, 82.8, 329425, 'Iceland', 2015],\n                [5903, 66.8, 1311050527, 'India', 2015],\n                [36162, 83.5, 126573481, 'Japan', 2015],\n                [1390, 71.4, 25155317, 'North Korea', 2015],\n                [34644, 80.7, 50293439, 'South Korea', 2015],\n                [34186, 80.6, 4528526, 'New Zealand', 2015],\n                [64304, 81.6, 5210967, 'Norway', 2015],\n                [24787, 77.3, 38611794, 'Poland', 2015],\n                [23038, 73.13, 143456918, 'Russia', 2015],\n                [19360, 76.5, 78665830, 'Turkey', 2015],\n                [38225, 81.4, 64715810, 'United Kingdom', 2015],\n                [53354, 79.1, 321773631, 'United States', 2015]\n              ],\n              type: 'scatter',\n              symbolSize: function (data) {\n                return Math.sqrt(data[2]) / 5e2\n              },\n              label: {\n                emphasis: {\n                  show: true,\n                  formatter: function (param) {\n                    return param.data[3]\n                  },\n                  position: 'top'\n                }\n              },\n              itemStyle: {\n                normal: {\n                  shadowBlur: 10,\n                  shadowColor: 'rgba(25, 100, 150, 0.5)',\n                  shadowOffsetY: 5,\n                  color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [\n                    { offset: 0, color: 'rgb(129, 227, 238)' },\n                    { offset: 1, color: 'rgb(25, 183, 207)' }\n                  ])\n                }\n              }\n            }\n          ]\n        }\n        this.chartPie = echarts.init(document.getElementById('J_chartScatterBox'))\n        this.chartPie.setOption(option)\n        window.addEventListener('resize', () => {\n          this.chartPie.resize()\n        })\n      }\n    }\n  }\n</script>\n\n<style lang=\"scss\">\n  .mod-demo-echarts {\n    > .el-alert {\n      margin-bottom: 10px;\n    }\n    > .el-row {\n      margin-top: -10px;\n      margin-bottom: -10px;\n      .el-col {\n        padding-top: 10px;\n        padding-bottom: 10px;\n      }\n    }\n    .chart-box {\n      min-height: 400px;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/views/demo/ueditor.vue",
    "content": "<template>\n  <div class=\"mod-demo-ueditor\">\n    <el-alert\n      title=\"提示：\"\n      type=\"warning\"\n      :closable=\"false\">\n      <div slot-scope=\"description\">\n        <p class=\"el-alert__description\">1. 此Demo只提供UEditor官方使用文档，入门部署和体验功能。具体使用请参考：http://fex.baidu.com/ueditor/</p>\n        <p class=\"el-alert__description\">2. 浏览器控制台报错“请求后台配置项http错误，上传功能将不能正常使用！”，此错需要后台提供上传接口方法（赋值给serverUrl属性）</p>\n      </div>\n    </el-alert>\n\n    <script :id=\"ueId\" class=\"ueditor-box\" type=\"text/plain\" style=\"width: 100%; height: 260px;\">hello world!</script>\n    \n    <!-- 获取内容 -->\n    <p><el-button @click=\"getContent()\">获得内容</el-button></p>\n    <el-dialog\n      title=\"内容\"\n      :visible.sync=\"dialogVisible\"\n      :append-to-body=\"true\">\n      {{ ueContent }}\n      <span slot=\"footer\" class=\"dialog-footer\">\n        <el-button type=\"primary\" @click=\"dialogVisible = false\">确 定</el-button>\n      </span>\n    </el-dialog>\n  </div>\n</template>\n\n<script>\n  import ueditor from 'ueditor'\n  export default {\n    data () {\n      return {\n        ue: null,\n        ueId: `J_ueditorBox_${new Date().getTime()}`,\n        ueContent: '',\n        dialogVisible: false\n      }\n    },\n    mounted () {\n      this.ue = ueditor.getEditor(this.ueId, {\n        // serverUrl: '', // 服务器统一请求接口路径\n        zIndex: 3000\n      })\n    },\n    methods: {\n      getContent () {\n        this.dialogVisible = true\n        this.ue.ready(() => {\n          this.ueContent = this.ue.getContent()\n        })\n      }\n    }\n  }\n</script>\n\n<style lang=\"scss\">\n  .mod-demo-ueditor {\n    position: relative;\n    z-index: 510;\n    > .el-alert {\n      margin-bottom: 10px;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/views/main-content.vue",
    "content": "<template>\n  <main class=\"site-content\" :class=\"{ 'site-content--tabs': $route.meta.isTab }\">\n    <!-- 主入口标签页 s -->\n    <el-tabs\n      v-if=\"$route.meta.isTab\"\n      v-model=\"mainTabsActiveName\"\n      :closable=\"true\"\n      @tab-click=\"selectedTabHandle\"\n      @tab-remove=\"removeTabHandle\">\n      <el-dropdown class=\"site-tabs__tools\" :show-timeout=\"0\">\n        <i class=\"el-icon-arrow-down el-icon--right\"></i>\n        <el-dropdown-menu slot=\"dropdown\">\n          <el-dropdown-item @click.native=\"tabsCloseCurrentHandle\">关闭当前标签页</el-dropdown-item>\n          <el-dropdown-item @click.native=\"tabsCloseOtherHandle\">关闭其它标签页</el-dropdown-item>\n          <el-dropdown-item @click.native=\"tabsCloseAllHandle\">关闭全部标签页</el-dropdown-item>\n          <el-dropdown-item @click.native=\"refresh()\">刷新当前标签页</el-dropdown-item>\n        </el-dropdown-menu>\n      </el-dropdown>\n      <el-tab-pane\n        v-for=\"item in mainTabs\"\n        :key=\"item.name\"\n        :label=\"item.title\"\n        :name=\"item.name\">\n        <el-card :body-style=\"siteContentViewHeight\">\n          <iframe\n            v-if=\"item.type === 'iframe'\"\n            :src=\"item.iframeUrl\"\n            width=\"100%\" height=\"100%\" frameborder=\"0\" scrolling=\"yes\">\n          </iframe>\n          <keep-alive v-else>\n            <router-view v-if=\"item.name === mainTabsActiveName\" />\n          </keep-alive>\n        </el-card>\n      </el-tab-pane>\n    </el-tabs>\n    <!-- 主入口标签页 e -->\n    <el-card v-else :body-style=\"siteContentViewHeight\">\n      <keep-alive>\n        <router-view />\n      </keep-alive>\n    </el-card>\n  </main>\n</template>\n\n<script>\n  import { isURL } from '@/utils/validate'\n  export default {\n    inject: ['refresh'],\n    data () {\n      return {\n      }\n    },\n    computed: {\n      documentClientHeight: {\n        get () { return this.$store.state.common.documentClientHeight }\n      },\n      menuActiveName: {\n        get () { return this.$store.state.common.menuActiveName },\n        set (val) { this.$store.commit('common/updateMenuActiveName', val) }\n      },\n      mainTabs: {\n        get () { return this.$store.state.common.mainTabs },\n        set (val) { this.$store.commit('common/updateMainTabs', val) }\n      },\n      mainTabsActiveName: {\n        get () { return this.$store.state.common.mainTabsActiveName },\n        set (val) { this.$store.commit('common/updateMainTabsActiveName', val) }\n      },\n      siteContentViewHeight () {\n        var height = this.documentClientHeight - 50 - 30 - 2\n        if (this.$route.meta.isTab) {\n          height -= 40\n          return isURL(this.$route.meta.iframeUrl) ? { height: height + 'px' } : { minHeight: height + 'px' }\n        }\n        return { minHeight: height + 'px' }\n      }\n    },\n    methods: {\n      // tabs, 选中tab\n      selectedTabHandle (tab) {\n        tab = this.mainTabs.filter(item => item.name === tab.name)\n        if (tab.length >= 1) {\n          this.$router.push({ name: tab[0].name, query: tab[0].query, params: tab[0].params })\n        }\n      },\n      // tabs, 删除tab\n      removeTabHandle (tabName) {\n        this.mainTabs = this.mainTabs.filter(item => item.name !== tabName)\n        if (this.mainTabs.length >= 1) {\n          // 当前选中tab被删除\n          if (tabName === this.mainTabsActiveName) {\n            var tab = this.mainTabs[this.mainTabs.length - 1]\n            this.$router.push({ name: tab.name, query: tab.query, params: tab.params }, () => {\n              this.mainTabsActiveName = this.$route.name\n            })\n          }\n        } else {\n          this.menuActiveName = ''\n          this.$router.push({ name: 'home' })\n        }\n      },\n      // tabs, 关闭当前\n      tabsCloseCurrentHandle () {\n        this.removeTabHandle(this.mainTabsActiveName)\n      },\n      // tabs, 关闭其它\n      tabsCloseOtherHandle () {\n        this.mainTabs = this.mainTabs.filter(item => item.name === this.mainTabsActiveName)\n      },\n      // tabs, 关闭全部\n      tabsCloseAllHandle () {\n        this.mainTabs = []\n        this.menuActiveName = ''\n        this.$router.push({ name: 'home' })\n      },\n      // tabs, 刷新当前\n      tabsRefreshCurrentHandle () {\n        var tab = this.$route\n        this.removeTabHandle(tab.name)\n        this.$nextTick(() => {\n          this.$router.push({ name: tab.name, query: tab.query, params: tab.params })\n        })\n      }\n    }\n  }\n</script>\n\n"
  },
  {
    "path": "src/views/main-navbar-update-password.vue",
    "content": "<template>\n  <el-dialog\n    title=\"修改密码\"\n    :visible.sync=\"visible\"\n    :append-to-body=\"true\">\n    <el-form :model=\"dataForm\" :rules=\"dataRule\" ref=\"dataForm\" @keyup.enter.native=\"dataFormSubmit()\" label-width=\"80px\">\n      <el-form-item label=\"账号\">\n        <span>{{ userName }}</span>\n      </el-form-item>\n      <el-form-item label=\"原密码\" prop=\"password\">\n        <el-input type=\"password\" v-model=\"dataForm.password\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"新密码\" prop=\"newPassword\">\n        <el-input type=\"password\" v-model=\"dataForm.newPassword\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"确认密码\" prop=\"confirmPassword\">\n        <el-input type=\"password\" v-model=\"dataForm.confirmPassword\"></el-input>\n      </el-form-item>\n    </el-form>\n    <span slot=\"footer\" class=\"dialog-footer\">\n      <el-button @click=\"visible = false\">取消</el-button>\n      <el-button type=\"primary\" @click=\"dataFormSubmit()\">确定</el-button>\n    </span>\n  </el-dialog>\n</template>\n\n<script>\n  import { clearLoginInfo } from '@/utils'\n  export default {\n    data () {\n      var validateConfirmPassword = (rule, value, callback) => {\n        if (this.dataForm.newPassword !== value) {\n          callback(new Error('确认密码与新密码不一致'))\n        } else {\n          callback()\n        }\n      }\n      return {\n        visible: false,\n        dataForm: {\n          password: '',\n          newPassword: '',\n          confirmPassword: ''\n        },\n        dataRule: {\n          password: [\n            { required: true, message: '原密码不能为空', trigger: 'blur' }\n          ],\n          newPassword: [\n            { required: true, message: '新密码不能为空', trigger: 'blur' }\n          ],\n          confirmPassword: [\n            { required: true, message: '确认密码不能为空', trigger: 'blur' },\n            { validator: validateConfirmPassword, trigger: 'blur' }\n          ]\n        }\n      }\n    },\n    computed: {\n      userName: {\n        get () { return this.$store.state.user.name }\n      },\n      mainTabs: {\n        get () { return this.$store.state.common.mainTabs },\n        set (val) { this.$store.commit('common/updateMainTabs', val) }\n      }\n    },\n    methods: {\n      // 初始化\n      init () {\n        this.visible = true\n        this.$nextTick(() => {\n          this.$refs['dataForm'].resetFields()\n        })\n      },\n      // 表单提交\n      dataFormSubmit () {\n        this.$refs['dataForm'].validate((valid) => {\n          if (valid) {\n            this.$http({\n              url: this.$http.adornUrl('/sys/user/password'),\n              method: 'post',\n              data: this.$http.adornData({\n                'password': this.dataForm.password,\n                'newPassword': this.dataForm.newPassword\n              })\n            }).then(({data}) => {\n              if (data && data.code === 0) {\n                this.$message({\n                  message: '操作成功',\n                  type: 'success',\n                  duration: 1500,\n                  onClose: () => {\n                    this.visible = false\n                    this.$nextTick(() => {\n                      this.mainTabs = []\n                      clearLoginInfo()\n                      this.$router.replace({ name: 'login' })\n                    })\n                  }\n                })\n              } else {\n                this.$message.error(data.msg)\n              }\n            })\n          }\n        })\n      }\n    }\n  }\n</script>\n\n"
  },
  {
    "path": "src/views/main-navbar.vue",
    "content": "<template>\n  <nav class=\"site-navbar\" :class=\"'site-navbar--' + navbarLayoutType\">\n    <div class=\"site-navbar__header\">\n      <h1 class=\"site-navbar__brand\" @click=\"$router.push({ name: 'home' })\">\n        <a class=\"site-navbar__brand-lg\" href=\"javascript:;\">人人快速开发平台</a>\n        <a class=\"site-navbar__brand-mini\" href=\"javascript:;\">人人</a>\n      </h1>\n    </div>\n    <div class=\"site-navbar__body clearfix\">\n      <el-menu\n        class=\"site-navbar__menu\"\n        mode=\"horizontal\">\n        <el-menu-item class=\"site-navbar__switch\" index=\"0\" @click=\"sidebarFold = !sidebarFold\">\n          <icon-svg name=\"zhedie\"></icon-svg>\n        </el-menu-item>\n      </el-menu>\n      <el-menu\n        class=\"site-navbar__menu site-navbar__menu--right\"\n        mode=\"horizontal\">\n        <el-menu-item index=\"1\" @click=\"$router.push({ name: 'theme' })\">\n          <template slot=\"title\">\n            <el-badge value=\"new\">\n              <icon-svg name=\"shezhi\" class=\"el-icon-setting\"></icon-svg>\n            </el-badge>\n          </template>\n        </el-menu-item>\n        <el-menu-item index=\"2\">\n          <el-badge value=\"hot\">\n            <a href=\"//www.renren.io/\" target=\"_blank\">官方社区</a>\n          </el-badge>\n        </el-menu-item>\n        <el-submenu index=\"3\">\n          <template slot=\"title\">Git源码</template>\n          <el-menu-item index=\"2-1\"><a href=\"//github.com/daxiongYang/renren-fast-vue\" target=\"_blank\">前端</a></el-menu-item>\n          <el-menu-item index=\"2-2\"><a href=\"//git.oschina.net/renrenio/renren-fast\" target=\"_blank\">后台</a></el-menu-item>\n          <el-menu-item index=\"2-3\"><a href=\"//git.oschina.net/renrenio/renren-generator\" target=\"_blank\">代码生成器</a></el-menu-item>\n        </el-submenu>\n        <el-menu-item class=\"site-navbar__avatar\" index=\"3\">\n          <el-dropdown :show-timeout=\"0\" placement=\"bottom\">\n            <span class=\"el-dropdown-link\">\n              <img src=\"~@/assets/img/avatar.png\" :alt=\"userName\">{{ userName }}\n            </span>\n            <el-dropdown-menu slot=\"dropdown\">\n              <el-dropdown-item @click.native=\"updatePasswordHandle()\">修改密码</el-dropdown-item>\n              <el-dropdown-item @click.native=\"logoutHandle()\">退出</el-dropdown-item>\n            </el-dropdown-menu>\n          </el-dropdown>\n        </el-menu-item>\n      </el-menu>\n    </div>\n    <!-- 弹窗, 修改密码 -->\n    <update-password v-if=\"updatePassowrdVisible\" ref=\"updatePassowrd\"></update-password>\n  </nav>\n</template>\n\n<script>\n  import UpdatePassword from './main-navbar-update-password'\n  import { clearLoginInfo } from '@/utils'\n  export default {\n    data () {\n      return {\n        updatePassowrdVisible: false\n      }\n    },\n    components: {\n      UpdatePassword\n    },\n    computed: {\n      navbarLayoutType: {\n        get () { return this.$store.state.common.navbarLayoutType }\n      },\n      sidebarFold: {\n        get () { return this.$store.state.common.sidebarFold },\n        set (val) { this.$store.commit('common/updateSidebarFold', val) }\n      },\n      mainTabs: {\n        get () { return this.$store.state.common.mainTabs },\n        set (val) { this.$store.commit('common/updateMainTabs', val) }\n      },\n      userName: {\n        get () { return this.$store.state.user.name }\n      }\n    },\n    methods: {\n      // 修改密码\n      updatePasswordHandle () {\n        this.updatePassowrdVisible = true\n        this.$nextTick(() => {\n          this.$refs.updatePassowrd.init()\n        })\n      },\n      // 退出\n      logoutHandle () {\n        this.$confirm(`确定进行[退出]操作?`, '提示', {\n          confirmButtonText: '确定',\n          cancelButtonText: '取消',\n          type: 'warning'\n        }).then(() => {\n          this.$http({\n            url: this.$http.adornUrl('/sys/logout'),\n            method: 'post',\n            data: this.$http.adornData()\n          }).then(({data}) => {\n            if (data && data.code === 0) {\n              clearLoginInfo()\n              this.$router.push({ name: 'login' })\n            }\n          })\n        }).catch(() => {})\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/main-sidebar-sub-menu.vue",
    "content": "<template>\n  <el-submenu \n    v-if=\"menu.list && menu.list.length >= 1\"\n    :index=\"menu.menuId + ''\"\n    :popper-class=\"'site-sidebar--' + sidebarLayoutSkin + '-popper'\">\n    <template slot=\"title\">\n      <icon-svg :name=\"menu.icon || ''\" class=\"site-sidebar__menu-icon\"></icon-svg>\n      <span>{{ menu.name }}</span>\n    </template>\n    <sub-menu\n      v-for=\"item in menu.list\" \n      :key=\"item.menuId\"\n      :menu=\"item\"\n      :dynamicMenuRoutes=\"dynamicMenuRoutes\">\n    </sub-menu>\n  </el-submenu>\n  <el-menu-item v-else :index=\"menu.menuId + ''\" @click=\"gotoRouteHandle(menu)\">\n    <icon-svg :name=\"menu.icon || ''\" class=\"site-sidebar__menu-icon\"></icon-svg>\n    <span>{{ menu.name }}</span>\n  </el-menu-item>\n</template>\n\n<script>\n  import SubMenu from './main-sidebar-sub-menu'\n  export default {\n    name: 'sub-menu',\n    props: {\n      menu: {\n        type: Object,\n        required: true\n      },\n      dynamicMenuRoutes: {\n        type: Array,\n        required: true\n      }\n    },\n    components: {\n      SubMenu\n    },\n    computed: {\n      sidebarLayoutSkin: {\n        get () { return this.$store.state.common.sidebarLayoutSkin }\n      }\n    },\n    methods: {\n      // 通过menuId与动态(菜单)路由进行匹配跳转至指定路由\n      gotoRouteHandle (menu) {\n        var route = this.dynamicMenuRoutes.filter(item => item.meta.menuId === menu.menuId)\n        if (route.length >= 1) {\n          this.$router.push({ name: route[0].name })\n        }\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/main-sidebar.vue",
    "content": "<template>\n  <aside class=\"site-sidebar\" :class=\"'site-sidebar--' + sidebarLayoutSkin\">\n    <div class=\"site-sidebar__inner\">\n      <el-menu\n        :default-active=\"menuActiveName || 'home'\"\n        :collapse=\"sidebarFold\"\n        :collapseTransition=\"false\"\n        class=\"site-sidebar__menu\"\n      >\n        <el-menu-item index=\"home\" @click=\"$router.push({ name: '动态表单' })\">\n          <icon-svg name=\"shouye\" class=\"site-sidebar__menu-icon\"></icon-svg>\n          <span slot=\"title\">动态表单</span>\n        </el-menu-item>\n        <el-submenu index=\"demo\">\n          <template slot=\"title\">\n            <icon-svg name=\"shoucang\" class=\"site-sidebar__menu-icon\"></icon-svg>\n            <span>工作流程</span>\n          </template>\n          <el-menu-item index=\"demo-echarts\" @click=\"$router.push({ name: 'demo-echarts' })\">\n            <icon-svg name=\"tubiao\" class=\"site-sidebar__menu-icon\"></icon-svg>\n            <span slot=\"title\">流程管理</span>\n          </el-menu-item>\n          <el-menu-item index=\"demo-ueditor\" @click=\"$router.push({ name: 'demo-ueditor' })\">\n            <icon-svg name=\"editor\" class=\"site-sidebar__menu-icon\"></icon-svg>\n            <span slot=\"title\">模型管理</span>\n          </el-menu-item>\n          <el-menu-item index=\"demo-ueditor\" @click=\"$router.push({ name: 'demo-ueditor' })\">\n            <icon-svg name=\"editor\" class=\"site-sidebar__menu-icon\"></icon-svg>\n            <span slot=\"title\">运行中的流程</span>\n          </el-menu-item>\n        </el-submenu>\n        <!-- <sub-menu\n          v-for=\"menu in menuList\"\n          :key=\"menu.menuId\"\n          :menu=\"menu\"\n          :dynamicMenuRoutes=\"dynamicMenuRoutes\"\n        ></sub-menu> -->\n      </el-menu>\n    </div>\n  </aside>\n</template>\n\n<script>\nimport SubMenu from './main-sidebar-sub-menu'\nimport { isURL } from '@/utils/validate'\nexport default {\n  data () {\n    return {\n      dynamicMenuRoutes: []\n    }\n  },\n  components: {\n    SubMenu\n  },\n  computed: {\n    sidebarLayoutSkin: {\n      get () { return this.$store.state.common.sidebarLayoutSkin }\n    },\n    sidebarFold: {\n      get () { return this.$store.state.common.sidebarFold }\n    },\n    menuList: {\n      get () { return this.$store.state.common.menuList },\n      set (val) { this.$store.commit('common/updateMenuList', val) }\n    },\n    menuActiveName: {\n      get () { return this.$store.state.common.menuActiveName },\n      set (val) { this.$store.commit('common/updateMenuActiveName', val) }\n    },\n    mainTabs: {\n      get () { return this.$store.state.common.mainTabs },\n      set (val) { this.$store.commit('common/updateMainTabs', val) }\n    },\n    mainTabsActiveName: {\n      get () { return this.$store.state.common.mainTabsActiveName },\n      set (val) { this.$store.commit('common/updateMainTabsActiveName', val) }\n    }\n  },\n  watch: {\n    $route: 'routeHandle'\n  },\n  created () {\n    this.menuList = JSON.parse(sessionStorage.getItem('menuList') || '[]')\n    this.dynamicMenuRoutes = JSON.parse(sessionStorage.getItem('dynamicMenuRoutes') || '[]')\n    this.routeHandle(this.$route)\n  },\n  methods: {\n    // 路由操作\n    routeHandle (route) {\n      if (route.meta.isTab) {\n        // tab选中, 不存在先添加\n        var tab = this.mainTabs.filter(item => item.name === route.name)[0]\n        if (!tab) {\n          if (route.meta.isDynamic) {\n            route = this.dynamicMenuRoutes.filter(item => item.name === route.name)[0]\n            if (!route) {\n              return console.error('未能找到可用标签页!')\n            }\n          }\n          tab = {\n            menuId: route.meta.menuId || route.name,\n            name: route.name,\n            title: route.meta.title,\n            type: isURL(route.meta.iframeUrl) ? 'iframe' : 'module',\n            iframeUrl: route.meta.iframeUrl || '',\n            params: route.params,\n            query: route.query\n          }\n          this.mainTabs = this.mainTabs.concat(tab)\n        }\n        this.menuActiveName = tab.menuId + ''\n        this.mainTabsActiveName = tab.name\n      }\n    }\n  }\n}\n</script>\n"
  },
  {
    "path": "src/views/main.vue",
    "content": "<!--\n * @Author: your name\n * @Date: 2019-12-10 10:46:23\n * @LastEditTime: 2019-12-10 11:08:38\n * @LastEditors: Please set LastEditors\n * @Description: In User Settings Edit\n * @FilePath: \\form-design\\src\\views\\main.vue\n -->\n<template>\n  <div\n    class=\"site-wrapper\"\n    :class=\"{ 'site-sidebar--fold': sidebarFold }\"\n    v-loading.fullscreen.lock=\"loading\"\n    element-loading-text=\"拼命加载中\">\n    <template v-if=\"!loading\">\n      <main-navbar />\n      <main-sidebar />\n      <div class=\"site-content__wrapper\" :style=\"{ 'min-height': documentClientHeight + 'px' }\">\n        <main-content v-if=\"!$store.state.common.contentIsNeedRefresh\" />\n      </div>\n    </template>\n  </div>\n</template>\n\n<script>\n  import MainNavbar from './main-navbar'\n  import MainSidebar from './main-sidebar'\n  import MainContent from './main-content'\n  export default {\n    provide () {\n      return {\n        // 刷新\n        refresh () {\n          this.$store.commit('common/updateContentIsNeedRefresh', true)\n          this.$nextTick(() => {\n            this.$store.commit('common/updateContentIsNeedRefresh', false)\n          })\n        }\n      }\n    },\n    data () {\n      return {\n        loading: true\n      }\n    },\n    components: {\n      MainNavbar,\n      MainSidebar,\n      MainContent\n    },\n    computed: {\n      documentClientHeight: {\n        get () { return this.$store.state.common.documentClientHeight },\n        set (val) { this.$store.commit('common/updateDocumentClientHeight', val) }\n      },\n      sidebarFold: {\n        get () { return this.$store.state.common.sidebarFold }\n      },\n      userId: {\n        get () { return this.$store.state.user.id },\n        set (val) { this.$store.commit('user/updateId', val) }\n      },\n      userName: {\n        get () { return this.$store.state.user.name },\n        set (val) { this.$store.commit('user/updateName', val) }\n      }\n    },\n    created () {\n      this.getUserInfo()\n    },\n    mounted () {\n      this.resetDocumentClientHeight()\n    },\n    methods: {\n      // 重置窗口可视高度\n      resetDocumentClientHeight () {\n        this.documentClientHeight = document.documentElement['clientHeight']\n        window.onresize = () => {\n          this.documentClientHeight = document.documentElement['clientHeight']\n        }\n      },\n      // 获取当前管理员信息\n      getUserInfo () {\n        this.loading = false\n        // this.$http({\n        //   url: this.$http.adornUrl('/sys/user/info'),\n        //   method: 'get',\n        //   params: this.$http.adornParams()\n        // }).then(({data}) => {\n        //   if (data && data.code === 0) {\n        //     this.loading = false\n        //     this.userId = data.user.userId\n        //     this.userName = data.user.username\n        //   }\n        // })\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/job/schedule-add-or-update.vue",
    "content": "<template>\n  <el-dialog\n    :title=\"!dataForm.id ? '新增' : '修改'\"\n    :close-on-click-modal=\"false\"\n    :visible.sync=\"visible\">\n    <el-form :model=\"dataForm\" :rules=\"dataRule\" ref=\"dataForm\" @keyup.enter.native=\"dataFormSubmit()\" label-width=\"100px\">\n      <el-form-item label=\"bean名称\" prop=\"beanName\">\n        <el-input v-model=\"dataForm.beanName\" placeholder=\"spring bean名称, 如: testTask\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"参数\" prop=\"params\">\n        <el-input v-model=\"dataForm.params\" placeholder=\"参数\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"cron表达式\" prop=\"cronExpression\">\n        <el-input v-model=\"dataForm.cronExpression\" placeholder=\"如: 0 0 12 * * ?\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"备注\" prop=\"remark\">\n        <el-input v-model=\"dataForm.remark\" placeholder=\"备注\"></el-input>\n      </el-form-item>\n    </el-form>\n    <span slot=\"footer\" class=\"dialog-footer\">\n      <el-button @click=\"visible = false\">取消</el-button>\n      <el-button type=\"primary\" @click=\"dataFormSubmit()\">确定</el-button>\n    </span>\n  </el-dialog>\n</template>\n\n<script>\n  export default {\n    data () {\n      return {\n        visible: false,\n        dataForm: {\n          id: 0,\n          beanName: '',\n          params: '',\n          cronExpression: '',\n          remark: '',\n          status: 0\n        },\n        dataRule: {\n          beanName: [\n            { required: true, message: '用户名不能为空', trigger: 'blur' }\n          ],\n          cronExpression: [\n            { required: true, message: 'cron表达式不能为空', trigger: 'blur' }\n          ]\n        }\n      }\n    },\n    methods: {\n      init (id) {\n        this.dataForm.id = id || 0\n        this.visible = true\n        this.$nextTick(() => {\n          this.$refs['dataForm'].resetFields()\n          if (this.dataForm.id) {\n            this.$http({\n              url: this.$http.adornUrl(`/sys/schedule/info/${this.dataForm.id}`),\n              method: 'get',\n              params: this.$http.adornParams()\n            }).then(({data}) => {\n              if (data && data.code === 0) {\n                this.dataForm.beanName = data.schedule.beanName\n                this.dataForm.params = data.schedule.params\n                this.dataForm.cronExpression = data.schedule.cronExpression\n                this.dataForm.remark = data.schedule.remark\n                this.dataForm.status = data.schedule.status\n              }\n            })\n          }\n        })\n      },\n      // 表单提交\n      dataFormSubmit () {\n        this.$refs['dataForm'].validate((valid) => {\n          if (valid) {\n            this.$http({\n              url: this.$http.adornUrl(`/sys/schedule/${!this.dataForm.id ? 'save' : 'update'}`),\n              method: 'post',\n              data: this.$http.adornData({\n                'jobId': this.dataForm.id || undefined,\n                'beanName': this.dataForm.beanName,\n                'params': this.dataForm.params,\n                'cronExpression': this.dataForm.cronExpression,\n                'remark': this.dataForm.remark,\n                'status': !this.dataForm.id ? undefined : this.dataForm.status\n              })\n            }).then(({data}) => {\n              if (data && data.code === 0) {\n                this.$message({\n                  message: '操作成功',\n                  type: 'success',\n                  duration: 1500,\n                  onClose: () => {\n                    this.visible = false\n                    this.$emit('refreshDataList')\n                  }\n                })\n              } else {\n                this.$message.error(data.msg)\n              }\n            })\n          }\n        })\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/job/schedule-log.vue",
    "content": "<template>\n  <el-dialog\n    title=\"日志列表\"\n    :close-on-click-modal=\"false\"\n    :visible.sync=\"visible\"\n    width=\"75%\">\n    <el-form :inline=\"true\" :model=\"dataForm\" @keyup.enter.native=\"getDataList()\">\n      <el-form-item>\n        <el-input v-model=\"dataForm.id\" placeholder=\"任务ID\" clearable></el-input>\n      </el-form-item>\n      <el-form-item>\n        <el-button @click=\"getDataList()\">查询</el-button>\n      </el-form-item>\n    </el-form>\n    <el-table\n      :data=\"dataList\"\n      border\n      v-loading=\"dataListLoading\"\n      height=\"460\"\n      style=\"width: 100%;\">\n      <el-table-column\n        prop=\"logId\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"80\"\n        label=\"日志ID\">\n      </el-table-column>\n      <el-table-column\n        prop=\"jobId\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"80\"\n        label=\"任务ID\">\n      </el-table-column>\n      <el-table-column\n        prop=\"beanName\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"bean名称\">\n      </el-table-column>\n      <el-table-column\n        prop=\"params\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"参数\">\n      </el-table-column>\n      <el-table-column\n        prop=\"status\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"状态\">\n        <template slot-scope=\"scope\">\n          <el-tag v-if=\"scope.row.status === 0\" size=\"small\">成功</el-tag>\n          <el-tag v-else @click.native=\"showErrorInfo(scope.row.logId)\" size=\"small\" type=\"danger\" style=\"cursor: pointer;\">失败</el-tag>\n        </template>\n      </el-table-column>\n      <el-table-column\n        prop=\"times\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"耗时(单位: 毫秒)\">\n      </el-table-column>\n      <el-table-column\n        prop=\"createTime\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"180\"\n        label=\"执行时间\">\n      </el-table-column>\n    </el-table>\n    <el-pagination\n      @size-change=\"sizeChangeHandle\"\n      @current-change=\"currentChangeHandle\"\n      :current-page=\"pageIndex\"\n      :page-sizes=\"[10, 20, 50, 100]\"\n      :page-size=\"pageSize\"\n      :total=\"totalPage\"\n      layout=\"total, sizes, prev, pager, next, jumper\">\n    </el-pagination>\n  </el-dialog>\n</template>\n\n<script>\n  export default {\n    data () {\n      return {\n        visible: false,\n        dataForm: {\n          id: ''\n        },\n        dataList: [],\n        pageIndex: 1,\n        pageSize: 10,\n        totalPage: 0,\n        dataListLoading: false\n      }\n    },\n    methods: {\n      init () {\n        this.visible = true\n        this.getDataList()\n      },\n      // 获取数据列表\n      getDataList () {\n        this.dataListLoading = true\n        this.$http({\n          url: this.$http.adornUrl('/sys/scheduleLog/list'),\n          method: 'get',\n          params: this.$http.adornParams({\n            'page': this.pageIndex,\n            'limit': this.pageSize,\n            'jobId': this.dataForm.id\n          })\n        }).then(({data}) => {\n          if (data && data.code === 0) {\n            this.dataList = data.page.list\n            this.totalPage = data.page.totalCount\n          } else {\n            this.dataList = []\n            this.totalPage = 0\n          }\n          this.dataListLoading = false\n        })\n      },\n      // 每页数\n      sizeChangeHandle (val) {\n        this.pageSize = val\n        this.pageIndex = 1\n        this.getDataList()\n      },\n      // 当前页\n      currentChangeHandle (val) {\n        this.pageIndex = val\n        this.getDataList()\n      },\n      // 失败信息\n      showErrorInfo (id) {\n        this.$http({\n          url: this.$http.adornUrl(`/sys/scheduleLog/info/${id}`),\n          method: 'get',\n          params: this.$http.adornParams()\n        }).then(({data}) => {\n          if (data && data.code === 0) {\n            this.$alert(data.log.error)\n          } else {\n            this.$message.error(data.msg)\n          }\n        })\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/job/schedule.vue",
    "content": "<template>\n  <div class=\"mod-schedule\">\n    <el-form :inline=\"true\" :model=\"dataForm\" @keyup.enter.native=\"getDataList()\">\n      <el-form-item>\n        <el-input v-model=\"dataForm.beanName\" placeholder=\"bean名称\" clearable></el-input>\n      </el-form-item>\n      <el-form-item>\n        <el-button @click=\"getDataList()\">查询</el-button>\n        <el-button v-if=\"isAuth('sys:schedule:save')\" type=\"primary\" @click=\"addOrUpdateHandle()\">新增</el-button>\n        <el-button v-if=\"isAuth('sys:schedule:delete')\" type=\"danger\" @click=\"deleteHandle()\" :disabled=\"dataListSelections.length <= 0\">批量删除</el-button>\n        <el-button v-if=\"isAuth('sys:schedule:pause')\" type=\"danger\" @click=\"pauseHandle()\" :disabled=\"dataListSelections.length <= 0\">批量暂停</el-button>\n        <el-button v-if=\"isAuth('sys:schedule:resume')\" type=\"danger\" @click=\"resumeHandle()\" :disabled=\"dataListSelections.length <= 0\">批量恢复</el-button>\n        <el-button v-if=\"isAuth('sys:schedule:run')\" type=\"danger\" @click=\"runHandle()\" :disabled=\"dataListSelections.length <= 0\">批量立即执行</el-button>\n        <el-button v-if=\"isAuth('sys:schedule:log')\" type=\"success\" @click=\"logHandle()\">日志列表</el-button>\n      </el-form-item>\n    </el-form>\n    <el-table\n      :data=\"dataList\"\n      border\n      v-loading=\"dataListLoading\"\n      @selection-change=\"selectionChangeHandle\"\n      style=\"width: 100%;\">\n      <el-table-column\n        type=\"selection\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"50\">\n      </el-table-column>\n      <el-table-column\n        prop=\"jobId\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"80\"\n        label=\"ID\">\n      </el-table-column>\n      <el-table-column\n        prop=\"beanName\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"bean名称\">\n      </el-table-column>\n      <el-table-column\n        prop=\"params\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"参数\">\n      </el-table-column>\n      <el-table-column\n        prop=\"cronExpression\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"cron表达式\">\n      </el-table-column>\n      <el-table-column\n        prop=\"remark\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"备注\">\n      </el-table-column>\n      <el-table-column\n        prop=\"status\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"状态\">\n        <template slot-scope=\"scope\">\n          <el-tag v-if=\"scope.row.status === 0\" size=\"small\">正常</el-tag>\n          <el-tag v-else size=\"small\" type=\"danger\">暂停</el-tag>\n        </template>\n      </el-table-column>\n      <el-table-column\n        fixed=\"right\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"150\"\n        label=\"操作\">\n        <template slot-scope=\"scope\">\n          <el-button v-if=\"isAuth('sys:schedule:update')\" type=\"text\" size=\"small\" @click=\"addOrUpdateHandle(scope.row.jobId)\">修改</el-button>\n          <el-button v-if=\"isAuth('sys:schedule:delete')\" type=\"text\" size=\"small\" @click=\"deleteHandle(scope.row.jobId)\">删除</el-button>\n          <el-button v-if=\"isAuth('sys:schedule:pause')\" type=\"text\" size=\"small\" @click=\"pauseHandle(scope.row.jobId)\">暂停</el-button>\n          <el-button v-if=\"isAuth('sys:schedule:resume')\" type=\"text\" size=\"small\" @click=\"resumeHandle(scope.row.jobId)\">恢复</el-button>\n          <el-button v-if=\"isAuth('sys:schedule:run')\" type=\"text\" size=\"small\" @click=\"runHandle(scope.row.jobId)\">立即执行</el-button>\n        </template>\n      </el-table-column>\n    </el-table>\n    <el-pagination\n      @size-change=\"sizeChangeHandle\"\n      @current-change=\"currentChangeHandle\"\n      :current-page=\"pageIndex\"\n      :page-sizes=\"[10, 20, 50, 100]\"\n      :page-size=\"pageSize\"\n      :total=\"totalPage\"\n      layout=\"total, sizes, prev, pager, next, jumper\">\n    </el-pagination>\n    <!-- 弹窗, 新增 / 修改 -->\n    <add-or-update v-if=\"addOrUpdateVisible\" ref=\"addOrUpdate\" @refreshDataList=\"getDataList\"></add-or-update>\n    <!-- 弹窗, 日志列表 -->\n    <log v-if=\"logVisible\" ref=\"log\"></log>\n  </div>\n</template>\n\n<script>\n  import AddOrUpdate from './schedule-add-or-update'\n  import Log from './schedule-log'\n  export default {\n    data () {\n      return {\n        dataForm: {\n          beanName: ''\n        },\n        dataList: [],\n        pageIndex: 1,\n        pageSize: 10,\n        totalPage: 0,\n        dataListLoading: false,\n        dataListSelections: [],\n        addOrUpdateVisible: false,\n        logVisible: false\n      }\n    },\n    components: {\n      AddOrUpdate,\n      Log\n    },\n    activated () {\n      this.getDataList()\n    },\n    methods: {\n      // 获取数据列表\n      getDataList () {\n        this.dataListLoading = true\n        this.$http({\n          url: this.$http.adornUrl('/sys/schedule/list'),\n          method: 'get',\n          params: this.$http.adornParams({\n            'page': this.pageIndex,\n            'limit': this.pageSize,\n            'beanName': this.dataForm.beanName\n          })\n        }).then(({data}) => {\n          if (data && data.code === 0) {\n            this.dataList = data.page.list\n            this.totalPage = data.page.totalCount\n          } else {\n            this.dataList = []\n            this.totalPage = 0\n          }\n          this.dataListLoading = false\n        })\n      },\n      // 每页数\n      sizeChangeHandle (val) {\n        this.pageSize = val\n        this.pageIndex = 1\n        this.getDataList()\n      },\n      // 当前页\n      currentChangeHandle (val) {\n        this.pageIndex = val\n        this.getDataList()\n      },\n      // 多选\n      selectionChangeHandle (val) {\n        this.dataListSelections = val\n      },\n      // 新增 / 修改\n      addOrUpdateHandle (id) {\n        this.addOrUpdateVisible = true\n        this.$nextTick(() => {\n          this.$refs.addOrUpdate.init(id)\n        })\n      },\n      // 删除\n      deleteHandle (id) {\n        var ids = id ? [id] : this.dataListSelections.map(item => {\n          return item.jobId\n        })\n        this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {\n          confirmButtonText: '确定',\n          cancelButtonText: '取消',\n          type: 'warning'\n        }).then(() => {\n          this.$http({\n            url: this.$http.adornUrl('/sys/schedule/delete'),\n            method: 'post',\n            data: this.$http.adornData(ids, false)\n          }).then(({data}) => {\n            if (data && data.code === 0) {\n              this.$message({\n                message: '操作成功',\n                type: 'success',\n                duration: 1500,\n                onClose: () => {\n                  this.getDataList()\n                }\n              })\n            } else {\n              this.$message.error(data.msg)\n            }\n          })\n        }).catch(() => {})\n      },\n      // 暂停\n      pauseHandle (id) {\n        var ids = id ? [id] : this.dataListSelections.map(item => {\n          return item.jobId\n        })\n        this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '暂停' : '批量暂停'}]操作?`, '提示', {\n          confirmButtonText: '确定',\n          cancelButtonText: '取消',\n          type: 'warning'\n        }).then(() => {\n          this.$http({\n            url: this.$http.adornUrl('/sys/schedule/pause'),\n            method: 'post',\n            data: this.$http.adornData(ids, false)\n          }).then(({data}) => {\n            if (data && data.code === 0) {\n              this.$message({\n                message: '操作成功',\n                type: 'success',\n                duration: 1500,\n                onClose: () => {\n                  this.getDataList()\n                }\n              })\n            } else {\n              this.$message.error(data.msg)\n            }\n          })\n        }).catch(() => {})\n      },\n      // 恢复\n      resumeHandle (id) {\n        var ids = id ? [id] : this.dataListSelections.map(item => {\n          return item.jobId\n        })\n        this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '恢复' : '批量恢复'}]操作?`, '提示', {\n          confirmButtonText: '确定',\n          cancelButtonText: '取消',\n          type: 'warning'\n        }).then(() => {\n          this.$http({\n            url: this.$http.adornUrl('/sys/schedule/resume'),\n            method: 'post',\n            data: this.$http.adornData(ids, false)\n          }).then(({data}) => {\n            if (data && data.code === 0) {\n              this.$message({\n                message: '操作成功',\n                type: 'success',\n                duration: 1500,\n                onClose: () => {\n                  this.getDataList()\n                }\n              })\n            } else {\n              this.$message.error(data.msg)\n            }\n          })\n        }).catch(() => {})\n      },\n      // 立即执行\n      runHandle (id) {\n        var ids = id ? [id] : this.dataListSelections.map(item => {\n          return item.jobId\n        })\n        this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '立即执行' : '批量立即执行'}]操作?`, '提示', {\n          confirmButtonText: '确定',\n          cancelButtonText: '取消',\n          type: 'warning'\n        }).then(() => {\n          this.$http({\n            url: this.$http.adornUrl('/sys/schedule/run'),\n            method: 'post',\n            data: this.$http.adornData(ids, false)\n          }).then(({data}) => {\n            if (data && data.code === 0) {\n              this.$message({\n                message: '操作成功',\n                type: 'success',\n                duration: 1500,\n                onClose: () => {\n                  this.getDataList()\n                }\n              })\n            } else {\n              this.$message.error(data.msg)\n            }\n          })\n        }).catch(() => {})\n      },\n      // 日志列表\n      logHandle () {\n        this.logVisible = true\n        this.$nextTick(() => {\n          this.$refs.log.init()\n        })\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/oss/oss-config.vue",
    "content": "<template>\n  <el-dialog\n    title=\"云存储配置\"\n    :close-on-click-modal=\"false\"\n    :visible.sync=\"visible\">\n    <el-form :model=\"dataForm\" :rules=\"dataRule\" ref=\"dataForm\" @keyup.enter.native=\"dataFormSubmit()\" label-width=\"120px\">\n      <el-form-item size=\"mini\" label=\"存储类型\">\n        <el-radio-group v-model=\"dataForm.type\">\n          <el-radio :label=\"1\">七牛</el-radio>\n          <el-radio :label=\"2\">阿里云</el-radio>\n          <el-radio :label=\"3\">腾讯云</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <template v-if=\"dataForm.type === 1\">\n        <el-form-item size=\"mini\">\n          <a href=\"http://www.renren.io/open/qiniu.html\" target=\"_blank\">免费申请(七牛)10GB储存空间</a>\n        </el-form-item>\n        <el-form-item label=\"域名\">\n          <el-input v-model=\"dataForm.qiniuDomain\" placeholder=\"七牛绑定的域名\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"路径前缀\">\n          <el-input v-model=\"dataForm.qiniuPrefix\" placeholder=\"不设置默认为空\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"AccessKey\">\n          <el-input v-model=\"dataForm.qiniuAccessKey\" placeholder=\"七牛AccessKey\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"SecretKey\">\n          <el-input v-model=\"dataForm.qiniuSecretKey\" placeholder=\"七牛SecretKey\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"空间名\">\n          <el-input v-model=\"dataForm.qiniuBucketName\" placeholder=\"七牛存储空间名\"></el-input>\n        </el-form-item>\n      </template>\n      <template v-else-if=\"dataForm.type === 2\">\n        <el-form-item label=\"域名\">\n          <el-input v-model=\"dataForm.aliyunDomain\" placeholder=\"阿里云绑定的域名\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"路径前缀\">\n          <el-input v-model=\"dataForm.aliyunPrefix\" placeholder=\"不设置默认为空\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"EndPoint\">\n          <el-input v-model=\"dataForm.aliyunEndPoint\" placeholder=\"阿里云EndPoint\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"AccessKeyId\">\n          <el-input v-model=\"dataForm.aliyunAccessKeyId\" placeholder=\"阿里云AccessKeyId\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"AccessKeySecret\">\n          <el-input v-model=\"dataForm.aliyunAccessKeySecret\" placeholder=\"阿里云AccessKeySecret\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"BucketName\">\n          <el-input v-model=\"dataForm.aliyunBucketName\" placeholder=\"阿里云BucketName\"></el-input>\n        </el-form-item>\n      </template>\n      <template v-else-if=\"dataForm.type === 3\">\n        <el-form-item label=\"域名\">\n          <el-input v-model=\"dataForm.qcloudDomain\" placeholder=\"腾讯云绑定的域名\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"路径前缀\">\n          <el-input v-model=\"dataForm.qcloudPrefix\" placeholder=\"不设置默认为空\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"AppId\">\n          <el-input v-model=\"dataForm.qcloudAppId\" placeholder=\"腾讯云AppId\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"SecretId\">\n          <el-input v-model=\"dataForm.qcloudSecretId\" placeholder=\"腾讯云SecretId\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"SecretKey\">\n          <el-input v-model=\"dataForm.qcloudSecretKey\" placeholder=\"腾讯云SecretKey\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"BucketName\">\n          <el-input v-model=\"dataForm.qcloudBucketName\" placeholder=\"腾讯云BucketName\"></el-input>\n        </el-form-item>\n        <el-form-item label=\"Bucket所属地区\">\n          <el-input v-model=\"dataForm.qcloudRegion\" placeholder=\"如：sh（可选值 ，华南：gz 华北：tj 华东：sh）\"></el-input>\n        </el-form-item>\n      </template>\n    </el-form>\n    <span slot=\"footer\" class=\"dialog-footer\">\n      <el-button @click=\"visible = false\">取消</el-button>\n      <el-button type=\"primary\" @click=\"dataFormSubmit()\">确定</el-button>\n    </span>\n  </el-dialog>\n</template>\n\n<script>\n  export default {\n    data () {\n      return {\n        visible: false,\n        dataForm: {},\n        dataRule: {}\n      }\n    },\n    methods: {\n      init (id) {\n        this.visible = true\n        this.$http({\n          url: this.$http.adornUrl('/sys/oss/config'),\n          method: 'get',\n          params: this.$http.adornParams()\n        }).then(({data}) => {\n          this.dataForm = data && data.code === 0 ? data.config : []\n        })\n      },\n      // 表单提交\n      dataFormSubmit () {\n        this.$refs['dataForm'].validate((valid) => {\n          if (valid) {\n            this.$http({\n              url: this.$http.adornUrl('/sys/oss/saveConfig'),\n              method: 'post',\n              data: this.$http.adornData(this.dataForm)\n            }).then(({data}) => {\n              if (data && data.code === 0) {\n                this.$message({\n                  message: '操作成功',\n                  type: 'success',\n                  duration: 1500,\n                  onClose: () => {\n                    this.visible = false\n                  }\n                })\n              } else {\n                this.$message.error(data.msg)\n              }\n            })\n          }\n        })\n      }\n    }\n  }\n</script>\n\n"
  },
  {
    "path": "src/views/modules/oss/oss-upload.vue",
    "content": "<template>\n  <el-dialog\n    title=\"上传文件\"\n    :close-on-click-modal=\"false\"\n    @close=\"closeHandle\"\n    :visible.sync=\"visible\">\n    <el-upload\n      drag\n      :action=\"url\"\n      :before-upload=\"beforeUploadHandle\"\n      :on-success=\"successHandle\"\n      multiple\n      :file-list=\"fileList\"\n      style=\"text-align: center;\">\n      <i class=\"el-icon-upload\"></i>\n      <div class=\"el-upload__text\">将文件拖到此处，或<em>点击上传</em></div>\n      <div class=\"el-upload__tip\" slot=\"tip\">只支持jpg、png、gif格式的图片！</div>\n    </el-upload>\n  </el-dialog>\n</template>\n\n<script>\n  export default {\n    data () {\n      return {\n        visible: false,\n        url: '',\n        num: 0,\n        successNum: 0,\n        fileList: []\n      }\n    },\n    methods: {\n      init (id) {\n        this.url = this.$http.adornUrl(`/sys/oss/upload?token=${this.$cookie.get('token')}`)\n        this.visible = true\n      },\n      // 上传之前\n      beforeUploadHandle (file) {\n        if (file.type !== 'image/jpg' && file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {\n          this.$message.error('只支持jpg、png、gif格式的图片！')\n          return false\n        }\n        this.num++\n      },\n      // 上传成功\n      successHandle (response, file, fileList) {\n        this.fileList = fileList\n        this.successNum++\n        if (response && response.code === 0) {\n          if (this.num === this.successNum) {\n            this.$confirm('操作成功, 是否继续操作?', '提示', {\n              confirmButtonText: '确定',\n              cancelButtonText: '取消',\n              type: 'warning'\n            }).catch(() => {\n              this.visible = false\n            })\n          }\n        } else {\n          this.$message.error(response.msg)\n        }\n      },\n      // 弹窗关闭时\n      closeHandle () {\n        this.fileList = []\n        this.$emit('refreshDataList')\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/oss/oss.vue",
    "content": "<template>\n  <div class=\"mod-oss\">\n    <el-form :inline=\"true\" :model=\"dataForm\">\n      <el-form-item>\n        <el-button type=\"primary\" @click=\"configHandle()\">云存储配置</el-button>\n        <el-button type=\"primary\" @click=\"uploadHandle()\">上传文件</el-button>\n        <el-button type=\"danger\" @click=\"deleteHandle()\" :disabled=\"dataListSelections.length <= 0\">批量删除</el-button>\n      </el-form-item>\n    </el-form>\n    <el-table\n      :data=\"dataList\"\n      border\n      v-loading=\"dataListLoading\"\n      @selection-change=\"selectionChangeHandle\"\n      style=\"width: 100%;\">\n      <el-table-column\n        type=\"selection\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"50\">\n      </el-table-column>\n      <el-table-column\n        prop=\"id\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"80\"\n        label=\"ID\">\n      </el-table-column>\n      <el-table-column\n        prop=\"url\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"URL地址\">\n      </el-table-column>\n      <el-table-column\n        prop=\"createDate\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"180\"\n        label=\"创建时间\">\n      </el-table-column>\n      <el-table-column\n        fixed=\"right\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"150\"\n        label=\"操作\">\n        <template slot-scope=\"scope\">\n          <el-button type=\"text\" size=\"small\" @click=\"deleteHandle(scope.row.id)\">删除</el-button>\n        </template>\n      </el-table-column>\n    </el-table>\n    <el-pagination\n      @size-change=\"sizeChangeHandle\"\n      @current-change=\"currentChangeHandle\"\n      :current-page=\"pageIndex\"\n      :page-sizes=\"[10, 20, 50, 100]\"\n      :page-size=\"pageSize\"\n      :total=\"totalPage\"\n      layout=\"total, sizes, prev, pager, next, jumper\">\n    </el-pagination>\n    <!-- 弹窗, 云存储配置 -->\n    <config v-if=\"configVisible\" ref=\"config\"></config>\n    <!-- 弹窗, 上传文件 -->\n    <upload v-if=\"uploadVisible\" ref=\"upload\" @refreshDataList=\"getDataList\"></upload>\n  </div>\n</template>\n\n<script>\n  import Config from './oss-config'\n  import Upload from './oss-upload'\n  export default {\n    data () {\n      return {\n        dataForm: {},\n        dataList: [],\n        pageIndex: 1,\n        pageSize: 10,\n        totalPage: 0,\n        dataListLoading: false,\n        dataListSelections: [],\n        configVisible: false,\n        uploadVisible: false\n      }\n    },\n    components: {\n      Config,\n      Upload\n    },\n    activated () {\n      this.getDataList()\n    },\n    methods: {\n      // 获取数据列表\n      getDataList () {\n        this.dataListLoading = true\n        this.$http({\n          url: this.$http.adornUrl('/sys/oss/list'),\n          method: 'get',\n          params: this.$http.adornParams({\n            'page': this.pageIndex,\n            'limit': this.pageSize\n          })\n        }).then(({data}) => {\n          if (data && data.code === 0) {\n            this.dataList = data.page.list\n            this.totalPage = data.page.totalCount\n          } else {\n            this.dataList = []\n            this.totalPage = 0\n          }\n          this.dataListLoading = false\n        })\n      },\n      // 每页数\n      sizeChangeHandle (val) {\n        this.pageSize = val\n        this.pageIndex = 1\n        this.getDataList()\n      },\n      // 当前页\n      currentChangeHandle (val) {\n        this.pageIndex = val\n        this.getDataList()\n      },\n      // 多选\n      selectionChangeHandle (val) {\n        this.dataListSelections = val\n      },\n      // 云存储配置\n      configHandle () {\n        this.configVisible = true\n        this.$nextTick(() => {\n          this.$refs.config.init()\n        })\n      },\n      // 上传文件\n      uploadHandle () {\n        this.uploadVisible = true\n        this.$nextTick(() => {\n          this.$refs.upload.init()\n        })\n      },\n      // 删除\n      deleteHandle (id) {\n        var ids = id ? [id] : this.dataListSelections.map(item => {\n          return item.id\n        })\n        this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {\n          confirmButtonText: '确定',\n          cancelButtonText: '取消',\n          type: 'warning'\n        }).then(() => {\n          this.$http({\n            url: this.$http.adornUrl('/sys/oss/delete'),\n            method: 'post',\n            data: this.$http.adornData(ids, false)\n          }).then(({data}) => {\n            if (data && data.code === 0) {\n              this.$message({\n                message: '操作成功',\n                type: 'success',\n                duration: 1500,\n                onClose: () => {\n                  this.getDataList()\n                }\n              })\n            } else {\n              this.$message.error(data.msg)\n            }\n          })\n        }).catch(() => {})\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/sys/config-add-or-update.vue",
    "content": "<template>\n  <el-dialog\n    :title=\"!dataForm.id ? '新增' : '修改'\"\n    :close-on-click-modal=\"false\"\n    :visible.sync=\"visible\">\n    <el-form :model=\"dataForm\" :rules=\"dataRule\" ref=\"dataForm\" @keyup.enter.native=\"dataFormSubmit()\" label-width=\"80px\">\n      <el-form-item label=\"参数名\" prop=\"paramKey\">\n        <el-input v-model=\"dataForm.paramKey\" placeholder=\"参数名\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"参数值\" prop=\"paramValue\">\n        <el-input v-model=\"dataForm.paramValue\" placeholder=\"参数值\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"备注\" prop=\"remark\">\n        <el-input v-model=\"dataForm.remark\" placeholder=\"备注\"></el-input>\n      </el-form-item>\n    </el-form>\n    <span slot=\"footer\" class=\"dialog-footer\">\n      <el-button @click=\"visible = false\">取消</el-button>\n      <el-button type=\"primary\" @click=\"dataFormSubmit()\">确定</el-button>\n    </span>\n  </el-dialog>\n</template>\n\n<script>\n  export default {\n    data () {\n      return {\n        visible: false,\n        dataForm: {\n          id: 0,\n          paramKey: '',\n          paramValue: '',\n          remark: ''\n        },\n        dataRule: {\n          paramKey: [\n            { required: true, message: '参数名不能为空', trigger: 'blur' }\n          ],\n          paramValue: [\n            { required: true, message: '参数值不能为空', trigger: 'blur' }\n          ]\n        }\n      }\n    },\n    methods: {\n      init (id) {\n        this.dataForm.id = id || 0\n        this.visible = true\n        this.$nextTick(() => {\n          this.$refs['dataForm'].resetFields()\n          if (this.dataForm.id) {\n            this.$http({\n              url: this.$http.adornUrl(`/sys/config/info/${this.dataForm.id}`),\n              method: 'get',\n              params: this.$http.adornParams()\n            }).then(({data}) => {\n              if (data && data.code === 0) {\n                this.dataForm.paramKey = data.config.paramKey\n                this.dataForm.paramValue = data.config.paramValue\n                this.dataForm.remark = data.config.remark\n              }\n            })\n          }\n        })\n      },\n      // 表单提交\n      dataFormSubmit () {\n        this.$refs['dataForm'].validate((valid) => {\n          if (valid) {\n            this.$http({\n              url: this.$http.adornUrl(`/sys/config/${!this.dataForm.id ? 'save' : 'update'}`),\n              method: 'post',\n              data: this.$http.adornData({\n                'id': this.dataForm.id || undefined,\n                'paramKey': this.dataForm.paramKey,\n                'paramValue': this.dataForm.paramValue,\n                'remark': this.dataForm.remark\n              })\n            }).then(({data}) => {\n              if (data && data.code === 0) {\n                this.$message({\n                  message: '操作成功',\n                  type: 'success',\n                  duration: 1500,\n                  onClose: () => {\n                    this.visible = false\n                    this.$emit('refreshDataList')\n                  }\n                })\n              } else {\n                this.$message.error(data.msg)\n              }\n            })\n          }\n        })\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/sys/config.vue",
    "content": "<template>\n  <div class=\"mod-config\">\n    <el-form :inline=\"true\" :model=\"dataForm\" @keyup.enter.native=\"getDataList()\">\n      <el-form-item>\n        <el-input v-model=\"dataForm.paramKey\" placeholder=\"参数名\" clearable></el-input>\n      </el-form-item>\n      <el-form-item>\n        <el-button @click=\"getDataList()\">查询</el-button>\n        <el-button type=\"primary\" @click=\"addOrUpdateHandle()\">新增</el-button>\n        <el-button type=\"danger\" @click=\"deleteHandle()\" :disabled=\"dataListSelections.length <= 0\">批量删除</el-button>\n      </el-form-item>\n    </el-form>\n    <el-table\n      :data=\"dataList\"\n      border\n      v-loading=\"dataListLoading\"\n      @selection-change=\"selectionChangeHandle\"\n      style=\"width: 100%;\">\n      <el-table-column\n        type=\"selection\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"50\">\n      </el-table-column>\n      <el-table-column\n        prop=\"id\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"80\"\n        label=\"ID\">\n      </el-table-column>\n      <el-table-column\n        prop=\"paramKey\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"参数名\">\n      </el-table-column>\n      <el-table-column\n        prop=\"paramValue\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"参数值\">\n      </el-table-column>\n      <el-table-column\n        prop=\"remark\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"备注\">\n      </el-table-column>\n      <el-table-column\n        fixed=\"right\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"150\"\n        label=\"操作\">\n        <template slot-scope=\"scope\">\n          <el-button type=\"text\" size=\"small\" @click=\"addOrUpdateHandle(scope.row.id)\">修改</el-button>\n          <el-button type=\"text\" size=\"small\" @click=\"deleteHandle(scope.row.id)\">删除</el-button>\n        </template>\n      </el-table-column>\n    </el-table>\n    <el-pagination\n      @size-change=\"sizeChangeHandle\"\n      @current-change=\"currentChangeHandle\"\n      :current-page=\"pageIndex\"\n      :page-sizes=\"[10, 20, 50, 100]\"\n      :page-size=\"pageSize\"\n      :total=\"totalPage\"\n      layout=\"total, sizes, prev, pager, next, jumper\">\n    </el-pagination>\n    <!-- 弹窗, 新增 / 修改 -->\n    <add-or-update v-if=\"addOrUpdateVisible\" ref=\"addOrUpdate\" @refreshDataList=\"getDataList\"></add-or-update>\n  </div>\n</template>\n\n<script>\n  import AddOrUpdate from './config-add-or-update'\n  export default {\n    data () {\n      return {\n        dataForm: {\n          paramKey: ''\n        },\n        dataList: [],\n        pageIndex: 1,\n        pageSize: 10,\n        totalPage: 0,\n        dataListLoading: false,\n        dataListSelections: [],\n        addOrUpdateVisible: false\n      }\n    },\n    components: {\n      AddOrUpdate\n    },\n    activated () {\n      this.getDataList()\n    },\n    methods: {\n      // 获取数据列表\n      getDataList () {\n        this.dataListLoading = true\n        this.$http({\n          url: this.$http.adornUrl('/sys/config/list'),\n          method: 'get',\n          params: this.$http.adornParams({\n            'page': this.pageIndex,\n            'limit': this.pageSize,\n            'paramKey': this.dataForm.paramKey\n          })\n        }).then(({data}) => {\n          if (data && data.code === 0) {\n            this.dataList = data.page.list\n            this.totalPage = data.page.totalCount\n          } else {\n            this.dataList = []\n            this.totalPage = 0\n          }\n          this.dataListLoading = false\n        })\n      },\n      // 每页数\n      sizeChangeHandle (val) {\n        this.pageSize = val\n        this.pageIndex = 1\n        this.getDataList()\n      },\n      // 当前页\n      currentChangeHandle (val) {\n        this.pageIndex = val\n        this.getDataList()\n      },\n      // 多选\n      selectionChangeHandle (val) {\n        this.dataListSelections = val\n      },\n      // 新增 / 修改\n      addOrUpdateHandle (id) {\n        this.addOrUpdateVisible = true\n        this.$nextTick(() => {\n          this.$refs.addOrUpdate.init(id)\n        })\n      },\n      // 删除\n      deleteHandle (id) {\n        var ids = id ? [id] : this.dataListSelections.map(item => {\n          return item.id\n        })\n        this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {\n          confirmButtonText: '确定',\n          cancelButtonText: '取消',\n          type: 'warning'\n        }).then(() => {\n          this.$http({\n            url: this.$http.adornUrl('/sys/config/delete'),\n            method: 'post',\n            data: this.$http.adornData(ids, false)\n          }).then(({data}) => {\n            if (data && data.code === 0) {\n              this.$message({\n                message: '操作成功',\n                type: 'success',\n                duration: 1500,\n                onClose: () => {\n                  this.getDataList()\n                }\n              })\n            } else {\n              this.$message.error(data.msg)\n            }\n          })\n        }).catch(() => {})\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/sys/log.vue",
    "content": "<template>\n  <div class=\"mod-log\">\n    <el-form :inline=\"true\" :model=\"dataForm\" @keyup.enter.native=\"getDataList()\">\n      <el-form-item>\n        <el-input v-model=\"dataForm.key\" placeholder=\"用户名／用户操作\" clearable></el-input>\n      </el-form-item>\n      <el-form-item>\n        <el-button @click=\"getDataList()\">查询</el-button>\n      </el-form-item>\n    </el-form>\n    <el-table\n      :data=\"dataList\"\n      border\n      v-loading=\"dataListLoading\"\n      style=\"width: 100%\">\n      <el-table-column\n        prop=\"id\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"80\"\n        label=\"ID\">\n      </el-table-column>\n      <el-table-column\n        prop=\"username\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"用户名\">\n      </el-table-column>\n      <el-table-column\n        prop=\"operation\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"用户操作\">\n      </el-table-column>\n      <el-table-column\n        prop=\"method\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"150\"\n        :show-overflow-tooltip=\"true\"\n        label=\"请求方法\">\n      </el-table-column>\n      <el-table-column\n        prop=\"params\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"150\"\n        :show-overflow-tooltip=\"true\"\n        label=\"请求参数\">\n      </el-table-column>\n      <el-table-column\n        prop=\"time\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"执行时长(毫秒)\">\n      </el-table-column>\n      <el-table-column\n        prop=\"ip\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"150\"\n        label=\"IP地址\">\n      </el-table-column>\n      <el-table-column\n        prop=\"createDate\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"180\"\n        label=\"创建时间\">\n      </el-table-column>\n    </el-table>\n    <el-pagination\n      @size-change=\"sizeChangeHandle\"\n      @current-change=\"currentChangeHandle\"\n      :current-page=\"pageIndex\"\n      :page-sizes=\"[10, 20, 50, 100]\"\n      :page-size=\"pageSize\"\n      :total=\"totalPage\"\n      layout=\"total, sizes, prev, pager, next, jumper\">\n    </el-pagination>\n  </div>\n</template>\n\n<script>\n  export default {\n    data () {\n      return {\n        dataForm: {\n          key: ''\n        },\n        dataList: [],\n        pageIndex: 1,\n        pageSize: 10,\n        totalPage: 0,\n        dataListLoading: false,\n        selectionDataList: []\n      }\n    },\n    created () {\n      this.getDataList()\n    },\n    methods: {\n      // 获取数据列表\n      getDataList () {\n        this.dataListLoading = true\n        this.$http({\n          url: this.$http.adornUrl('/sys/log/list'),\n          method: 'get',\n          params: this.$http.adornParams({\n            'page': this.pageIndex,\n            'limit': this.pageSize,\n            'key': this.dataForm.key\n          })\n        }).then(({data}) => {\n          if (data && data.code === 0) {\n            this.dataList = data.page.list\n            this.totalPage = data.page.totalCount\n          } else {\n            this.dataList = []\n            this.totalPage = 0\n          }\n          this.dataListLoading = false\n        })\n      },\n      // 每页数\n      sizeChangeHandle (val) {\n        this.pageSize = val\n        this.pageIndex = 1\n        this.getDataList()\n      },\n      // 当前页\n      currentChangeHandle (val) {\n        this.pageIndex = val\n        this.getDataList()\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/sys/menu-add-or-update.vue",
    "content": "<template>\n  <el-dialog\n    :title=\"!dataForm.id ? '新增' : '修改'\"\n    :close-on-click-modal=\"false\"\n    :visible.sync=\"visible\">\n    <el-form :model=\"dataForm\" :rules=\"dataRule\" ref=\"dataForm\" @keyup.enter.native=\"dataFormSubmit()\" label-width=\"80px\">\n      <el-form-item label=\"类型\" prop=\"type\">\n        <el-radio-group v-model=\"dataForm.type\">\n          <el-radio v-for=\"(type, index) in dataForm.typeList\" :label=\"index\" :key=\"index\">{{ type }}</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item :label=\"dataForm.typeList[dataForm.type] + '名称'\" prop=\"name\">\n        <el-input v-model=\"dataForm.name\" :placeholder=\"dataForm.typeList[dataForm.type] + '名称'\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"上级菜单\" prop=\"parentName\">\n        <el-popover\n          ref=\"menuListPopover\"\n          placement=\"bottom-start\"\n          trigger=\"click\">\n          <el-tree\n            :data=\"menuList\"\n            :props=\"menuListTreeProps\"\n            node-key=\"menuId\"\n            ref=\"menuListTree\"\n            @current-change=\"menuListTreeCurrentChangeHandle\"\n            :default-expand-all=\"true\"\n            :highlight-current=\"true\"\n            :expand-on-click-node=\"false\">\n          </el-tree>\n        </el-popover>\n        <el-input v-model=\"dataForm.parentName\" v-popover:menuListPopover :readonly=\"true\" placeholder=\"点击选择上级菜单\" class=\"menu-list__input\"></el-input>\n      </el-form-item>\n      <el-form-item v-if=\"dataForm.type === 1\" label=\"菜单路由\" prop=\"url\">\n        <el-input v-model=\"dataForm.url\" placeholder=\"菜单路由\"></el-input>\n      </el-form-item>\n      <el-form-item v-if=\"dataForm.type !== 0\" label=\"授权标识\" prop=\"perms\">\n        <el-input v-model=\"dataForm.perms\" placeholder=\"多个用逗号分隔, 如: user:list,user:create\"></el-input>\n      </el-form-item>\n      <el-form-item v-if=\"dataForm.type !== 2\" label=\"排序号\" prop=\"orderNum\">\n        <el-input-number v-model=\"dataForm.orderNum\" controls-position=\"right\" :min=\"0\" label=\"排序号\"></el-input-number>\n      </el-form-item>\n      <el-form-item v-if=\"dataForm.type !== 2\" label=\"菜单图标\" prop=\"icon\">\n        <el-row>\n          <el-col :span=\"22\">\n            <el-popover\n              ref=\"iconListPopover\"\n              placement=\"bottom-start\"\n              trigger=\"click\"\n              popper-class=\"mod-menu__icon-popover\">\n              <div class=\"mod-menu__icon-inner\">\n                <div class=\"mod-menu__icon-list\">\n                  <el-button\n                    v-for=\"(item, index) in iconList\"\n                    :key=\"index\"\n                    @click=\"iconActiveHandle(item)\"\n                    :class=\"{ 'is-active': item === dataForm.icon }\">\n                    <icon-svg :name=\"item\"></icon-svg>\n                  </el-button>\n                </div>\n              </div>\n            </el-popover>\n            <el-input v-model=\"dataForm.icon\" v-popover:iconListPopover :readonly=\"true\" placeholder=\"菜单图标名称\" class=\"icon-list__input\"></el-input>\n          </el-col>\n          <el-col :span=\"2\" class=\"icon-list__tips\">\n            <el-tooltip placement=\"top\" effect=\"light\">\n              <div slot=\"content\">全站推荐使用SVG Sprite, 详细请参考:<a href=\"//github.com/daxiongYang/renren-fast-vue/blob/master/src/icons/index.js\" target=\"_blank\">icons/index.js</a>描述</div>\n              <i class=\"el-icon-warning\"></i>\n            </el-tooltip>\n          </el-col>\n        </el-row>\n      </el-form-item>\n    </el-form>\n    <span slot=\"footer\" class=\"dialog-footer\">\n      <el-button @click=\"visible = false\">取消</el-button>\n      <el-button type=\"primary\" @click=\"dataFormSubmit()\">确定</el-button>\n    </span>\n  </el-dialog>\n</template>\n\n<script>\n  import { treeDataTranslate } from '@/utils'\n  import Icon from '@/icons'\n  export default {\n    data () {\n      var validateUrl = (rule, value, callback) => {\n        if (this.dataForm.type === 1 && !/\\S/.test(value)) {\n          callback(new Error('菜单URL不能为空'))\n        } else {\n          callback()\n        }\n      }\n      return {\n        visible: false,\n        dataForm: {\n          id: 0,\n          type: 1,\n          typeList: ['目录', '菜单', '按钮'],\n          name: '',\n          parentId: 0,\n          parentName: '',\n          url: '',\n          perms: '',\n          orderNum: 0,\n          icon: '',\n          iconList: []\n        },\n        dataRule: {\n          name: [\n            { required: true, message: '菜单名称不能为空', trigger: 'blur' }\n          ],\n          parentName: [\n            { required: true, message: '上级菜单不能为空', trigger: 'change' }\n          ],\n          url: [\n            { validator: validateUrl, trigger: 'blur' }\n          ]\n        },\n        menuList: [],\n        menuListTreeProps: {\n          label: 'name',\n          children: 'children'\n        }\n      }\n    },\n    created () {\n      this.iconList = Icon.getNameList()\n    },\n    methods: {\n      init (id) {\n        this.dataForm.id = id || 0\n        this.$http({\n          url: this.$http.adornUrl('/sys/menu/select'),\n          method: 'get',\n          params: this.$http.adornParams()\n        }).then(({data}) => {\n          this.menuList = treeDataTranslate(data.menuList, 'menuId')\n        }).then(() => {\n          this.visible = true\n          this.$nextTick(() => {\n            this.$refs['dataForm'].resetFields()\n          })\n        }).then(() => {\n          if (!this.dataForm.id) {\n            // 新增\n            this.menuListTreeSetCurrentNode()\n          } else {\n            // 修改\n            this.$http({\n              url: this.$http.adornUrl(`/sys/menu/info/${this.dataForm.id}`),\n              method: 'get',\n              params: this.$http.adornParams()\n            }).then(({data}) => {\n              this.dataForm.id = data.menu.menuId\n              this.dataForm.type = data.menu.type\n              this.dataForm.name = data.menu.name\n              this.dataForm.parentId = data.menu.parentId\n              this.dataForm.url = data.menu.url\n              this.dataForm.perms = data.menu.perms\n              this.dataForm.orderNum = data.menu.orderNum\n              this.dataForm.icon = data.menu.icon\n              this.menuListTreeSetCurrentNode()\n            })\n          }\n        })\n      },\n      // 菜单树选中\n      menuListTreeCurrentChangeHandle (data, node) {\n        this.dataForm.parentId = data.menuId\n        this.dataForm.parentName = data.name\n      },\n      // 菜单树设置当前选中节点\n      menuListTreeSetCurrentNode () {\n        this.$refs.menuListTree.setCurrentKey(this.dataForm.parentId)\n        this.dataForm.parentName = (this.$refs.menuListTree.getCurrentNode() || {})['name']\n      },\n      // 图标选中\n      iconActiveHandle (iconName) {\n        this.dataForm.icon = iconName\n      },\n      // 表单提交\n      dataFormSubmit () {\n        this.$refs['dataForm'].validate((valid) => {\n          if (valid) {\n            this.$http({\n              url: this.$http.adornUrl(`/sys/menu/${!this.dataForm.id ? 'save' : 'update'}`),\n              method: 'post',\n              data: this.$http.adornData({\n                'menuId': this.dataForm.id || undefined,\n                'type': this.dataForm.type,\n                'name': this.dataForm.name,\n                'parentId': this.dataForm.parentId,\n                'url': this.dataForm.url,\n                'perms': this.dataForm.perms,\n                'orderNum': this.dataForm.orderNum,\n                'icon': this.dataForm.icon\n              })\n            }).then(({data}) => {\n              if (data && data.code === 0) {\n                this.$message({\n                  message: '操作成功',\n                  type: 'success',\n                  duration: 1500,\n                  onClose: () => {\n                    this.visible = false\n                    this.$emit('refreshDataList')\n                  }\n                })\n              } else {\n                this.$message.error(data.msg)\n              }\n            })\n          }\n        })\n      }\n    }\n  }\n</script>\n\n<style lang=\"scss\">\n  .mod-menu {\n    .menu-list__input,\n    .icon-list__input {\n       > .el-input__inner {\n        cursor: pointer;\n      }\n    }\n    &__icon-popover {\n      width: 458px;\n      overflow: hidden;\n    }\n    &__icon-inner {\n      width: 478px;\n      max-height: 258px;\n      overflow-x: hidden;\n      overflow-y: auto;\n    }\n    &__icon-list {\n      width: 458px;\n      padding: 0;\n      margin: -8px 0 0 -8px;\n      > .el-button {\n        padding: 8px;\n        margin: 8px 0 0 8px;\n        > span {\n          display: inline-block;\n          vertical-align: middle;\n          width: 18px;\n          height: 18px;\n          font-size: 18px;\n        }\n      }\n    }\n    .icon-list__tips {\n      font-size: 18px;\n      text-align: center;\n      color: #e6a23c;\n      cursor: pointer;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/views/modules/sys/menu.vue",
    "content": "<template>\n  <div class=\"mod-menu\">\n    <el-form :inline=\"true\" :model=\"dataForm\">\n      <el-form-item>\n        <el-button v-if=\"isAuth('sys:menu:save')\" type=\"primary\" @click=\"addOrUpdateHandle()\">新增</el-button>\n      </el-form-item>\n    </el-form>\n    <el-table\n      :data=\"dataList\"\n      border\n      style=\"width: 100%;\">\n      <el-table-column\n        prop=\"menuId\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"80\"\n        label=\"ID\">\n      </el-table-column>\n      <table-tree-column\n        prop=\"name\"\n        header-align=\"center\"\n        treeKey=\"menuId\"\n        width=\"150\"\n        label=\"名称\">\n      </table-tree-column>\n      <el-table-column\n        prop=\"parentName\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"120\"\n        label=\"上级菜单\">\n      </el-table-column>\n      <el-table-column\n        header-align=\"center\"\n        align=\"center\"\n        label=\"图标\">\n        <template slot-scope=\"scope\">\n          <icon-svg :name=\"scope.row.icon || ''\"></icon-svg>\n        </template>\n      </el-table-column>\n      <el-table-column\n        prop=\"type\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"类型\">\n        <template slot-scope=\"scope\">\n          <el-tag v-if=\"scope.row.type === 0\" size=\"small\">目录</el-tag>\n          <el-tag v-else-if=\"scope.row.type === 1\" size=\"small\" type=\"success\">菜单</el-tag>\n          <el-tag v-else-if=\"scope.row.type === 2\" size=\"small\" type=\"info\">按钮</el-tag>\n        </template>\n      </el-table-column>\n      <el-table-column\n        prop=\"orderNum\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"排序号\">\n      </el-table-column>\n      <el-table-column\n        prop=\"url\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"150\"\n        :show-overflow-tooltip=\"true\"\n        label=\"菜单URL\">\n      </el-table-column>\n      <el-table-column\n        prop=\"perms\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"150\"\n        :show-overflow-tooltip=\"true\"\n        label=\"授权标识\">\n      </el-table-column>\n      <el-table-column\n        fixed=\"right\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"150\"\n        label=\"操作\">\n        <template slot-scope=\"scope\">\n          <el-button v-if=\"isAuth('sys:menu:update')\" type=\"text\" size=\"small\" @click=\"addOrUpdateHandle(scope.row.menuId)\">修改</el-button>\n          <el-button v-if=\"isAuth('sys:menu:delete')\" type=\"text\" size=\"small\" @click=\"deleteHandle(scope.row.menuId)\">删除</el-button>\n        </template>\n      </el-table-column>\n    </el-table>\n    <!-- 弹窗, 新增 / 修改 -->\n    <add-or-update v-if=\"addOrUpdateVisible\" ref=\"addOrUpdate\" @refreshDataList=\"getDataList\"></add-or-update>\n  </div>\n</template>\n\n<script>\n  import TableTreeColumn from '@/components/table-tree-column'\n  import AddOrUpdate from './menu-add-or-update'\n  import { treeDataTranslate } from '@/utils'\n  export default {\n    data () {\n      return {\n        dataForm: {},\n        dataList: [],\n        dataListLoading: false,\n        addOrUpdateVisible: false\n      }\n    },\n    components: {\n      TableTreeColumn,\n      AddOrUpdate\n    },\n    activated () {\n      this.getDataList()\n    },\n    methods: {\n      // 获取数据列表\n      getDataList () {\n        this.dataListLoading = true\n        this.$http({\n          url: this.$http.adornUrl('/sys/menu/list'),\n          method: 'get',\n          params: this.$http.adornParams()\n        }).then(({data}) => {\n          this.dataList = treeDataTranslate(data, 'menuId')\n          this.dataListLoading = false\n        })\n      },\n      // 新增 / 修改\n      addOrUpdateHandle (id) {\n        this.addOrUpdateVisible = true\n        this.$nextTick(() => {\n          this.$refs.addOrUpdate.init(id)\n        })\n      },\n      // 删除\n      deleteHandle (id) {\n        this.$confirm(`确定对[id=${id}]进行[删除]操作?`, '提示', {\n          confirmButtonText: '确定',\n          cancelButtonText: '取消',\n          type: 'warning'\n        }).then(() => {\n          this.$http({\n            url: this.$http.adornUrl(`/sys/menu/delete/${id}`),\n            method: 'post',\n            data: this.$http.adornData()\n          }).then(({data}) => {\n            if (data && data.code === 0) {\n              this.$message({\n                message: '操作成功',\n                type: 'success',\n                duration: 1500,\n                onClose: () => {\n                  this.getDataList()\n                }\n              })\n            } else {\n              this.$message.error(data.msg)\n            }\n          })\n        }).catch(() => {})\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/sys/role-add-or-update.vue",
    "content": "<template>\n  <el-dialog\n    :title=\"!dataForm.id ? '新增' : '修改'\"\n    :close-on-click-modal=\"false\"\n    :visible.sync=\"visible\">\n    <el-form :model=\"dataForm\" :rules=\"dataRule\" ref=\"dataForm\" @keyup.enter.native=\"dataFormSubmit()\" label-width=\"80px\">\n      <el-form-item label=\"角色名称\" prop=\"roleName\">\n        <el-input v-model=\"dataForm.roleName\" placeholder=\"角色名称\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"备注\" prop=\"remark\">\n        <el-input v-model=\"dataForm.remark\" placeholder=\"备注\"></el-input>\n      </el-form-item>\n      <el-form-item size=\"mini\" label=\"授权\">\n        <el-tree\n          :data=\"menuList\"\n          :props=\"menuListTreeProps\"\n          node-key=\"menuId\"\n          ref=\"menuListTree\"\n          :default-expand-all=\"true\"\n          show-checkbox>\n        </el-tree>\n      </el-form-item>\n    </el-form>\n    <span slot=\"footer\" class=\"dialog-footer\">\n      <el-button @click=\"visible = false\">取消</el-button>\n      <el-button type=\"primary\" @click=\"dataFormSubmit()\">确定</el-button>\n    </span>\n  </el-dialog>\n</template>\n\n<script>\n  import { treeDataTranslate } from '@/utils'\n  export default {\n    data () {\n      return {\n        visible: false,\n        menuList: [],\n        menuListTreeProps: {\n          label: 'name',\n          children: 'children'\n        },\n        dataForm: {\n          id: 0,\n          roleName: '',\n          remark: ''\n        },\n        dataRule: {\n          roleName: [\n            { required: true, message: '角色名称不能为空', trigger: 'blur' }\n          ]\n        },\n        tempKey: -666666 // 临时key, 用于解决tree半选中状态项不能传给后台接口问题. # 待优化\n      }\n    },\n    methods: {\n      init (id) {\n        this.dataForm.id = id || 0\n        this.$http({\n          url: this.$http.adornUrl('/sys/menu/list'),\n          method: 'get',\n          params: this.$http.adornParams()\n        }).then(({data}) => {\n          this.menuList = treeDataTranslate(data, 'menuId')\n        }).then(() => {\n          this.visible = true\n          this.$nextTick(() => {\n            this.$refs['dataForm'].resetFields()\n            this.$refs.menuListTree.setCheckedKeys([])\n          })\n        }).then(() => {\n          if (this.dataForm.id) {\n            this.$http({\n              url: this.$http.adornUrl(`/sys/role/info/${this.dataForm.id}`),\n              method: 'get',\n              params: this.$http.adornParams()\n            }).then(({data}) => {\n              if (data && data.code === 0) {\n                this.dataForm.roleName = data.role.roleName\n                this.dataForm.remark = data.role.remark\n                var idx = data.role.menuIdList.indexOf(this.tempKey)\n                if (idx !== -1) {\n                  data.role.menuIdList.splice(idx, data.role.menuIdList.length - idx)\n                }\n                this.$refs.menuListTree.setCheckedKeys(data.role.menuIdList)\n              }\n            })\n          }\n        })\n      },\n      // 表单提交\n      dataFormSubmit () {\n        this.$refs['dataForm'].validate((valid) => {\n          if (valid) {\n            this.$http({\n              url: this.$http.adornUrl(`/sys/role/${!this.dataForm.id ? 'save' : 'update'}`),\n              method: 'post',\n              data: this.$http.adornData({\n                'roleId': this.dataForm.id || undefined,\n                'roleName': this.dataForm.roleName,\n                'remark': this.dataForm.remark,\n                'menuIdList': [].concat(this.$refs.menuListTree.getCheckedKeys(), [this.tempKey], this.$refs.menuListTree.getHalfCheckedKeys())\n              })\n            }).then(({data}) => {\n              if (data && data.code === 0) {\n                this.$message({\n                  message: '操作成功',\n                  type: 'success',\n                  duration: 1500,\n                  onClose: () => {\n                    this.visible = false\n                    this.$emit('refreshDataList')\n                  }\n                })\n              } else {\n                this.$message.error(data.msg)\n              }\n            })\n          }\n        })\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/sys/role.vue",
    "content": "<template>\n  <div class=\"mod-role\">\n    <el-form :inline=\"true\" :model=\"dataForm\" @keyup.enter.native=\"getDataList()\">\n      <el-form-item>\n        <el-input v-model=\"dataForm.roleName\" placeholder=\"角色名称\" clearable></el-input>\n      </el-form-item>\n      <el-form-item>\n        <el-button @click=\"getDataList()\">查询</el-button>\n        <el-button v-if=\"isAuth('sys:role:save')\" type=\"primary\" @click=\"addOrUpdateHandle()\">新增</el-button>\n        <el-button v-if=\"isAuth('sys:role:delete')\" type=\"danger\" @click=\"deleteHandle()\" :disabled=\"dataListSelections.length <= 0\">批量删除</el-button>\n      </el-form-item>\n    </el-form>\n    <el-table\n      :data=\"dataList\"\n      border\n      v-loading=\"dataListLoading\"\n      @selection-change=\"selectionChangeHandle\"\n      style=\"width: 100%;\">\n      <el-table-column\n        type=\"selection\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"50\">\n      </el-table-column>\n      <el-table-column\n        prop=\"roleId\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"80\"\n        label=\"ID\">\n      </el-table-column>\n      <el-table-column\n        prop=\"roleName\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"角色名称\">\n      </el-table-column>\n      <el-table-column\n        prop=\"remark\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"备注\">\n      </el-table-column>\n      <el-table-column\n        prop=\"createTime\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"180\"\n        label=\"创建时间\">\n      </el-table-column>\n      <el-table-column\n        fixed=\"right\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"150\"\n        label=\"操作\">\n        <template slot-scope=\"scope\">\n          <el-button v-if=\"isAuth('sys:role:update')\" type=\"text\" size=\"small\" @click=\"addOrUpdateHandle(scope.row.roleId)\">修改</el-button>\n          <el-button v-if=\"isAuth('sys:role:delete')\" type=\"text\" size=\"small\" @click=\"deleteHandle(scope.row.roleId)\">删除</el-button>\n        </template>\n      </el-table-column>\n    </el-table>\n    <el-pagination\n      @size-change=\"sizeChangeHandle\"\n      @current-change=\"currentChangeHandle\"\n      :current-page=\"pageIndex\"\n      :page-sizes=\"[10, 20, 50, 100]\"\n      :page-size=\"pageSize\"\n      :total=\"totalPage\"\n      layout=\"total, sizes, prev, pager, next, jumper\">\n    </el-pagination>\n    <!-- 弹窗, 新增 / 修改 -->\n    <add-or-update v-if=\"addOrUpdateVisible\" ref=\"addOrUpdate\" @refreshDataList=\"getDataList\"></add-or-update>\n  </div>\n</template>\n\n<script>\n  import AddOrUpdate from './role-add-or-update'\n  export default {\n    data () {\n      return {\n        dataForm: {\n          roleName: ''\n        },\n        dataList: [],\n        pageIndex: 1,\n        pageSize: 10,\n        totalPage: 0,\n        dataListLoading: false,\n        dataListSelections: [],\n        addOrUpdateVisible: false\n      }\n    },\n    components: {\n      AddOrUpdate\n    },\n    activated () {\n      this.getDataList()\n    },\n    methods: {\n      // 获取数据列表\n      getDataList () {\n        this.dataListLoading = true\n        this.$http({\n          url: this.$http.adornUrl('/sys/role/list'),\n          method: 'get',\n          params: this.$http.adornParams({\n            'page': this.pageIndex,\n            'limit': this.pageSize,\n            'roleName': this.dataForm.roleName\n          })\n        }).then(({data}) => {\n          if (data && data.code === 0) {\n            this.dataList = data.page.list\n            this.totalPage = data.page.totalCount\n          } else {\n            this.dataList = []\n            this.totalPage = 0\n          }\n          this.dataListLoading = false\n        })\n      },\n      // 每页数\n      sizeChangeHandle (val) {\n        this.pageSize = val\n        this.pageIndex = 1\n        this.getDataList()\n      },\n      // 当前页\n      currentChangeHandle (val) {\n        this.pageIndex = val\n        this.getDataList()\n      },\n      // 多选\n      selectionChangeHandle (val) {\n        this.dataListSelections = val\n      },\n      // 新增 / 修改\n      addOrUpdateHandle (id) {\n        this.addOrUpdateVisible = true\n        this.$nextTick(() => {\n          this.$refs.addOrUpdate.init(id)\n        })\n      },\n      // 删除\n      deleteHandle (id) {\n        var ids = id ? [id] : this.dataListSelections.map(item => {\n          return item.roleId\n        })\n        this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {\n          confirmButtonText: '确定',\n          cancelButtonText: '取消',\n          type: 'warning'\n        }).then(() => {\n          this.$http({\n            url: this.$http.adornUrl('/sys/role/delete'),\n            method: 'post',\n            data: this.$http.adornData(ids, false)\n          }).then(({data}) => {\n            if (data && data.code === 0) {\n              this.$message({\n                message: '操作成功',\n                type: 'success',\n                duration: 1500,\n                onClose: () => {\n                  this.getDataList()\n                }\n              })\n            } else {\n              this.$message.error(data.msg)\n            }\n          })\n        }).catch(() => {})\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/sys/user-add-or-update.vue",
    "content": "<template>\n  <el-dialog\n    :title=\"!dataForm.id ? '新增' : '修改'\"\n    :close-on-click-modal=\"false\"\n    :visible.sync=\"visible\">\n    <el-form :model=\"dataForm\" :rules=\"dataRule\" ref=\"dataForm\" @keyup.enter.native=\"dataFormSubmit()\" label-width=\"80px\">\n      <el-form-item label=\"用户名\" prop=\"userName\">\n        <el-input v-model=\"dataForm.userName\" placeholder=\"登录帐号\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"密码\" prop=\"password\" :class=\"{ 'is-required': !dataForm.id }\">\n        <el-input v-model=\"dataForm.password\" type=\"password\" placeholder=\"密码\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"确认密码\" prop=\"comfirmPassword\" :class=\"{ 'is-required': !dataForm.id }\">\n        <el-input v-model=\"dataForm.comfirmPassword\" type=\"password\" placeholder=\"确认密码\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"邮箱\" prop=\"email\">\n        <el-input v-model=\"dataForm.email\" placeholder=\"邮箱\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"手机号\" prop=\"mobile\">\n        <el-input v-model=\"dataForm.mobile\" placeholder=\"手机号\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"角色\" size=\"mini\" prop=\"roleIdList\">\n        <el-checkbox-group v-model=\"dataForm.roleIdList\">\n          <el-checkbox v-for=\"role in roleList\" :key=\"role.roleId\" :label=\"role.roleId\">{{ role.roleName }}</el-checkbox>\n        </el-checkbox-group>\n      </el-form-item>\n      <el-form-item label=\"状态\" size=\"mini\" prop=\"status\">\n        <el-radio-group v-model=\"dataForm.status\">\n          <el-radio :label=\"0\">禁用</el-radio>\n          <el-radio :label=\"1\">正常</el-radio>\n        </el-radio-group>\n      </el-form-item>\n    </el-form>\n    <span slot=\"footer\" class=\"dialog-footer\">\n      <el-button @click=\"visible = false\">取消</el-button>\n      <el-button type=\"primary\" @click=\"dataFormSubmit()\">确定</el-button>\n    </span>\n  </el-dialog>\n</template>\n\n<script>\n  import { isEmail, isMobile } from '@/utils/validate'\n  export default {\n    data () {\n      var validatePassword = (rule, value, callback) => {\n        if (!this.dataForm.id && !/\\S/.test(value)) {\n          callback(new Error('密码不能为空'))\n        } else {\n          callback()\n        }\n      }\n      var validateComfirmPassword = (rule, value, callback) => {\n        if (!this.dataForm.id && !/\\S/.test(value)) {\n          callback(new Error('确认密码不能为空'))\n        } else if (this.dataForm.password !== value) {\n          callback(new Error('确认密码与密码输入不一致'))\n        } else {\n          callback()\n        }\n      }\n      var validateEmail = (rule, value, callback) => {\n        if (!isEmail(value)) {\n          callback(new Error('邮箱格式错误'))\n        } else {\n          callback()\n        }\n      }\n      var validateMobile = (rule, value, callback) => {\n        if (!isMobile(value)) {\n          callback(new Error('手机号格式错误'))\n        } else {\n          callback()\n        }\n      }\n      return {\n        visible: false,\n        roleList: [],\n        dataForm: {\n          id: 0,\n          userName: '',\n          password: '',\n          comfirmPassword: '',\n          salt: '',\n          email: '',\n          mobile: '',\n          roleIdList: [],\n          status: 1\n        },\n        dataRule: {\n          userName: [\n            { required: true, message: '用户名不能为空', trigger: 'blur' }\n          ],\n          password: [\n            { validator: validatePassword, trigger: 'blur' }\n          ],\n          comfirmPassword: [\n            { validator: validateComfirmPassword, trigger: 'blur' }\n          ],\n          email: [\n            { required: true, message: '邮箱不能为空', trigger: 'blur' },\n            { validator: validateEmail, trigger: 'blur' }\n          ],\n          mobile: [\n            { required: true, message: '手机号不能为空', trigger: 'blur' },\n            { validator: validateMobile, trigger: 'blur' }\n          ]\n        }\n      }\n    },\n    methods: {\n      init (id) {\n        this.dataForm.id = id || 0\n        this.$http({\n          url: this.$http.adornUrl('/sys/role/select'),\n          method: 'get',\n          params: this.$http.adornParams()\n        }).then(({data}) => {\n          this.roleList = data && data.code === 0 ? data.list : []\n        }).then(() => {\n          this.visible = true\n          this.$nextTick(() => {\n            this.$refs['dataForm'].resetFields()\n          })\n        }).then(() => {\n          if (this.dataForm.id) {\n            this.$http({\n              url: this.$http.adornUrl(`/sys/user/info/${this.dataForm.id}`),\n              method: 'get',\n              params: this.$http.adornParams()\n            }).then(({data}) => {\n              if (data && data.code === 0) {\n                this.dataForm.userName = data.user.username\n                this.dataForm.salt = data.user.salt\n                this.dataForm.email = data.user.email\n                this.dataForm.mobile = data.user.mobile\n                this.dataForm.roleIdList = data.user.roleIdList\n                this.dataForm.status = data.user.status\n              }\n            })\n          }\n        })\n      },\n      // 表单提交\n      dataFormSubmit () {\n        this.$refs['dataForm'].validate((valid) => {\n          if (valid) {\n            this.$http({\n              url: this.$http.adornUrl(`/sys/user/${!this.dataForm.id ? 'save' : 'update'}`),\n              method: 'post',\n              data: this.$http.adornData({\n                'userId': this.dataForm.id || undefined,\n                'username': this.dataForm.userName,\n                'password': this.dataForm.password,\n                'salt': this.dataForm.salt,\n                'email': this.dataForm.email,\n                'mobile': this.dataForm.mobile,\n                'status': this.dataForm.status,\n                'roleIdList': this.dataForm.roleIdList\n              })\n            }).then(({data}) => {\n              if (data && data.code === 0) {\n                this.$message({\n                  message: '操作成功',\n                  type: 'success',\n                  duration: 1500,\n                  onClose: () => {\n                    this.visible = false\n                    this.$emit('refreshDataList')\n                  }\n                })\n              } else {\n                this.$message.error(data.msg)\n              }\n            })\n          }\n        })\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "src/views/modules/sys/user.vue",
    "content": "<template>\n  <div class=\"mod-user\">\n    <el-form :inline=\"true\" :model=\"dataForm\" @keyup.enter.native=\"getDataList()\">\n      <el-form-item>\n        <el-input v-model=\"dataForm.userName\" placeholder=\"用户名\" clearable></el-input>\n      </el-form-item>\n      <el-form-item>\n        <el-button @click=\"getDataList()\">查询</el-button>\n        <el-button v-if=\"isAuth('sys:user:save')\" type=\"primary\" @click=\"addOrUpdateHandle()\">新增</el-button>\n        <el-button v-if=\"isAuth('sys:user:delete')\" type=\"danger\" @click=\"deleteHandle()\" :disabled=\"dataListSelections.length <= 0\">批量删除</el-button>\n      </el-form-item>\n    </el-form>\n    <el-table\n      :data=\"dataList\"\n      border\n      v-loading=\"dataListLoading\"\n      @selection-change=\"selectionChangeHandle\"\n      style=\"width: 100%;\">\n      <el-table-column\n        type=\"selection\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"50\">\n      </el-table-column>\n      <el-table-column\n        prop=\"userId\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"80\"\n        label=\"ID\">\n      </el-table-column>\n      <el-table-column\n        prop=\"username\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"用户名\">\n      </el-table-column>\n      <el-table-column\n        prop=\"email\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"邮箱\">\n      </el-table-column>\n      <el-table-column\n        prop=\"mobile\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"手机号\">\n      </el-table-column>\n      <el-table-column\n        prop=\"status\"\n        header-align=\"center\"\n        align=\"center\"\n        label=\"状态\">\n        <template slot-scope=\"scope\">\n          <el-tag v-if=\"scope.row.status === 0\" size=\"small\" type=\"danger\">禁用</el-tag>\n          <el-tag v-else size=\"small\">正常</el-tag>\n        </template>\n      </el-table-column>\n      <el-table-column\n        prop=\"createTime\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"180\"\n        label=\"创建时间\">\n      </el-table-column>\n      <el-table-column\n        fixed=\"right\"\n        header-align=\"center\"\n        align=\"center\"\n        width=\"150\"\n        label=\"操作\">\n        <template slot-scope=\"scope\">\n          <el-button v-if=\"isAuth('sys:user:update')\" type=\"text\" size=\"small\" @click=\"addOrUpdateHandle(scope.row.userId)\">修改</el-button>\n          <el-button v-if=\"isAuth('sys:user:delete')\" type=\"text\" size=\"small\" @click=\"deleteHandle(scope.row.userId)\">删除</el-button>\n        </template>\n      </el-table-column>\n    </el-table>\n    <el-pagination\n      @size-change=\"sizeChangeHandle\"\n      @current-change=\"currentChangeHandle\"\n      :current-page=\"pageIndex\"\n      :page-sizes=\"[10, 20, 50, 100]\"\n      :page-size=\"pageSize\"\n      :total=\"totalPage\"\n      layout=\"total, sizes, prev, pager, next, jumper\">\n    </el-pagination>\n    <!-- 弹窗, 新增 / 修改 -->\n    <add-or-update v-if=\"addOrUpdateVisible\" ref=\"addOrUpdate\" @refreshDataList=\"getDataList\"></add-or-update>\n  </div>\n</template>\n\n<script>\n  import AddOrUpdate from './user-add-or-update'\n  export default {\n    data () {\n      return {\n        dataForm: {\n          userName: ''\n        },\n        dataList: [],\n        pageIndex: 1,\n        pageSize: 10,\n        totalPage: 0,\n        dataListLoading: false,\n        dataListSelections: [],\n        addOrUpdateVisible: false\n      }\n    },\n    components: {\n      AddOrUpdate\n    },\n    activated () {\n      this.getDataList()\n    },\n    methods: {\n      // 获取数据列表\n      getDataList () {\n        this.dataListLoading = true\n        this.$http({\n          url: this.$http.adornUrl('/sys/user/list'),\n          method: 'get',\n          params: this.$http.adornParams({\n            'page': this.pageIndex,\n            'limit': this.pageSize,\n            'username': this.dataForm.userName\n          })\n        }).then(({data}) => {\n          if (data && data.code === 0) {\n            this.dataList = data.page.list\n            this.totalPage = data.page.totalCount\n          } else {\n            this.dataList = []\n            this.totalPage = 0\n          }\n          this.dataListLoading = false\n        })\n      },\n      // 每页数\n      sizeChangeHandle (val) {\n        this.pageSize = val\n        this.pageIndex = 1\n        this.getDataList()\n      },\n      // 当前页\n      currentChangeHandle (val) {\n        this.pageIndex = val\n        this.getDataList()\n      },\n      // 多选\n      selectionChangeHandle (val) {\n        this.dataListSelections = val\n      },\n      // 新增 / 修改\n      addOrUpdateHandle (id) {\n        this.addOrUpdateVisible = true\n        this.$nextTick(() => {\n          this.$refs.addOrUpdate.init(id)\n        })\n      },\n      // 删除\n      deleteHandle (id) {\n        var userIds = id ? [id] : this.dataListSelections.map(item => {\n          return item.userId\n        })\n        this.$confirm(`确定对[id=${userIds.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {\n          confirmButtonText: '确定',\n          cancelButtonText: '取消',\n          type: 'warning'\n        }).then(() => {\n          this.$http({\n            url: this.$http.adornUrl('/sys/user/delete'),\n            method: 'post',\n            data: this.$http.adornData(userIds, false)\n          }).then(({data}) => {\n            if (data && data.code === 0) {\n              this.$message({\n                message: '操作成功',\n                type: 'success',\n                duration: 1500,\n                onClose: () => {\n                  this.getDataList()\n                }\n              })\n            } else {\n              this.$message.error(data.msg)\n            }\n          })\n        }).catch(() => {})\n      }\n    }\n  }\n</script>\n"
  },
  {
    "path": "static/base.css",
    "content": "/*项目所有页面要用到的css初始化文件*/\n\n/*清除内外边距  */\nbody,\nhtml,\nul,\nli,\np,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nol,\ndl,\ndt,\ndd {\n    margin: 0;\n    padding: 0\n}\n/*让所有斜体 不倾斜*/\nem,\ni {\n    font-style: normal\n}\n/*去掉列表前面的小点*/\nli {\n    list-style: none\n}\n/*图片没有边框   去掉图片底侧的空白缝隙*/\nimg {\n    border: 0;  /*ie6*/\n    vertical-align: middle;\n}\n/*让button 按钮 变成小手*/\nbutton {\n    cursor: pointer\n}\n/*取消链接的下划线*/\na {\n    color: #666;\n    text-decoration: none\n}\n\na:hover {\n    color: #e33333;\n}\n\nbutton,\ninput {\n    font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, \\\\5B8B\\4F53, sans-serif;\n    outline: none;\n    border: none;\n}\n\nbody {\n    -webkit-font-smoothing: antialiased;\n    background-color: #fff;\n    font: 12px Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, \\\\5B8B\\4F53, sans-serif;\n    color: #666;\n\n\n    /*font-size: 30px;*/\n    /*line-height: 20px;*/\n    /*font: 30px/2 'simsun';*/\n}\n\n.hide,\n.none {\n    display: none\n}\n/*清除浮动*/\n.clearfix::after {\n    display: block;\n    visibility: hidden;\n    clear: both;\n    content: \".\";\n    height: 0\n}\n\n.clearfix {\n    *zoom: 1\n}\n\n.fl {\n    float: left\n}\n\n.fr {\n    float: right\n}\n\n.al {\n    text-align: left\n}\n\n.ac {\n    text-align: center\n}\n\n.ar {\n    text-align: right\n}\n.pr {\n  position: relative;\n}\n@font-face {\n    font-family: 'iconfont';\n    src: url('../font/iconfont.eot');\n    src: url('../font/iconfont.eot?#iefix') format('embedded-opentype'),\n    url('../font/iconfont.woff') format('woff'),\n    url('../font/iconfont.ttf') format('truetype'),\n    url('../font/iconfont.svg#iconfont') format('svg');\n  }\n  .iconfont{\n    font-family:\"iconfont\";\n  }\n\n\n/*版心 居中对齐*/\n.w {\n    margin: auto;\n    width: 1200px;\n}\n"
  },
  {
    "path": "static/config/index-prod.js",
    "content": "/**\n * 生产环境\n */\n;(function () {\n  window.SITE_CONFIG = {};\n\n  // api接口请求地址\n  window.SITE_CONFIG['baseUrl'] = 'http://demo.renren.io/renren-fast';\n\n  // cdn地址 = 域名 + 版本号\n  window.SITE_CONFIG['domain']  = './'; // 域名\n  window.SITE_CONFIG['version'] = '';   // 版本号(年月日时分)\n  window.SITE_CONFIG['cdnUrl']  = window.SITE_CONFIG.domain + window.SITE_CONFIG.version;\n})();\n"
  },
  {
    "path": "static/config/index-qa.js",
    "content": "/**\n * 测试环境\n */\n;(function () {\n  window.SITE_CONFIG = {};\n\n  // api接口请求地址\n  window.SITE_CONFIG['baseUrl'] = 'http://demo.renren.io/renren-fast';\n\n  // cdn地址 = 域名 + 版本号\n  window.SITE_CONFIG['domain']  = './'; // 域名\n  window.SITE_CONFIG['version'] = '';   // 版本号(年月日时分)\n  window.SITE_CONFIG['cdnUrl']  = window.SITE_CONFIG.domain + window.SITE_CONFIG.version;\n})();\n"
  },
  {
    "path": "static/config/index-uat.js",
    "content": "/**\n * 验收环境\n */\n;(function () {\n  window.SITE_CONFIG = {};\n\n  // api接口请求地址\n  window.SITE_CONFIG['baseUrl'] = 'http://demo.renren.io/renren-fast';\n\n  // cdn地址 = 域名 + 版本号\n  window.SITE_CONFIG['domain']  = './'; // 域名\n  window.SITE_CONFIG['version'] = '';   // 版本号(年月日时分)\n  window.SITE_CONFIG['cdnUrl']  = window.SITE_CONFIG.domain + window.SITE_CONFIG.version;\n})();\n"
  },
  {
    "path": "static/config/index.js",
    "content": "/**\n * 开发环境\n */\n;(function () {\n  window.SITE_CONFIG = {};\n\n  // api接口请求地址\n  window.SITE_CONFIG['baseUrl'] = 'http://demo.renren.io/renren-fast';\n\n  // cdn地址 = 域名 + 版本号\n  window.SITE_CONFIG['domain']  = './'; // 域名\n  window.SITE_CONFIG['version'] = '';   // 版本号(年月日时分)\n  window.SITE_CONFIG['cdnUrl']  = window.SITE_CONFIG.domain + window.SITE_CONFIG.version;\n})();\n"
  },
  {
    "path": "static/config/init.js",
    "content": "/**\n * 动态加载初始资源\n */\n;(function() {\n  var resList = {\n    icon: window.SITE_CONFIG.cdnUrl + '/static/img/favicon.ico',\n    css: [\n      window.SITE_CONFIG.cdnUrl + '/static/css/app.css',\n    ],\n    js: [\n      // 插件, 放置业务之前加载, 以免业务需求依赖插件时, 还未加载出错\n      // 插件 - echarts\n      window.SITE_CONFIG.cdnUrl + '/static/plugins/echarts-3.8.5/echarts.common.min.js',\n      // 插件 - ueditor\n      window.SITE_CONFIG.cdnUrl + '/static/plugins/ueditor-1.4.3.3/ueditor.config.js',\n      window.SITE_CONFIG.cdnUrl + '/static/plugins/ueditor-1.4.3.3/ueditor.all.min.js',\n      window.SITE_CONFIG.cdnUrl + '/static/plugins/ueditor-1.4.3.3/lang/zh-cn/zh-cn.js',\n      // 业务\n      window.SITE_CONFIG.cdnUrl + '/static/js/manifest.js',\n      window.SITE_CONFIG.cdnUrl + '/static/js/vendor.js',\n      window.SITE_CONFIG.cdnUrl + '/static/js/app.js'\n    ]\n  };\n\n  // 图标\n  (function () {\n    var _icon = document.createElement('link');\n    _icon.setAttribute('rel', 'shortcut icon');\n    _icon.setAttribute('type', 'image/x-icon');\n    _icon.setAttribute('href', resList.icon);\n    document.getElementsByTagName('head')[0].appendChild(_icon);\n  })();\n\n  // 样式\n  (function () {\n    document.getElementsByTagName('html')[0].style.opacity = 0;\n    var i = 0;\n    var _style = null;\n    var createStyles = function () {\n      if (i >= resList.css.length) {\n        document.getElementsByTagName('html')[0].style.opacity = 1;\n        return;\n      }\n      _style = document.createElement('link');\n      _style.href = resList.css[i];\n      _style.setAttribute('rel', 'stylesheet');\n      _style.onload = function () {\n        i++;\n        createStyles();\n      }\n      document.getElementsByTagName('head')[0].appendChild(_style);\n    }\n    createStyles();\n  })();\n\n  // 脚本\n  document.onreadystatechange = function () {\n    if (document.readyState === 'interactive') {\n      var i = 0;\n      var _script = null;\n      var createScripts = function () {\n        if (i >= resList.js.length) {\n          return;\n        }\n        _script = document.createElement('script');\n        _script.src = resList.js[i];\n        _script.onload = function () {\n          i++;\n          createScripts();\n        }\n        document.getElementsByTagName('body')[0].appendChild(_script);\n      }\n      createScripts();\n    }\n  };\n})();"
  },
  {
    "path": "static/flow-editor/demo/css/dmp/admin/admin.css",
    "content": "/* 修改原始样式  */\n.layui-layout-admin .layui-header{background-color: #FFFFFF;border-bottom:2px solid #BF0017;}\n.layui-layout-admin .layui-header .layui-nav-child{top: 60px;}\n.layui-layout-admin .layui-header .layui-nav-bar{display: none;}\n.layui-layout-admin .layui-header .layui-layout-right{margin-right: 40px;}\n.layui-nav.layui-layout-right .layui-nav-item > a{color: #23262E;}\n.layui-nav.layui-layout-right .layui-nav-more{border-top-color: #23262E;}\n.layui-nav.layui-layout-right .layui-nav-mored{border-color: #FFFFFF;}\n.layui-nav.layui-layout-right:hover .layui-nav-mored{border-bottom-color: #23262E;}\n.layui-nav .layui-nav-child dd.layui-this a, .layui-nav-child dd.layui-this{background-color: #BF0017;}\n.layui-tab{margin: 0;}\n\n.layui-layout-admin .layui-side{width: 150px;}\n.layui-side-scroll{width: 170px;}\n.layui-body{left: 150px;}\n.layui-nav-tree .layui-nav-bar{background-color: #BF0017;}\n.layui-tab-brief>.layui-tab-more li.layui-this:after, .layui-tab-brief>.layui-tab-title .layui-this:after{border-bottom-color: #BF0017;}\n.layui-layout-admin .layui-body{overflow: hidden; height: calc(100%);}\n.layui-tab-title li{padding: 0 15px 0 0; background-color: #fff;}\n.layui-tab-content{padding: 0; overflow: hidden;}\n\n/* 自定义样式  */\n.layui-tab-title-custom{padding: 0 80px 0 0px;}\n.layui-tab-bar-custom{display: none;width: 30px;line-height:40px;height:40px;position: absolute;top:0;z-index:100;background: #F8F8F8;text-align: center;cursor: pointer;}\n.layui-tab-bar-custom.layui-tab-bar-left{left: 0;}\n.layui-tab-bar-custom.layui-tab-bar-right{right: 80px;border-right:1px solid #E2E2E2;}\n.layui-tab-bar-custom.layui-tab-bar-operate{right: 0; width: 80px; font-size: 13px;display: block;}\n.layui-tab-custom .layui-tab-bar-left, .layui-tab-custom .layui-tab-bar-right{display: block;}\n.layui-tab-custom .layui-tab-title-custom{padding-left: 30px;}\n.layui-tab-title li.layui-no-close .layui-tab-close{display: none;}\n\n/* 选项卡菜单 */\n#tab-menu{display: none;position: absolute;right: 25px; top:100px;z-index: 100;}\n#tab-menu .layui-layout-right{right: 100px;}\n#tab-menu .layui-nav-child{display: block;top:0; line-height: 30px;}\n#tab-menu .layui-nav-child a{padding: 0 15px;}\n#tab-menu a:hover{color: #BF0017;}\n\n/* 左边菜单 */\n/*\n.layui-layout-admin .layui-side.layui-bg-red{background-color: #BF0017 !important;}\n#layui-menu.layui-nav{background-color: #47b96a;}\n#layui-menu.layui-nav > li.layui-nav-item:hover > a {background-color: #5acc7d !important;}\n#layui-menu .layui-nav-itemed .layui-nav-child{background-color: rgba(243, 4, 33, 0.8)!important;}\n*/\n.layui-layout-admin .layui-side.layui-bg-red{background-color: #FFFFFF !important;border-right: 1px solid #BF0017;}\n#layui-menu.layui-nav{background-color: #FFF9EC;}\n#layui-menu.layui-nav li.layui-nav-item a{background-color: #FFFFFF !important;color: #000000 !important;}\n#layui-menu .layui-nav-itemed{background-color: #00F7DE !important;}\n#layui-menu.layui-nav > li.layui-nav-itemed > a,\n#layui-menu.layui-nav > li.layui-nav-item:hover > a {background-color: #F9F0D7 !important;}\n#layui-menu .layui-nav-itemed .layui-nav-child{background-color: #fff5db!important;color: #000000 !important;}\n#layui-menu.layui-nav .layui-nav-child dd.layui-this a{background-color: #BF0017 !important; color: #FFFFFF !important;}\n\n#layui-menu.layui-nav .layui-nav-item .layui-nav-more{right: 60px !important;border-top-color: #0C0C0C;border-bottom-color:#F9F0D7;}\n#layui-menu.layui-nav .layui-nav-item .layui-nav-more{border-bottom-color: #fff;}\n#layui-menu.layui-nav .layui-nav-item:hover .layui-nav-more{border-bottom-color: #F9F0D7;}\n#layui-menu.layui-nav .layui-nav-itemed .layui-nav-more{border-bottom-color: #0C0C0C;border-top-color: #F9F0D7;}\n#layui-menu.layui-nav .layui-nav-itemed:hover .layui-nav-more{border-bottom-color: #0C0C0C;}\n"
  },
  {
    "path": "static/flow-editor/demo/css/dmp/admin/pub.css",
    "content": ""
  },
  {
    "path": "static/flow-editor/demo/css/dmp/index/index.css",
    "content": "/* 修改原始样式 */\n.layui-layout-admin .layui-header{background-color: #FFFFFF/*#BF0017*/;border-bottom:2px solid #BF0017;}\n.layui-layout-admin .layui-header .layui-nav-child{top: 60px;}\n.layui-layout-admin .layui-header .layui-nav-bar{display: none;}\n.layui-layout-admin .layui-header .layui-layout-right .layui-this::after{height: 0;}\n.layui-layout-admin .layui-header .layui-layout-right .layui-this{background-color: #f71e3e;}\n.layui-layout-admin .layui-header .layui-layout-right .layui-this a{color: #fff;}\n.layui-layout-admin .layui-header .layui-layout-right .layui-this:hover a{color: #000;}\n.layui-layout-admin .layui-header .layui-layout-right .layui-nav-item:hover{background-color: #f5ddc5;}\n.layui-layout-admin .layui-header .layui-layout-right .layui-nav-item.layui-last:hover{background-color: #fff;}\n.layui-layout-admin .layui-header .layui-layout-right .layui-nav-item a i.fa{font-size: 1.3em;}\n.layui-layout-admin .layui-header .layui-layout-right{margin-right: 40px;}\n\n.layui-nav.layui-layout-right .layui-nav-item > a{color: #23262E;}\n.layui-nav.layui-layout-right .layui-nav-more{border-top-color: #23262E;}\n.layui-nav.layui-layout-right .layui-nav-mored{border-color: #FFFFFF;}\n.layui-nav.layui-layout-right:hover .layui-nav-mored{border-bottom-color: #23262E;}\n.layui-nav .layui-nav-child dd.layui-this a, .layui-nav-child dd.layui-this{background-color: #BF0017;}\n.layui-tab{margin: 0;}\n\n.layui-layout-admin .layui-body{left: 0; bottom: 0;overflow: hidden;}\n\n/* 自定义样式  */\n.layui-body-custom .layui-tab-bar{display: none;}\n.layui-body-custom .layui-tab-title{width: 80px;left: 0;border: 0;display: inline-block;overflow: hidden;overflow-y: scroll;height: 1920px !important;}\n.layui-body-custom .layui-tab-title li{padding: 10px 0 0; display: block;min-width:60px;height: 50px;line-height: 20px;}\n.layui-body-custom .layui-tab-more{padding: 0;}\n.layui-body-custom .layui-tab-content{border-left:1px solid #BF0017; display: inline-block;width: calc(100% - 61px);height: calc(100%);position: absolute;overflow: hidden;margin-left: -18px; background-color: #FFFFFF;padding: 0;}\n.layui-body-custom .layui-tab-content iframe{overflow: hidden;}\n/*\n.layui-body-custom .layui-tab-title li > i, .layui-body-custom .layui-tab-title li > div{color: #f71e3e;}\n*/\n.layui-body-custom .layui-tab-title li > div{letter-spacing:2px; font-size: 13px;}\n.layui-body-custom .layui-tab-title .layui-this:after{border-bottom:0;}\n.layui-body-custom .layui-tab-title .layui-this{background-color: #f71e3e;}\n.layui-body-custom .layui-tab-title li:hover{background-color: #f5ddc5;}\n.layui-body-custom .layui-tab-title li:hover > i, .layui-body-custom .layui-tab-title li:hover > div,\n.layui-body-custom .layui-tab-title li.layui-this:hover > i, .layui-body-custom .layui-tab-title li.layui-this:hover > div{color: #000; }\n.layui-body-custom .layui-tab-title li.layui-this > i, .layui-body-custom .layui-tab-title li.layui-this > div{color: #FFFFFF; }\n\n.layui-body-custom li.layui-from, .layui-body-custom li.layui-to, .layui-body-custom li.layui-layer{display: none;}\n"
  },
  {
    "path": "static/flow-editor/demo/css/dmp/index/pub.css",
    "content": "\n.layui-layer-content .layui-form{padding: 20px 40px 0 0;}\n.layui-btn-danger{background-color: #f71e3e;}\n.layui-table-tool{height: 35px; padding: 4px; border-width: 1px 0 0 0;overflow: hidden;}\n.layui-laypage .layui-laypage-curr .layui-laypage-em{border-radius: 15px;}\n.layui-table-tips-main{max-height: 200px; overflow-y: auto;}\n/*\n.layui-layer-content .layui-form-selected dl{position: fixed;left: auto;top: auto;min-width: 200px;}\n*/\n.layui-search .layui-elem-field.layui-field-title{margin: 5px 0;}\n.layui-search .layui-elem-field legend{font-size: 14px; font-weight: normal;}\n.layui-search .layui-form-item{margin-bottom: 0; margin-top: 5px;}\n.layui-search .layui-form-item .layui-inline{margin-bottom: 5;margin-right: 0;}\n.layui-search .layui-form-label{padding: 9px; width: auto;}\n\n.layui-list {margin-top: -10px;}\n.layui-list .layui-table-view{margin: 0;}\n.layui-list .layui-table-view .layui-table td, .layui-list .layui-table-view .layui-table th{padding:3px 15px;}\n.layui-list .layui-table-body{margin-right: 0;}\n.layui-list .layui-table-fixed-l .layui-table-body tr{background-color: #fff;}\n\n\n\n::-webkit-scrollbar {\n\twidth: 9px;\n\theight: 9px;\n\tbackground: white;\n\tborder-left: 0px solid #e8e8e8;\n}\n::-webkit-scrollbar-thumb {\n\tborder-width: 1px;\n\tborder-style: solid;\n\tborder-color: #fff;\n\tborder-radius: 6px;\n\tbackground: #c9c9c9;\n}\n::-webkit-scrollbar-thumb:hover {\n\tbackground: #b5b5b5;\n}"
  },
  {
    "path": "static/flow-editor/demo/css/dmp/login/login.css",
    "content": "html,body {\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  background-size: cover;\n  background: #fff;\n}\n\n\n#login,#sendMsg{display: none;}\n.layui-layer #login,.layui-layer #sendMsg{display: block;}\n\n.layui-form{width: 80%; padding: 30px;}\n.layui-form .layui-form-label{width: auto;}\n.layui-form .layui-input-block{margin-left: 60px;}\n.layui-layer-btn-c{width: 90%;}\n.layui-layer-btn-c a.layui-layer-btn0{width: 27.5%; border: 0 !important; background-color:#BF0017 !important; padding: 5px 15px !important;}\n.layui-layer-btn-c a.layui-layer-btn1{padding: 4px 14px !important;width: 27.5%;}\n.layui-layer-btn1.layui-layer-btn-c a.layui-layer-btn0{width: 75%;}\n.layui-layer-title{background-color: #FFFFFF !important;font-size: 16px !important;}\n.layui-layer-content{overflow: hidden !important;}\n.forget{position: absolute;right: 55px; bottom: 28px;}\n.forget a{color: #1e9fff;}\n.layui-elem-quote{background-color: #FBFBFB;}\n"
  },
  {
    "path": "static/flow-editor/demo/css/font-awesome/css/font-awesome.css",
    "content": "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');\n  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n.fa {\n  display: inline-block;\n  font: normal normal normal 14px/1 FontAwesome;\n  font-size: inherit;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n  font-size: 1.33333333em;\n  line-height: 0.75em;\n  vertical-align: -15%;\n}\n.fa-2x {\n  font-size: 2em;\n}\n.fa-3x {\n  font-size: 3em;\n}\n.fa-4x {\n  font-size: 4em;\n}\n.fa-5x {\n  font-size: 5em;\n}\n.fa-fw {\n  width: 1.28571429em;\n  text-align: center;\n}\n.fa-ul {\n  padding-left: 0;\n  margin-left: 2.14285714em;\n  list-style-type: none;\n}\n.fa-ul > li {\n  position: relative;\n}\n.fa-li {\n  position: absolute;\n  left: -2.14285714em;\n  width: 2.14285714em;\n  top: 0.14285714em;\n  text-align: center;\n}\n.fa-li.fa-lg {\n  left: -1.85714286em;\n}\n.fa-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em #eeeeee;\n  border-radius: .1em;\n}\n.fa-pull-left {\n  float: left;\n}\n.fa-pull-right {\n  float: right;\n}\n.fa.fa-pull-left {\n  margin-right: .3em;\n}\n.fa.fa-pull-right {\n  margin-left: .3em;\n}\n/* Deprecated as of 4.4.0 */\n.pull-right {\n  float: right;\n}\n.pull-left {\n  float: left;\n}\n.fa.pull-left {\n  margin-right: .3em;\n}\n.fa.pull-right {\n  margin-left: .3em;\n}\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n  animation: fa-spin 2s infinite linear;\n}\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n  animation: fa-spin 1s infinite steps(8);\n}\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  filter: none;\n}\n.fa-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.fa-stack-1x,\n.fa-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.fa-stack-1x {\n  line-height: inherit;\n}\n.fa-stack-2x {\n  font-size: 2em;\n}\n.fa-inverse {\n  color: #ffffff;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.fa-glass:before {\n  content: \"\\f000\";\n}\n.fa-music:before {\n  content: \"\\f001\";\n}\n.fa-search:before {\n  content: \"\\f002\";\n}\n.fa-envelope-o:before {\n  content: \"\\f003\";\n}\n.fa-heart:before {\n  content: \"\\f004\";\n}\n.fa-star:before {\n  content: \"\\f005\";\n}\n.fa-star-o:before {\n  content: \"\\f006\";\n}\n.fa-user:before {\n  content: \"\\f007\";\n}\n.fa-film:before {\n  content: \"\\f008\";\n}\n.fa-th-large:before {\n  content: \"\\f009\";\n}\n.fa-th:before {\n  content: \"\\f00a\";\n}\n.fa-th-list:before {\n  content: \"\\f00b\";\n}\n.fa-check:before {\n  content: \"\\f00c\";\n}\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n  content: \"\\f00d\";\n}\n.fa-search-plus:before {\n  content: \"\\f00e\";\n}\n.fa-search-minus:before {\n  content: \"\\f010\";\n}\n.fa-power-off:before {\n  content: \"\\f011\";\n}\n.fa-signal:before {\n  content: \"\\f012\";\n}\n.fa-gear:before,\n.fa-cog:before {\n  content: \"\\f013\";\n}\n.fa-trash-o:before {\n  content: \"\\f014\";\n}\n.fa-home:before {\n  content: \"\\f015\";\n}\n.fa-file-o:before {\n  content: \"\\f016\";\n}\n.fa-clock-o:before {\n  content: \"\\f017\";\n}\n.fa-road:before {\n  content: \"\\f018\";\n}\n.fa-download:before {\n  content: \"\\f019\";\n}\n.fa-arrow-circle-o-down:before {\n  content: \"\\f01a\";\n}\n.fa-arrow-circle-o-up:before {\n  content: \"\\f01b\";\n}\n.fa-inbox:before {\n  content: \"\\f01c\";\n}\n.fa-play-circle-o:before {\n  content: \"\\f01d\";\n}\n.fa-rotate-right:before,\n.fa-repeat:before {\n  content: \"\\f01e\";\n}\n.fa-refresh:before {\n  content: \"\\f021\";\n}\n.fa-list-alt:before {\n  content: \"\\f022\";\n}\n.fa-lock:before {\n  content: \"\\f023\";\n}\n.fa-flag:before {\n  content: \"\\f024\";\n}\n.fa-headphones:before {\n  content: \"\\f025\";\n}\n.fa-volume-off:before {\n  content: \"\\f026\";\n}\n.fa-volume-down:before {\n  content: \"\\f027\";\n}\n.fa-volume-up:before {\n  content: \"\\f028\";\n}\n.fa-qrcode:before {\n  content: \"\\f029\";\n}\n.fa-barcode:before {\n  content: \"\\f02a\";\n}\n.fa-tag:before {\n  content: \"\\f02b\";\n}\n.fa-tags:before {\n  content: \"\\f02c\";\n}\n.fa-book:before {\n  content: \"\\f02d\";\n}\n.fa-bookmark:before {\n  content: \"\\f02e\";\n}\n.fa-print:before {\n  content: \"\\f02f\";\n}\n.fa-camera:before {\n  content: \"\\f030\";\n}\n.fa-font:before {\n  content: \"\\f031\";\n}\n.fa-bold:before {\n  content: \"\\f032\";\n}\n.fa-italic:before {\n  content: \"\\f033\";\n}\n.fa-text-height:before {\n  content: \"\\f034\";\n}\n.fa-text-width:before {\n  content: \"\\f035\";\n}\n.fa-align-left:before {\n  content: \"\\f036\";\n}\n.fa-align-center:before {\n  content: \"\\f037\";\n}\n.fa-align-right:before {\n  content: \"\\f038\";\n}\n.fa-align-justify:before {\n  content: \"\\f039\";\n}\n.fa-list:before {\n  content: \"\\f03a\";\n}\n.fa-dedent:before,\n.fa-outdent:before {\n  content: \"\\f03b\";\n}\n.fa-indent:before {\n  content: \"\\f03c\";\n}\n.fa-video-camera:before {\n  content: \"\\f03d\";\n}\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n  content: \"\\f03e\";\n}\n.fa-pencil:before {\n  content: \"\\f040\";\n}\n.fa-map-marker:before {\n  content: \"\\f041\";\n}\n.fa-adjust:before {\n  content: \"\\f042\";\n}\n.fa-tint:before {\n  content: \"\\f043\";\n}\n.fa-edit:before,\n.fa-pencil-square-o:before {\n  content: \"\\f044\";\n}\n.fa-share-square-o:before {\n  content: \"\\f045\";\n}\n.fa-check-square-o:before {\n  content: \"\\f046\";\n}\n.fa-arrows:before {\n  content: \"\\f047\";\n}\n.fa-step-backward:before {\n  content: \"\\f048\";\n}\n.fa-fast-backward:before {\n  content: \"\\f049\";\n}\n.fa-backward:before {\n  content: \"\\f04a\";\n}\n.fa-play:before {\n  content: \"\\f04b\";\n}\n.fa-pause:before {\n  content: \"\\f04c\";\n}\n.fa-stop:before {\n  content: \"\\f04d\";\n}\n.fa-forward:before {\n  content: \"\\f04e\";\n}\n.fa-fast-forward:before {\n  content: \"\\f050\";\n}\n.fa-step-forward:before {\n  content: \"\\f051\";\n}\n.fa-eject:before {\n  content: \"\\f052\";\n}\n.fa-chevron-left:before {\n  content: \"\\f053\";\n}\n.fa-chevron-right:before {\n  content: \"\\f054\";\n}\n.fa-plus-circle:before {\n  content: \"\\f055\";\n}\n.fa-minus-circle:before {\n  content: \"\\f056\";\n}\n.fa-times-circle:before {\n  content: \"\\f057\";\n}\n.fa-check-circle:before {\n  content: \"\\f058\";\n}\n.fa-question-circle:before {\n  content: \"\\f059\";\n}\n.fa-info-circle:before {\n  content: \"\\f05a\";\n}\n.fa-crosshairs:before {\n  content: \"\\f05b\";\n}\n.fa-times-circle-o:before {\n  content: \"\\f05c\";\n}\n.fa-check-circle-o:before {\n  content: \"\\f05d\";\n}\n.fa-ban:before {\n  content: \"\\f05e\";\n}\n.fa-arrow-left:before {\n  content: \"\\f060\";\n}\n.fa-arrow-right:before {\n  content: \"\\f061\";\n}\n.fa-arrow-up:before {\n  content: \"\\f062\";\n}\n.fa-arrow-down:before {\n  content: \"\\f063\";\n}\n.fa-mail-forward:before,\n.fa-share:before {\n  content: \"\\f064\";\n}\n.fa-expand:before {\n  content: \"\\f065\";\n}\n.fa-compress:before {\n  content: \"\\f066\";\n}\n.fa-plus:before {\n  content: \"\\f067\";\n}\n.fa-minus:before {\n  content: \"\\f068\";\n}\n.fa-asterisk:before {\n  content: \"\\f069\";\n}\n.fa-exclamation-circle:before {\n  content: \"\\f06a\";\n}\n.fa-gift:before {\n  content: \"\\f06b\";\n}\n.fa-leaf:before {\n  content: \"\\f06c\";\n}\n.fa-fire:before {\n  content: \"\\f06d\";\n}\n.fa-eye:before {\n  content: \"\\f06e\";\n}\n.fa-eye-slash:before {\n  content: \"\\f070\";\n}\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n  content: \"\\f071\";\n}\n.fa-plane:before {\n  content: \"\\f072\";\n}\n.fa-calendar:before {\n  content: \"\\f073\";\n}\n.fa-random:before {\n  content: \"\\f074\";\n}\n.fa-comment:before {\n  content: \"\\f075\";\n}\n.fa-magnet:before {\n  content: \"\\f076\";\n}\n.fa-chevron-up:before {\n  content: \"\\f077\";\n}\n.fa-chevron-down:before {\n  content: \"\\f078\";\n}\n.fa-retweet:before {\n  content: \"\\f079\";\n}\n.fa-shopping-cart:before {\n  content: \"\\f07a\";\n}\n.fa-folder:before {\n  content: \"\\f07b\";\n}\n.fa-folder-open:before {\n  content: \"\\f07c\";\n}\n.fa-arrows-v:before {\n  content: \"\\f07d\";\n}\n.fa-arrows-h:before {\n  content: \"\\f07e\";\n}\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n  content: \"\\f080\";\n}\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n.fa-camera-retro:before {\n  content: \"\\f083\";\n}\n.fa-key:before {\n  content: \"\\f084\";\n}\n.fa-gears:before,\n.fa-cogs:before {\n  content: \"\\f085\";\n}\n.fa-comments:before {\n  content: \"\\f086\";\n}\n.fa-thumbs-o-up:before {\n  content: \"\\f087\";\n}\n.fa-thumbs-o-down:before {\n  content: \"\\f088\";\n}\n.fa-star-half:before {\n  content: \"\\f089\";\n}\n.fa-heart-o:before {\n  content: \"\\f08a\";\n}\n.fa-sign-out:before {\n  content: \"\\f08b\";\n}\n.fa-linkedin-square:before {\n  content: \"\\f08c\";\n}\n.fa-thumb-tack:before {\n  content: \"\\f08d\";\n}\n.fa-external-link:before {\n  content: \"\\f08e\";\n}\n.fa-sign-in:before {\n  content: \"\\f090\";\n}\n.fa-trophy:before {\n  content: \"\\f091\";\n}\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n.fa-upload:before {\n  content: \"\\f093\";\n}\n.fa-lemon-o:before {\n  content: \"\\f094\";\n}\n.fa-phone:before {\n  content: \"\\f095\";\n}\n.fa-square-o:before {\n  content: \"\\f096\";\n}\n.fa-bookmark-o:before {\n  content: \"\\f097\";\n}\n.fa-phone-square:before {\n  content: \"\\f098\";\n}\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n.fa-facebook-f:before,\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n.fa-github:before {\n  content: \"\\f09b\";\n}\n.fa-unlock:before {\n  content: \"\\f09c\";\n}\n.fa-credit-card:before {\n  content: \"\\f09d\";\n}\n.fa-feed:before,\n.fa-rss:before {\n  content: \"\\f09e\";\n}\n.fa-hdd-o:before {\n  content: \"\\f0a0\";\n}\n.fa-bullhorn:before {\n  content: \"\\f0a1\";\n}\n.fa-bell:before {\n  content: \"\\f0f3\";\n}\n.fa-certificate:before {\n  content: \"\\f0a3\";\n}\n.fa-hand-o-right:before {\n  content: \"\\f0a4\";\n}\n.fa-hand-o-left:before {\n  content: \"\\f0a5\";\n}\n.fa-hand-o-up:before {\n  content: \"\\f0a6\";\n}\n.fa-hand-o-down:before {\n  content: \"\\f0a7\";\n}\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\";\n}\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\";\n}\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\";\n}\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\";\n}\n.fa-globe:before {\n  content: \"\\f0ac\";\n}\n.fa-wrench:before {\n  content: \"\\f0ad\";\n}\n.fa-tasks:before {\n  content: \"\\f0ae\";\n}\n.fa-filter:before {\n  content: \"\\f0b0\";\n}\n.fa-briefcase:before {\n  content: \"\\f0b1\";\n}\n.fa-arrows-alt:before {\n  content: \"\\f0b2\";\n}\n.fa-group:before,\n.fa-users:before {\n  content: \"\\f0c0\";\n}\n.fa-chain:before,\n.fa-link:before {\n  content: \"\\f0c1\";\n}\n.fa-cloud:before {\n  content: \"\\f0c2\";\n}\n.fa-flask:before {\n  content: \"\\f0c3\";\n}\n.fa-cut:before,\n.fa-scissors:before {\n  content: \"\\f0c4\";\n}\n.fa-copy:before,\n.fa-files-o:before {\n  content: \"\\f0c5\";\n}\n.fa-paperclip:before {\n  content: \"\\f0c6\";\n}\n.fa-save:before,\n.fa-floppy-o:before {\n  content: \"\\f0c7\";\n}\n.fa-square:before {\n  content: \"\\f0c8\";\n}\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n  content: \"\\f0c9\";\n}\n.fa-list-ul:before {\n  content: \"\\f0ca\";\n}\n.fa-list-ol:before {\n  content: \"\\f0cb\";\n}\n.fa-strikethrough:before {\n  content: \"\\f0cc\";\n}\n.fa-underline:before {\n  content: \"\\f0cd\";\n}\n.fa-table:before {\n  content: \"\\f0ce\";\n}\n.fa-magic:before {\n  content: \"\\f0d0\";\n}\n.fa-truck:before {\n  content: \"\\f0d1\";\n}\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n.fa-google-plus:before {\n  content: \"\\f0d5\";\n}\n.fa-money:before {\n  content: \"\\f0d6\";\n}\n.fa-caret-down:before {\n  content: \"\\f0d7\";\n}\n.fa-caret-up:before {\n  content: \"\\f0d8\";\n}\n.fa-caret-left:before {\n  content: \"\\f0d9\";\n}\n.fa-caret-right:before {\n  content: \"\\f0da\";\n}\n.fa-columns:before {\n  content: \"\\f0db\";\n}\n.fa-unsorted:before,\n.fa-sort:before {\n  content: \"\\f0dc\";\n}\n.fa-sort-down:before,\n.fa-sort-desc:before {\n  content: \"\\f0dd\";\n}\n.fa-sort-up:before,\n.fa-sort-asc:before {\n  content: \"\\f0de\";\n}\n.fa-envelope:before {\n  content: \"\\f0e0\";\n}\n.fa-linkedin:before {\n  content: \"\\f0e1\";\n}\n.fa-rotate-left:before,\n.fa-undo:before {\n  content: \"\\f0e2\";\n}\n.fa-legal:before,\n.fa-gavel:before {\n  content: \"\\f0e3\";\n}\n.fa-dashboard:before,\n.fa-tachometer:before {\n  content: \"\\f0e4\";\n}\n.fa-comment-o:before {\n  content: \"\\f0e5\";\n}\n.fa-comments-o:before {\n  content: \"\\f0e6\";\n}\n.fa-flash:before,\n.fa-bolt:before {\n  content: \"\\f0e7\";\n}\n.fa-sitemap:before {\n  content: \"\\f0e8\";\n}\n.fa-umbrella:before {\n  content: \"\\f0e9\";\n}\n.fa-paste:before,\n.fa-clipboard:before {\n  content: \"\\f0ea\";\n}\n.fa-lightbulb-o:before {\n  content: \"\\f0eb\";\n}\n.fa-exchange:before {\n  content: \"\\f0ec\";\n}\n.fa-cloud-download:before {\n  content: \"\\f0ed\";\n}\n.fa-cloud-upload:before {\n  content: \"\\f0ee\";\n}\n.fa-user-md:before {\n  content: \"\\f0f0\";\n}\n.fa-stethoscope:before {\n  content: \"\\f0f1\";\n}\n.fa-suitcase:before {\n  content: \"\\f0f2\";\n}\n.fa-bell-o:before {\n  content: \"\\f0a2\";\n}\n.fa-coffee:before {\n  content: \"\\f0f4\";\n}\n.fa-cutlery:before {\n  content: \"\\f0f5\";\n}\n.fa-file-text-o:before {\n  content: \"\\f0f6\";\n}\n.fa-building-o:before {\n  content: \"\\f0f7\";\n}\n.fa-hospital-o:before {\n  content: \"\\f0f8\";\n}\n.fa-ambulance:before {\n  content: \"\\f0f9\";\n}\n.fa-medkit:before {\n  content: \"\\f0fa\";\n}\n.fa-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n.fa-beer:before {\n  content: \"\\f0fc\";\n}\n.fa-h-square:before {\n  content: \"\\f0fd\";\n}\n.fa-plus-square:before {\n  content: \"\\f0fe\";\n}\n.fa-angle-double-left:before {\n  content: \"\\f100\";\n}\n.fa-angle-double-right:before {\n  content: \"\\f101\";\n}\n.fa-angle-double-up:before {\n  content: \"\\f102\";\n}\n.fa-angle-double-down:before {\n  content: \"\\f103\";\n}\n.fa-angle-left:before {\n  content: \"\\f104\";\n}\n.fa-angle-right:before {\n  content: \"\\f105\";\n}\n.fa-angle-up:before {\n  content: \"\\f106\";\n}\n.fa-angle-down:before {\n  content: \"\\f107\";\n}\n.fa-desktop:before {\n  content: \"\\f108\";\n}\n.fa-laptop:before {\n  content: \"\\f109\";\n}\n.fa-tablet:before {\n  content: \"\\f10a\";\n}\n.fa-mobile-phone:before,\n.fa-mobile:before {\n  content: \"\\f10b\";\n}\n.fa-circle-o:before {\n  content: \"\\f10c\";\n}\n.fa-quote-left:before {\n  content: \"\\f10d\";\n}\n.fa-quote-right:before {\n  content: \"\\f10e\";\n}\n.fa-spinner:before {\n  content: \"\\f110\";\n}\n.fa-circle:before {\n  content: \"\\f111\";\n}\n.fa-mail-reply:before,\n.fa-reply:before {\n  content: \"\\f112\";\n}\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n.fa-folder-o:before {\n  content: \"\\f114\";\n}\n.fa-folder-open-o:before {\n  content: \"\\f115\";\n}\n.fa-smile-o:before {\n  content: \"\\f118\";\n}\n.fa-frown-o:before {\n  content: \"\\f119\";\n}\n.fa-meh-o:before {\n  content: \"\\f11a\";\n}\n.fa-gamepad:before {\n  content: \"\\f11b\";\n}\n.fa-keyboard-o:before {\n  content: \"\\f11c\";\n}\n.fa-flag-o:before {\n  content: \"\\f11d\";\n}\n.fa-flag-checkered:before {\n  content: \"\\f11e\";\n}\n.fa-terminal:before {\n  content: \"\\f120\";\n}\n.fa-code:before {\n  content: \"\\f121\";\n}\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n  content: \"\\f122\";\n}\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n  content: \"\\f123\";\n}\n.fa-location-arrow:before {\n  content: \"\\f124\";\n}\n.fa-crop:before {\n  content: \"\\f125\";\n}\n.fa-code-fork:before {\n  content: \"\\f126\";\n}\n.fa-unlink:before,\n.fa-chain-broken:before {\n  content: \"\\f127\";\n}\n.fa-question:before {\n  content: \"\\f128\";\n}\n.fa-info:before {\n  content: \"\\f129\";\n}\n.fa-exclamation:before {\n  content: \"\\f12a\";\n}\n.fa-superscript:before {\n  content: \"\\f12b\";\n}\n.fa-subscript:before {\n  content: \"\\f12c\";\n}\n.fa-eraser:before {\n  content: \"\\f12d\";\n}\n.fa-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n.fa-microphone:before {\n  content: \"\\f130\";\n}\n.fa-microphone-slash:before {\n  content: \"\\f131\";\n}\n.fa-shield:before {\n  content: \"\\f132\";\n}\n.fa-calendar-o:before {\n  content: \"\\f133\";\n}\n.fa-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n.fa-rocket:before {\n  content: \"\\f135\";\n}\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n.fa-chevron-circle-left:before {\n  content: \"\\f137\";\n}\n.fa-chevron-circle-right:before {\n  content: \"\\f138\";\n}\n.fa-chevron-circle-up:before {\n  content: \"\\f139\";\n}\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\";\n}\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n.fa-anchor:before {\n  content: \"\\f13d\";\n}\n.fa-unlock-alt:before {\n  content: \"\\f13e\";\n}\n.fa-bullseye:before {\n  content: \"\\f140\";\n}\n.fa-ellipsis-h:before {\n  content: \"\\f141\";\n}\n.fa-ellipsis-v:before {\n  content: \"\\f142\";\n}\n.fa-rss-square:before {\n  content: \"\\f143\";\n}\n.fa-play-circle:before {\n  content: \"\\f144\";\n}\n.fa-ticket:before {\n  content: \"\\f145\";\n}\n.fa-minus-square:before {\n  content: \"\\f146\";\n}\n.fa-minus-square-o:before {\n  content: \"\\f147\";\n}\n.fa-level-up:before {\n  content: \"\\f148\";\n}\n.fa-level-down:before {\n  content: \"\\f149\";\n}\n.fa-check-square:before {\n  content: \"\\f14a\";\n}\n.fa-pencil-square:before {\n  content: \"\\f14b\";\n}\n.fa-external-link-square:before {\n  content: \"\\f14c\";\n}\n.fa-share-square:before {\n  content: \"\\f14d\";\n}\n.fa-compass:before {\n  content: \"\\f14e\";\n}\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n  content: \"\\f150\";\n}\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n  content: \"\\f151\";\n}\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n  content: \"\\f152\";\n}\n.fa-euro:before,\n.fa-eur:before {\n  content: \"\\f153\";\n}\n.fa-gbp:before {\n  content: \"\\f154\";\n}\n.fa-dollar:before,\n.fa-usd:before {\n  content: \"\\f155\";\n}\n.fa-rupee:before,\n.fa-inr:before {\n  content: \"\\f156\";\n}\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n  content: \"\\f157\";\n}\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n  content: \"\\f158\";\n}\n.fa-won:before,\n.fa-krw:before {\n  content: \"\\f159\";\n}\n.fa-bitcoin:before,\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n.fa-file:before {\n  content: \"\\f15b\";\n}\n.fa-file-text:before {\n  content: \"\\f15c\";\n}\n.fa-sort-alpha-asc:before {\n  content: \"\\f15d\";\n}\n.fa-sort-alpha-desc:before {\n  content: \"\\f15e\";\n}\n.fa-sort-amount-asc:before {\n  content: \"\\f160\";\n}\n.fa-sort-amount-desc:before {\n  content: \"\\f161\";\n}\n.fa-sort-numeric-asc:before {\n  content: \"\\f162\";\n}\n.fa-sort-numeric-desc:before {\n  content: \"\\f163\";\n}\n.fa-thumbs-up:before {\n  content: \"\\f164\";\n}\n.fa-thumbs-down:before {\n  content: \"\\f165\";\n}\n.fa-youtube-square:before {\n  content: \"\\f166\";\n}\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n.fa-xing:before {\n  content: \"\\f168\";\n}\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n.fa-youtube-play:before {\n  content: \"\\f16a\";\n}\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n.fa-adn:before {\n  content: \"\\f170\";\n}\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n.fa-bitbucket-square:before {\n  content: \"\\f172\";\n}\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n.fa-long-arrow-down:before {\n  content: \"\\f175\";\n}\n.fa-long-arrow-up:before {\n  content: \"\\f176\";\n}\n.fa-long-arrow-left:before {\n  content: \"\\f177\";\n}\n.fa-long-arrow-right:before {\n  content: \"\\f178\";\n}\n.fa-apple:before {\n  content: \"\\f179\";\n}\n.fa-windows:before {\n  content: \"\\f17a\";\n}\n.fa-android:before {\n  content: \"\\f17b\";\n}\n.fa-linux:before {\n  content: \"\\f17c\";\n}\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n.fa-trello:before {\n  content: \"\\f181\";\n}\n.fa-female:before {\n  content: \"\\f182\";\n}\n.fa-male:before {\n  content: \"\\f183\";\n}\n.fa-gittip:before,\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n.fa-sun-o:before {\n  content: \"\\f185\";\n}\n.fa-moon-o:before {\n  content: \"\\f186\";\n}\n.fa-archive:before {\n  content: \"\\f187\";\n}\n.fa-bug:before {\n  content: \"\\f188\";\n}\n.fa-vk:before {\n  content: \"\\f189\";\n}\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n.fa-arrow-circle-o-right:before {\n  content: \"\\f18e\";\n}\n.fa-arrow-circle-o-left:before {\n  content: \"\\f190\";\n}\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n  content: \"\\f191\";\n}\n.fa-dot-circle-o:before {\n  content: \"\\f192\";\n}\n.fa-wheelchair:before {\n  content: \"\\f193\";\n}\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n.fa-turkish-lira:before,\n.fa-try:before {\n  content: \"\\f195\";\n}\n.fa-plus-square-o:before {\n  content: \"\\f196\";\n}\n.fa-space-shuttle:before {\n  content: \"\\f197\";\n}\n.fa-slack:before {\n  content: \"\\f198\";\n}\n.fa-envelope-square:before {\n  content: \"\\f199\";\n}\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n  content: \"\\f19c\";\n}\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n  content: \"\\f19d\";\n}\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\";\n}\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n.fa-language:before {\n  content: \"\\f1ab\";\n}\n.fa-fax:before {\n  content: \"\\f1ac\";\n}\n.fa-building:before {\n  content: \"\\f1ad\";\n}\n.fa-child:before {\n  content: \"\\f1ae\";\n}\n.fa-paw:before {\n  content: \"\\f1b0\";\n}\n.fa-spoon:before {\n  content: \"\\f1b1\";\n}\n.fa-cube:before {\n  content: \"\\f1b2\";\n}\n.fa-cubes:before {\n  content: \"\\f1b3\";\n}\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n.fa-recycle:before {\n  content: \"\\f1b8\";\n}\n.fa-automobile:before,\n.fa-car:before {\n  content: \"\\f1b9\";\n}\n.fa-cab:before,\n.fa-taxi:before {\n  content: \"\\f1ba\";\n}\n.fa-tree:before {\n  content: \"\\f1bb\";\n}\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n.fa-database:before {\n  content: \"\\f1c0\";\n}\n.fa-file-pdf-o:before {\n  content: \"\\f1c1\";\n}\n.fa-file-word-o:before {\n  content: \"\\f1c2\";\n}\n.fa-file-excel-o:before {\n  content: \"\\f1c3\";\n}\n.fa-file-powerpoint-o:before {\n  content: \"\\f1c4\";\n}\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n  content: \"\\f1c5\";\n}\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n  content: \"\\f1c6\";\n}\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n  content: \"\\f1c7\";\n}\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n  content: \"\\f1c8\";\n}\n.fa-file-code-o:before {\n  content: \"\\f1c9\";\n}\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n  content: \"\\f1cd\";\n}\n.fa-circle-o-notch:before {\n  content: \"\\f1ce\";\n}\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n.fa-ge:before,\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n.fa-git-square:before {\n  content: \"\\f1d2\";\n}\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n.fa-wechat:before,\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n.fa-send:before,\n.fa-paper-plane:before {\n  content: \"\\f1d8\";\n}\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n  content: \"\\f1d9\";\n}\n.fa-history:before {\n  content: \"\\f1da\";\n}\n.fa-circle-thin:before {\n  content: \"\\f1db\";\n}\n.fa-header:before {\n  content: \"\\f1dc\";\n}\n.fa-paragraph:before {\n  content: \"\\f1dd\";\n}\n.fa-sliders:before {\n  content: \"\\f1de\";\n}\n.fa-share-alt:before {\n  content: \"\\f1e0\";\n}\n.fa-share-alt-square:before {\n  content: \"\\f1e1\";\n}\n.fa-bomb:before {\n  content: \"\\f1e2\";\n}\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n  content: \"\\f1e3\";\n}\n.fa-tty:before {\n  content: \"\\f1e4\";\n}\n.fa-binoculars:before {\n  content: \"\\f1e5\";\n}\n.fa-plug:before {\n  content: \"\\f1e6\";\n}\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n.fa-newspaper-o:before {\n  content: \"\\f1ea\";\n}\n.fa-wifi:before {\n  content: \"\\f1eb\";\n}\n.fa-calculator:before {\n  content: \"\\f1ec\";\n}\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n.fa-bell-slash:before {\n  content: \"\\f1f6\";\n}\n.fa-bell-slash-o:before {\n  content: \"\\f1f7\";\n}\n.fa-trash:before {\n  content: \"\\f1f8\";\n}\n.fa-copyright:before {\n  content: \"\\f1f9\";\n}\n.fa-at:before {\n  content: \"\\f1fa\";\n}\n.fa-eyedropper:before {\n  content: \"\\f1fb\";\n}\n.fa-paint-brush:before {\n  content: \"\\f1fc\";\n}\n.fa-birthday-cake:before {\n  content: \"\\f1fd\";\n}\n.fa-area-chart:before {\n  content: \"\\f1fe\";\n}\n.fa-pie-chart:before {\n  content: \"\\f200\";\n}\n.fa-line-chart:before {\n  content: \"\\f201\";\n}\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n.fa-toggle-off:before {\n  content: \"\\f204\";\n}\n.fa-toggle-on:before {\n  content: \"\\f205\";\n}\n.fa-bicycle:before {\n  content: \"\\f206\";\n}\n.fa-bus:before {\n  content: \"\\f207\";\n}\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n.fa-cc:before {\n  content: \"\\f20a\";\n}\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n  content: \"\\f20b\";\n}\n.fa-meanpath:before {\n  content: \"\\f20c\";\n}\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n.fa-cart-plus:before {\n  content: \"\\f217\";\n}\n.fa-cart-arrow-down:before {\n  content: \"\\f218\";\n}\n.fa-diamond:before {\n  content: \"\\f219\";\n}\n.fa-ship:before {\n  content: \"\\f21a\";\n}\n.fa-user-secret:before {\n  content: \"\\f21b\";\n}\n.fa-motorcycle:before {\n  content: \"\\f21c\";\n}\n.fa-street-view:before {\n  content: \"\\f21d\";\n}\n.fa-heartbeat:before {\n  content: \"\\f21e\";\n}\n.fa-venus:before {\n  content: \"\\f221\";\n}\n.fa-mars:before {\n  content: \"\\f222\";\n}\n.fa-mercury:before {\n  content: \"\\f223\";\n}\n.fa-intersex:before,\n.fa-transgender:before {\n  content: \"\\f224\";\n}\n.fa-transgender-alt:before {\n  content: \"\\f225\";\n}\n.fa-venus-double:before {\n  content: \"\\f226\";\n}\n.fa-mars-double:before {\n  content: \"\\f227\";\n}\n.fa-venus-mars:before {\n  content: \"\\f228\";\n}\n.fa-mars-stroke:before {\n  content: \"\\f229\";\n}\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\";\n}\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\";\n}\n.fa-neuter:before {\n  content: \"\\f22c\";\n}\n.fa-genderless:before {\n  content: \"\\f22d\";\n}\n.fa-facebook-official:before {\n  content: \"\\f230\";\n}\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n.fa-server:before {\n  content: \"\\f233\";\n}\n.fa-user-plus:before {\n  content: \"\\f234\";\n}\n.fa-user-times:before {\n  content: \"\\f235\";\n}\n.fa-hotel:before,\n.fa-bed:before {\n  content: \"\\f236\";\n}\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n.fa-train:before {\n  content: \"\\f238\";\n}\n.fa-subway:before {\n  content: \"\\f239\";\n}\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n.fa-yc:before,\n.fa-y-combinator:before {\n  content: \"\\f23b\";\n}\n.fa-optin-monster:before {\n  content: \"\\f23c\";\n}\n.fa-opencart:before {\n  content: \"\\f23d\";\n}\n.fa-expeditedssl:before {\n  content: \"\\f23e\";\n}\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n  content: \"\\f240\";\n}\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n  content: \"\\f241\";\n}\n.fa-battery-2:before,\n.fa-battery-half:before {\n  content: \"\\f242\";\n}\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n  content: \"\\f243\";\n}\n.fa-battery-0:before,\n.fa-battery-empty:before {\n  content: \"\\f244\";\n}\n.fa-mouse-pointer:before {\n  content: \"\\f245\";\n}\n.fa-i-cursor:before {\n  content: \"\\f246\";\n}\n.fa-object-group:before {\n  content: \"\\f247\";\n}\n.fa-object-ungroup:before {\n  content: \"\\f248\";\n}\n.fa-sticky-note:before {\n  content: \"\\f249\";\n}\n.fa-sticky-note-o:before {\n  content: \"\\f24a\";\n}\n.fa-cc-jcb:before {\n  content: \"\\f24b\";\n}\n.fa-cc-diners-club:before {\n  content: \"\\f24c\";\n}\n.fa-clone:before {\n  content: \"\\f24d\";\n}\n.fa-balance-scale:before {\n  content: \"\\f24e\";\n}\n.fa-hourglass-o:before {\n  content: \"\\f250\";\n}\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n  content: \"\\f251\";\n}\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n  content: \"\\f252\";\n}\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n  content: \"\\f253\";\n}\n.fa-hourglass:before {\n  content: \"\\f254\";\n}\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n  content: \"\\f255\";\n}\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n  content: \"\\f256\";\n}\n.fa-hand-scissors-o:before {\n  content: \"\\f257\";\n}\n.fa-hand-lizard-o:before {\n  content: \"\\f258\";\n}\n.fa-hand-spock-o:before {\n  content: \"\\f259\";\n}\n.fa-hand-pointer-o:before {\n  content: \"\\f25a\";\n}\n.fa-hand-peace-o:before {\n  content: \"\\f25b\";\n}\n.fa-trademark:before {\n  content: \"\\f25c\";\n}\n.fa-registered:before {\n  content: \"\\f25d\";\n}\n.fa-creative-commons:before {\n  content: \"\\f25e\";\n}\n.fa-gg:before {\n  content: \"\\f260\";\n}\n.fa-gg-circle:before {\n  content: \"\\f261\";\n}\n.fa-tripadvisor:before {\n  content: \"\\f262\";\n}\n.fa-odnoklassniki:before {\n  content: \"\\f263\";\n}\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\";\n}\n.fa-get-pocket:before {\n  content: \"\\f265\";\n}\n.fa-wikipedia-w:before {\n  content: \"\\f266\";\n}\n.fa-safari:before {\n  content: \"\\f267\";\n}\n.fa-chrome:before {\n  content: \"\\f268\";\n}\n.fa-firefox:before {\n  content: \"\\f269\";\n}\n.fa-opera:before {\n  content: \"\\f26a\";\n}\n.fa-internet-explorer:before {\n  content: \"\\f26b\";\n}\n.fa-tv:before,\n.fa-television:before {\n  content: \"\\f26c\";\n}\n.fa-contao:before {\n  content: \"\\f26d\";\n}\n.fa-500px:before {\n  content: \"\\f26e\";\n}\n.fa-amazon:before {\n  content: \"\\f270\";\n}\n.fa-calendar-plus-o:before {\n  content: \"\\f271\";\n}\n.fa-calendar-minus-o:before {\n  content: \"\\f272\";\n}\n.fa-calendar-times-o:before {\n  content: \"\\f273\";\n}\n.fa-calendar-check-o:before {\n  content: \"\\f274\";\n}\n.fa-industry:before {\n  content: \"\\f275\";\n}\n.fa-map-pin:before {\n  content: \"\\f276\";\n}\n.fa-map-signs:before {\n  content: \"\\f277\";\n}\n.fa-map-o:before {\n  content: \"\\f278\";\n}\n.fa-map:before {\n  content: \"\\f279\";\n}\n.fa-commenting:before {\n  content: \"\\f27a\";\n}\n.fa-commenting-o:before {\n  content: \"\\f27b\";\n}\n.fa-houzz:before {\n  content: \"\\f27c\";\n}\n.fa-vimeo:before {\n  content: \"\\f27d\";\n}\n.fa-black-tie:before {\n  content: \"\\f27e\";\n}\n.fa-fonticons:before {\n  content: \"\\f280\";\n}\n.fa-reddit-alien:before {\n  content: \"\\f281\";\n}\n.fa-edge:before {\n  content: \"\\f282\";\n}\n.fa-credit-card-alt:before {\n  content: \"\\f283\";\n}\n.fa-codiepie:before {\n  content: \"\\f284\";\n}\n.fa-modx:before {\n  content: \"\\f285\";\n}\n.fa-fort-awesome:before {\n  content: \"\\f286\";\n}\n.fa-usb:before {\n  content: \"\\f287\";\n}\n.fa-product-hunt:before {\n  content: \"\\f288\";\n}\n.fa-mixcloud:before {\n  content: \"\\f289\";\n}\n.fa-scribd:before {\n  content: \"\\f28a\";\n}\n.fa-pause-circle:before {\n  content: \"\\f28b\";\n}\n.fa-pause-circle-o:before {\n  content: \"\\f28c\";\n}\n.fa-stop-circle:before {\n  content: \"\\f28d\";\n}\n.fa-stop-circle-o:before {\n  content: \"\\f28e\";\n}\n.fa-shopping-bag:before {\n  content: \"\\f290\";\n}\n.fa-shopping-basket:before {\n  content: \"\\f291\";\n}\n.fa-hashtag:before {\n  content: \"\\f292\";\n}\n.fa-bluetooth:before {\n  content: \"\\f293\";\n}\n.fa-bluetooth-b:before {\n  content: \"\\f294\";\n}\n.fa-percent:before {\n  content: \"\\f295\";\n}\n.fa-gitlab:before {\n  content: \"\\f296\";\n}\n.fa-wpbeginner:before {\n  content: \"\\f297\";\n}\n.fa-wpforms:before {\n  content: \"\\f298\";\n}\n.fa-envira:before {\n  content: \"\\f299\";\n}\n.fa-universal-access:before {\n  content: \"\\f29a\";\n}\n.fa-wheelchair-alt:before {\n  content: \"\\f29b\";\n}\n.fa-question-circle-o:before {\n  content: \"\\f29c\";\n}\n.fa-blind:before {\n  content: \"\\f29d\";\n}\n.fa-audio-description:before {\n  content: \"\\f29e\";\n}\n.fa-volume-control-phone:before {\n  content: \"\\f2a0\";\n}\n.fa-braille:before {\n  content: \"\\f2a1\";\n}\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\";\n}\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\";\n}\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n  content: \"\\f2a4\";\n}\n.fa-glide:before {\n  content: \"\\f2a5\";\n}\n.fa-glide-g:before {\n  content: \"\\f2a6\";\n}\n.fa-signing:before,\n.fa-sign-language:before {\n  content: \"\\f2a7\";\n}\n.fa-low-vision:before {\n  content: \"\\f2a8\";\n}\n.fa-viadeo:before {\n  content: \"\\f2a9\";\n}\n.fa-viadeo-square:before {\n  content: \"\\f2aa\";\n}\n.fa-snapchat:before {\n  content: \"\\f2ab\";\n}\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\";\n}\n.fa-snapchat-square:before {\n  content: \"\\f2ad\";\n}\n.fa-pied-piper:before {\n  content: \"\\f2ae\";\n}\n.fa-first-order:before {\n  content: \"\\f2b0\";\n}\n.fa-yoast:before {\n  content: \"\\f2b1\";\n}\n.fa-themeisle:before {\n  content: \"\\f2b2\";\n}\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n  content: \"\\f2b3\";\n}\n.fa-fa:before,\n.fa-font-awesome:before {\n  content: \"\\f2b4\";\n}\n.fa-handshake-o:before {\n  content: \"\\f2b5\";\n}\n.fa-envelope-open:before {\n  content: \"\\f2b6\";\n}\n.fa-envelope-open-o:before {\n  content: \"\\f2b7\";\n}\n.fa-linode:before {\n  content: \"\\f2b8\";\n}\n.fa-address-book:before {\n  content: \"\\f2b9\";\n}\n.fa-address-book-o:before {\n  content: \"\\f2ba\";\n}\n.fa-vcard:before,\n.fa-address-card:before {\n  content: \"\\f2bb\";\n}\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n  content: \"\\f2bc\";\n}\n.fa-user-circle:before {\n  content: \"\\f2bd\";\n}\n.fa-user-circle-o:before {\n  content: \"\\f2be\";\n}\n.fa-user-o:before {\n  content: \"\\f2c0\";\n}\n.fa-id-badge:before {\n  content: \"\\f2c1\";\n}\n.fa-drivers-license:before,\n.fa-id-card:before {\n  content: \"\\f2c2\";\n}\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n  content: \"\\f2c3\";\n}\n.fa-quora:before {\n  content: \"\\f2c4\";\n}\n.fa-free-code-camp:before {\n  content: \"\\f2c5\";\n}\n.fa-telegram:before {\n  content: \"\\f2c6\";\n}\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n  content: \"\\f2c7\";\n}\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\";\n}\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n  content: \"\\f2c9\";\n}\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\";\n}\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\";\n}\n.fa-shower:before {\n  content: \"\\f2cc\";\n}\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n  content: \"\\f2cd\";\n}\n.fa-podcast:before {\n  content: \"\\f2ce\";\n}\n.fa-window-maximize:before {\n  content: \"\\f2d0\";\n}\n.fa-window-minimize:before {\n  content: \"\\f2d1\";\n}\n.fa-window-restore:before {\n  content: \"\\f2d2\";\n}\n.fa-times-rectangle:before,\n.fa-window-close:before {\n  content: \"\\f2d3\";\n}\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n  content: \"\\f2d4\";\n}\n.fa-bandcamp:before {\n  content: \"\\f2d5\";\n}\n.fa-grav:before {\n  content: \"\\f2d6\";\n}\n.fa-etsy:before {\n  content: \"\\f2d7\";\n}\n.fa-imdb:before {\n  content: \"\\f2d8\";\n}\n.fa-ravelry:before {\n  content: \"\\f2d9\";\n}\n.fa-eercast:before {\n  content: \"\\f2da\";\n}\n.fa-microchip:before {\n  content: \"\\f2db\";\n}\n.fa-snowflake-o:before {\n  content: \"\\f2dc\";\n}\n.fa-superpowers:before {\n  content: \"\\f2dd\";\n}\n.fa-wpexplorer:before {\n  content: \"\\f2de\";\n}\n.fa-meetup:before {\n  content: \"\\f2e0\";\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n"
  },
  {
    "path": "static/flow-editor/demo/html/index/flow/flow.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n\t<title>任务流程图</title>\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/layui/dist/css/layui.css\" />\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../css/font-awesome/css/font-awesome.min.css\" />\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/plugin/flow/global.css\" type=\"text/css\">\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/plugin/flow/designer.css\">\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/plugin/flow/ui.css\">\n</head>\n\n<body>\n\t<canvas id=\"support_canvas\" style=\"display: none;\"></canvas>\n\t<script type=\"text/javascript\">\n\t\tif (!document.getElementById(\"support_canvas\").getContext) {\n\t\t\tUI.showTip('您的浏览器不支持canvas特性，请使用谷歌或火狐浏览器。');\n\t\t}\n\t</script>\n\t<div id=\"designer\">\n\t\t<!-- <div class=\"flow-tool\">\n\t\t\t<div class=\"middle\">\n\t\t\t\t<a class=\"plus\" style=\"float:left;\" href=\"#\"><img src=\"/static/processon/img/node/plus.png\"\n\t\t\t\t\t\tstyle=\"height: 15px;margin-top: -3px;\"> <span>放大</span></a>\n\t\t\t\t<a class=\"minus\" style=\"float:left;\" href=\"#\"><img src=\"/static/processon/img/node/sub.png\"\n\t\t\t\t\t\tstyle=\"height: 15px;margin-top: -3px;\"> <span>缩小</span></a>\n\t\t\t</div>\n\t\t</div> -->\n\t\t<div id=\"shape_panel\" class=\"layout\" style=\"height: calc(100%);\"></div>\n\t\t<div id=\"designer_viewport\">\n\t\t\t<div id=\"designer_layout\" class=\"layout\">\n\t\t\t\t<div id=\"canvas_container\" style=\"cursor: default;width: 100%;\">\n\t\t\t\t\t<div id=\"designer_canvas\" style=\"background-color: rgb(48, 242, 242);\">\n\t\t\t\t\t\t<ul id=\"designer_contextmenu\" class=\"menu list options_menu\">\n\t\t\t\t\t\t\t<li ac=\"selectall\">\n\t\t\t\t\t\t\t\t<div class=\"ico fa fa-font\"></div>全选<div class=\"extend\">Ctrl+A</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li ac=\"delete\">\n\t\t\t\t\t\t\t\t<div class=\"ico remove\"></div>删除<div class=\"extend\">Delete/Backspace</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"shape_img_container\"></div>\n\t\t\t\t<div id=\"layout_block\"></div>\n\t\t\t</div>\n\n\t\t\t<div id=\"dock\" style=\"right: 9px;\">\n\t\t\t\t<div class=\"dock_header\"></div>\n\t\t\t\t<div class=\"dock_buttons\">\n\t\t\t\t\t<div id=\"dock_btn_navigator\" title=\"导航\" disabletitle=\"true\" class=\"toolbar_button\"\n\t\t\t\t\t\tonclick=\"Dock.showView(&#39;navigator&#39;, true)\">\n\t\t\t\t\t\t<div class=\"ico ico_dock_nav\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"navigation_view\" class=\"dock_view dock_view_navigator\" style=\"right: 45px; display: none;\">\n\t\t\t\t<div class=\"dock_view_header\">导航\n\t\t\t\t\t<div class=\"ico ico_dock_collapse\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"navigation_bounding\">\n\t\t\t\t\t<div class=\"navigation_view_container\">\n\t\t\t\t\t\t<canvas id=\"navigation_canvas\" width=\"120px\" height=\"160px\"></canvas>\n\t\t\t\t\t\t<div id=\"navigation_eye\" style=\"left: -1px; top: -1px; width: 0px; height: 0px;\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"dock_devider\" style=\"margin: 0px 10px\"></div>\n\t\t\t\t<div class=\"navigation_view_bar\">缩放：\n\t\t\t\t\t<div id=\"dock_zoom\" class=\"spinner active\" min=\"50\" max=\"200\" old=\"50%\">\n\t\t\t\t\t\t<div class=\"spinner_input\"><input></div>\n\t\t\t\t\t\t<div class=\"buttons\">\n\t\t\t\t\t\t\t<div class=\"spinner_up\"></div>\n\t\t\t\t\t\t\t<div class=\"spinner_down\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"configure\">\n\t\t\t<form class=\"layui-form\">\n\t\t\t\t<div class=\"layui-tab layui-tab-brief\" style=\"margin: 0;\">\n\t\t\t\t\t<ul class=\"layui-tab-title\">\n\t\t\t\t\t\t<li class=\"layui-this\" style=\"width: 40%;\">配置</li>\n\t\t\t\t\t\t<li style=\"width: 35%;\">描述</li>\n\t\t\t\t\t</ul>\n\t\t\t\t\t<div class=\"layui-tab-content\">\n\t\t\t\t\t\t<div class=\"layui-tab-item layui-show\"></div>\n\t\t\t\t\t\t<div class=\"layui-tab-item\">\n\t\t\t\t\t\t\t<input type=\"hidden\" name=\"nodeId\" class=\"layui-hide\" />\n\t\t\t\t\t\t\t<textarea name=\"remark\" lay-verify=\"remark\" style=\"height: 280px;\" class=\"layui-textarea\"\n\t\t\t\t\t\t\t\tplaceholder=\"请描述组件涉及的业务\"></textarea>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div style=\"text-align: center;\">\n\t\t\t\t\t<button type=\"button\" class=\"layui-btn layui-btn-danger layui-btn-small\" id=\"confiSave\" lay-submit\n\t\t\t\t\t\tlay-filter=\"nodesave\">保存</button>\n\t\t\t\t\t<button type=\"button\" class=\"layui-btn layui-btn-primary layui-btn-small\" id=\"cancel\">关闭</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t\t<div class=\"template layui-hide\"></div>\n\t\t</div>\n\t\t<div id=\"addJob\" style=\"display: none;\">\n\t\t\t<form class=\"layui-form\" style=\"padding: 20px 40px 0 0;\">\n\t\t\t\t<div class=\"layui-form-item\">\n\t\t\t\t\t<label class=\"layui-form-label\">任务名称 <font>*</font></label>\n\t\t\t\t\t<div class=\"layui-input-block\">\n\t\t\t\t\t\t<input type=\"text\" name=\"name\" lay-verify=\"required|name\" placeholder=\"请输入任务名称\"\n\t\t\t\t\t\t\tclass=\"layui-input\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"layui-form-item\">\n\t\t\t\t\t<label class=\"layui-form-label\">任务描述 <font>*</font></label>\n\t\t\t\t\t<div class=\"layui-input-block\">\n\t\t\t\t\t\t<textarea name=\"remark\" lay-verify=\"required|remark\" class=\"layui-textarea\"\n\t\t\t\t\t\t\tplaceholder=\"请输入任务描述\"></textarea>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<button class=\"layui-addJob layui-hide\" lay-submit=\"\" lay-filter=\"addJob\">submit</button>\n\t\t\t\t<button class=\"layui-reset layui-hide\" type=\"reset\">reset</button>\n\t\t\t</form>\n\t\t</div>\n\t</div>\n</body>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/analytics.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/jquery.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/util.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/schema.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/themes.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/layui/dist/layui.js\" js></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/dmp/pub/pub.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/dmp/index/flow/flow.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/collaboration.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.core.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/export.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.methods.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.events.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.ui.js\"></script>\n<script>\n\t//回调函数\n\tfunction receiveMessageFromIndex(event) {\n\t\tconsole.log('我是iframe,我接受到了：', event.data);\n\t\tswitch (event.data.code) {\n\t\t\tcase 0://code:0更新UI数据\n\t\t\t\tlocalStorage[\"def_local_\" + chartId] = JSON.stringify(event.data.value);\n\t\t\t\tlocalStorage[\"def_\" + chartId] = JSON.stringify(event.data.value);\n\t\t\t\tlocalStorage[\"title_local_\" + chartId] = '';\n\t\t\t\tDesigner.open(event.data.value);\n\t\t\t\tbreak;\n\t\t\tcase 1://code:1工具栏方法触发\n\t\t\t\tswitch (event.data.value) {\n\t\t\t\t\tcase 'undo':\n\t\t\t\t\t\tMessageSource.undo();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'redo':\n\t\t\t\t\t\tMessageSource.redo();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'copy':\n\t\t\t\t\t\tDesigner.clipboard.copy();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'paste':\n\t\t\t\t\t\tDesigner.clipboard.paste();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cut':\n\t\t\t\t\t\tDesigner.clipboard.cut();\n\t\t\t\t\tcase 'delete':\n\t\t\t\t\t\tDesigner.op.removeShape();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'selectAll':\n\t\t\t\t\t\tDesigner.selectAll();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'duplicate':\n\t\t\t\t\t\tDesigner.clipboard.duplicate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'zoomIn':\n\t\t\t\t\t\tDesigner.zoomIn();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'zoomOut':\n\t\t\t\t\t\tDesigner.zoomOut();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t//监听message事件\n\twindow.addEventListener(\"message\", receiveMessageFromIndex, false);\n\n\tvar a = { n: 1 }\n\tvar b = a;\n\ta.x = a = { n: 2 }\n\tconsole.log(a.x);\n\tconsole.log(b.x)\n</script>\n\n</html>"
  },
  {
    "path": "static/flow-editor/demo/html/index/flow/flowEdit.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n\t<title>任务流程图</title>\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/layui/dist/css/layui.css\" />\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../css/font-awesome/css/font-awesome.min.css\" />\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/plugin/flow/global.css\" type=\"text/css\">\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/plugin/flow/designer.css\">\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/plugin/flow/ui.css\">\n</head>\n\n<body>\n\t<canvas id=\"support_canvas\" style=\"display: none;\"></canvas>\n\t<script type=\"text/javascript\">\n\t\tif(!document.getElementById(\"support_canvas\").getContext) {\n\t\t\tUI.showTip('您的浏览器不支持canvas特性，请使用谷歌或火狐浏览器。');\n\t\t}\n\t</script>\n\t<div id=\"designer\" class=\"layui-edit\">\n\t\t<div class=\"flow-tool\">\n\t\t\t<div class=\"first\"><b>组件</b></div>\n\t\t\t<div class=\"middle\">\n\t\t\t\t<a class=\"save\" href=\"#\" data-click=\"addJob\"><i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> 新建</a>\n\t\t\t\t<a class=\"test\" href=\"#\" data-click=\"testJob\"><i class=\"fa fa-play\" aria-hidden=\"true\"></i> 测试</a>\n\t\t\t\t<a class=\"down\" href=\"#\" data-click=\"downJob\"><i class=\"fa fa-cloud-download\" aria-hidden=\"true\"></i> 下载</a>\n\t\t\t\t<a class=\"name\" href=\"#\"></a>\n\t\t\t\t<a class=\"time\" href=\"#\"></a>\n\t\t\t\t<a class=\"plus\" href=\"#\"><i class=\"fa fa-search-plus\" aria-hidden=\"true\"></i> 放大</a>\t\t\t\t\n\t\t\t\t<a class=\"minus\" href=\"#\"><i class=\"fa fa-search-minus\" aria-hidden=\"true\"></i> 缩小</a>\n\t\t\t</div>\n\t\t\t<div class=\"last\"><b>组件属性</b></div>\n\t\t</div>\n\t\t<div id=\"shape_panel\" class=\"layout\" style=\"height: calc(100%);\"></div>\n\t\t<div id=\"designer_viewport\">\n\t\t\t<div id=\"designer_layout\" class=\"layout\">\n\t\t\t\t<div id=\"canvas_container\" style=\"cursor: default;\">\n\t\t\t\t\t<div id=\"designer_canvas\" style=\"background-color: rgb(48, 242, 242);\">\n\t\t\t\t\t\t<ul id=\"designer_contextmenu\" class=\"menu list options_menu\">\n\t\t\t\t\t\t\t<li ac=\"selectall\">\n\t\t\t\t\t\t\t\t<div class=\"ico fa fa-font\"></div>全选<div class=\"extend\">Ctrl+A</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li ac=\"delete\">\n\t\t\t\t\t\t\t\t<div class=\"ico remove\"></div>删除<div class=\"extend\">Delete/Backspace</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"shape_img_container\"></div>\n\t\t\t\t<div id=\"layout_block\"></div>\n\t\t\t</div>\n\t\t\t\n\t\t\t<div id=\"dock\" style=\"right: 9px;\">\n\t\t\t\t<div class=\"dock_header\"></div>\n\t\t\t\t<div class=\"dock_buttons\">\n\t\t\t\t\t<div id=\"dock_btn_navigator\" title=\"导航\" disabletitle=\"true\" class=\"toolbar_button\" onclick=\"Dock.showView(&#39;navigator&#39;, true)\">\n\t\t\t\t\t\t<div class=\"ico ico_dock_nav\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"navigation_view\" class=\"dock_view dock_view_navigator\" style=\"right: 45px; display: none;\">\n\t\t\t\t<div class=\"dock_view_header\">导航\n\t\t\t\t\t<div class=\"ico ico_dock_collapse\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"navigation_bounding\">\n\t\t\t\t\t<div class=\"navigation_view_container\">\n\t\t\t\t\t\t<canvas id=\"navigation_canvas\" width=\"120px\" height=\"160px\"></canvas>\n\t\t\t\t\t\t<div id=\"navigation_eye\" style=\"left: -1px; top: -1px; width: 0px; height: 0px;\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"dock_devider\" style=\"margin: 0px 10px\"></div>\n\t\t\t\t<div class=\"navigation_view_bar\">缩放：\n\t\t\t\t\t<div id=\"dock_zoom\" class=\"spinner active\" min=\"50\" max=\"200\" old=\"50%\">\n\t\t\t\t\t\t<div class=\"spinner_input\"><input></div>\n\t\t\t\t\t\t<div class=\"buttons\">\n\t\t\t\t\t\t\t<div class=\"spinner_up\"></div>\n\t\t\t\t\t\t\t<div class=\"spinner_down\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"configure\">\n\t\t\t<form class=\"layui-form\">\n\t\t\t\t<div class=\"layui-tab layui-tab-brief\" style=\"margin: 0;\">\n\t\t\t\t  \t<ul class=\"layui-tab-title\">\n\t\t\t\t\t    <li class=\"layui-this\" style=\"width: 40%;\">配置</li>\n\t\t\t\t\t    <li style=\"width: 35%;\">描述</li>\n\t\t\t\t  \t</ul>\n\t\t\t\t  \t<div class=\"layui-tab-content\">\n\t\t\t\t\t    <div class=\"layui-tab-item layui-show\"></div>\n\t\t\t\t\t    <div class=\"layui-tab-item\">\n\t\t\t\t\t    \t<input type=\"hidden\" name=\"nodeId\" class=\"layui-hide\" />\n\t\t\t\t\t    \t<textarea name=\"remark\" lay-verify=\"remark\" style=\"height: 280px;\" class=\"layui-textarea\" placeholder=\"请描述组件涉及的业务\"></textarea>\n\t\t\t\t\t    </div>\n\t\t\t\t  \t</div>\n\t\t\t\t</div> \n\t\t\t\t<div style=\"text-align: center;\">\n\t\t\t\t\t<button type=\"button\" class=\"layui-btn layui-btn-danger layui-btn-small\" id=\"confiSave\" lay-submit lay-filter=\"nodesave\">保存</button>\n\t\t\t\t\t<button type=\"button\" class=\"layui-btn layui-btn-primary layui-btn-small\" id=\"cancel\">关闭</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t\t<div class=\"template layui-hide\"></div>\n\t\t</div>\n\t\t<div id=\"addJob\" style=\"display: none;\">\n\t\t\t<form class=\"layui-form\" style=\"padding: 20px 40px 0 0;\">\n\t\t\t\t<div class=\"layui-form-item\">\n\t\t\t\t\t<label class=\"layui-form-label\">任务名称 <font>*</font></label>\n\t\t\t\t\t<div class=\"layui-input-block\">\n\t\t\t\t\t\t<input type=\"text\" name=\"name\" lay-verify=\"required|name\" placeholder=\"请输入任务名称\" class=\"layui-input\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"layui-form-item\">\n\t\t\t\t\t<label class=\"layui-form-label\">任务描述 <font>*</font></label>\n\t\t\t\t\t<div class=\"layui-input-block\">\n\t\t\t\t\t\t<textarea name=\"remark\" lay-verify=\"required|remark\" class=\"layui-textarea\" placeholder=\"请输入任务描述\"></textarea>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t    <button class=\"layui-addJob layui-hide\" lay-submit=\"\" lay-filter=\"addJob\">submit</button>\n\t\t\t    <button class=\"layui-reset layui-hide\" type=\"reset\">reset</button>\n\t\t\t</form>\n\t\t</div>\n\t</div>\n</body>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/analytics.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/jquery.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/util.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/schema.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/themes.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/layui/dist/layui.js\" js></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/dmp/pub/pub.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/dmp/index/flow/flow.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/collaboration.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.core.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/export.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.methods.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.events.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.ui.js\"></script>\n</html>"
  },
  {
    "path": "static/flow-editor/demo/html/index/flow/flowLog.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n\t<title>任务流程图</title>\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/layui/dist/css/layui.css\" />\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../css/font-awesome/css/font-awesome.min.css\" />\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/plugin/flow/global.css\" type=\"text/css\">\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/plugin/flow/designer.css\">\n\t<link type=\"text/css\" rel=\"stylesheet\" href=\"../../../js/plugin/flow/ui.css\">\n</head>\n\n<body>\n\t<canvas id=\"support_canvas\" style=\"display: none;\"></canvas>\n\t<script type=\"text/javascript\">\n\t\tif(!document.getElementById(\"support_canvas\").getContext) {\n\t\t\tUI.showTip('您的浏览器不支持canvas特性，请使用谷歌或火狐浏览器。');\n\t\t}\n\t</script>\n\t<div id=\"designer\" class=\"layui-edit layui-log\">\n\t\t<div class=\"flow-tool\">\n\t\t\t<div class=\"first\"><b>组件</b></div>\n\t\t\t<div class=\"middle\">\n\t\t\t\t<a class=\"save\" href=\"#\" data-click=\"addJob\"><i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> 新建</a>\n\t\t\t\t<a class=\"test\" href=\"#\" data-click=\"testJob\"><i class=\"fa fa-play\" aria-hidden=\"true\"></i> 测试</a>\n\t\t\t\t<a class=\"down\" href=\"#\" data-click=\"downJob\"><i class=\"fa fa-cloud-download\" aria-hidden=\"true\"></i> 下载</a>\n\t\t\t\t<a class=\"name\" href=\"#\"></a>\n\t\t\t\t<a class=\"time\" href=\"#\"></a>\n\t\t\t\t<a class=\"plus\" href=\"#\"><i class=\"fa fa-search-plus\" aria-hidden=\"true\"></i> 放大</a>\t\t\t\t\n\t\t\t\t<a class=\"minus\" href=\"#\"><i class=\"fa fa-search-minus\" aria-hidden=\"true\"></i> 缩小</a>\n\t\t\t</div>\n\t\t\t<div class=\"last\"><b>组件属性</b></div>\n\t\t</div>\n\t\t<div id=\"shape_panel\" class=\"layout\" style=\"height: calc(100%);\"></div>\n\t\t<div id=\"designer_viewport\">\n\t\t\t<div id=\"designer_layout\" class=\"layout\">\n\t\t\t\t<div id=\"canvas_container\" style=\"cursor: default;\">\n\t\t\t\t\t<div id=\"designer_canvas\" style=\"background-color: rgb(48, 242, 242);\">\n\t\t\t\t\t\t<ul id=\"designer_contextmenu\" class=\"menu list options_menu\">\n\t\t\t\t\t\t\t<li ac=\"log\">\n\t\t\t\t\t\t\t\t<div class=\"ico fa fa-file-text\"></div>查看日志<div class=\"extend\"></div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"shape_img_container\"></div>\n\t\t\t\t<div id=\"layout_block\"></div>\n\t\t\t</div>\n\t\t\t\n\t\t\t<div id=\"dock\" style=\"right: 9px;\">\n\t\t\t\t<div class=\"dock_header\"></div>\n\t\t\t\t<div class=\"dock_buttons\">\n\t\t\t\t\t<div id=\"dock_btn_navigator\" title=\"导航\" disabletitle=\"true\" class=\"toolbar_button\" onclick=\"Dock.showView(&#39;navigator&#39;, true)\">\n\t\t\t\t\t\t<div class=\"ico ico_dock_nav\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"navigation_view\" class=\"dock_view dock_view_navigator\" style=\"right: 45px; display: none;\">\n\t\t\t\t<div class=\"dock_view_header\">导航\n\t\t\t\t\t<div class=\"ico ico_dock_collapse\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"navigation_bounding\">\n\t\t\t\t\t<div class=\"navigation_view_container\">\n\t\t\t\t\t\t<canvas id=\"navigation_canvas\" width=\"120px\" height=\"160px\"></canvas>\n\t\t\t\t\t\t<div id=\"navigation_eye\" style=\"left: -1px; top: -1px; width: 0px; height: 0px;\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"dock_devider\" style=\"margin: 0px 10px\"></div>\n\t\t\t\t<div class=\"navigation_view_bar\">缩放：\n\t\t\t\t\t<div id=\"dock_zoom\" class=\"spinner active\" min=\"50\" max=\"200\" old=\"50%\">\n\t\t\t\t\t\t<div class=\"spinner_input\"><input></div>\n\t\t\t\t\t\t<div class=\"buttons\">\n\t\t\t\t\t\t\t<div class=\"spinner_up\"></div>\n\t\t\t\t\t\t\t<div class=\"spinner_down\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"configure\">\n\t\t\t<form class=\"layui-form\">\n\t\t\t\t<div class=\"layui-tab layui-tab-brief\" style=\"margin: 0;\">\n\t\t\t\t  \t<ul class=\"layui-tab-title\">\n\t\t\t\t\t    <li class=\"layui-this\" style=\"width: 40%;\">配置</li>\n\t\t\t\t\t    <li style=\"width: 35%;\">描述</li>\n\t\t\t\t  \t</ul>\n\t\t\t\t  \t<div class=\"layui-tab-content\">\n\t\t\t\t\t    <div class=\"layui-tab-item layui-show\"></div>\n\t\t\t\t\t    <div class=\"layui-tab-item\">\n\t\t\t\t\t    \t<input type=\"hidden\" name=\"nodeId\" class=\"layui-hide\" />\n\t\t\t\t\t    \t<textarea name=\"remark\" lay-verify=\"remark\" style=\"height: 280px;\" class=\"layui-textarea\" placeholder=\"请描述组件涉及的业务\"></textarea>\n\t\t\t\t\t    </div>\n\t\t\t\t  \t</div>\n\t\t\t\t  \t<div class=\"layui-hide-div\"></div>\n\t\t\t\t</div> \n\t\t\t\t<div style=\"text-align: center;\">\n\t\t\t\t\t<button type=\"button\" class=\"layui-btn layui-btn-primary layui-btn-small\" id=\"cancel\">关闭</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t\t<div class=\"template layui-hide\"></div>\n\t\t</div>\n\t\t<div id=\"addJob\" style=\"display: none;\">\n\t\t\t<form class=\"layui-form\" style=\"padding: 20px 40px 0 0;\">\n\t\t\t\t<div class=\"layui-form-item\">\n\t\t\t\t\t<label class=\"layui-form-label\">任务名称 <font>*</font></label>\n\t\t\t\t\t<div class=\"layui-input-block\">\n\t\t\t\t\t\t<input type=\"text\" name=\"name\" lay-verify=\"required|name\" placeholder=\"请输入任务名称\" class=\"layui-input\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"layui-form-item\">\n\t\t\t\t\t<label class=\"layui-form-label\">任务描述 <font>*</font></label>\n\t\t\t\t\t<div class=\"layui-input-block\">\n\t\t\t\t\t\t<textarea name=\"remark\" lay-verify=\"required|remark\" class=\"layui-textarea\" placeholder=\"请输入任务描述\"></textarea>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t    <button class=\"layui-reset layui-hide\" type=\"reset\">reset</button>\n\t\t\t</form>\n\t\t</div>\n\t\t<div id=\"log-demo\" class=\"layui-hide\">\n\t\t\t2017-10-11 15:03:19 [com.xxl.job.core.thread.JobThread]-[run]-[117]-[Thread-12] \n----------- xxl-job job execute start -----------\n----------- Params:[123] 2017-10-11 15:03:19 [com.xxl.job.executor.service.jobhandler.DemoJobHandler]-[execute]-[29]-[Thread-12] XXL-JOB, Hello World. 2017-10-11 15:03:19 [com.xxl.job.executor.service.jobhandler.DemoJobHandler]-[execute]-[32]-[Thread-12] beat at:0 2017-10-11 15:03:21 [com.xxl.job.executor.service.jobhandler.DemoJobHandler]-[execute]-[32]-[Thread-12] beat at:1 2017-10-11 15:03:23 [com.xxl.job.executor.service.jobhandler.DemoJobHandler]-[execute]-[32]-[Thread-12] beat at:2 2017-10-11 15:03:25 [com.xxl.job.executor.service.jobhandler.DemoJobHandler]-[execute]-[32]-[Thread-12] beat at:3 2017-10-11 15:03:27 [com.xxl.job.executor.service.jobhandler.DemoJobHandler]-[execute]-[32]-[Thread-12] beat at:4 2017-10-11 15:03:29 [com.xxl.job.core.thread.JobThread]-[run]-[124]-[Thread-12] \n----------- xxl-job job execute end(finish) -----------\n----------- ReturnT:ReturnT [code=200, msg=null, content=null]\n\t\t</div>\n\t</div>\n</body>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/analytics.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/jquery.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/util.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/schema.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/themes.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/layui/dist/layui.js\" js></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/dmp/pub/pub.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/dmp/index/flow/flow.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/collaboration.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.core.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/export.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.methods.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.events.js\"></script>\n<script type=\"text/javascript\" charset=\"UTF-8\" src=\"../../../js/plugin/flow/designer.ui.js\"></script>\n</html>"
  },
  {
    "path": "static/flow-editor/demo/js/dmp/index/flow/flow.js",
    "content": "var chartId = 1\nvar definition = '';\nvar nodes = []\nvar role = 'owner';\nvar cateType = 'flow';\nvar userId = 'xxxx';\nvar userName = 'admin';\nvar time = '1505873895344';\nvar dock = 'metric';\nvar tutorial = false\nvar locale = 'zh';\nvar showToolbar = true\nvar cstatus = 'private';\nvar dateFormat = 'yyyy-MM-dd hh:mm';\nvar showCommentIco = true\nvar localRuntime = false\nvar chartVersion = 2\n\nvar categorys = {\n  'base': {\n  title: '基础字段',\nchild: [\n  {\n    name: 'input',\n    title: '单行文本',\n    icon: '<img class=\"icon\" src=\"../../../img/form-design/单行文本.png\" style=\"height: 15px;\">',\n    selected: ['control', 'query', 'rule', 'ruleSet', 'assign'],\n    status: 0,\n    fontStyle: {\n  fontFamily: '微软雅黑',\n  size: 13,\n  color: '255,255,255',\n  bold: false,\n  italic: false,\n  underline: false,\n  textAlign: 'center',\n  vAlign: 'middle',\n  orientation: 'vertical'\n},\n    lineStyle: {\n  lineWidth: 1,\n  lineColor: '228,75,78',\n  lineStyle: 'solid'\n},\n    fillStyle: {\n  type: 'solid',\n  color: '228,75,78'\n}\n  },\n  {\n    name: 'textarea',\n    title: '多行文本',\n    icon: '<img class=\"icon\" src=\"../../../img/form-design/多行文本.png\" style=\"height: 15px;\">',\n    selected: ['control', 'query', 'rule', 'ruleSet', 'assign'],\n    status: 0,\n    fontStyle: {\n  fontFamily: '微软雅黑',\n  size: 13,\n  color: '255,255,255',\n  bold: false,\n  italic: false,\n  underline: false,\n  textAlign: 'center',\n  vAlign: 'middle',\n  orientation: 'vertical'\n},\n    lineStyle: {\n  lineWidth: 1,\n  lineColor: '228,75,78',\n  lineStyle: 'solid'\n},\n    fillStyle: {\n  type: 'solid',\n  color: '228,75,78'\n}\n  },\n  {\n    name: 'number',\n    title: '数字文本框',\n    icon: '<img class=\"icon\" src=\"../../../img/form-design/计数标签.png\" style=\"height: 15px;\">',\n    selected: ['control', 'query', 'rule', 'ruleSet', 'assign'],\n    status: 0,\n    fontStyle: {\n  fontFamily: '微软雅黑',\n  size: 13,\n  color: '255,255,255',\n  bold: false,\n  italic: false,\n  underline: false,\n  textAlign: 'center',\n  vAlign: 'middle',\n  orientation: 'vertical'\n},\n    lineStyle: {\n  lineWidth: 1,\n  lineColor: '228,75,78',\n  lineStyle: 'solid'\n},\n    fillStyle: {\n  type: 'solid',\n  color: '228,75,78'\n}\n  },\n  {\n    name: 'radio',\n    title: '单选框组',\n    icon: '<img class=\"icon\" src=\"../../../img/form-design/单选框.png\" style=\"height: 15px;\">',\n    selected: ['control', 'query', 'rule', 'ruleSet', 'assign'],\n    status: 0,\n    fontStyle: {\n  fontFamily: '微软雅黑',\n  size: 13,\n  color: '255,255,255',\n  bold: false,\n  italic: false,\n  underline: false,\n  textAlign: 'center',\n  vAlign: 'middle',\n  orientation: 'vertical'\n},\n    lineStyle: {\n  lineWidth: 1,\n  lineColor: '228,75,78',\n  lineStyle: 'solid'\n},\n    fillStyle: {\n  type: 'solid',\n  color: '228,75,78'\n}\n  },\n  {\n    name: 'checkbox',\n    title: '多选框组',\n    icon: '<img class=\"icon\" src=\"../../../img/form-design/多选框.png\" style=\"height: 15px;\">',\n    selected: ['control', 'query', 'rule', 'ruleSet', 'assign'],\n    status: 0,\n    fontStyle: {\n  fontFamily: '微软雅黑',\n  size: 13,\n  color: '255,255,255',\n  bold: false,\n  italic: false,\n  underline: false,\n  textAlign: 'center',\n  vAlign: 'middle',\n  orientation: 'vertical'\n},\n    lineStyle: {\n  lineWidth: 1,\n  lineColor: '228,75,78',\n  lineStyle: 'solid'\n},\n    fillStyle: {\n  type: 'solid',\n  color: '228,75,78'\n}\n  },\n  {\n    name: 'dateTime',\n    title: '时间日期选择器',\n    icon: '<img class=\"icon\" src=\"../../../img/form-design/时间选择器.png\" style=\"height: 15px;\">',\n    selected: ['control', 'query', 'rule', 'ruleSet', 'assign'],\n    status: 0,\n    fontStyle: {\n  fontFamily: '微软雅黑',\n  size: 13,\n  color: '255,255,255',\n  bold: false,\n  italic: false,\n  underline: false,\n  textAlign: 'center',\n  vAlign: 'middle',\n  orientation: 'vertical'\n},\n    lineStyle: {\n  lineWidth: 1,\n  lineColor: '228,75,78',\n  lineStyle: 'solid'\n},\n    fillStyle: {\n  type: 'solid',\n  color: '228,75,78'\n}\n  },\n  {\n    name: 'select',\n    title: '下拉选择框',\n    icon: '<img class=\"icon\" src=\"../../../img/form-design/下拉选择.png\" style=\"height: 15px;\">',\n    selected: ['control', 'query', 'rule', 'ruleSet', 'assign'],\n    status: 0,\n    fontStyle: {\n  fontFamily: '微软雅黑',\n  size: 13,\n  color: '255,255,255',\n  bold: false,\n  italic: false,\n  underline: false,\n  textAlign: 'center',\n  vAlign: 'middle',\n  orientation: 'vertical'\n},\n    lineStyle: {\n  lineWidth: 1,\n  lineColor: '228,75,78',\n  lineStyle: 'solid'\n},\n    fillStyle: {\n  type: 'solid',\n  color: '228,75,78'\n}\n  },\n  {\n    name: 'switch',\n    title: '开关',\n    icon: '<img class=\"icon\" src=\"../../../img/form-design/开关.png\" style=\"height: 15px;\">',\n    selected: ['control', 'query', 'rule', 'ruleSet', 'assign'],\n    status: 0,\n    fontStyle: {\n  fontFamily: '微软雅黑',\n  size: 13,\n  color: '255,255,255',\n  bold: false,\n  italic: false,\n  underline: false,\n  textAlign: 'center',\n  vAlign: 'middle',\n  orientation: 'vertical'\n},\n    lineStyle: {\n  lineWidth: 1,\n  lineColor: '228,75,78',\n  lineStyle: 'solid'\n},\n    fillStyle: {\n  type: 'solid',\n  color: '228,75,78'\n}\n  }\n]\n},\n  'senior': {\n  title: '高级字段',\nchild: [\n  {\n    name: 'img',\n    title: '图片上传',\n    icon: '<img class=\"icon\" src=\"../../../img/form-design/图片上传.png\" style=\"height: 15px;\">',\n    selected: ['control', 'query', 'rule', 'ruleSet', 'assign'],\n    status: 0,\n    fontStyle: {\n  fontFamily: '微软雅黑',\n  size: 13,\n  color: '255,255,255',\n  bold: false,\n  italic: false,\n  underline: false,\n  textAlign: 'center',\n  vAlign: 'middle',\n  orientation: 'vertical'\n},\n    lineStyle: {\n  lineWidth: 1,\n  lineColor: '228,75,78',\n  lineStyle: 'solid'\n},\n    fillStyle: {\n  type: 'solid',\n  color: '228,75,78'\n}\n  }\n]\n},\n  'layout': {\n  title: '布局字段',\nchild: [\n  {\n    name: 'grid',\n    title: '栅格布局',\n    icon: '<img class=\"icon\" src=\"../../../img/form-design/布局.png\" style=\"height: 15px;\">',\n    selected: ['control', 'query', 'rule', 'ruleSet', 'assign'],\n    status: 0,\n    fontStyle: {\n  fontFamily: '微软雅黑',\n  size: 13,\n  color: '255,255,255',\n  bold: false,\n  italic: false,\n  underline: false,\n  textAlign: 'center',\n  vAlign: 'middle',\n  orientation: 'vertical'\n},\n    lineStyle: {\n  lineWidth: 1,\n  lineColor: '228,75,78',\n  lineStyle: 'solid'\n},\n    fillStyle: {\n  type: 'solid',\n  color: '228,75,78'\n}\n  }\n]\n}\n\n}\n\n$.each(categorys, function (k, v) {\n  Schema.addCategory({\n  name: k,\n  text: v.title,\n  dataAttributes: []\n})\n\t$.each(v.child, function () {\n  var key = this.name\n\t\tif (this.name === 'start') {\n  Schema.addShape({\n  name: this.name,\n  title: this.title,\n  category: k,\n  icon: this.icon,\n  selected: this.selected,\n  fontStyle: this.fontStyle,\n  lineStyle: this.lineStyle,\n  fillStyle: this.fillStyle,\n  props: { w: 150, h: 40 },\n  path: [{\n  actions: [{ action: 'move', x: 'Math.min(w,h)/2.5', y: '0' },\n\t\t\t\t\t{ action: 'line', x: 'w-Math.min(w,h)/2.5', y: '0' },\n\t\t\t\t\t{ action: 'curve', x1: 'w+Math.min(w,h)/2.5/2.5', y1: '0', x2: 'w+Math.min(w,h)/2.5/2.5', y2: 'h', x: 'w-Math.min(w,h)/2.5', y: 'h' },\n\t\t\t\t\t{ action: 'line', x: 'Math.min(w,h)/2.5', y: 'h' },\n\t\t\t\t\t{ action: 'curve', x1: '-Math.min(w,h)/2.5/2.5', y1: 'h', x2: '-Math.min(w,h)/2.5/2.5', y2: '0', x: 'Math.min(w,h)/2.5', y: '0' },\n\t\t\t\t\t{ action: 'close' }]\n}]\n})\n\t\t} else {\n  Schema.addShape({\n  name: this.name,\n  title: this.title,\n  category: k,\n  icon: this.icon,\n  selected: this.selected,\n  fontStyle: this.fontStyle,\n  lineStyle: this.lineStyle,\n  fillStyle: this.fillStyle,\n  props: { w: 150, h: 40 },\n  path: [{\n  actions: [{ action: 'move', x: 'Math.min(w,h)/5/5', y: '0' },\n\t\t\t\t\t{ action: 'line', x: 'w-Math.min(w,h)/5/5', y: '0' },\n\t\t\t\t\t{ action: 'curve', x1: 'w+Math.min(w,h)/5/5', y1: '0', x2: 'w+Math.min(w,h)/5/5', y2: 'h', x: 'w-Math.min(w,h)/5/5', y: 'h' },\n\t\t\t\t\t{ action: 'line', x: 'Math.min(w,h)/5/5', y: 'h' },\n\t\t\t\t\t{ action: 'curve', x1: '-Math.min(w,h)/5/5', y1: 'h', x2: '-Math.min(w,h)/5/5', y2: '0', x: 'Math.min(w,h)/5/5', y: '0' },\n\t\t\t\t\t{ action: 'close' }]\n}]\n})\n\t\t}\n\n  var temp = $('#configure .template')\n\t\tvar _div = temp.find('#temp_' + key)\n\t\tif (_div.length == 0 && this.formEL) {\n  temp.append('<div id=\"temp_' + key + '\"></div>')\n\t\t\t_div = temp.find('#temp_' + key)\n\t\t\t$.each(this.formEL, function () {\n  var require = ' <font>*</font>', required = 'required', tipHtml = '<i title_pos=\"left\" title=\"' + (this.tips || '') + '\" class=\"fa fa-question-circle\"></i>'\n\t\t\t\tif (this.hide) required = ''\n\t\t\t\tif (this.require == false) require = ''\n\t\t\t\tif (!this.tips) tipHtml = ''\n\n\t\t\t\tvar startHtml = '<div class=\"layui-form-item ' + this.name + '\">' + '<label class=\"layui-form-label\">' + this.title + require + '</label>' + '<div class=\"layui-input-block\">'\n\t\t\t\tvar endHtml = '</div></div>'\n\n\t\t\t\t//title=\"'+this.title+'\" \n\t\t\t\tif (this.type == 'select') {\n  _div.append(startHtml +\n\t\t\t\t\t\t'<select name=\"' + this.name + '\" lay-verify=\"' + required + '|' + this.name + '\" lay-filter=\"' + (this.filter || '') + '\"><option value=\"\">请选择...</option></select>' +\n\t\t\t\t\t\ttipHtml + endHtml)\n\t\t\t\t\tvar select = _div.find('select[name=\"' + this.name + '\"]')\n\t\t\t\t\tif (this.child)\n  {var nn = this.name;}\n  $.each(this.child, function () {\n  select.append('<option value=\"' + this.value + '\" xx=\"{{ d.' + nn + '==\\'' + this.value + '\\'?\\'selected\\':\\'\\' xx}}\">' + this.text + '</option>')\n\t\t\t\t\t})\n\t\t\t\t} else if (this.type == 'textarea') {\n  _div.append(startHtml +\n\t\t\t\t\t\t'<textarea name=\"' + this.name + '\" class=\"layui-textarea\" lay-verify=\"' + required + '|' + this.name + '\" placeholder=\"请输入' + this.title + '\" class=\"layui-input\">{{ d.' + this.name + '||\\'\\' }}</textarea>' +\n\t\t\t\t\t\ttipHtml + endHtml)\n\t\t\t\t} else {\n  var num = this.type\n\t\t\t\t\tif (this.type != 'number') num = ''\n\t\t\t\t\t_div.append(startHtml +\n\t\t\t\t\t\t'<input type=\"' + this.type + '\" name=\"' + this.name + '\" value=\"{{ d.' + this.name + '||\\'\\' }}\" lay-verify=\"' + required + '|' + (this.name + '|' + num) + '\" placeholder=\"请输入' + this.title + '\" class=\"layui-input\" />' +\n\t\t\t\t\t\ttipHtml + endHtml)\n\t\t\t\t}\n  if (this.hide) {\n  _div.find('.' + this.name).hide()\n\t\t\t\t}\n})\n\t\t}\n})\n})\n\n//把下面的layui的代码抽取出有用的出来\n$('a.plus').click(function () {\n  Designer.zoomIn()\n})\n$('a.minus').click(function () {\n  Designer.zoomOut()\n})\nsetTimeout(() => {\n\t// alert($(window).height())\n  $('#canvas_container').height($(window).height())\n}, 2000)\n\n//layui使用开始\n// layui.use(['layer', 'element', 'form', 'laytpl'], function () {\n// \tvar layer = layui.layer, el = layui.element, form = layui.form, $ = layui.jquery;\n// \tvar conf = $(\"#configure\"), cancel = conf.find('#cancel');\n// \t$('a.plus').click(Designer.zoomIn);\n// \t$('a.minus').click(Designer.zoomOut);\n\n// \tsetTimeout(() => {\n// \t\t// alert($(window).height())\n// \t\t$('#canvas_container').height($(window).height());\n// \t}, 1000);\n// \tif ($('.layui-edit').length > 0) {\n// \t\t$('#canvas_container').height($(window).height());\n// \t\tdefinition = localStorage['chart'];\n// \t}\n// \tif ($('.layui-log').length > 0) {\n// \t\t$('#shape_panel').hide();\n// \t\t$('a.time').html('时间：' + new Date().format('yyyy-MM-dd'));\n// \t\t$('#configure .layui-hide-div').show();\n// \t}\n// \t//ajax还原 \n// \tif (definition) {\n// \t\tconsole.log(\"definition\", definition)\n// \t\tDesigner.selectAll();\n// \t\tDesigner.op.removeShape();\n// \t\tDesigner.open(definition);\n// \t\tchartId = '1';//赋值jobId\n// \t\t//组件 data 绑定\n// \t}\n\n// \tvar active = {\n// \t\taddJob: function () {\n// \t\t\tvar addJob = function () {\n// \t\t\t\tvar _index;\n// \t\t\t\tlayer.open({\n// \t\t\t\t\ttype: 1,\n// \t\t\t\t\ttitle: '新建任务',\n// \t\t\t\t\toffset: 'auto',\n// \t\t\t\t\tarea: ['400px', '300px'],\n// \t\t\t\t\tcontent: $('#addJob'),\n// \t\t\t\t\tbtn: ['保存', '关闭'],\n// \t\t\t\t\tbtnAlign: 'c',\n// \t\t\t\t\tshade: 0,\n// \t\t\t\t\tmove: 0,\n// \t\t\t\t\tcloseBtn: 0,\n// \t\t\t\t\tsuccess: function (layero, index) {\n// \t\t\t\t\t\tlayero.find('.layui-reset').click();\n// \t\t\t\t\t\tform.render();\n// \t\t\t\t\t},\n// \t\t\t\t\tyes: function (index, layero) {\n// \t\t\t\t\t\t_index = index;\n// \t\t\t\t\t\tlayero.find('.layui-addJob').click();\n// \t\t\t\t\t},\n// \t\t\t\t\tbtn2: function (index, layero) {\n// \t\t\t\t\t\tlayer.close(index);\n// \t\t\t\t\t}\n// \t\t\t\t});\n// \t\t\t\tform.on('submit(addJob)', function (data) {\n// \t\t\t\t\tlayer.msg('新建任务成功!');\n// \t\t\t\t\t$('.middle a.name').html('名称：' + data.field.name);\n// \t\t\t\t\tlayer.close(_index);\n// \t\t\t\t\tchartId = 1;//_index;\n// \t\t\t\t\t$('#canvas_container').height($(window).height());\n// \t\t\t\t\treturn false;\n// \t\t\t\t});\n// \t\t\t}\n\n// \t\t\tif (!$.isEmptyObject(Model.define.elements)) {\n// \t\t\t\tlayer.open({\n// \t\t\t\t\ttype: 1,\n// \t\t\t\t\ttitle: '提示',\n// \t\t\t\t\toffset: 'auto',\n// \t\t\t\t\tcontent: '<div style=\"padding: 20px 50px;text-align: center;\">亲, 画布不为空, 清空画布吗?</div>',\n// \t\t\t\t\tbtn: ['清空', '保留'],\n// \t\t\t\t\tbtnAlign: 'c',\n// \t\t\t\t\tshade: 0,\n// \t\t\t\t\tmove: 0,\n// \t\t\t\t\tcloseBtn: 0,\n// \t\t\t\t\tyes: function (index, layero) {\n// \t\t\t\t\t\tDesigner.selectAll();\n// \t\t\t\t\t\tDesigner.op.removeShape();\n// \t\t\t\t\t\tlayer.close(index);\n// \t\t\t\t\t\taddJob();\n// \t\t\t\t\t},\n// \t\t\t\t\tbtn2: function (index, layero) {\n// \t\t\t\t\t\tlayer.close(index);\n// \t\t\t\t\t\taddJob();\n// \t\t\t\t\t}\n// \t\t\t\t});\n// \t\t\t} else {\n// \t\t\t\taddJob();\n// \t\t\t}\n// \t\t},\n// \t\ttestJob: function () {\n// \t\t\t//测试组件是否正常\n// \t\t\t//CLB.offline();\n// \t\t\tlocalStorage['chart'] = JSON.stringify(Model.define);\n// \t\t\tif (autoFn())\n// \t\t\t\tlayer.load(0, {\n// \t\t\t\t\tcontent: '测试中...', time: 3 * 1000, end: function () {\n// \t\t\t\t\t\tlayer.msg('测试成功')\n// \t\t\t\t\t}\n// \t\t\t\t});\n// \t\t},\n// \t\tdownJob: function () {\n// \t\t\t//CLB.offline();\n// \t\t\tlocalStorage['chart'] = JSON.stringify(Model.define);\n// \t\t\tlayer.load(0, {\n// \t\t\t\tcontent: '下载中...', time: 3 * 1000, end: function () {\n// \t\t\t\t\tlayer.msg('下载成功')\n// \t\t\t\t}\n// \t\t\t});\n// \t\t}\n// \t};\n\n// \t//自动校验\n// \tvar autoFn = function () {\n// \t\tnodes = [], definition = JSON.stringify(Model.define);\n// \t\tvar retFlag = true;\n// \t\tif (!chartId) {\n// \t\t\tlayer.msg('请先创建任务');\n// \t\t\treturn;\n// \t\t}\n// \t\t$.each(Model.define.elements, function (k, v) {\n// \t\t\tif (!retFlag) return retFlag;\n// \t\t\tif (!$('#' + k).hasClass('linker_box')) {\n// \t\t\t\tvar node = $('#' + k).data('node');\n// \t\t\t\tif (!node || !node.nodeId) {\n// \t\t\t\t\tretFlag = false;\n// \t\t\t\t\tlayer.msg('请双击【' + v.title + '】组件，配置对应的参数');\n// \t\t\t\t} else {\n// \t\t\t\t\tnodes.push(node);\n// \t\t\t\t}\n// \t\t\t}\n// \t\t});\n// \t\tif (!retFlag) return retFlag;\n// \t\tif (!definition || nodes.length == 0) {\n// \t\t\tlayer.msg('请拖动组件并且关联任务');\n// \t\t\treturn retFlag;\n// \t\t}\n// \t\treturn retFlag;\n// \t};\n\n// \t//check\n// \tform.on('select(fileSystem)', function (d) {\n// \t\tvar p = d.othis.parent().parent();\n// \t\tvar c2 = p.nextAll('.col2');\n// \t\tvar c3 = p.nextAll('.col3');\n// \t\tif (d.value == 'local') {\n// \t\t\tc2.find('[name=\"col2\"]').attr('lay-verify', 'col2');\n// \t\t\tc2.hide();\n// \t\t\tc3.find('[name=\"col3\"]').attr('lay-verify', 'required|col3');\n// \t\t\tc3.show();\n// \t\t} else {\n// \t\t\tc2.find('[name=\"col2\"]').attr('lay-verify', 'required|col2');\n// \t\t\tc2.show();\n// \t\t\tc3.find('[name=\"col3\"]').attr('lay-verify', 'col3');\n// \t\t\tc3.hide();\n// \t\t}\n// \t});\n// \tform.verify({\n// \t\tremark: function (value, item) {\n// \t\t\tif (!value) {\n// \t\t\t\tconf.find('.layui-tab-title li:last').click();\n// \t\t\t\treturn '描述信息不能为空';\n// \t\t\t}\n// \t\t}\n// \t});\n// \tform.on('submit(nodesave)', function (d) {\n// \t\tvar nodeId = d.field.nodeId;\n// \t\t$('#' + nodeId).find('.text_canvas').val(d.field.name);\n// \t\t$('#' + nodeId).data('node', d.field);\n// \t\tcancel.click();\n// \t});\n// \tcancel.unbind('click').bind('click', function () {\n// \t\tcancel.unbind('click.cancel');\n// \t\tconf.hide();\n// \t});\n// \t$('body').mousedown(function () {\n// \t\t$('.ui_tip_close').click();\n// \t});\n// \t$('a').on('click', function () {\n// \t\tvar othis = $(this), type = othis.data('click');\n// \t\tactive[type] ? active[type].call(this, othis) : '';\n// \t});\n// });\n\n//layui使用结束\n\nfunction nodeConf (node) {\n  var nodeId = node.id, data = $('#' + nodeId).data('node') || {}, conf = $('#configure')\n\tvar form = layui.form, laytpl = layui.laytpl\n\tvar temp = $('#temp_' + node.name).html()\n\ttemp = temp.replaceAll('xx=\"{{', '{{')\n\ttemp = temp.replaceAll('xx}}\"', '}}')\n\tif (node.title && !data.name) {\n  data.name = node.title\n\t}\n  $('#' + nodeId).find('.text_canvas').val(data.name)\n\n\tlaytpl(temp).render(data, function (html) {\n  conf.find('[name=\"nodeId\"').val(nodeId)\n\t\tconf.find('[name=\"remark\"').val(data.remark || '')\n\t\tconf.find('.layui-tab-content .layui-tab-item:eq(0)').html(html)\n\t\tform.render()\n\t\tconf.show()\n\t\tconf.find('.layui-tab-title li:first').click()\n\t})\n}\n\nfunction showMenu (m) {\n  if ($('.layui-log').length > 0) {\n  m.children().show()\n\t\tm.children('li[ac=log]').unbind('click').click(function () {\n  layer.open({\n  type: 1,\n  title: false,\n  offset: 'auto',\n  area: ['80%', '500px'],\n  content: '<pre class=\"layui-code layui-code-log\" lay-title=\"日志\"></pre>',\n  btn: '关闭',\n  btnAlign: 'c',\n  shade: 0.1,\n  move: 0,\n  shadeClose: true,\n  success: function () {\n  $('.layui-code-log').append($('#log-demo').html())\n\t\t\t\t\tlayui.use('code', function () {\n  layui.code({\n  title: '日志',\n  about: false\n})\n\t\t\t\t\t})\n\t\t\t\t}\n})\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "static/flow-editor/demo/js/dmp/index/index.js",
    "content": "layui.use(['layer','element'], function() {\n\tvar $ = layui.jquery, el = layui.element, layer = layui.layer;\n\tvar custom = $('.layui-body-custom');\n\tvar active = {\n\t\tresizeTab: function() {\n\t\t\tvar height = $(window).height() - 60;\n\t\t\tcustom.find('.layui-tab-title').css('cssText', 'height:'+height+'px !important;');\n\t\t\tcustom.find('.layui-tab-content').height(height);\n\t\t\tcustom.find('.layui-tab-content').find('iframe').height(height);\n\t\t},\n\t\tuserMsg: function(){\n\t\t\tcustom.find('.layui-user').click();\n\t\t},\n\t\tlogout: function(){\n\t\t\tlocation.href = '../../html/login/login.html';\n\t\t}\n\t}\n\t\n\tvar navFlag = false;\n\tel.on('nav(headNav)', function(elem) {\n\t\tnavFlag = true;\n\t\tvar othis = $(this), type = othis.data('click');\n\t\tif(!type){\n\t\t\tothis = othis.children('a');\n\t\t\ttype = othis.data('click');\n\t\t\tvar ref = othis.data('ref');\n\t\t\tcustom.find(ref).click();\n\t\t}\n\t\tactive[type] ? active[type].call(this, othis) : '';\n\t});\n\tel.on('tab(indexTab)', function(){\n\t\tif(!navFlag)\n\t\t\t$('.layui-layout-right .layui-this').removeClass('layui-this');\n\t\tnavFlag = false;\n\t});\n\t\n\tcustom.find('.layui-home').click();\n\t$(window).on('resize', active.resizeTab);\n\tactive.resizeTab();\n});\n\nfunction toHome(){\n\tconsole.log(123456)\n}\n"
  },
  {
    "path": "static/flow-editor/demo/js/dmp/pub/pub.js",
    "content": "\nString.prototype.replaceAll = function(o, n, i) {\n    if(!RegExp.prototype.isPrototypeOf(o)) {\n       return this.replace(new RegExp(o, (i ? \"gi\": \"g\")), n);\n    }else{\n        return this.replace(o, n);\n    }\n};"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/admin.html",
    "content": " \n \n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>layout 后台大布局 - Layui</title>\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n</head>\n<body class=\"layui-layout-body\">\n<div class=\"layui-layout layui-layout-admin\">\n  <div class=\"layui-header\">\n    <div class=\"layui-logo\">layui 后台布局</div>\n    <!-- 头部区域（可配合layui已有的水平导航） -->\n    <ul class=\"layui-nav layui-layout-left\">\n      <li class=\"layui-nav-item\"><a href=\"\">控制台</a></li>\n      <li class=\"layui-nav-item\"><a href=\"\">商品管理</a></li>\n      <li class=\"layui-nav-item\"><a href=\"\">用户</a></li>\n      <li class=\"layui-nav-item\">\n        <a href=\"javascript:;\">其它系统</a>\n        <dl class=\"layui-nav-child\">\n          <dd><a href=\"\">邮件管理</a></dd>\n          <dd><a href=\"\">消息管理</a></dd>\n          <dd><a href=\"\">授权管理</a></dd>\n        </dl>\n      </li>\n    </ul>\n    <ul class=\"layui-nav layui-layout-right\">\n      <li class=\"layui-nav-item\">\n        <a href=\"javascript:;\">\n          <img src=\"http://t.cn/RCzsdCq\" class=\"layui-nav-img\">\n          贤心\n        </a>\n        <dl class=\"layui-nav-child\">\n          <dd><a href=\"\">基本资料</a></dd>\n          <dd><a href=\"\">安全设置</a></dd>\n        </dl>\n      </li>\n      <li class=\"layui-nav-item\"><a href=\"\">退了</a></li>\n    </ul>\n  </div>\n  \n  <div class=\"layui-side layui-bg-black\">\n    <div class=\"layui-side-scroll\">\n      <!-- 左侧导航区域（可配合layui已有的垂直导航） -->\n      <ul class=\"layui-nav layui-nav-tree\"  lay-filter=\"test\">\n        <li class=\"layui-nav-item layui-nav-itemed\">\n          <a class=\"\" href=\"javascript:;\">所有商品</a>\n          <dl class=\"layui-nav-child\">\n            <dd><a href=\"javascript:;\">列表一</a></dd>\n            <dd><a href=\"javascript:;\">列表二</a></dd>\n            <dd><a href=\"javascript:;\">列表三</a></dd>\n            <dd><a href=\"\">超链接</a></dd>\n          </dl>\n        </li>\n        <li class=\"layui-nav-item\">\n          <a href=\"javascript:;\">解决方案</a>\n          <dl class=\"layui-nav-child\">\n            <dd><a href=\"javascript:;\">列表一</a></dd>\n            <dd><a href=\"javascript:;\">列表二</a></dd>\n            <dd><a href=\"\">超链接</a></dd>\n          </dl>\n        </li>\n        <li class=\"layui-nav-item\"><a href=\"\">云市场</a></li>\n        <li class=\"layui-nav-item\"><a href=\"\">发布商品</a></li>\n      </ul>\n    </div>\n  </div>\n  \n  <div class=\"layui-body\">\n    <!-- 内容主体区域 -->\n    <div style=\"padding: 15px;\">内容主体区域</div>\n  </div>\n  \n  <div class=\"layui-footer\">\n    <!-- 底部固定区域 -->\n    © layui.com - 底部固定区域\n  </div>\n</div>\n<script src=\"../src/layui.js\"></script>\n<script>\n//JavaScript代码区域\nlayui.use('element', function(){\n  var element = layui.element;\n  \n});\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/all.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>合并版使用 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../build/css/layui.css\">\n\n<style>\nbody{padding: 10px;}\n</style>\n</head>\n<body>\n\n<div id=\"demo1\"></div>\n<button class=\"layui-btn demo\" data-type=\"test\">测试弹出式Form</button>\n\n\n<script src=\"../dist/layui.all.js\"></script>\n<script>\n;!function(){\n  var $ = layui.jquery\n  ,layer = layui.layer\n  ,form = layui.form\n  ,laypage = layui.laypage;\n  \n  layer.ready(function(){\n    layer.msg('hello');\n  });\n  \n  laypage.render({\n    elem: 'demo1'\n    ,count: 100 //总页数\n  });\n  \n  \n  //触发事件\n  var active = {\n    test: function(){\n      layer.open({\n        type: 1\n        ,resize: false\n        ,content: ['<ul class=\"layui-form\" style=\"margin: 10px;\">'\n          ,'<li class=\"layui-form-item\">'\n            ,'<label class=\"layui-form-label\">邮箱激活</label>'\n            ,'<div class=\"layui-input-block\">'\n              ,'<select name=\"activate\">'\n                ,'<option value=\"0\">未激活</option>'\n                ,'<option value=\"1\">已激活</option>'\n              ,'<select>'\n            ,'</div>'\n          ,'</li>'\n          ,'<li class=\"layui-form-item\" style=\"text-align:center;\">'\n            ,'<button type=\"submit\" lay-submit lay-filter=\"*\" class=\"layui-btn\">提交</button>'\n          ,'</li>'\n        ,'</ul>'].join('')\n        ,success: function(layero){\n          layero.find('.layui-layer-content').css('overflow', 'visible');\n          \n          form.render().on('submit(*)', function(data){\n            layer.msg(JSON.stringify(data.field));\n          });\n        }\n      });\n    }\n  };\n  $('.demo').on('click', function(){\n    var type = $(this).data('type');\n    active[type] ? active[type].call(this) : '';\n  });\n}();\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/button.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n  <title>按钮 - layui</title>\n  <meta name=\"renderer\" content=\"webkit\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n  <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\"> \n  <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n  <meta name=\"format-detection\" content=\"telephone=no\">\n\n  <link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 10px;}\n</style>\n</head>\n<body>\n\n\n<span>按钮色系：</span>\n\n<a href=\"\" class=\"layui-btn layui-btn-primary\">原始按钮</a>\n<a href=\"\" class=\"layui-btn\">默认按钮</a>\n<button class=\"layui-btn layui-btn-normal\">百搭按钮</button>\n<button class=\"layui-btn layui-btn-warm\">暖色按钮</button>\n<button class=\"layui-btn layui-btn-danger\">警告按钮</button>\n<button class=\"layui-btn layui-btn-disabled\">禁用按钮</button>\n\n<br><br>\n\n<span>按钮图标：</span>\n\n<button class=\"layui-btn\"><i class=\"layui-icon\">&#xe603;</i></button>\n<button class=\"layui-btn\"><i class=\"layui-icon\">&#xe602;</i></button>\n<button class=\"layui-btn\"><i class=\"layui-icon\">&#xe654;</i></button>\n<button class=\"layui-btn\"><i class=\"layui-icon\">&#xe642;</i></button>\n<button class=\"layui-btn\"><i class=\"layui-icon\">&#xe640;</i></button>\n<button class=\"layui-btn\"><i class=\"layui-icon\">&#xe641;</i></button>\n\n\n<br><br>\n\n<span>按钮尺寸：</span>\n\n\n<button class=\"layui-btn layui-btn-big\">大型按钮</button>\n<button class=\"layui-btn\">默认按钮</button>\n<button class=\"layui-btn layui-btn-small\">小型按钮</button>\n<button class=\"layui-btn layui-btn-mini\">迷你按钮</button>\n<button class=\"layui-btn layui-btn-primary layui-btn-big\">大型按钮</button>\n<button class=\"layui-btn layui-btn-primary\">默认按钮</button>\n<button class=\"layui-btn layui-btn-primary layui-btn-small\">小型按钮</button>\n<button class=\"layui-btn layui-btn-primary layui-btn-mini\">迷你按钮</button>\n\n<br><br>\n\n<span>按钮圆角：</span>\n\n<button class=\"layui-btn layui-btn-primary layui-btn-radius\">原始按钮</button>\n<button class=\"layui-btn layui-btn-radius\">默认按钮</button>\n<button class=\"layui-btn layui-btn-normal layui-btn-radius\">百搭按钮</button>\n<button class=\"layui-btn layui-btn-warm layui-btn-radius\">暖色按钮</button>\n<button class=\"layui-btn layui-btn-danger layui-btn-radius\">警告按钮</button>\n<button class=\"layui-btn layui-btn-disabled layui-btn-radius\">禁用按钮</button>\n\n<br><br>\n\n<span>按钮图文：</span>\n\n<button class=\"layui-btn layui-btn-big layui-btn-primary layui-btn-radius\">大型加圆角</button>\n<button class=\"layui-btn layui-btn-small layui-btn-normal\"><i class=\"layui-icon\">&#xe640;</i> 删除</button>\n<button class=\"layui-btn layui-btn-mini layui-btn-disabled\"><i class=\"layui-icon\">&#xe641;</i> 禁分享</button>\n\n<br><br>\n\n<span>按钮组：</span>\n\n<div class=\"layui-btn-group\">\n  <button class=\"layui-btn\">增加</button>\n  <button class=\"layui-btn \">编辑</button>\n  <button class=\"layui-btn\">删除</button>\n</div>\n\n<div class=\"layui-btn-group\">\n  <button class=\"layui-btn layui-btn-small\"><i class=\"layui-icon\">&#xe654;</i></button>\n  <button class=\"layui-btn layui-btn-small\"><i class=\"layui-icon\">&#xe642;</i></button>\n  <button class=\"layui-btn layui-btn-small\"><i class=\"layui-icon\">&#xe640;</i></button>\n  <button class=\"layui-btn layui-btn-small\"><i class=\"layui-icon\">&#xe602;</i></button>\n</div>\n\n<div class=\"layui-btn-group\">\n  <button class=\"layui-btn layui-btn-primary layui-btn-small\"><i class=\"layui-icon\">&#xe654;</i></button>\n  <button class=\"layui-btn layui-btn-primary layui-btn-small\"><i class=\"layui-icon\">&#xe642;</i></button>\n  <button class=\"layui-btn layui-btn-primary layui-btn-small\"><i class=\"layui-icon\">&#xe640;</i></button>\n  <button class=\"layui-btn layui-btn-primary layui-btn-small\"><i class=\"layui-icon\">&#xe602;</i></button>\n</div>\n\n<br><br><br>\n\n\n<script src=\"../src/layui.js\"></script>\n\n<script>\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/carousel.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>轮播组件 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 20px;}\n\n/* 为了区分效果 */\ndiv[carousel-item]>*{text-align: center; line-height: 280px; color: #fff;}\ndiv[carousel-item]>*:nth-child(2n){background-color: #009688;}\ndiv[carousel-item]>*:nth-child(2n+1){background-color: #5FB878;}\n\n#test2 div[carousel-item]>*{line-height: 120px;}\n</style>\n</head>\n<body>\n\n<div class=\"layui-carousel\" id=\"test1\" lay-filter=\"test1\">\n  <div carousel-item>\n    <div>条目1</div>\n    <div>条目2</div>\n    <div>条目3</div>\n    <div>条目4</div>\n  </div>\n</div>\n\n<br>\n\n<div class=\"layui-carousel\" id=\"test2\">\n  <div carousel-item>\n    <div>条目1</div>\n    <div>条目2</div>\n  </div>\n</div>\n\n<br>\n\n<div class=\"layui-carousel\" id=\"test3\">\n  <div carousel-item>\n    <div>条目1</div>\n    <div>条目2</div>\n    <div>条目3</div>\n    <div>条目4</div>\n  </div>\n</div>\n\n<br>\n\n<div class=\"layui-carousel\" id=\"test4\">\n  <div carousel-item>\n    <div><img src=\"http://s2.mogucdn.com/mlcdn/c45406/170714_2f9k4a3lgdfb80cie2g7aaba8l4ag_778x440.jpg_900x9999.v1c7E.70.webp\"></div>\n    <div><img src=\"http://s10.mogucdn.com/mlcdn/c45406/170710_3a6jf5f0j24bgcc3i3f36el2a2ckj_778x440.jpg_900x9999.v1c7E.70.webp\"></div>\n    <div><img src=\"http://s10.mogucdn.com/mlcdn/c45406/170714_5e8867724c4bfae8ka6l3a5274h0h_778x440.jpg_900x9999.v1c7E.70.webp\"></div>\n    <div><img src=\"http://s3.mogucdn.com/mlcdn/c45406/170609_83i077ikhb3023kch5gah5b2il9k3_778x440.jpg_900x9999.v1c7E.70.webp\"></div>\n    <div><img src=\"http://s10.mogucdn.com/mlcdn/c45406/170714_8d301bj507l9la1cjccbabg433beh_778x440.jpg_900x9999.v1c7E.70.webp\"></div>\n    <div><img src=\"http://s10.mogucdn.com/mlcdn/c45406/170710_4kaiaee4j39899b08abc685j2ehk1_778x440.jpg_900x9999.v1c7E.70.webp\"></div>\n    <div><img src=\"http://s10.mogucdn.com/mlcdn/c45406/170710_31a9gb225bga4agf4c9b25a8c8924_778x440.jpg_900x9999.v1c7E.70.webp\"></div>\n  </div>\n</div>\n\n\n<script src=\"../src/layui.js\"></script>\n<script>\nlayui.use('carousel', function(){\n  var carousel = layui.carousel;\n  \n  //建造实例\n  carousel.render({\n    elem: '#test1'\n    ,index: 2\n    //,full: true\n    ,arrow: 'always'\n    //,autoplay: false\n    //,indicator: 'outside'\n    //,trigger: 'hover'\n  });\n  \n  //事件\n  carousel.on('change(test1)', function(res){\n    console.log(res)\n  });\n\n  carousel.render({\n    elem: '#test2'\n    ,interval: 1800\n    //,full: true\n    ,anim: 'fade'\n    ,height: '120px'\n  });\n  \n  carousel.render({\n    elem: '#test3'\n    //,full: true\n    ,arrow: 'always'\n    //,autoplay: false\n    //,indicator: 'outside'\n    //,trigger: 'hover'\n    ,anim: 'updown'\n    //,full: true\n  });\n  \n  carousel.render({\n    elem: '#test4'\n    ,width: '778px'\n    ,height: '440px'\n    ,interval: 5000\n  });\n});\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/code.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>代码修饰器 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 50px 100px;}\npre{margin-bottom: 20px;}\n</style>\n</head>\n<body>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-height=\"300px\">\n//路由\nLAY.fn.router = function(hash){\n  var hashs = (hash || location.hash).replace(/^#/, '').split('/') || [];\n  var item, param = {\n    dir: []\n  };\n  for(var i = 0; i < hashs.length; i++){\n    item = hashs[i].split('=');\n    /^\\w+=/.test(hashs[i]) ? function(){\n      if(item[0] !== 'dir'){\n        param[item[0]] = item[1];\n      }\n    }() : param.dir.push(hashs[i]);\n    item = null;\n  }\n  return param;\n};\n</pre>\n\n<pre class=\"layui-code\" lay-skin=\"notepad\">\n//路由\nLAY.fn.router = function(hash){\n  var hashs = (hash || location.hash).replace(/^#/, '').split('/') || [];\n  var item, param = {\n    dir: []\n  };\n  for(var i = 0; i < hashs.length; i++){\n    item = hashs[i].split('=');\n    /^\\w+=/.test(hashs[i]) ? function(){\n      if(item[0] !== 'dir'){\n        param[item[0]] = item[1];\n      }\n    }() : param.dir.push(hashs[i]);\n    item = null;\n  }\n  return param;\n};\n</pre>\n\n<pre class=\"layui-code\">\nvar hashs = (hash || location.hash).replace(/^#/, '').split('/') || [];\nvar item, param = {\n  dir: []\n};\n<pre class=\"layui-code\">\n//代码中的代码\nvar hashs = (hash || location.hash).replace(/^#/, '').split('/') || [];\nvar item, param = {\n  dir: []\n};\n</pre>\n</pre>\n\n<pre class=\"layui-code\" lay-skin=\"notepad\">\n//路由\nLAY.fn.router = function(hash){\n  var hashs = (hash || location.hash).replace(/^#/, '').split('/') || [];\n  var item, param = {\n    dir: []\n  };\n  for(var i = 0; i < hashs.length; i++){\n    item = hashs[i].split('=');\n    /^\\w+=/.test(hashs[i]) ? function(){\n      if(item[0] !== 'dir'){\n        param[item[0]] = item[1];\n      }\n    }() : param.dir.push(hashs[i]);\n    item = null;\n  }\n  return param;\n};\n<pre class=\"layui-code\" lay-skin=\"notepad\">\n//代码中的代码\nvar hashs = (hash || location.hash).replace(/^#/, '').split('/') || [];\nvar item, param = {\n  dir: []\n};\n<pre class=\"layui-code\" lay-skin=\"notepad\">\n//代码中的代码\nvar hashs = (hash || location.hash).replace(/^#/, '').split('/') || [];\nvar item, param = {\n  dir: []\n};\n<pre class=\"layui-code\" lay-skin=\"notepad\">\n//代码中的代码\nvar hashs = (hash || location.hash).replace(/^#/, '').split('/') || [];\nvar item, param = {\n  dir: []\n};\n</pre>\n</pre>\n</pre>\n</pre>\n\n\n<pre class=\"layui-code\" lay-encode=\"true\">\n  <div>\n    123\n  </div>\n</pre>\n\n\n<script src=\"../src/layui.js\"></script>\n<script>\n\nlayui.use('code', function(){\n  layui.code();\n});\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/element.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>常用元素 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding:20px;}\n</style>\n</head>\n<body>\n\n<ul class=\"layui-timeline\">\n  <li class=\"layui-timeline-item\">\n    <i class=\"layui-icon layui-timeline-axis\">&#xe63f;</i>\n    <div class=\"layui-timeline-content layui-text\">\n      <h2 class=\"layui-timeline-title\">2.0.0</h2>\n      <p>杜甫的思想核心是儒家的仁政思想，他有“致君尧舜上，<em>再使风俗淳”的宏伟抱负</em>。杜甫虽然在世时名声并不显赫，但后来声名</p>\n      <ul>\n        <li>思想</li>\n        <li>虽然在</li>\n      </ul>\n      哈哈哈\n    </div>\n  </li>\n  <li class=\"layui-timeline-item\">\n    <i class=\"layui-icon layui-timeline-axis\">&#xe63f;</i>\n    <div class=\"layui-timeline-content layui-text\">\n      <h2 class=\"layui-timeline-title\">1.0.9</h2>\n      哈哈哈\n    </div>\n  </li>\n  <li class=\"layui-timeline-item\">\n    <i class=\"layui-icon layui-timeline-axis\">&#xe63f;</i>\n    <div class=\"layui-timeline-content layui-text\">\n      <div class=\"layui-timeline-title\">标题</div>\n      内容\n    </div>\n  </li>\n</ul>\n\n<hr>\n\n徽章：\n\n<span class=\"layui-badge-dot\"></span>\n<span class=\"layui-badge-dot layui-bg-orange\"></span>\n<span class=\"layui-badge-dot layui-bg-green\"></span>\n<span class=\"layui-badge-dot layui-bg-cyan\"></span>\n<span class=\"layui-badge-dot layui-bg-blue\"></span>\n<span class=\"layui-badge-dot layui-bg-black\"></span>\n<span class=\"layui-badge-dot layui-bg-gray\"></span>\n\n<span class=\"layui-badge\">6</span>\n<span class=\"layui-badge\">99</span>\n<span class=\"layui-badge\">61728</span>\n\n<span class=\"layui-badge\">赤</span>\n<span class=\"layui-badge layui-bg-orange\">橙</span>\n<span class=\"layui-badge layui-bg-green\">绿</span>\n<span class=\"layui-badge layui-bg-cyan\">青</span>\n<span class=\"layui-badge layui-bg-blue\">蓝</span>\n<span class=\"layui-badge layui-bg-black\">黑</span>\n<span class=\"layui-badge layui-bg-gray\">灰</span>\n\n<span class=\"layui-badge-rim\">Hot</span>\n\n<hr>\n\n<div class=\"layui-collapse\" lay-filter=\"test\" lay-accordion>\n  <div class=\"layui-colla-item\">\n    <h2 class=\"layui-colla-title\">杜甫</h2>\n    <div class=\"layui-colla-content layui-show\">\n      <p>杜甫的思想核心是儒家的仁政思想，他有“致君尧舜上，再使风俗淳”的宏伟抱负。杜甫虽然在世时名声并不显赫，但后来声名远播，对中国文学和日本文学都产生了深远的影响。杜甫共有约1500首诗歌被保留了下来，大多集于《杜工部集》。</p>\n    </div>\n  </div>\n  <div class=\"layui-colla-item\">\n    <h2 class=\"layui-colla-title\">李清照</h2>\n    <div class=\"layui-colla-content\">\n      <p>李清照出生于书香门第，早期生活优裕，其父李格非藏书甚富，她小时候就在良好的家庭环境中打下文学基础。出嫁后与夫赵明诚共同致力于书画金石的搜集整理。金兵入据中原时，流寓南方，境遇孤苦。所作词，前期多写其悠闲生活，后期多悲叹身世，情调感伤。形式上善用白描手法，自辟途径，语言清丽。</p>\n    </div>\n  </div>\n  <div class=\"layui-colla-item\">\n    <h2 class=\"layui-colla-title\">鲁迅</h2>\n    <div class=\"layui-colla-content\">\n      <p>鲁迅一生在文学创作、文学批评、思想研究、文学史研究、翻译、美术理论引进、基础科学介绍和古籍校勘与研究等多个领域具有重大贡献。他对于五四运动以后的中国社会思想文化发展具有重大影响，蜚声世界文坛，尤其在韩国、日本思想文化领域有极其重要的地位和影响，被誉为“二十世纪东亚文化地图上占最大领土的作家”。</p>\n    </div>\n  </div>\n</div>\n\n<br><br>\n\n<div class=\"layui-progress\" lay-showPercent=\"true\">\n  <div class=\"layui-progress-bar\" lay-percent=\"0%\"></div>\n</div>\n\n<br>\n\n<div class=\"layui-progress\">\n  <div class=\"layui-progress-bar layui-bg-red\" lay-percent=\"20%\"></div>\n</div>\n<br>\n<div class=\"layui-progress\">\n  <div class=\"layui-progress-bar layui-bg-orange\" lay-percent=\"30%\"></div>\n</div>\n<br>\n<div class=\"layui-progress\">\n  <div class=\"layui-progress-bar layui-bg-green\" lay-percent=\"40%\"></div>\n</div>\n<br>\n<div class=\"layui-progress\">\n  <div class=\"layui-progress-bar layui-bg-blue\" lay-percent=\"50%\"></div>\n</div>\n<br>\n<div class=\"layui-progress\">\n  <div class=\"layui-progress-bar layui-bg-cyan\" lay-percent=\"60%\"></div>\n</div>\n<br>\n\n<div class=\"layui-progress layui-progress-big\" lay-filter=\"demo\" lay-showPercent=\"true\">\n  <div class=\"layui-progress-bar\" lay-percent=\"100%\"></div>\n</div>\n\n<br><br>\n\n<blockquote class=\"layui-elem-quote\">Layui正是你苦苦寻找的前端UI框架</blockquote>\n<blockquote class=\"layui-elem-quote layui-quote-nm\">Layui正是你苦苦寻找的前端UI框架Layui正是你苦苦寻找的前端UI框架Layui正是你苦苦寻找的前端UI框架Layui正是你苦苦寻找的前端UI框架Layui正是你苦苦寻找的前端UI框架</blockquote>\n\n<fieldset class=\"layui-elem-field\">\n  <legend>字段集区块 - 默认风格</legend>\n  <div class=\"layui-field-box\">\n    内容区域\n  </div>\n</fieldset>\n\n默认分割线\n<hr>\n \n赤色分割线\n<hr class=\"layui-bg-red\">\n \n橙色分割线\n<hr class=\"layui-bg-orange\">\n \n墨绿分割线\n<hr class=\"layui-bg-green\">\n \n青色分割线\n<hr class=\"layui-bg-cyan\">\n \n蓝色分割线\n<hr class=\"layui-bg-blue\">\n \n黑色分割线\n<hr class=\"layui-bg-black\">\n \n灰色分割线\n<hr class=\"layui-bg-gray\">\n\n<br><br>\n\n<ul class=\"layui-nav\">\n  <li class=\"layui-nav-item\"><a href=\"\">最新活动</a></li>\n  <li class=\"layui-nav-item layui-this\">\n    <a href=\"javascript:;\">产品</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"javascript:;\">选项1</a></dd>\n      <dd><a href=\"javascript:;\">选项2</a></dd>\n      <dd><a href=\"\">选项3</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\"><a href=\"\">大数据<span class=\"layui-badge-dot\"></span></a></li>\n  <li class=\"layui-nav-item\">\n    <a href=\"javascript:;\">解决方案</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"\">移动模块</a></dd>\n      <dd class=\"layui-this\"><a href=\"\">后台模版</a></dd>\n      <dd><a href=\"\">电商平台</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\"><a href=\"\">社区</a></li>\n  <li class=\"layui-nav-item\">\n    <a href=\"\"><img src=\"http://t.cn/RCzsdCq\" class=\"layui-nav-img\">我</a>\n  </li>\n</ul>\n\n<br>\n\n<ul class=\"layui-nav layui-bg-cyan\">\n  <li class=\"layui-nav-item\"><a href=\"\">最新活动</a></li>\n  <li class=\"layui-nav-item layui-this\">\n    <a href=\"javascript:;\">产品</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"\">选项1</a></dd>\n      <dd><a href=\"\">选项2</a></dd>\n      <dd><a href=\"\">选项3</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\"><a href=\"\">大数据</a></li>\n  <li class=\"layui-nav-item\">\n    <a href=\"javascript:;\">解决方案</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"\">移动模块</a></dd>\n      <dd class=\"layui-this\"><a href=\"\">后台模版</a></dd>\n      <dd><a href=\"\">电商平台</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\"><a href=\"\">社区</a></li>\n</ul>\n\n<br>\n\n<ul class=\"layui-nav layui-bg-green\">\n  <li class=\"layui-nav-item\"><a href=\"\">最新活动</a></li>\n  <li class=\"layui-nav-item layui-this\">\n    <a href=\"javascript:;\">产品</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"\">选项1</a></dd>\n      <dd><a href=\"\">选项2</a></dd>\n      <dd><a href=\"\">选项3</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\"><a href=\"\">大数据</a></li>\n  <li class=\"layui-nav-item\">\n    <a href=\"javascript:;\">解决方案</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"\">移动模块</a></dd>\n      <dd class=\"layui-this\"><a href=\"\">后台模版</a></dd>\n      <dd><a href=\"\">电商平台</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\"><a href=\"\">社区</a></li>\n</ul>\n\n<br>\n\n<ul class=\"layui-nav layui-bg-blue\">\n  <li class=\"layui-nav-item\"><a href=\"\">最新活动</a></li>\n  <li class=\"layui-nav-item layui-this\">\n    <a href=\"javascript:;\">产品</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"\">选项1</a></dd>\n      <dd><a href=\"\">选项2</a></dd>\n      <dd><a href=\"\">选项3</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\"><a href=\"\">大数据</a></li>\n  <li class=\"layui-nav-item\">\n    <a href=\"javascript:;\">解决方案</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"\">移动模块</a></dd>\n      <dd class=\"layui-this\"><a href=\"\">后台模版</a></dd>\n      <dd><a href=\"\">电商平台</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\"><a href=\"\">社区</a></li>\n</ul>\n\n<br><br>\n\n<ul class=\"layui-nav layui-nav-tree\"  lay-filter=\"test\">\n  <li class=\"layui-nav-item layui-nav-itemed\">\n    <a class=\"\" href=\"javascript:;\">产品</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"javascript:;\">移动模块</a></dd>\n      <dd><a href=\"javascript:;\">后台模版</a></dd>\n      <dd><a href=\"javascript:;\">电商平台</a></dd>\n      <dd><a href=\"\">跳转菜单</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\">\n    <a href=\"javascript:;\">解决方案</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"javascript:;\">移动模块</a></dd>\n      <dd><a href=\"javascript:;\">后台模版</a></dd>\n      <dd><a href=\"\">电商平台</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\"><a href=\"\">云市场</a></li>\n  <li class=\"layui-nav-item\"><a href=\"\">社区</a></li>\n</ul>\n\n<br><br>\n\n<ul class=\"layui-nav layui-bg-cyan layui-nav-tree\"  lay-filter=\"test\">\n  <li class=\"layui-nav-item layui-nav-itemed\">\n    <a class=\"\" href=\"javascript:;\">产品</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"javascript:;\">移动模块</a></dd>\n      <dd><a href=\"javascript:;\">后台模版</a></dd>\n      <dd><a href=\"javascript:;\">电商平台</a></dd>\n      <dd><a href=\"\">跳转菜单</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\">\n    <a href=\"javascript:;\">解决方案</a>\n    <dl class=\"layui-nav-child\">\n      <dd><a href=\"javascript:;\">移动模块</a></dd>\n      <dd><a href=\"javascript:;\">后台模版</a></dd>\n      <dd><a href=\"\">电商平台</a></dd>\n    </dl>\n  </li>\n  <li class=\"layui-nav-item\"><a href=\"\">云市场</a></li>\n  <li class=\"layui-nav-item\"><a href=\"\">社区</a></li>\n</ul>\n\n\n<br><br>\n\n<span class=\"layui-breadcrumb\">\n  <a href=\"\">首页</a>\n  <a href=\"\">国际新闻</a>\n  <a href=\"\">亚太地区</a>\n  <a><cite>正文</cite></a>\n</span>\n\n<br><br>\n\n<span class=\"layui-breadcrumb\" lay-separator=\"|\">\n  <a href=\"\">娱乐</a>\n  <a href=\"\">八卦</a>\n  <a href=\"\">体育</a>\n  <a href=\"\">搞笑</a>\n  <a href=\"\">视频</a>\n  <a href=\"\">游戏</a>\n  <a href=\"\">综艺</a>\n</span>\n\n<br><br>\n\n<div class=\"layui-tab\" lay-filter=\"tabDemo\" lay-allowClose=\"true\">\n  <ul class=\"layui-tab-title\">\n    <li class=\"layui-this\" lay-id=\"1\">标题1</li>\n    <li lay-id=\"2\">标题2</li>\n    <li lay-id=\"3\">标题3</li>\n    <li lay-id=\"4\">标题4</li>\n    <li lay-id=\"5\">标题5</li>\n  </ul>\n  <div class=\"layui-tab-content\">\n    <div class=\"layui-tab-item layui-show\">1</div>\n    <div class=\"layui-tab-item\">2</div>\n    <div class=\"layui-tab-item\">3</div>\n    <div class=\"layui-tab-item\">4</div>\n    <div class=\"layui-tab-item\">5</div>\n  </div>\n</div>\n\n<button class=\"layui-btn\" onclick=\"layui.element.tabChange('tabDemo', 3)\">手工切换到“标题3”</button>\n<button class=\"layui-btn\" onclick=\"layui.element.tabAdd('tabDemo', {title:'新标题', content:'新内容', id: +new Date})\">添加Tab</button>\n<button class=\"layui-btn\" onclick=\"layui.element.tabDelete('tabDemo', 4)\">删除“标题4”</button>\n\n<div class=\"layui-tab layui-tab-brief\">\n  <ul class=\"layui-tab-title\">\n    <li class=\"layui-this\">标题1</li>\n    <li>标题2</li>\n    <li>标题3</li>\n    <li>标题4</li>\n    <li>标题5</li>\n    <li>标题6</li>\n  </ul>\n</div>\n\n<div class=\"layui-inline\">\n  <div class=\"layui-tab layui-tab-card\">\n    <ul class=\"layui-tab-title\">\n      <li class=\"layui-this\">标题一</li>\n      <li>标题2</li>\n      <li>标题3</li>\n      <li>标题4</li>\n      <li>标题5</li>\n      <li>标题6</li>\n    </ul>\n    <div class=\"layui-tab-content\">\n      <div class=\"layui-tab-item layui-show\">\n        <div class=\"layui-form\">\n          <select>\n            <option>1</option>\n            <option>2</option>\n            <option>3</option>\n            <option>4</option>\n            <option>5</option>\n            <option>6</option>\n          </select>\n        </div>\n      </div>\n      <div class=\"layui-tab-item\">2</div>\n      <div class=\"layui-tab-item\">3</div>\n      <div class=\"layui-tab-item\">4</div>\n      <div class=\"layui-tab-item\">5</div>\n      <div class=\"layui-tab-item\">6</div>\n    </div>\n  </div>\n</div>\n\n<div class=\"layui-tab\" lay-filter=\"test\" lay-allowClose=\"true\">\n  <ul class=\"layui-tab-title\">\n    <li class=\"layui-this\">标题1</li>\n    <li>标题2</li>\n    <li>标题3</li>\n    <li>标题4</li>\n    <li>标题5</li>\n    <li>标题6</li>\n    <li>标题7</li>\n    <li>标题8</li>\n  </ul>\n</div>\n\n\n\n<script src=\"../src/layui.js\"></script>\n<script>\n\nlayui.use(['element', 'form'], function(){\n  var element = layui.element;\n  \n  element.on('tab(test)', function(data){\n    console.log(this, data);\n  });\n  \n  element.on('nav(test)', function(elem){\n    console.log(elem)\n  });\n  \n  element.on('collapse(test)', function(data){\n    console.log(data);\n  });\n});\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/extend.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>自定义模块 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\n\n</style>\n</head>\n<body>\n\n\n\n<script src=\"../src/layui.js\"></script>\n<script>\nlayui.config({\n  base: './js/'\n}).extend({\n  index: 'index'\n  ,test: 'child/test'\n}).use('test');\n\nlayui.use('index')\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/flow.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>流加载 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 15px;}\n.flow-default{ font-size: 0;}\n.flow-default li{display: inline-block; margin-right: 10px; font-size: 14px; width: 48%;  margin-bottom: 10px; height: 200px; line-height: 200px; text-align: center; background-color: #eee;}\nimg{width: 500px; height: 300px;}\n.flow-default img{width: 100%; height: 100%;}\n</style>\n</head>\n<body>\n\n\n<ul class=\"flow-default\"></ul>\n\n\n<div class=\"demo\" style=\"height: 200px; overflow: auto;\">\n  <img lay-src=\"http://s16.mogucdn.com/p2/160919/upload_493j665e50b0i0g8j61iie6f5aa5c_715x530.jpg\">\n  <img lay-src=\"http://s7.mogucdn.com/p2/160920/in_1icf55k51643icf2i1i06g897hjdj_715x530.jpg\">\n  <img lay-src=\"http://s10.mogucdn.com/p2/160918/oj_4hge1j47hl5ie0fljd6d07ha3kj2l_715x530.jpg\">\n  <img lay-src=\"http://s7.mogucdn.com/p2/160914/iz_2lcjk0lbl8la70448hj0jg0l8gde5_305x330.jpg\">\n  <img lay-src=\"http://s6.mogucdn.com/p2/160914/iz_5lc1cdg3j2hibl9ai99lg7c28k1fh_305x330.jpg\">\n  <img lay-src=\"http://s8.mogucdn.com/p1/160721/iz_ifqtszjqgazdsmtfhezdambqgyyde_305x330.jpg\">\n  <img lay-src=\"http://s18.mogucdn.com/p2/160919/upload_4dh1hfflhi031ll1akh49i5aeldjl_183x213.png\">\n  <img lay-src=\"http://s8.mogucdn.com/p2/160907/1dq_16e3b4d04ck34g1fb61d5llj47526_175x170.png\">\n  <img lay-src=\"http://s8.mogucdn.com/p2/160907/1dq_132fe83d4gi1jb6gehc8ibcl6944e_175x170.png\">\n</div>\n\n\n<script src=\"../src/layui.js\"></script>\n<script>\nlayui.use('flow', function(){\n  var flow = layui.flow;\n\n  flow.load({\n    elem: '.flow-default' //流加载容器\n    //,scrollElem: '.flow-default' //滚动条所在元素，默认document\n    //,isAuto: false\n    //,end: '没了'\n    ,isLazyimg: true\n    ,done: function(page, next){ //加载下一页\n      console.log(page)\n      setTimeout(function(){\n        var lis = [];\n        for(var i = 0; i < 6; i++){\n          lis.push('<li><img lay-src=\"http://s6.mogucdn.com/p2/160914/iz_5lc1cdg3j2hibl9ai99lg7c28k1fh_305x330.jpg?v='+ (page+i) +'\"></li>')\n        }\n        next(lis.join(''), page < 3);\n      }, 500);\n    }\n  });\n  \n  //按屏加载图片\n  flow.lazyimg({\n    elem: '.demo img'\n    ,scrollElem: '.demo'\n  });\n  \n});\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/form.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n  <title>表单模块 - layui</title>\n  <meta name=\"renderer\" content=\"webkit\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n  <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\"> \n  <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n  <meta name=\"format-detection\" content=\"telephone=no\">\n\n  <link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 10px;}\n</style>\n</head>\n<body>\n\n<form class=\"layui-form layui-form-pane1\" action=\"\">\n  <div class=\"layui-form-item\">\n    <label class=\"layui-form-label\">输入框</label>\n    <div class=\"layui-input-block\">\n      <input type=\"text\" name=\"title\" lay-verify=\"required|title\" required placeholder=\"请输入标题\" autocomplete=\"off\" class=\"layui-input\">\n    </div>\n  </div>\n  <div class=\"layui-form-item\">\n    <label class=\"layui-form-label\">手机</label>\n    <div class=\"layui-input-block\">\n      <input type=\"tel\" name=\"phone\" lay-verify=\"number\" autocomplete=\"off\" class=\"layui-input\">\n    </div>\n  </div>\n  <div class=\"layui-form-item\">\n    <label class=\"layui-form-label\">邮箱</label>\n    <div class=\"layui-input-block\">\n      <input type=\"email\" name=\"email\" lay-verify=\"email\" autocomplete=\"off\" class=\"layui-input\">\n    </div>\n  </div>\n  <div class=\"layui-form-item\">\n    <label class=\"layui-form-label\">密码</label>\n    <div class=\"layui-input-inline\">\n      <input type=\"password\" name=\"password\" lay-verify=\"pass\" placeholder=\"请输入密码\" autocomplete=\"off\" class=\"layui-input\">\n    </div>\n    <div class=\"layui-form-mid layui-word-aux\">请务必填写用户名</div>\n  </div>\n  <div class=\"layui-form-item\">\n    <div class=\"layui-inline\">\n      <label class=\"layui-form-label\">范围</label>\n      <div class=\"layui-input-inline\" style=\"width: 100px;\">\n        <input type=\"text\" name=\"price_min\" placeholder=\"￥\" autocomplete=\"off\" class=\"layui-input\">\n      </div>\n      <div class=\"layui-form-mid\">-</div>\n      <div class=\"layui-input-inline\" style=\"width: 100px;\">\n        <input type=\"text\" name=\"price_max\" placeholder=\"￥\" autocomplete=\"off\" class=\"layui-input\">\n      </div>\n    </div>\n    <div class=\"layui-inline\">\n      <label class=\"layui-form-label\">行内表单</label>\n      <div class=\"layui-input-block\">\n        <select name=\"quiz\">\n          <option value=\"\">请选择问题</option>\n          <option value=\"你工作的第一个城市\">你工作的第一个城市</option>\n          <option value=\"你的工号\" disabled>你的工号</option>\n          <option value=\"你最喜欢的老师\">你最喜欢的老师</option>\n        </select>\n      </div>\n    </div>\n    <div class=\"layui-inline\">\n      <label class=\"layui-form-label\">select分组</label>\n      <div class=\"layui-input-block\">\n        <select name=\"quiz\">\n          <option value=\"\">请选择问题</option>\n          <optgroup label=\"城市记忆\">\n            <option value=\"你工作的第一个城市\">你工作的第一个城市</option>\n          </optgroup>\n          <optgroup label=\"学生时代\">\n            <option value=\"你的工号\" disabled>你的工号</option>\n            <option value=\"你最喜欢的老师\">你最喜欢的老师</option>\n          </optgroup>\n        </select>\n      </div>\n    </div>\n  </div>\n  \n  <div class=\"layui-form-item\">\n    <label class=\"layui-form-label\">选择框</label>\n    <div class=\"layui-input-block\">\n      <select name=\"interest\" lay-filter=\"aihao\">\n        <option value=\"\"></option>\n        <option value=\"0\">写作</option>\n        <option value=\"1\" selected>阅读</option>\n        <option value=\"2\">游戏</option>\n        <option value=\"3\">音乐</option>\n        <option value=\"4\">旅行</option>\n      </select>\n    </div>\n  </div>\n  \n  <div class=\"layui-form-item\">\n    <label class=\"layui-form-label\">搜索选择框</label>\n    <div class=\"layui-input-inline\">\n      <select name=\"interest\" lay-filter=\"aihao\" lay-search>\n        <option value=\"\"></option>\n        <option value=\"0\">写作</option>\n        <option value=\"1\">阅读</option>\n        <option value=\"2\">游戏</option>\n        <option value=\"3\">音乐</option>\n        <option value=\"4\">旅行</option>\n        <option value=\"5\">读书</option>\n      </select>\n    </div>\n  </div>\n  \n  <div class=\"layui-form-item\" pane>\n    <label class=\"layui-form-label\">复选框</label>\n    <div class=\"layui-input-block\">\n      <input type=\"checkbox\" name=\"like[write]\" title=\"写作\">\n      <input type=\"checkbox\" name=\"like[read]\" title=\"阅读\">\n      <input type=\"checkbox\" name=\"like[game]\" title=\"游戏\" disabled>\n    </div>\n  </div>\n  <div class=\"layui-form-item\" pane>\n    <label class=\"layui-form-label\">原始复选框</label>\n    <div class=\"layui-input-block\">\n      <input type=\"checkbox\" name=\"like1[write]\" lay-skin=\"primary\" title=\"写作\">\n      <input type=\"checkbox\" name=\"like1[read]\" lay-skin=\"primary\" title=\"阅读\">\n      <input type=\"checkbox\" name=\"like1[game]\" lay-skin=\"primary\" title=\"游戏\" disabled>\n    </div>\n  </div>\n  <div class=\"layui-form-item\" pane>\n    <label class=\"layui-form-label\">开关关</label>\n    <div class=\"layui-input-block\">\n      <input type=\"checkbox\" name=\"close\" lay-skin=\"switch\" title=\"开关\"  disabled>\n    </div>\n  </div>\n  <div class=\"layui-form-item\" pane>\n    <label class=\"layui-form-label\">开关开</label>\n    <div class=\"layui-input-block\">\n      <input type=\"checkbox\" checked name=\"open\" lay-skin=\"switch\" lay-filter=\"switchTest\" lay-text=\"ON|OFF\">\n    </div>\n  </div>\n  <div class=\"layui-form-item\" pane>\n    <label class=\"layui-form-label\">单选框</label>\n    <div class=\"layui-input-block\">\n      <input type=\"radio\" name=\"sex\" value=\"男\" title=\"男\">\n      <input type=\"radio\" name=\"sex\" value=\"女\" title=\"女\" checked>\n      <input type=\"radio\" name=\"sex\" value=\"中型\" title=\"中\" disabled>\n    </div>\n  </div>\n  <div class=\"layui-form-item\" pane>\n    <label class=\"layui-form-label\">单选框</label>\n    <div class=\"layui-input-block\">\n      <input type=\"radio\" name=\"sex.id\" value=\"男\" title=\"男\">\n      <input type=\"radio\" name=\"sex.id\" value=\"女\" title=\"女\" checked>\n      <input type=\"radio\" name=\"sex.id\" value=\"中型\" title=\"中\">\n    </div>\n  </div>\n  <div class=\"layui-form-item layui-form-text\">\n    <label class=\"layui-form-label\">请填写描述</label>\n    <div class=\"layui-input-block\">\n      <textarea placeholder=\"请输入内容\" class=\"layui-textarea\"></textarea>\n    </div>\n  </div>\n  <div class=\"layui-form-item\">\n    <div class=\"layui-input-block\">\n      <button class=\"layui-btn\" lay-submit lay-filter=\"*\">立即提交</button>\n      <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n    </div>\n  </div>\n</form>\n\n<br><br><br>\n\n\n<script src=\"../src/layui.js\"></script>\n<!-- <script src=\"../build/lay/dest/layui.all.js\"></script> -->\n\n<script>\n\nlayui.use('form', function(){\n  var form = layui.form;\n  \n  //自定义验证规则\n  form.verify({\n    title: function(value){\n      if(value.length < 5){\n        return '标题也太短了吧';\n      }\n    }\n    ,pass: [/(.+){6,12}$/, '密码必须6到12位']\n  });\n\n  \n  //事件监听\n  form.on('select', function(data){\n    console.log(this);\n  })\n  \n  form.on('select(aihao)', function(data){\n    console.log(data);\n  });\n  \n  form.on('checkbox', function(data){\n    console.log(this.checked, data.elem.checked);\n  });\n  \n  form.on('switch', function(data){\n    console.log(data);\n  });\n  \n  form.on('radio', function(data){\n    console.log(data);\n  });\n  \n  //监听提交\n  form.on('submit(*)', function(data){\n    console.log(data)\n    return false;\n  });\n  \n});\n\n</script>\n\n\n<form id=\"test\">\n  <input type=\"radio\" value=\"girl\" disabled>\n  <input type=\"checkbox\" name=\"love[a]\">\n  <input type=\"checkbox\" name=\"love[b]\">\n  <input value=\"1\">\n  <select name=\"quiz\">\n    <option value=\"\">请选择问题</option>\n    <option disabled value=\"你工作的第一个城市\">你工作的第一个城市</option>\n    <option value=\"你的工号\">你的工号</option>\n    <option value=\"你最喜欢的老师\">你最喜欢的老师</option>\n  </select>\n  <button>Go</button>\n</form>\n<script>\nlayui.use('jquery', function(){\n  var $ = layui.jquery;\n  var submit = function(){\n    return false;\n  };\n  $('#test').on('submit', function(){\n     return false\n  });\n  $('#test').on('submit', function(){\n     return true\n  });\n});\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/js/child/test.js",
    "content": "\n\nlayui.define(function(exports){\n  \n  exports('test', {\n    title: '子目录模块加载'\n  })\n});"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/js/index.js",
    "content": "\n\nlayui.define(function(exports){\n  \n  exports('index', {\n    title: '模块入口'\n  });\n});"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/json/table/demo1.json",
    "content": "{\n  \"code\": 0\n  ,\"msg\": \"\"\n  ,\"count\": 8\n  ,\"data\": [{\n    \"id\": \"10001\"\n    ,\"username\": \"杜甫\"\n    ,\"email\": \"xianxin@layui.com\"\n    ,\"sex\": \"男\"\n    ,\"city\": \"浙江杭州\"\n    ,\"sign\": \"点击此处，显示更多。当内容超出时，点击单元格会自动显示更多内容。\"\n    ,\"experience\": \"7\"\n    ,\"ip\": \"192.168.0.8\"\n    ,\"logins\": 0\n    ,\"joinTime\": \"2016-10-14\"\n  }, {\n    \"id\": \"10002\"\n    ,\"username\": \"李白\"\n    ,\"email\": \"xianxin@layui.com\"\n    ,\"sex\": \"男\"\n    ,\"city\": \"浙江杭州\"\n    ,\"sign\": \"君不见，黄河之水天上来，奔流到海不复回。 君不见，高堂明镜悲白发，朝如青丝暮成雪。 人生得意须尽欢，莫使金樽空对月。 天生我材必有用，千金散尽还复来。 烹羊宰牛且为乐，会须一饮三百杯。 岑夫子，丹丘生，将进酒，杯莫停。 与君歌一曲，请君为我倾耳听。(倾耳听 一作：侧耳听) 钟鼓馔玉不足贵，但愿长醉不复醒。(不足贵 一作：何足贵；不复醒 一作：不愿醒/不用醒) 古来圣贤皆寂寞，惟有饮者留其名。(古来 一作：自古；惟 通：唯) 陈王昔时宴平乐，斗酒十千恣欢谑。 主人何为言少钱，径须沽取对君酌。 五花马，千金裘，呼儿将出换美酒，与尔同销万古愁。\"\n    ,\"experience\": \"9\"\n    ,\"ip\": \"192.168.0.8\"\n    ,\"logins\": \"106\"\n    ,\"joinTime\": \"2016-10-14\"\n    ,\"LAY_CHECKED\": true\n  }, {\n    \"id\": \"10003\"\n    ,\"username\": \"王勃\"\n    ,\"email\": \"xianxin@layui.com\"\n    ,\"sex\": \"男\"\n    ,\"city\": \"浙江杭州\"\n    ,\"sign\": \"人生恰似一场修行\"\n    ,\"experience\": \"8\"\n    ,\"ip\": \"192.168.0.8\"\n    ,\"logins\": \"106\"\n    ,\"joinTime\": \"2016-10-14\"\n  }, {\n    \"id\": \"10004\"\n    ,\"username\": \"李清照\"\n    ,\"email\": \"xianxin@layui.com\"\n    ,\"sex\": \"女\"\n    ,\"city\": \"浙江杭州\"\n    ,\"sign\": \"人生恰似一场修行\"\n    ,\"experience\": \"6\"\n    ,\"ip\": \"192.168.0.8\"\n    ,\"logins\": \"106\"\n    ,\"joinTime\": \"2016-10-14\"\n  }, {\n    \"id\": \"10005\"\n    ,\"username\": \"冰心\"\n    ,\"email\": \"xianxin@layui.com\"\n    ,\"sex\": \"女\"\n    ,\"city\": \"浙江杭州\"\n    ,\"sign\": \"人生恰似一场修行\"\n    ,\"experience\": \"64\"\n    ,\"ip\": \"192.168.0.8\"\n    ,\"logins\": \"106\"\n    ,\"joinTime\": \"2016-10-14\"\n  }, {\n    \"id\": \"10006\"\n    ,\"username\": \"贤心\"\n    ,\"email\": \"xianxin@layui.com\"\n    ,\"sex\": \"男\"\n    ,\"city\": \"浙江杭州\"\n    ,\"sign\": \"人生恰似一场修行\"\n    ,\"experience\": \"65\"\n    ,\"ip\": \"192.168.0.8\"\n    ,\"logins\": \"106\"\n    ,\"joinTime\": \"2016-10-14\"\n  }, {\n    \"id\": \"10007\"\n    ,\"username\": \"贤心\"\n    ,\"email\": \"xianxin@layui.com\"\n    ,\"sex\": \"男\"\n    ,\"city\": \"浙江杭州\"\n    ,\"sign\": \"人生恰似一场修行\"\n    ,\"experience\": \"49\"\n    ,\"ip\": \"192.168.0.8\"\n    ,\"logins\": \"106\"\n    ,\"joinTime\": \"2016-10-14\"\n  }, {\n    \"id\": \"10008\"\n    ,\"username\": \"贤心\"\n    ,\"email\": \"xianxin@layui.com\"\n    ,\"sex\": \"男\"\n    ,\"city\": \"浙江杭州\"\n    ,\"sign\": \"人生恰似一场修行\"\n    ,\"experience\": \"5\"\n    ,\"ip\": \"192.168.0.8\"\n    ,\"logins\": \"106\"\n    ,\"joinTime\": \"2016-10-14\"\n  }, {\n    \"id\": \"10009\"\n    ,\"username\": \"贤心\"\n    ,\"email\": \"xianxin@layui.com\"\n    ,\"sex\": \"男\"\n    ,\"city\": \"浙江杭州\"\n    ,\"sign\": \"人生恰似一场修行\"\n    ,\"experience\": \"49\"\n    ,\"ip\": \"192.168.0.8\"\n    ,\"logins\": \"106\"\n    ,\"joinTime\": \"2016-10-14\"\n  }, {\n    \"id\": \"10010\"\n    ,\"username\": \"贤心\"\n    ,\"email\": \"xianxin@layui.com\"\n    ,\"sex\": \"男\"\n    ,\"city\": \"浙江杭州\"\n    ,\"sign\": \"人生恰似一场修行\"\n    ,\"experience\": \"5\"\n    ,\"ip\": \"192.168.0.8\"\n    ,\"logins\": \"106\"\n    ,\"joinTime\": \"2016-10-14\"\n  }]\n}  "
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/json/table/demo2.json",
    "content": "{\n  \"code\": 0\n  ,\"msg\": \"\"\n  ,\"count\": 66\n  ,\"data\": [{\n    \"username\": \"张小三\"\n    ,\"amount\": 18\n    ,\"province\": \"浙江\"\n    ,\"city\": \"杭州\"\n    ,\"zone\": \"西湖区\"\n    ,\"street\": \"西溪街道\"\n    ,\"address\": \"西溪花园\"\n    ,\"house\": \"30栋1单元\"\n  }, {\n    \"username\": \"李小四\"\n    ,\"amount\": 39\n    ,\"province\": \"江苏\"\n    ,\"city\": \"苏州\"\n    ,\"zone\": \"姑苏区\"\n    ,\"street\": \"丝绸路\"\n    ,\"address\": \"天墅之城\"\n    ,\"house\": \"9幢2单元\"\n  }, {\n    \"username\": \"王小四\"\n    ,\"amount\": 8\n    ,\"province\": \"江西\"\n    ,\"city\": \"南昌\"\n    ,\"zone\": \"青山湖区\"\n    ,\"street\": \"艾溪湖办事处\"\n    ,\"address\": \"中兴和园\"\n    ,\"house\": \"1幢3单元\"\n  }, {\n    \"username\": \"赵小六\"\n    ,\"amount\": 16\n    ,\"province\": \"福建\"\n    ,\"city\": \"泉州\"\n    ,\"zone\": \"丰泽区\"\n    ,\"street\": \"南洋街道\"\n    ,\"address\": \"南洋村\"\n    ,\"house\": \"6幢1单元\"\n  }, {\n    \"username\": \"孙小七\"\n    ,\"amount\": 12\n    ,\"province\": \"湖北\"\n    ,\"city\": \"武汉\"\n    ,\"zone\": \"武昌区\"\n    ,\"street\": \"武昌大道\"\n    ,\"address\": \"两湖花园\"\n    ,\"house\": \"16幢2单元\"\n  }, {\n    \"username\": \"周小八\"\n    ,\"amount\": 11\n    ,\"province\": \"安徽\"\n    ,\"city\": \"黄山\"\n    ,\"zone\": \"黄山区\"\n    ,\"street\": \"汤口镇\"\n    ,\"address\": \"温泉村\"\n    ,\"house\": \"21号\"\n  }]\n}  "
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/json/upload/demoLayEdit.json",
    "content": "{\n  \"code\": 0\n  ,\"msg\": \"\"\n  ,\"data\": {\n    \"src\": \"http://tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg\"\n    ,\"title\": \"图片名称\"\n  }\n}"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/laydate.html",
    "content": " \n \n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"renderer\" content=\"webkit\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>日期模块 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 50px 100px;}\n.layui-inline{margin-right: 15px;}\n</style>\n</head>\n<body>\n\n日期时间范围选择：\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test1\">\n</div>\n\n<br><br><hr><br>\n\n日期选择器：\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test2\">\n</div>\n\n<br><br><hr><br>\n\n年选择器：\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test3\">\n</div>\n\n年月选择器：\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test4\">\n</div>\n\n时间时间器：\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test5\">\n</div>\n\n<br><br><hr><br>\n\n时间范围选择\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test55\">\n</div>\n\n自定义重要日：\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test555\">\n</div>\n\n<br><br><hr><br>\n\n\n同时绑定多个：\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input test-item\">\n</div>\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input test-item\">\n</div>\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input test-item\">\n</div>\n\n<br><br><hr><br>\n\n\n墨绿主题：\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test6-1\">\n</div>\n\n自定义头部背景色：\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test6-2\">\n</div>\n\n格子主题：\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test6-3\">\n</div>\n\n<br><br><hr><br>\n\n<button class=\"layui-btn\" id=\"test7\">其它元素触发</button>\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test6\">\n</div>\n\n<button class=\"layui-btn\" id=\"test9\">外部事件触发</button>\n<div class=\"layui-inline\">\n  <input type=\"text\" class=\"layui-input\" id=\"test8\">\n</div>\n\n<br><br><hr><br>\n直接嵌套在指定容器中：<br><br>\n<div class=\"layui-inline\" id=\"test10\"></div>\n<div class=\"layui-inline\" id=\"test11\" style=\"margin-left: 30px;\"></div>\n\n<script src=\"../src/layui.js\" charset=\"utf-8\"></script>\n<script>\nlayui.use('laydate', function(){\n  var laydate = layui.laydate;\n  \n  //双控件\n  laydate.render({\n    elem: '#test1' //指定元素\n    ,type: 'datetime'\n    ,trigger: 'click'\n    ,lang: 'en'\n    //,lang: 'en'\n    ,range: true //开启日期范围，默认使用“_”分割\n    ,done: function(value, date, endDate){\n      console.log(value, date, endDate);\n    }\n    ,change: function(value, date, endDate){\n      console.log(value, date, endDate);\n    }\n  });\n  \n  //单控件\n  laydate.render({\n    elem: '#test2'\n    //,format: 'yyyy年MM月dd日'\n    //,value: new Date(1989,9,14)\n    ,format: 'yyyyMMdd'\n    ,value: '20170910'\n    //,max: 0\n    //,min: '2016-10-14'\n    //,max: -1\n    //,value: '1989年10月14日'\n    ,ready: function(date){\n      console.log(date);\n    }\n    ,done: function(value, date, endDate){\n      console.log(value, date, endDate);\n    }\n  });\n  \n  //年选择器\n  laydate.render({\n    elem: '#test3'\n    ,type: 'year'\n    //,range: true \n    //,trigger: 'click'\n    ,done: function(value, date, endDate){\n      console.log(value, date, endDate);\n    }\n    ,change: function(value, date, endDate){\n      //this.elem.val(value)\n    }\n  });\n  \n  //年月选择器\n  laydate.render({\n    elem: '#test4'\n    ,type: 'month'\n    ,range: true \n    //,trigger: 'click'\n    ,max: -30\n    ,done: function(value, date, endDate){\n      console.log(value, date, endDate);\n    }\n    ,change: function(value, date, endDate){\n      this.elem.val(value)\n    }\n  });\n  \n  //时间选择器\n  laydate.render({\n    elem: '#test5'\n    ,type: 'time'\n    //,range: true\n    //,trigger: 'click'\n    ,min: '09:30:00'\n    ,max: '17:30:00'\n    ,done: function(value, date, endDate){\n      console.log(value, date, endDate);\n    }\n    ,change: function(value, date, endDate){\n      //this.elem.val(value)\n    }\n  });\n  \n  //时间范围选择器\n  laydate.render({\n    elem: '#test55'\n    ,type: 'time'\n    ,range: true\n    //,trigger: 'click'\n    ,done: function(value, date, endDate){\n      console.log(value, date, endDate);\n    }\n  });\n  \n  //同时绑定多个\n  lay('.test-item').each(function(){\n    laydate.render({\n      elem: this\n      ,trigger: 'click'\n    });\n  });\n  \n  //自定义重要日\n  var ins555 = laydate.render({\n    elem: '#test555'\n    //,calendar: true //是否开启公历重要节日\n    ,mark: { //标记重要日子\n      '0-8-15': '纪念' //0代表：每年\n      ,'0-0-15': '中旬'\n      ,'2017-8-20': '发布'\n      ,'2017-8-31': '月底'\n    } \n    ,done: function(value, date, endDate){\n      if(date.year == 2017 && date.month == 8 && date.date == 15){\n        //console.log('中国人民战胜日本法西斯纪念日');\n      }\n    }\n    ,change: function(value, date, endDate){\n      console.log(value)\n    }\n  });\n  \n  //墨绿主题\n  laydate.render({\n    elem: '#test6-1' //指定元素\n    ,type: 'datetime'\n    ,theme: 'molv'\n    //,range: true\n    ,trigger: 'click'\n  });\n  \n  //自定义背景色主题\n  laydate.render({\n    elem: '#test6-2' //指定元素\n    ,type: 'datetime'\n    ,theme: '#393D49'\n    //,range: true\n    ,trigger: 'click'\n  });\n  \n  //格子主题\n  laydate.render({\n    elem: '#test6-3' //指定元素\n    //,type: 'datetime'\n    ,theme: 'grid'\n    //,range: true\n    ,trigger: 'click'\n  });\n  \n  //其它元素触发\n  laydate.render({\n    elem: '#test6' //指定元素\n    ,eventElem: '#test7' //绑定执行事件的元素\n    ,lang: 'en'\n  });\n  \n  //外部事件\n  lay('#test9').on('click', function(e){\n    laydate.render({\n      elem: '#test8'\n      ,type: 'datetime'\n      ,show: true\n      //,min: '2017-08-12 00:10:00'\n      //,max: '2017-08-12 23:10:10'\n      ,closeStop: '#test9' //点击 #test6 所在元素区域不关闭控件\n      ,change: function(value, date){\n        console.log(value, date)\n      }\n      ,done: function(value, date){\n        console.log(value, date)\n      }\n    });\n  });\n  \n  //直接嵌套在指定容器中\n  var ins10 = laydate.render({\n    elem: '#test10'\n    ,position: 'static'\n    ,calendar: true //是否开启公历重要节日\n    ,mark: { //标记重要日子\n      '2017-8-20': ''\n      ,'2017-8-21': ''\n    } \n    ,done: function(value, date, endDate){\n      if(date.year == 2017 && date.month == 8 && date.date == 20){\n        ins10.hint('XX活动日');\n      }\n    }\n    ,change: function(value, date, endDate){\n      console.log(value)\n    }\n  });\n  \n  laydate.render({\n    elem: '#test11'\n    ,position: 'static'\n    ,lang: 'en'\n    ,type: 'datetime'\n    ,calendar: true //是否开启公历重要节日\n    ,done: function(value, date, endDate){\n      //console.log(value, date, endDate);\n    }\n    ,change: function(value, date, endDate){\n      console.log(value)\n    }\n  });\n});\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/layedit.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>富文本编辑器 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 10px;}\n</style>\n</head>\n<body>\n\n<div style=\"width: 800px;\">\n  <form class=\"layui-form\">\n    <div class=\"layui-form-item\">\n      <textarea name=\"demo\" id=\"demo\" class=\"layui-hide\">\n    <p><span>一个范围具有两个边界点，即一个开始点和一个结束点。每个边界点由一个节点和那个节点的偏移量指定。该节点通常是&nbsp;</span><a href=\"http://www.w3school.com.cn/xmldom/dom_element.asp\" title=\"XML DOM - Element 对象\">Element 节点</a><span>、</span><a href=\"http://www.w3school.com.cn/xmldom/dom_document.asp\" title=\"XML DOM - Document 对象\">Document 节点</a><span>或&nbsp;</span><a href=\"http://www.w3school.com.cn/xmldom/dom_text.asp\" title=\"XML DOM - Text 对象\">Text 节点</a><span>。对于 Element 节点和 Document 节点，偏移量指该节点的子节点。偏移量为 0，说明边界点位于该节点的第一个子节点之前。偏移量为 1，说明边界点位于该节点的第一个子节点之后，第二个子节点之前。但如果边界节点是 Text 节点，偏移量则指的是文本中两个字符之间的位置。</span></p>\n      </textarea>\n    </div>\n    <button class=\"layui-btn\">提交</button>\n    <a class=\"layui-btn\" id=\"getChoose\">获取选中内容</a>\n  </form>\n</div>\n\n\n<script src=\"../src/layui.js\"></script>\n<script>\nlayui.use('layedit', function(){\n  var layedit = layui.layedit;\n  \n  var index = layedit.build('demo', {\n    //hideTool: ['image']\n    uploadImage: {\n      url: 'json/upload/demoLayEdit.json'\n      ,type: 'get'\n    }\n    //,tool: []\n    //,height: 100\n  });\n  \n  getChoose.onclick = function(){\n    alert(layedit.getSelection(index));\n  };\n  \n});\n</script>\n</body>\n</html>"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/layer.html",
    "content": " \n \n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>layer弹层 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 100px;}\n</style>\n</head>\n<body>\n\n<button class=\"layui-btn layui-btn-primary demo\" data-type=\"test\">Alert</button>\n<button class=\"layui-btn demo\" data-type=\"test2\">Confirm</button>\n<button class=\"layui-btn demo\" data-type=\"test3\">Msg</button>\n<button class=\"layui-btn demo\" data-type=\"test4\">Tips</button>\n<button class=\"layui-btn demo\" data-type=\"test5\">Page</button>\n<button class=\"layui-btn demo\" data-type=\"test6\">Iframe</button>\n<button class=\"layui-btn demo\" data-type=\"test7\">Prompt</button>\n<button class=\"layui-btn demo\" data-type=\"test8\">Tab</button>\n<a href=\"http://layer.layui.com/\" target=\"_blank\" class=\"layui-btn demo\">更多例子</a>\n\n<div id=\"test11111\" style=\"display: none;padding: 20px;\">\n 123\n</div>\n\n\n<script src=\"../src/layui.js\"></script>\n<script>\nlayui.use('layer', function(){\n  var $ = layui.jquery, layer = layui.layer; //独立版的layer无需执行这一句\n  \n  //触发事件\n  var active = {\n    test: function(){\n      layer.alert('你好么，体验者');\n    }\n    ,test2: function(){\n      layer.confirm('您是如何看待前端开发？', {\n        btn: ['重要','奇葩'] //按钮\n      }, function(){\n        layer.msg('的确很重要', {icon: 1});\n      }, function(){\n        layer.msg('也可以这样', {\n          time: 20000, //20s后自动关闭\n          btn: ['明白了', '知道了']\n        });\n      });\n    }\n    ,test3: function(){\n      layer.msg('玩命提示中');\n    }\n    ,test4: function(){\n      layer.tips('Hi，我是一个小提示', this, {tips: 1});\n    }\n    ,test5: function(){\n       layer.open({\n        title:'更新论坛信息',\n        type: 1,\n        skin: 'layui-layer-rim', \n        area: ['500px', '580px'], \n        content: $('#test11111')\n      });\n    }\n    ,test6: function(){\n      layer.open({\n        type: 2\n        ,content: 'http://fly.layui.com/'\n        ,area: ['375px', '500px']\n        ,maxmin: true\n      });\n    }\n    ,test7: function(){\n      layer.prompt({title: '输入任何口令，并确认', formType: 1}, function(pass, index){\n        layer.close(index);\n        layer.prompt({title: '随便写点啥，并确认', formType: 2}, function(text, index){\n          layer.close(index);\n          layer.msg('演示完毕！您的口令：'+ pass +'<br>您最后写下了：'+text);\n        });\n      });\n    }\n    ,test8: function(){\n      layer.tab({\n        area: ['600px', '300px'],\n        tab: [{\n          title: 'TAB1', \n          content: '内容1'\n        }, {\n          title: 'TAB2', \n          content: '内容2'\n        }, {\n          title: 'TAB3', \n          content: '内容3'\n        }]\n      });\n    }\n  };\n  $('.demo').on('click', function(){\n    var type = $(this).data('type');\n    active[type] ? active[type].call(this) : '';\n  });\n});\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/layout.html",
    "content": " \n \n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>layout 栅格布局 - Layui</title>\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n<style>\n/* 示例 */\n.layui-field-title{margin-top: 30px;}\n.grid-demo{padding: 10px; line-height: 50px; text-align: center; background-color: #79C48C; color: #fff;}\n.grid-demo-bg1{background-color: #63BA79;}\n.grid-demo-bg2{background-color: #49A761;}\n.grid-demo-bg3{background-color: #38814A;}\n</style>\n</head>\n<body>\n\n<!-- 让IE8/9支持媒体查询，从而兼容栅格 -->\n<!--[if lt IE 9]>\n  <script src=\"https://cdn.staticfile.org/html5shiv/r29/html5.min.js\"></script>\n  <script src=\"https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js\"></script>\n<![endif]-->\n\n<div class=\"layui-container\">\n  <fieldset class=\"layui-elem-field layui-field-title\">\n    <legend>始终等比例水平排列</legend>\n  </fieldset>\n  \n  <div class=\"layui-row\">\n    <div class=\"layui-col-xs6\">\n      <div class=\"grid-demo grid-demo-bg1\">50%</div>\n    </div>\n    <div class=\"layui-col-xs6\">\n      <div class=\"grid-demo\">50%</div>\n    </div>\n  </div>\n  \n  <br>\n  \n  <div class=\"layui-row\">\n    <div class=\"layui-col-xs3\">\n      <div class=\"grid-demo grid-demo-bg1\">25%</div>\n    </div>\n    <div class=\"layui-col-xs3\">\n      <div class=\"grid-demo\">25%</div>\n    </div>\n    <div class=\"layui-col-xs3\">\n      <div class=\"grid-demo grid-demo-bg1\">25%</div>\n    </div>\n    <div class=\"layui-col-xs3\">\n      <div class=\"grid-demo\">25%</div>\n    </div>\n  </div>\n  \n  <fieldset class=\"layui-elem-field layui-field-title\">\n    <legend>移动设备、桌面端的不同展现</legend>\n  </fieldset>\n  \n  <div class=\"layui-row\">\n    <div class=\"layui-col-xs12 layui-col-md8\">\n      <div class=\"grid-demo grid-demo-bg1\">移动设备：100%、桌面：60%</div>\n    </div>\n    <div class=\"layui-col-xs6 layui-col-md4\">\n      <div class=\"grid-demo\">移动设备：50%、桌面：40%</div>\n    </div>\n    <div class=\"layui-col-xs6 layui-col-md12\">\n      <div class=\"grid-demo grid-demo-bg2\">移动设备：50%、桌面：100%</div>\n    </div>\n  </div>\n  \n  <fieldset class=\"layui-elem-field layui-field-title\">\n    <legend>移动设备、平板、桌面端的不同展现</legend>\n  </fieldset>\n  \n  <div class=\"layui-row\">\n    <div class=\"layui-col-xs6 layui-col-sm6 layui-col-md4\">\n      <div class=\"grid-demo grid-demo-bg1\">50% | 33.33% | 33.33%</div>\n    </div>\n    <div class=\"layui-col-xs6 layui-col-sm6 layui-col-md4\">\n      <div class=\"grid-demo layui-bg-red\">50% | 66.67% | 33.33%</div>\n    </div>\n    <div class=\"layui-col-xs4 layui-col-sm12 layui-col-md4\">\n      <div class=\"grid-demo layui-bg-blue\">33.33% | 100% | 33.33%</div>\n    </div>\n    <div class=\"layui-col-xs4 layui-col-sm7 layui-col-md8\">\n      <div class=\"grid-demo layui-bg-green\">33.33% | 50% | 66.67%</div>\n    </div>\n    <div class=\"layui-col-xs4 layui-col-sm5 layui-col-md4\">\n      <div class=\"grid-demo layui-bg-black\">33.33% | 50% | 33.33%</div>\n    </div>\n  </div>\n  \n  <fieldset class=\"layui-elem-field layui-field-title\">\n    <legend>从小屏幕堆叠到桌面水平排列</legend>\n  </fieldset>\n\n  <div class=\"layui-row\">\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo grid-demo-bg1\">1/12</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo\">1/12</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo grid-demo-bg1\">1/12</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo\">1/12</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo grid-demo-bg1\">1/12</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo\">1/12</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo grid-demo-bg1\">1/12</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo\">1/12</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo grid-demo-bg1\">1/12</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo\">1/12</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo grid-demo-bg1\">1/12</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo\">1/12</div>\n    </div>\n  </div>\n  \n  <br>\n  \n  <div class=\"layui-row\">\n    <div class=\"layui-col-md9\">\n      <div class=\"grid-demo grid-demo-bg1\">75%</div>\n    </div>\n    <div class=\"layui-col-md3\">\n      <div class=\"grid-demo\">25%</div>\n    </div>\n  </div>\n  \n  <br>\n  \n  <div class=\"layui-row\">\n    <div class=\"layui-col-md4\">\n      <div class=\"grid-demo grid-demo-bg1\">33.33%</div>\n    </div>\n    <div class=\"layui-col-md4\">\n      <div class=\"grid-demo\">33.33%</div>\n    </div>\n    <div class=\"layui-col-md4\">\n      <div class=\"grid-demo grid-demo-bg1\">33.33%</div>\n    </div>\n  </div>\n  \n  <br>\n  \n  <div class=\"layui-row\">\n    <div class=\"layui-col-md6\">\n      <div class=\"grid-demo grid-demo-bg1\">50%</div>\n    </div>\n    <div class=\"layui-col-md6\">\n      <div class=\"grid-demo\">50%</div>\n    </div>\n  </div>\n  \n  <fieldset class=\"layui-elem-field layui-field-title\">\n    <legend>分栏间隔</legend>\n  </fieldset>\n\n  <div class=\"layui-row layui-col-space1\">\n    <div class=\"layui-col-md3\">\n      <div class=\"grid-demo grid-demo-bg1\">1/4</div>\n    </div>\n    <div class=\"layui-col-md3\">\n      <div class=\"grid-demo\">1/4</div>\n    </div>\n    <div class=\"layui-col-md3\">\n      <div class=\"grid-demo grid-demo-bg1\">1/4</div>\n    </div>\n    <div class=\"layui-col-md3\">\n      <div class=\"grid-demo\">1/4</div>\n    </div>\n  </div>\n  \n  <br>\n  \n  <div class=\"layui-row layui-col-space5\">\n    <div class=\"layui-col-md4\">\n      <div class=\"grid-demo grid-demo-bg1\">1/3</div>\n    </div>\n    <div class=\"layui-col-md4\">\n      <div class=\"grid-demo\">1/3</div>\n    </div>\n    <div class=\"layui-col-md4\">\n      <div class=\"grid-demo grid-demo-bg1\">1/3</div>\n    </div>\n  </div>\n  \n  <br>\n  \n  <div class=\"layui-row layui-col-space10\">\n    <div class=\"layui-col-md9\">\n      <div class=\"grid-demo grid-demo-bg1\">75%</div>\n    </div>\n    <div class=\"layui-col-md3\">\n      <div class=\"grid-demo\">25%</div>\n    </div>\n  </div>\n  \n  <br>\n  \n  <div class=\"layui-row layui-col-space15\">\n    <div class=\"layui-col-md7\">\n      <div class=\"grid-demo grid-demo-bg1\">58.33%</div>\n    </div>\n    <div class=\"layui-col-md5\">\n      <div class=\"grid-demo\">41.67%</div>\n    </div>\n  </div>\n  \n  <br>\n  \n  <div class=\"layui-row layui-col-space20\">\n    <div class=\"layui-col-md4\">\n      <div class=\"grid-demo grid-demo-bg1\">33.33%</div>\n    </div>\n    <div class=\"layui-col-md4\">\n      <div class=\"grid-demo\">33.33%</div>\n    </div>\n    <div class=\"layui-col-md4\">\n      <div class=\"grid-demo\">33.33%</div>\n    </div>\n  </div>\n  \n   <fieldset class=\"layui-elem-field layui-field-title\">\n    <legend>列偏移</legend>\n  </fieldset>\n  \n  <div class=\"layui-row\">\n    <div class=\"layui-col-md4\">\n      <div class=\"grid-demo grid-demo-bg1\">33.33%</div>\n    </div>\n    <div class=\"layui-col-md4 layui-col-md-offset4\">\n      <div class=\"grid-demo\">偏移4列</div>\n    </div>\n    <div class=\"layui-col-md1 layui-col-md-offset5\">\n      <div class=\"grid-demo grid-demo-bg1\">偏移5列</div>\n    </div>\n    <div class=\"layui-col-md1\">\n      <div class=\"grid-demo\">不偏移</div>\n    </div>\n  </div>\n  \n  <br>\n  \n  <div class=\"layui-row\">\n    <div class=\"layui-col-md3 layui-col-md-offset3\">\n      <div class=\"grid-demo grid-demo-bg1\">偏移3列</div>\n    </div>\n    <div class=\"layui-col-md3 layui-col-md-offset1\">\n      <div class=\"grid-demo\">偏移1列</div>\n    </div>\n  </div>\n  \n  <fieldset class=\"layui-elem-field layui-field-title\">\n    <legend>嵌套</legend>\n  </fieldset>\n  \n  <div class=\"layui-row\">\n    <div class=\"layui-col-md5\">\n      <div class=\"layui-row grid-demo\">\n        <div class=\"layui-col-md3\">\n          <div class=\"grid-demo grid-demo-bg1\">内部列</div>\n        </div>\n        <div class=\"layui-col-md9\">\n          <div class=\"grid-demo grid-demo-bg2\">内部列</div>\n        </div>\n        <div class=\"layui-col-md12\">\n          <div class=\"grid-demo grid-demo-bg3\">内部列</div>\n        </div>\n      </div>\n    </div>\n    <div class=\"layui-col-md7\">\n      <div class=\"layui-row grid-demo grid-demo-bg1\">\n        <div class=\"layui-col-md12\">\n          <div class=\"grid-demo\">内部列</div>\n        </div>\n        <div class=\"layui-col-md9\">\n          <div class=\"grid-demo grid-demo-bg2\">内部列</div>\n        </div>\n        <div class=\"layui-col-md3\">\n          <div class=\"grid-demo grid-demo-bg3\">内部列</div>\n        </div>\n      </div>\n    </div>\n  </div>\n  \n</div>\n\n<div class=\"layui-fluid\">\n  <fieldset class=\"layui-elem-field layui-field-title\">\n    <legend>流体容器（宽度自适应，不固定）</legend>\n  </fieldset>\n\n  <div class=\"layui-row\">\n    <div class=\"layui-col-sm3\">\n      <div class=\"grid-demo grid-demo-bg1\">25%</div>\n    </div>\n    <div class=\"layui-col-sm3\">\n      <div class=\"grid-demo\">25%</div>\n    </div>\n    <div class=\"layui-col-sm3\">\n      <div class=\"grid-demo grid-demo-bg1\">25%</div>\n    </div>\n    <div class=\"layui-col-sm3\">\n      <div class=\"grid-demo\">25%</div>\n    </div>\n  </div>\n</div>\n\n<br><br>\n\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/laypage.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>分页 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 10px;}\n</style>\n</head>\n<body>\n\n总页数低于页码总数：<div id=\"demo0\"></div>\n总页数大于页码总数：<div id=\"demo1\"></div>\n自定义主题：<div id=\"demo2\"></div>\n自定义首页、尾页、上一页、下一页文本：<div id=\"demo3\"></div>\n不显示首页尾页：<div id=\"demo4\"></div>\n开启HASH：<div id=\"demo5\"></div>\n只显示上一页、下一页：<div id=\"demo6\"></div>\n显示完整功能：<div id=\"demo7\"></div>\n自定义排版：<div id=\"demo8\"></div>\n\n<fieldset class=\"layui-elem-field layui-field-title\" style=\"margin-top: 50px;\">\n  <legend>将一段已知数组分页展示</legend>\n</fieldset>\n \n<div id=\"demo9\"></div>\n \n<ul id=\"biuuu_city_list\"></ul>  \n\n\n<script src=\"../src/layui.js\"></script>\n<script>\n\nlayui.use(['laypage', 'layer'], function(){\n  var laypage = layui.laypage\n  ,layer = layui.layer;\n\n  \n  //总页数低于页码总数\n  laypage.render({\n    elem: 'demo0'\n    ,count: 50 //数据总数\n  });\n  \n  //总页数大于页码总数\n  laypage.render({\n    elem: 'demo1'\n    ,count: 70 //数据总数\n    ,jump: function(obj){\n      console.log(obj)\n    }\n  });\n  \n  //自定义样式\n  laypage.render({\n    elem: 'demo2'\n    ,count: 100\n    ,theme: '#1E9FFF'\n  });\n  \n  //自定义首页、尾页、上一页、下一页文本\n  laypage.render({\n    elem: 'demo3'\n    ,count: 100\n    ,first: '首页'\n    ,last: '尾页'\n    ,prev: '<em>←</em>'\n    ,next: '<em>→</em>'\n  });\n  \n  //不显示首页尾页\n  laypage.render({\n    elem: 'demo4'\n    ,count: 100\n    ,first: false\n    ,last: false\n  });\n  \n  //开启HASH\n  laypage.render({\n    elem: 'demo5'\n    ,count: 500\n    ,curr: location.hash.replace('#!fenye=', '') //获取hash值为fenye的当前页\n    ,hash: 'fenye' //自定义hash值\n  });\n  \n  //只显示上一页、下一页\n  laypage.render({\n    elem: 'demo6'\n    ,count: 50\n    ,layout: ['prev', 'next']\n    ,jump: function(obj, first){\n      if(!first){\n        layer.msg('第 '+ obj.curr +' 页');\n      }\n    }\n  });\n  \n  //完整功能\n  laypage.render({\n    elem: 'demo7'\n    ,count: 100\n    //,groups: 0\n    ,layout: ['count', 'prev', 'page', 'next', 'limit', 'skip']\n    ,jump: function(obj){\n      console.log(obj)\n    }\n  });\n  \n  //自定义排版\n  laypage.render({\n    elem: 'demo8'\n    ,count: 1000\n    ,layout: ['limit', 'prev', 'page', 'next']\n    //,limits: [100, 200, 300]\n    ,limit: 200\n  });\n  \n  \n  \n  //将一段数组分页展示\n  \n  //测试数据\n  var data = [\n    '北京',\n    '上海',\n    '广州',\n    '深圳',\n    '杭州',\n    '长沙',\n    '合肥',\n    '宁夏',\n    '成都',\n    '西安',\n    '南昌',\n    '上饶',\n    '沈阳',\n    '济南',\n    '厦门',\n    '福州',\n    '九江',\n    '宜春',\n    '赣州',\n    '宁波',\n    '绍兴',\n    '无锡',\n    '苏州',\n    '徐州',\n    '东莞',\n    '佛山',\n    '中山',\n    '成都',\n    '武汉',\n    '青岛',\n    '天津',\n    '重庆',\n    '南京',\n    '九江',\n    '香港',\n    '澳门',\n    '台北'\n  ];\n  \n  //调用分页\n  laypage.render({\n    elem: 'demo9'\n    ,count: data.length\n    ,jump: function(obj){\n      //模拟渲染\n      document.getElementById('biuuu_city_list').innerHTML = function(){\n        var arr = []\n        ,thisData = data.concat().splice(obj.curr*obj.limit - obj.limit, obj.limit);\n        layui.each(thisData, function(index, item){\n          arr.push('<li>'+ item +'</li>');\n        });\n        return arr.join('');\n      }();\n    }\n  });\n  \n});\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/responsive.html",
    "content": " \n \n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>响应式测试 - Layui</title>\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n<style>\nbody{padding: 20px;}\n</style>\n</head>\n<body>\n\n<!-- 让IE8/9支持媒体查询，从而兼容栅格 -->\n<!--[if lt IE 9]>\n  <script src=\"https://cdn.staticfile.org/html5shiv/r29/html5.min.js\"></script>\n  <script src=\"https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js\"></script>\n<![endif]-->\n\n<div class=\"layui-hide-xs layui-show-sm-inline layui-show-md-block\">\n 移动：隐藏\n <br>平板：inline\n <br>PC：block\n</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/table.html",
    "content": " \n \n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\">\n<title>表格操作 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../dist/css/layui.css\">\n\n<style>\nbody{padding: 20px;}\n</style>\n</head>\n<body>\n\n<div class=\"layui-btn-group\">\n  <button class=\"layui-btn\" data-type=\"getCheckData\">获取选中行数据</button>\n  <button class=\"layui-btn\" data-type=\"getCheckLength\">获取选中数目</button>\n  <button class=\"layui-btn\" data-type=\"isAll\">验证是否全选</button>\n</div>\n\n<table class=\"layui-table\" lay-data=\"{width:900, height:'full-100', url:'json/table/demo1.json', page:true, id:'test'}\" lay-filter=\"test\">\n  <thead>\n    <tr>\n      <th lay-data=\"{checkbox:true, fixed: true}\"></th>\n      <th lay-data=\"{field:'id', width:80, fixed: true, sort: true}\">ID</th>\n      <th lay-data=\"{field:'username', width:120, sort: true, edit: 'text', templet: '#usernameTpl'}\">用户名</th>\n      <th lay-data=\"{field:'email', width:150}\">邮箱</th>\n      <th lay-data=\"{field:'sex', width:80}\">性别</th>\n      <th lay-data=\"{field:'city', width:100}\">城市</th>\n      <th lay-data=\"{field:'sign', width:150}\">签名</th>\n      <th lay-data=\"{field:'experience', width:80, sort: true, edit: 'text'}\">积分</th>\n      <th lay-data=\"{field:'ip', width:120}\">IP</th>\n      <th lay-data=\"{field:'logins', width:100}\">登入次数</th>\n      <th lay-data=\"{field:'joinTime', width:120}\">加入时间</th>\n      <th lay-data=\"{fixed: 'right', toolbar: '#barDemo', width:150, align:'center'}\">操作</th>\n    </tr>\n  </thead>\n</table>\n\n<div class=\"layui-hide\" id=\"barDemo\">\n  <a class=\"layui-btn layui-btn-mini\" lay-event=\"edit\">编辑</a>\n  <a class=\"layui-btn layui-btn-danger layui-btn-mini\" lay-event=\"del\">删除</a>\n</div>\n\n<table id=\"demo\"></table>\n\n<table class=\"layui-table\" lay-data=\"{height:350, url:'json/table/demo1.json', page: true}\">\n  <thead>\n    <tr>\n      <th lay-data=\"{field:'id', width:80, fixed:true, unresize: true, sort: true}\">ID</th>\n      <th lay-data=\"{checkbox:true}\"></th> \n      <th lay-data=\"{field:'username', width:120, templet: '#usernameTpl'}\">用户名</th>\n      <th lay-data=\"{field:'email', width:150}\">邮箱</th>\n      <th lay-data=\"{field:'sex', width:80, sort: true}\">性别</th>\n      <th lay-data=\"{field:'city', width:100}\">城市</th>\n      <th lay-data=\"{field:'sign', width:150}\">签名</th>\n      <th lay-data=\"{field:'experience', width:80, sort: true}\">积分</th>\n      <th lay-data=\"{field:'ip', width:120}\">IP</th>\n      <th lay-data=\"{field:'logins', width:100, sort: true}\">登入次数</th>\n      <th lay-data=\"{field:'joinTime', width:120}\">加入时间</th>\n      <th lay-data=\"{fixed: 'right', toolbar: '#barDemo', width:150}\">操作</th>\n    </tr>\n  </thead>\n</table>\n\n<script type=\"text/html\" id=\"usernameTpl\">\n  <a href=\"\" class=\"layui-table-link\">{{d.username || ''}}</a>\n</script>\n<script type=\"text/html\" id=\"LAY_table_tpl_email\">\n  <span {{# if(!d.activate){ }}style=\"color:#999\"{{# } }}>{{ d.email }}</span>\n</script>\n\n\n<table class=\"layui-table\" lay-data=\"{width:800, height:235, url:'json/table/demo2.json', page: true, limit: 6}\">\n  <thead>\n    <tr>\n      <th lay-data=\"{checkbox:true, fixed:'left'}\" rowspan=\"2\"></th>\n      <th lay-data=\"{field:'username', width:80}\" rowspan=\"2\">联系人</th>\n      <th lay-data=\"{field:'amount', width:120}\" rowspan=\"2\">金额</th>\n      <th lay-data=\"{align:'center'}\" colspan=\"3\">地址</th>\n      <th lay-data=\"{fixed: 'right', width: 155, align: 'center', toolbar: '#barDemo'}\" rowspan=\"2\">操作</th>\n    </tr>\n    <tr>\n      <th lay-data=\"{field:'province', width:130}\">省</th>\n      <th lay-data=\"{field:'city', width:130}\">市</th>\n      <th lay-data=\"{field:'zone', width:200}\">区</th>\n    </tr>\n  </thead>\n</table>\n\n<table class=\"layui-table\" lay-data=\"{height:315, url:'json/table/demo2.json', page: true, limit: 6}\">\n  <thead>\n    <tr>\n      <th lay-data=\"{field:'username', width:80}\" rowspan=\"3\">联系人</th>\n      <th lay-data=\"{field:'amount', width:120}\" rowspan=\"3\">金额</th>\n      <th lay-data=\"{align:'center'}\" colspan=\"5\">地址1</th>\n      <th lay-data=\"{align:'center'}\" colspan=\"2\">地址2</th>\n      <th lay-data=\"{fixed: 'right', width: 120, align: 'center', toolbar: '#barDemo'}\" rowspan=\"3\">操作</th>\n    </tr>\n    <tr>\n      <th lay-data=\"{field:'province', width:80}\" rowspan=\"2\">省</th>\n      <th lay-data=\"{field:'city', width:80}\" rowspan=\"2\">市</th>\n      <th lay-data=\"{align:'center'}\" colspan=\"2\">详细</th>\n      <th lay-data=\"{field:'zone', width:80}\" rowspan=\"2\">区</th>\n      <th lay-data=\"{field:'province', width:80}\" rowspan=\"2\">省</th>\n      <th lay-data=\"{field:'city', width:80}\" rowspan=\"2\">市</th>\n    </tr>\n    <tr>\n      <th lay-data=\"{field:'address', width:120}\">小区</th>\n      <th lay-data=\"{field:'house', width:120}\">单元</th>\n    </tr>\n  </thead>\n</table>\n\n\n<div class=\"layui-btn-group\">\n  <button class=\"layui-btn\" data-type=\"parseTable\">转化为数据表格</button>\n</div>\n\n<table class=\"layui-table\" lay-skin=\"line\" lay-filter=\"parse-table-demo\">\n  <thead>\n    <tr>\n      <th lay-data=\"{checkbox:true}\"></th>\n      <th lay-data=\"{field:'username', width:200}\">昵称</th>\n      <th lay-data=\"{field:'joinTime', width:150}\">加入时间</th>\n      <th lay-data=\"{field:'sign', width:300}\">签名</th>\n    </tr> \n  </thead>\n  <tbody>\n    <tr>\n      <td></td>\n      <td>贤心1</td>\n      <td>2016-11-28</td>\n      <td>人生就像是一场修行a</td>\n    </tr>\n    <tr>\n      <td></td>\n      <td>贤心2</td>\n      <td>2016-11-29</td>\n      <td>人生就像是一场修行b</td>\n    </tr>\n    <tr>\n      <td></td>\n      <td>贤心3</td>\n      <td>2016-11-30</td>\n      <td>人生就像是一场修行c</td>\n    </tr>\n  </tbody>\n</table>\n\n<table class=\"layui-table\" lay-filter=\"parse-table-demo\">\n  <thead>\n    <tr>\n     <td rowspan=\"2\" lay-data=\"{field:'louceng', width:200}\">楼层</td>\n     <td colspan=\"2\">1单元</td>\n     <td colspan=\"2\">2单元</td>\n    </tr>\n    <tr>\n     <td lay-data=\"{field:'men1', width:80}\">1门</td>\n     <td lay-data=\"{field:'men2', width:80}\">2门</td>\n     <td lay-data=\"{field:'men3', width:80}\">1门</td>\n     <td lay-data=\"{field:'men4', width:80}\">2门</td>\n    </tr>\n   </thead>\n   <tbody>\n    <tr>\n     <td>3楼</td>\n     <td>301</td>\n     <td>302</td>\n     <td>301</td>\n     <td>302</td>\n    </tr>\n    <tr>\n     <td>2楼</td>\n     <td>201</td>\n     <td>202</td>\n     <td>201</td>\n     <td>202</td>\n    </tr>\n    <tr>\n     <td>1楼</td>\n     <td>101</td>\n     <td>102</td>\n     <td>101</td>\n     <td>102</td>\n    </tr>\n  </tbody>\n</table>\n\n<script src=\"../dist/layui.js\" charset=\"utf-8\"></script>\n<script>\nlayui.use('table', function(){\n  var table = layui.table;\n  \n  //方法级渲染\n  window.demoTable = table.render({\n    elem: '#demo'\n    //,url: 'json/table/demo1.json'\n    ,data: [{\n      \"id\": \"10001\"\n      ,\"username\": \"杜甫\"\n      ,\"email\": \"xianxin@layui.com\"\n      ,\"sex\": \"男\"\n      ,\"city\": \"浙江杭州\"\n      ,\"sign\": \"人生恰似一场修行\"\n      ,\"experience\": \"116\"\n      ,\"ip\": \"192.168.0.8\"\n      ,\"logins\": \"108\"\n      ,\"joinTime\": \"2016-10-14\"\n    }, {\n      \"id\": \"10002\"\n      ,\"username\": \"李白\"\n      ,\"email\": \"xianxin@layui.com\"\n      ,\"sex\": \"男\"\n      ,\"city\": \"浙江杭州\"\n      ,\"sign\": \"人生恰似一场修行\"\n      ,\"experience\": \"12\"\n      ,\"ip\": \"192.168.0.8\"\n      ,\"logins\": \"106\"\n      ,\"joinTime\": \"2016-10-14\"\n      ,\"LAY_CHECKED\": true\n    }, {\n      \"id\": \"10003\"\n      ,\"username\": \"王勃\"\n      ,\"email\": \"xianxin@layui.com\"\n      ,\"sex\": \"男\"\n      ,\"city\": \"浙江杭州\"\n      ,\"sign\": \"人生恰似一场修行\"\n      ,\"experience\": \"65\"\n      ,\"ip\": \"192.168.0.8\"\n      ,\"logins\": \"106\"\n      ,\"joinTime\": \"2016-10-14\"\n    }, {\n      \"id\": \"10004\"\n      ,\"username\": \"贤心\"\n      ,\"email\": \"xianxin@layui.com\"\n      ,\"sex\": \"男\"\n      ,\"city\": \"浙江杭州\"\n      ,\"sign\": \"人生恰似一场修行\"\n      ,\"experience\": \"666\"\n      ,\"ip\": \"192.168.0.8\"\n      ,\"logins\": \"106\"\n      ,\"joinTime\": \"2016-10-14\"\n    }, {\n      \"id\": \"10005\"\n      ,\"username\": \"贤心\"\n      ,\"email\": \"xianxin@layui.com\"\n      ,\"sex\": \"男\"\n      ,\"city\": \"浙江杭州\"\n      ,\"sign\": \"人生恰似一场修行\"\n      ,\"experience\": \"86\"\n      ,\"ip\": \"192.168.0.8\"\n      ,\"logins\": \"106\"\n      ,\"joinTime\": \"2016-10-14\"\n    }, {\n      \"id\": \"10006\"\n      ,\"username\": \"贤心\"\n      ,\"email\": \"xianxin@layui.com\"\n      ,\"sex\": \"男\"\n      ,\"city\": \"浙江杭州\"\n      ,\"sign\": \"人生恰似一场修行\"\n      ,\"experience\": \"12\"\n      ,\"ip\": \"192.168.0.8\"\n      ,\"logins\": \"106\"\n      ,\"joinTime\": \"2016-10-14\"\n    }, {\n      \"id\": \"10007\"\n      ,\"username\": \"贤心\"\n      ,\"email\": \"xianxin@layui.com\"\n      ,\"sex\": \"男\"\n      ,\"city\": \"浙江杭州\"\n      ,\"sign\": \"人生恰似一场修行\"\n      ,\"experience\": \"16\"\n      ,\"ip\": \"192.168.0.8\"\n      ,\"logins\": \"106\"\n      ,\"joinTime\": \"2016-10-14\"\n    }, {\n      \"id\": \"10008\"\n      ,\"username\": \"贤心\"\n      ,\"email\": \"xianxin@layui.com\"\n      ,\"sex\": \"男\"\n      ,\"city\": \"浙江杭州\"\n      ,\"sign\": \"人生恰似一场修行\"\n      ,\"experience\": \"106\"\n      ,\"ip\": \"192.168.0.8\"\n      ,\"logins\": \"106\"\n      ,\"joinTime\": \"2016-10-14\"\n    }]\n    ,width: 900\n    //,height: 274\n    ,cols: [[ //标题栏\n      {space: true, fixed: true}\n      ,{checkbox: true, LAY_CHECKED: true}\n      ,{field: 'id', title: 'ID', width: 80, sort: true}\n      ,{field: 'username', title: '用户名', width: 120}\n      ,{field: 'email', title: '邮箱', width: 150}\n      ,{field: 'sign', title: '签名', width: 150}\n      ,{field: 'sex', title: '性别', width: 80}\n      ,{field: 'city', title: '城市', width: 100}\n      ,{field: 'experience', title: '积分', width: 80, sort: true}\n    ]]\n    \n    ,id:'test111'\n    ,skin: 'row' //表格风格\n    ,even: true\n    //,size: 'lg' //尺寸\n    \n    ,page: true //是否显示分页\n    ,limits: [3,5,10]\n    ,limit: 3 //每页默认显示的数量\n    //,loading: false //请求数据时，是否显示loading\n    //,id: 'test' //ID\n  });\n  \n  \n  //监听表格复选框选择\n  table.on('checkbox(test)', function(obj){\n    console.log(obj)\n  });\n  \n  //监听单元格编辑\n  table.on('edit(test)', function(obj){\n    var value = obj.value //得到修改后的值\n    ,data = obj.data //得到所在行所有键值\n    ,field = obj.field; //得到字段\n    \n  });\n  \n  //监听工具条\n  table.on('tool(test)', function(obj){\n    var data = obj.data;\n    if(obj.event === 'del'){\n      layer.confirm('真的删除行么', function(index){\n        obj.del();\n        layer.close(index);\n      });\n    } else if(obj.event === 'edit'){\n      layer.prompt({\n        formType: 2\n        ,value: data.username\n      }, function(value, index){\n        obj.update({\n          username: value\n        });\n        layer.close(index);\n      });\n    }\n  });\n  \n  //监听排序\n  table.on('sort(test)', function(obj){\n    console.log(this, obj.field, obj.type)\n    \n    return;\n    table.reload('test', {\n      initSort: obj\n      ,where: { //重新请求服务端\n        key: obj.field //排序字段\n        ,order: obj.type //排序方式\n      }\n      //,height: 300\n    });\n  });\n  \n  \n  var $ = layui.jquery, active = {\n    getCheckData: function(){\n      var checkStatus = table.checkStatus('test')\n      ,data = checkStatus.data;\n      layer.alert(JSON.stringify(data));\n    }\n    ,getCheckLength: function(){\n      var checkStatus = table.checkStatus('test')\n      ,data = checkStatus.data;\n      layer.msg('选中了：'+ data.length + ' 个');\n    }\n    ,isAll: function(){\n      var checkStatus = table.checkStatus('test');\n      layer.msg(checkStatus.isAll ? '全选': '未全选')\n    }\n    ,parseTable: function(){\n      table.init('parse-table-demo');\n    }\n  };\n  \n  $('.layui-btn').on('click', function(){\n    var type = $(this).data('type');\n    active[type] ? active[type].call(this) : '';\n  });\n});\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/tree.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>树模块 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 50px 100px;}\n</style>\n</head>\n<body>\n\n<ul id=\"demo\"></ul>\n\n<ul id=\"demo1\" style=\"margin-top: 50px;\"></ul>\n\n<script src=\"../src/layui.js\"></script>\n<script>\n\nlayui.use('tree', function(){\n  var tree = layui.tree({\n    elem: '#demo' //指定元素\n    //,check: 'checkbox' //勾选风格\n    ,skin: 'as' //设定皮肤\n    //,target: '_blank' //是否新选项卡打开（比如节点返回href才有效）\n    ,drag: true\n    ,click: function(item){ //点击节点回调\n      console.log(item)\n    }\n    ,nodes: [ //节点\n      {\n        name: '常用文件夹'\n        ,id: 1\n        ,alias: 'changyong'\n        ,children: [\n          {\n            name: '所有未读'\n            ,id: 11\n            //,href: 'http://www.layui.com/'\n            ,alias: 'weidu'\n          }, {\n            name: '置顶邮件'\n            ,id: 12\n          }, {\n            name: '标签邮件'\n            ,id: 13\n          }\n        ]\n      }, {\n        name: '我的邮箱'\n        ,id: 2\n        ,spread: true\n        ,children: [\n          {\n            name: 'QQ邮箱'\n            ,id: 21\n            ,spread: true\n            ,children: [\n              {\n                name: '收件箱'\n                ,id: 211\n                ,children: [\n                  {\n                    name: '所有未读'\n                    ,id: 2111\n                  }, {\n                    name: '置顶邮件'\n                    ,id: 2112\n                  }, {\n                    name: '标签邮件'\n                    ,id: 2113\n                  }\n                ]\n              }, {\n                name: '已发出的邮件'\n                ,id: 212\n              }, {\n                name: '垃圾邮件'\n                ,id: 213\n              }\n            ]\n          }, {\n            name: '阿里云邮'\n            ,id: 22\n            ,children: [\n              {\n                name: '收件箱'\n                ,id: 221\n              }, {\n                name: '已发出的邮件'\n                ,id: 222\n              }, {\n                name: '垃圾邮件'\n                ,id: 223\n              }\n            ]\n          }\n        ]\n      }\n    ]\n  });\n  \n  //生成一个模拟树\n  var createTree = function(node, start){\n    node = node || function(){\n      var arr = [];\n      for(var i = 1; i < 10; i++){\n        arr.push({\n          name: i.toString().replace(/(\\d)/, '$1$1$1$1$1$1$1$1$1')\n        });\n      }\n      return arr;\n    }();\n    start = start || 1;  \n    layui.each(node, function(index, item){  \n      if(start < 10 && index < 9){\n        var child = [\n          {\n            name: (1 + index + start).toString().replace(/(\\d)/, '$1$1$1$1$1$1$1$1$1')\n          }\n        ];\n        node[index].children = child;\n        createTree(child, index + start + 1);\n      }\n    });\n    return node;\n  };\n\n  layui.tree({\n    elem: '#demo1' //指定元素\n    ,nodes: createTree()\n  });\n  \n});\n</script>\n\n<pre class=\"layui-code\">\n# layui.tree-v2 备忘\n* check参数 - checkbox、radio的支持\n* 拖拽的支持\n</pre>\n\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/upload.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>文件上传模块 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 50px 100px;}\n.layui-upload-img{width: 92px; height: 92px; margin: 0 10px 10px 0;}\nhr{margin: 30px 0;}\n</style>\n</head>\n<body>\n\n<div class=\"layui-upload\">\n  <button type=\"button\" class=\"layui-btn\" id=\"test1\">上传图片</button>\n  \n  <div class=\"layui-upload-list\">\n    <img class=\"layui-upload-img\" src=\"\" id=\"demo1\">\n    <p id=\"demoText\"></p>\n  </div>\n</div>\n\n<hr>\n\n<div class=\"layui-upload\">\n  <button type=\"button\" class=\"layui-btn\" id=\"test2\">多图片上传</button> \n  <div class=\"layui-upload-list\" id=\"demo2\"></div>\n</div>\n\n<hr>\n\n<div class=\"layui-upload\">\n  <button type=\"button\" class=\"layui-btn layui-btn-normal\" id=\"testList\">选择多文件</button> \n  <div class=\"layui-upload-list\">\n    <table class=\"layui-table\">\n      <thead>\n        <th>文件名</th>\n        <th>大小</th>\n        <th>状态</th>\n        <th>操作</th>\n      </thead>\n      <tbody id=\"demoList\"></tbody>\n    </table>\n  </div>\n  <button type=\"button\" class=\"layui-btn\" id=\"testListAction\">开始上传</button>\n</div>\n\n<hr>\n\n<button type=\"button\" class=\"layui-btn test333\" lay-data=\"{size:10,url:'a'}\" id=\"test3\"><i class=\"layui-icon\">&#xe67c;</i>上传文件</button>\n<button type=\"button\" class=\"layui-btn layui-btn-primary test333\" lay-data=\"{size:20,url:'b'}\" id=\"test33\"><i class=\"layui-icon\">&#xe67c;</i>换个样式</button>\n\n<button type=\"button\" class=\"layui-btn\" id=\"test4\"><i class=\"layui-icon\">&#xe67c;</i>上传视频</button>\n<button type=\"button\" class=\"layui-btn\" id=\"test5\"><i class=\"layui-icon\">&#xe67c;</i>上传音频</button>\n\n<hr>\n\n<button class=\"layui-btn testm\" lay-data=\"{url: '/a/'}\">参数设在元素上</button>\n<button class=\"layui-btn testm\" lay-data=\"{url: '/b/', accept: 'file',size:5}\">参数设在元素上</button>\n\n<hr>\n\n<div class=\"layui-upload\">\n  <button type=\"button\" class=\"layui-btn layui-btn-normal\" id=\"test6\">选择文件</button>\n  <button type=\"button\" class=\"layui-btn\" id=\"test7\">开始上传</button>\n</div>\n\n<hr><br>\n\n<div class=\"layui-upload-drag\" id=\"test9\">\n  <i class=\"layui-icon\">&#xe67c;</i>\n  <p>点击上传，或将文件拖拽到此处</p>\n</div>\n\n<hr><br>\n\n绑定原始文件域：<input type=\"file\" name=\"file\" id=\"test8\">\n\n\n\n<script src=\"../src/layui.js\"></script>\n<script>\nlayui.use('upload', function(){\n  var $ = layui.jquery\n  ,upload = layui.upload;\n\n  var uploadInst = upload.render({\n    elem: '#test1'\n    ,url: '/upload/'\n    ,size: 60 //限制文件大小，单位 KB\n    ,before: function(obj){\n      //预读本地文件示例，不支持ie8\n      obj.preview(function(index, file, result){\n        $('#demo1').attr('src', result); //图片链接（base64）\n      });\n    }\n    ,done: function(res){\n      //如果上传失败\n      if(res.code > 0){\n        return layer.msg('上传失败');\n      }\n      //上传成功\n    }\n    ,error: function(){\n      //演示失败状态，并实现重传\n      var demoText = $('#demoText');\n      demoText.html('<span style=\"color: #FF5722;\">上传失败</span> <a class=\"layui-btn layui-btn-mini demo-reload\">重试</a>');\n      demoText.find('.demo-reload').on('click', function(){\n        uploadInst.upload();\n      });\n    }\n  });\n  \n  upload.render({\n    elem: '#test2'\n    ,url: ''\n    ,multiple: true\n    ,size: 1024\n    ,before: function(obj){\n      //预读本地文件示例，不支持ie8\n      obj.preview(function(index, file, result){\n        $('#demo2').append('<img src=\"'+ result +'\" alt=\"'+ file.name +'\" class=\"layui-upload-img\">')\n      });\n    }\n    ,done: function(res){\n      //上传完毕\n    }\n  });\n  \n  //演示多文件列表\n  var demoListView = $('#demoList');\n  var uploadListIns = upload.render({\n    elem: '#testList'\n    ,url: ''\n    ,accept: 'file'\n    ,multiple: true\n    ,auto: false\n    ,bindAction: '#testListAction'\n    ,choose: function(obj){   \n      var files = obj.pushFile(); //将每次选择的文件追加到文件队列\n\n      //读取本地文件\n      obj.preview(function(index, file, result){\n        var tr = $(['<tr id=\"upload-'+ index +'\">'\n          ,'<td>'+ file.name +'</td>'\n          ,'<td>'+ (file.size/1014).toFixed(1) +'kb</td>'\n          ,'<td>等待上传</td>'\n          ,'<td>'\n            ,'<button class=\"layui-btn layui-btn-mini demo-reload layui-hide\">重传</button>'\n            ,'<button class=\"layui-btn layui-btn-mini layui-btn-danger demo-delete\">删除</button>'\n          ,'</td>'\n        ,'</tr>'].join(''));\n        \n        //单个重传\n        tr.find('.demo-reload').on('click', function(){\n          obj.upload(index, file);\n        });\n        \n        //删除\n        tr.find('.demo-delete').on('click', function(){\n          delete files[index]; //删除对应的文件\n          tr.remove();\n        });\n        \n        demoListView.append(tr);\n      });\n    }\n    ,done: function(res, index, upload){\n      if(res.code == 0){ //上传成功\n        var tr = demoListView.find('tr#upload-'+ index)\n        ,tds = tr.children();\n        tds.eq(2).html('<span style=\"color: #5FB878;\">上传成功</span>');\n        tds.eq(3).html(''); //清空操作\n        delete files[index]; //删除文件队列已经上传成功的文件\n        return;\n      }\n      this.error(index, upload);\n    }\n    ,error: function(index, upload){\n      var tr = demoListView.find('tr#upload-'+ index)\n      ,tds = tr.children();\n      tds.eq(2).html('<span style=\"color: #FF5722;\">上传失败</span>');\n      tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传\n    }\n  });\n  \n\n  upload.render({\n    elem: '.test333'\n    ,url: 'a'\n    ,accept: 'file'\n    ,before: function(obj){\n      console.log(this.item);\n    }\n    ,done: function(res){\n      console.log(res)\n    }\n  });\n  \n  upload.render({\n    elem: '.testm'\n    ,done: function(res, index, upload){\n      //获取当前触发上传的元素，一般用于 elem 绑定 class 的情况，注意：此乃 layui 2.1.0 新增\n      var item = this.item;\n    }\n  })\n  \n  /*\n  upload.render({\n    elem: '#test33'\n    ,url: ''\n    ,accept: 'file'\n    ,done: function(res){\n      console.log(res)\n    }\n  });*/\n  \n  upload.render({\n    elem: '#test4'\n    ,url: ''\n    ,accept: 'video'\n    ,done: function(res){\n      console.log(res)\n    }\n  });\n  \n  upload.render({\n    elem: '#test5'\n    ,url: ''\n    ,accept: 'audio'\n    ,done: function(res){\n      console.log(res)\n    }\n  });\n  \n  \n  upload.render({\n    elem: '#test6'\n    ,url: ''\n    ,auto: false\n    //,multiple: true\n    ,bindAction: '#test7'\n    ,done: function(res){\n      console.log(res)\n    }\n  });\n  \n  upload.render({\n    elem: '#test8'\n    ,url: ''\n    ,done: function(res){\n      console.log(res)\n    }\n  });\n  \n  upload.render({\n    elem: '#test9'\n    ,url: ''\n    ,done: function(res){\n      console.log(res)\n    }\n  });\n  \n});\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/util.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n<title>工具集 - layui</title>\n\n<link rel=\"stylesheet\" href=\"../src/css/layui.css\">\n\n<style>\nbody{padding: 50px;}\n</style>\n</head>\n<body>\n\n<div id=\"test\"></div>\n\n<hr>\n\n<div id=\"test1\"></div>\n\n<hr>\n\n1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>\n\n<script src=\"../src/layui.js\"></script>\n<script>\nlayui.use('util', function(){\n  var util = layui.util\n  ,$ = layui.$;\n\n  //固定块\n  util.fixbar({\n    bar1: true\n    ,bar2: true\n    //,css: {right: 100, bottom: 100}\n    ,click: function(type){\n      console.log(this, type);\n    }\n  });\n  \n  //倒计时\n  var endTime = new Date(2099,1,1).getTime() //假设为结束日期\n  ,serverTime = new Date().getTime(); //假设为当前服务器时间，这里采用的是本地时间，实际使用一般是取服务端的\n   \n  util.countdown(endTime, serverTime, function(date, serverTime, timer){\n    var str = date[0] + '天' + date[1] + '时' +  date[2] + '分' + date[3] + '秒';\n    $('#test').html('距离2099年1月1日还有：'+ str);\n  });\n  \n  //某个时间在当前时间的多久前\n  var str = util.timeAgo(new Date(2017,7,15,2,58,0));\n  $('#test1').html('示例写于：'+ str);\n});\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/flow-editor/demo/js/layui/examples/xingzuo.html",
    "content": "\n<!doctype html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>星座配对</title>\n<meta name=\"description\" content=\"\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"chrome=1\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0\"> \n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\"> \n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n<meta name=\"format-detection\" content=\"telephone=no\">\n<style>\n*{margin: 0; padding: 0;}\n.anim-box{ position: relative; width: 80%; height: 500px; margin: 50px auto; background-color: #000; color: #000;}\n.anim-box>*{position: absolute;}\n.anim-box span{width: 80px; height: 80px; line-height: 80px; text-align: center; border-radius: 100%; background-color: #fff; color: #000; z-index: 999;}\n.anim-box span{-webkit-transition: .8s; transition: .8s;}\n.anim-box ul{ bottom: 50px; left: 20px; font-size: 0;}\n.anim-box ul li{display: inline-block;  width: 80px; height: 80px; line-height: 80px; margin: 20px 20px 0 0;  text-align: center; border-radius: 100%; background-color: #c00; color: #fff; font-size: 14px;}\n\n@-webkit-keyframes beam{\n  0%{\n    box-shadow:0 0 0px rgba(255,255,255,0);\n    opacity: 0.3;\n  }\n  50%{\n    box-shadow: 0 0 100px rgba(255,255,255, 1);\n    opacity: 1;\n  }\n  100%{\n    box-shadow:0 0 0px rgba(255,255,255,0);\n    opacity: 0.3;\n    background-color: #fff;\n  }\n}\n@keyframes beam{\n  0%{\n    box-shadow:0 0 0px rgba(255,255,255, 0);\n    opacity: 0.3;\n  }\n  50%{\n    box-shadow:0 0 100px rgba(255,255,255, 1);\n    opacity: 1;\n  }\n  100%{\n    box-shadow:0 0 0px 0px rgba(255,255,255, 0);\n    opacity: 0.3;\n    background-color: #fff;\n  }\n}\n.beam{animation: beam 1s infinite ; -webkit-animation: beam 1s infinite ; }\n</style>\n</head>\n<body>\n\n<section class=\"anim-box\">\n  <span id=\"me\">你</span>\n  <ul class=\"xingzuo\">\n    <li>天秤座</li>\n    <li>处女座</li>\n    <li>水瓶座</li>\n    <li>双子座</li>\n    <li>双鱼座</li>\n    <li>白羊座</li>\n  </ul>\n</section>\n\n\n<script>\n;!function(){\n  \n  \n  var find = function(index){\n    var me = document.getElementById('me');\n    var ul = document.querySelectorAll('.xingzuo')[0];\n    var xzs = ul.querySelectorAll('li');\n    \n    var x = xzs[index].offsetLeft + ul.offsetLeft;\n    var y = xzs[index].offsetTop + ul.offsetTop;\n    \n    me.style['-webkit-transform'] = 'translate3d('+ x +'px, '+ y +'px, 0px) scale(0.5)';\n    me.style['transform'] = 'translate3d('+ x +'px, '+ y +'px, 0px) scale(0.5)';\n    me.style.opacity = 0.5;\n    \n    setTimeout(function(){\n      xzs[index].className = 'beam';\n      setTimeout(function(){\n        me.removeAttribute('style');\n      }, 500);\n    }, 800);\n  };\n  \n  \n  \n  setTimeout(function(){\n    find(Math.random()*5|0) //模拟匹配\n  }, 1000);\n  \n  \n}();\n</script>\n</body>\n</html>"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/analytics.js",
    "content": "(function(){var $c=function(a){this.w=a||[]};$c.prototype.set=function(a){this.w[a]=!0};$c.prototype.encode=function(){for(var a=[],b=0;b<this.w.length;b++)this.w[b]&&(a[Math.floor(b/6)]^=1<<b%6);for(b=0;b<a.length;b++)a[b]=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\".charAt(a[b]||0);return a.join(\"\")+\"~\"};var vd=new $c;function J(a){vd.set(a)}var Nd=function(a,b){var c=new $c(Dd(a));c.set(b);a.set(Gd,c.w)},Td=function(a){a=Dd(a);a=new $c(a);for(var b=vd.w.slice(),c=0;c<a.w.length;c++)b[c]=b[c]||a.w[c];return(new $c(b)).encode()},Dd=function(a){a=a.get(Gd);ka(a)||(a=[]);return a};var ea=function(a){return\"function\"==typeof a},ka=function(a){return\"[object Array]\"==Object.prototype.toString.call(Object(a))},qa=function(a){return void 0!=a&&-1<(a.constructor+\"\").indexOf(\"String\")},D=function(a,b){return 0==a.indexOf(b)},sa=function(a){return a?a.replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\"):\"\"},ra=function(){for(var a=O.navigator.userAgent+(M.cookie?M.cookie:\"\")+(M.referrer?M.referrer:\"\"),b=a.length,c=O.history.length;0<c;)a+=c--^b++;return[hd()^La(a)&2147483647,Math.round((new Date).getTime()/\n1E3)].join(\".\")},ta=function(a){var b=M.createElement(\"img\");b.width=1;b.height=1;b.src=a;return b},ua=function(){},K=function(a){if(encodeURIComponent instanceof Function)return encodeURIComponent(a);J(28);return a},L=function(a,b,c,d){try{a.addEventListener?a.addEventListener(b,c,!!d):a.attachEvent&&a.attachEvent(\"on\"+b,c)}catch(e){J(27)}},f=/^[\\w\\-:/.?=&%!]+$/,wa=function(a,b,c,d){a&&(c?(d=\"\",b&&f.test(b)&&(d=' id=\"'+b+'\"'),f.test(a)&&M.write(\"<script\"+d+' src=\"'+a+'\">\\x3c/script>')):(c=M.createElement(\"script\"),\nc.type=\"text/javascript\",c.async=!0,c.src=a,d&&(c.onload=d),b&&(c.id=b),a=M.getElementsByTagName(\"script\")[0],a.parentNode.insertBefore(c,a)))},Ud=function(){return\"https:\"==M.location.protocol},be=function(a,b){return E(M.location[b?\"href\":\"search\"],a)},E=function(a,b){return(a=a.match(\"(?:&|#|\\\\?)\"+K(b).replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g,\"\\\\$1\")+\"=([^&#]*)\"))&&2==a.length?a[1]:\"\"},xa=function(){var a=\"\"+M.location.hostname;return 0==a.indexOf(\"www.\")?a.substring(4):a},de=function(a,b){var c=\na.indexOf(b);if(5==c||6==c)if(a=a.charAt(c+b.length),\"/\"==a||\"?\"==a||\"\"==a||\":\"==a)return!0;return!1},ya=function(a,b){var c=M.referrer;if(/^https?:\\/\\//i.test(c)){if(a)return c;a=\"//\"+M.location.hostname;if(!de(c,a))return b&&(b=a.replace(/\\./g,\"-\")+\".cdn.ampproject.org\",de(c,b))?void 0:c}},za=function(a,b){if(1==b.length&&null!=b[0]&&\"object\"===typeof b[0])return b[0];for(var c={},d=Math.min(a.length+1,b.length),e=0;e<d;e++)if(\"object\"===typeof b[e]){for(var g in b[e])b[e].hasOwnProperty(g)&&(c[g]=\nb[e][g]);break}else e<a.length&&(c[a[e]]=b[e]);return c};var ee=function(){this.keys=[];this.values={};this.m={}};ee.prototype.set=function(a,b,c){this.keys.push(a);c?this.m[\":\"+a]=b:this.values[\":\"+a]=b};ee.prototype.get=function(a){return this.m.hasOwnProperty(\":\"+a)?this.m[\":\"+a]:this.values[\":\"+a]};ee.prototype.map=function(a){for(var b=0;b<this.keys.length;b++){var c=this.keys[b],d=this.get(c);d&&a(c,d)}};var O=window,M=document,va=function(a,b){return setTimeout(a,b)};var F=window,Ea=document,G=function(a){var b=F._gaUserPrefs;if(b&&b.ioo&&b.ioo()||a&&!0===F[\"ga-disable-\"+a])return!0;try{var c=F.external;if(c&&c._gaUserPrefs&&\"oo\"==c._gaUserPrefs)return!0}catch(g){}a=[];b=Ea.cookie.split(\";\");c=/^\\s*AMP_TOKEN=\\s*(.*?)\\s*$/;for(var d=0;d<b.length;d++){var e=b[d].match(c);e&&a.push(e[1])}for(b=0;b<a.length;b++)if(\"$OPT_OUT\"==decodeURIComponent(a[b]))return!0;return!1};var Ca=function(a){var b=[],c=M.cookie.split(\";\");a=new RegExp(\"^\\\\s*\"+a+\"=\\\\s*(.*?)\\\\s*$\");for(var d=0;d<c.length;d++){var e=c[d].match(a);e&&b.push(e[1])}return b},zc=function(a,b,c,d,e,g){e=G(e)?!1:eb.test(M.location.hostname)||\"/\"==c&&vc.test(d)?!1:!0;if(!e)return!1;b&&1200<b.length&&(b=b.substring(0,1200),J(24));c=a+\"=\"+b+\"; path=\"+c+\"; \";g&&(c+=\"expires=\"+(new Date((new Date).getTime()+g)).toGMTString()+\"; \");d&&\"none\"!=d&&(c+=\"domain=\"+d+\";\");d=M.cookie;M.cookie=c;if(!(d=d!=M.cookie))a:{a=\nCa(a);for(d=0;d<a.length;d++)if(b==a[d]){d=!0;break a}d=!1}return d},Cc=function(a){return K(a).replace(/\\(/g,\"%28\").replace(/\\)/g,\"%29\")},vc=/^(www\\.)?google(\\.com?)?(\\.[a-z]{2})?$/,eb=/(^|\\.)doubleclick\\.net$/i;var Fa,Ga,fb,Ab,ja=/^https?:\\/\\/[^/]*cdn\\.ampproject\\.org\\//,Ub=[],ic=function(){Z.D([ua])},tc=function(a,b){var c=Ca(\"AMP_TOKEN\");if(1<c.length)return J(55),!1;c=decodeURIComponent(c[0]||\"\");if(\"$OPT_OUT\"==c||\"$ERROR\"==c||G(b))return J(62),!1;if(!ja.test(M.referrer)&&\"$NOT_FOUND\"==c)return J(68),!1;if(void 0!==Ab)return J(56),va(function(){a(Ab)},0),!0;if(Fa)return Ub.push(a),!0;if(\"$RETRIEVING\"==c)return J(57),va(function(){tc(a,b)},1E3),!0;Fa=!0;c&&\"$\"!=c[0]||(xc(\"$RETRIEVING\",3E4),setTimeout(Mc,\n3E4),c=\"\");return Pc(c)?(Ub.push(a),!0):!1},Pc=function(a){if(!window.JSON)return J(58),!1;var b=O.XMLHttpRequest;if(!b)return J(59),!1;var c=new b;if(!(\"withCredentials\"in c))return J(60),!1;c.open(\"POST\",\"https://ampcid.google.com/v1/publisher:getClientId?key=AIzaSyA65lEHUEizIsNtlbNo-l2K18dT680nsaM\",!0);c.withCredentials=!0;c.setRequestHeader(\"Content-Type\",\"text/plain\");c.onload=function(){Fa=!1;if(4==c.readyState){try{200!=c.status&&(J(61),Qc(\"\",\"$ERROR\",3E4));var a=JSON.parse(c.responseText);\na.optOut?(J(63),Qc(\"\",\"$OPT_OUT\",31536E6)):a.clientId?Qc(a.clientId,a.securityToken,31536E6):(J(64),Qc(\"\",\"$NOT_FOUND\",36E5))}catch(e){J(65),Qc(\"\",\"$ERROR\",3E4)}c=null}};b={originScope:\"AMP_ECID_GOOGLE\"};a&&(b.securityToken=a);c.send(JSON.stringify(b));Ga=va(function(){J(66);Qc(\"\",\"$ERROR\",3E4)},1E3);return!0},Mc=function(){Fa=!1},xc=function(a,b){if(void 0===fb){fb=\"\";for(var c=id(),d=0;d<c.length;d++){var e=c[d];if(zc(\"AMP_TOKEN\",encodeURIComponent(a),\"/\",e,\"\",b)){fb=e;return}}}zc(\"AMP_TOKEN\",encodeURIComponent(a),\n\"/\",fb,\"\",b)},Qc=function(a,b,c){Ga&&clearTimeout(Ga);b&&xc(b,c);Ab=a;b=Ub;Ub=[];for(c=0;c<b.length;c++)b[c](a)};var oc=function(){return(Ba||Ud()?\"https:\":\"http:\")+\"//www.google-analytics.com\"},Da=function(a){this.name=\"len\";this.message=a+\"-8192\"},ba=function(a,b,c){c=c||ua;if(2036>=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge(\"len\",b.length),new Da(b.length);},wc=function(a,b,c){var d=ta(a+\"?\"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c){var d=O.XMLHttpRequest;if(!d)return!1;var e=new d;if(!(\"withCredentials\"in e))return!1;\na=a.replace(/^http:/,\"https:\");e.open(\"POST\",a,!0);e.withCredentials=!0;e.setRequestHeader(\"Content-Type\",\"text/plain\");e.onreadystatechange=function(){4==e.readyState&&(c(),e=null)};e.send(b);return!0},x=function(a,b,c){return O.navigator.sendBeacon?O.navigator.sendBeacon(a,b)?(c(),!0):!1:!1},ge=function(a,b,c){1<=100*Math.random()||G(\"?\")||(a=[\"t=error\",\"_e=\"+a,\"_v=j62\",\"sr=1\"],b&&a.push(\"_f=\"+b),c&&a.push(\"_m=\"+K(c.substring(0,100))),a.push(\"aip=1\"),a.push(\"z=\"+hd()),wc(oc()+\"/collect\",a.join(\"&\"),\nua))};var h=function(a){var b=O.gaData=O.gaData||{};return b[a]=b[a]||{}};var Ha=function(){this.M=[]};Ha.prototype.add=function(a){this.M.push(a)};Ha.prototype.D=function(a){try{for(var b=0;b<this.M.length;b++){var c=a.get(this.M[b]);c&&ea(c)&&c.call(O,a)}}catch(d){}b=a.get(Ia);b!=ua&&ea(b)&&(a.set(Ia,ua,!0),setTimeout(b,10))};function Ja(a){if(100!=a.get(Ka)&&La(P(a,Q))%1E4>=100*R(a,Ka))throw\"abort\";}function Ma(a){if(G(P(a,Na)))throw\"abort\";}function Oa(){var a=M.location.protocol;if(\"http:\"!=a&&\"https:\"!=a)throw\"abort\";}\nfunction Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&\"withCredentials\"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];Qa.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&(\"boolean\"==typeof c&&(c*=1),b.push(d.F+\"=\"+K(\"\"+c))))});b.push(\"z=\"+Bd());a.set(Ra,b.join(\"&\"),!0)}\nfunction Sa(a){var b=P(a,gd)||oc()+\"/collect\",c=P(a,fa);!c&&a.get(Vd)&&(c=\"beacon\");if(c){var d=P(a,Ra),e=a.get(Ia);e=e||ua;\"image\"==c?wc(b,d,e):\"xhr\"==c&&wd(b,d,e)||\"beacon\"==c&&x(b,d,e)||ba(b,d,e)}else ba(b,P(a,Ra),a.get(Ia));b=a.get(Na);b=h(b);c=b.hitcount;b.hitcount=c?c+1:1;b=a.get(Na);delete h(b).pending_experiments;a.set(Ia,ua,!0)}\nfunction Hc(a){(O.gaData=O.gaData||{}).expId&&a.set(Nc,(O.gaData=O.gaData||{}).expId);(O.gaData=O.gaData||{}).expVar&&a.set(Oc,(O.gaData=O.gaData||{}).expVar);var b=a.get(Na);if(b=h(b).pending_experiments){var c=[];for(d in b)b.hasOwnProperty(d)&&b[d]&&c.push(encodeURIComponent(d)+\".\"+encodeURIComponent(b[d]));var d=c.join(\"!\")}else d=void 0;d&&a.set(m,d,!0)}function cd(){if(O.navigator&&\"preview\"==O.navigator.loadPurpose)throw\"abort\";}\nfunction yd(a){var b=O.gaDevIds;ka(b)&&0!=b.length&&a.set(\"&did\",b.join(\",\"),!0)}function vb(a){if(!a.get(Na))throw\"abort\";};var hd=function(){return Math.round(2147483647*Math.random())},Bd=function(){try{var a=new Uint32Array(1);O.crypto.getRandomValues(a);return a[0]&2147483647}catch(b){return hd()}};function Ta(a){var b=R(a,Ua);500<=b&&J(15);var c=P(a,Va);if(\"transaction\"!=c&&\"item\"!=c){c=R(a,Wa);var d=(new Date).getTime(),e=R(a,Xa);0==e&&a.set(Xa,d);e=Math.round(2*(d-e)/1E3);0<e&&(c=Math.min(c+e,20),a.set(Xa,d));if(0>=c)throw\"abort\";a.set(Wa,--c)}a.set(Ua,++b)};var Ya=function(){this.data=new ee},Qa=new ee,Za=[];Ya.prototype.get=function(a){var b=$a(a),c=this.data.get(a);b&&void 0==c&&(c=ea(b.defaultValue)?b.defaultValue():b.defaultValue);return b&&b.Z?b.Z(this,a,c):c};var P=function(a,b){a=a.get(b);return void 0==a?\"\":\"\"+a},R=function(a,b){a=a.get(b);return void 0==a||\"\"===a?0:1*a};Ya.prototype.set=function(a,b,c){if(a)if(\"object\"==typeof a)for(var d in a)a.hasOwnProperty(d)&&ab(this,d,a[d],c);else ab(this,a,b,c)};\nvar ab=function(a,b,c,d){if(void 0!=c)switch(b){case Na:wb.test(c)}var e=$a(b);e&&e.o?e.o(a,b,c,d):a.data.set(b,c,d)},bb=function(a,b,c,d,e){this.name=a;this.F=b;this.Z=d;this.o=e;this.defaultValue=c},$a=function(a){var b=Qa.get(a);if(!b)for(var c=0;c<Za.length;c++){var d=Za[c],e=d[0].exec(a);if(e){b=d[1](e);Qa.set(b.name,b);break}}return b},yc=function(a){var b;Qa.map(function(c,d){d.F==a&&(b=d)});return b&&b.name},S=function(a,b,c,d,e){a=new bb(a,b,c,d,e);Qa.set(a.name,a);return a.name},cb=function(a,\nb){Za.push([new RegExp(\"^\"+a+\"$\"),b])},T=function(a,b,c){return S(a,b,c,void 0,db)},db=function(){};var gb=qa(window.GoogleAnalyticsObject)&&sa(window.GoogleAnalyticsObject)||\"ga\",jd=/^(?:utma\\.)?\\d+\\.\\d+$/,kd=/^amp-[\\w.-]{22,64}$/,Ba=!1,hb=T(\"apiVersion\",\"v\"),ib=T(\"clientVersion\",\"_v\");S(\"anonymizeIp\",\"aip\");var jb=S(\"adSenseId\",\"a\"),Va=S(\"hitType\",\"t\"),Ia=S(\"hitCallback\"),Ra=S(\"hitPayload\");S(\"nonInteraction\",\"ni\");S(\"currencyCode\",\"cu\");S(\"dataSource\",\"ds\");var Vd=S(\"useBeacon\",void 0,!1),fa=S(\"transport\");S(\"sessionControl\",\"sc\",\"\");S(\"sessionGroup\",\"sg\");S(\"queueTime\",\"qt\");var Ac=S(\"_s\",\"_s\");\nS(\"screenName\",\"cd\");var kb=S(\"location\",\"dl\",\"\"),lb=S(\"referrer\",\"dr\"),mb=S(\"page\",\"dp\",\"\");S(\"hostname\",\"dh\");var nb=S(\"language\",\"ul\"),ob=S(\"encoding\",\"de\");S(\"title\",\"dt\",function(){return M.title||void 0});cb(\"contentGroup([0-9]+)\",function(a){return new bb(a[0],\"cg\"+a[1])});var pb=S(\"screenColors\",\"sd\"),qb=S(\"screenResolution\",\"sr\"),rb=S(\"viewportSize\",\"vp\"),sb=S(\"javaEnabled\",\"je\"),tb=S(\"flashVersion\",\"fl\");S(\"campaignId\",\"ci\");S(\"campaignName\",\"cn\");S(\"campaignSource\",\"cs\");\nS(\"campaignMedium\",\"cm\");S(\"campaignKeyword\",\"ck\");S(\"campaignContent\",\"cc\");var ub=S(\"eventCategory\",\"ec\"),xb=S(\"eventAction\",\"ea\"),yb=S(\"eventLabel\",\"el\"),zb=S(\"eventValue\",\"ev\"),Bb=S(\"socialNetwork\",\"sn\"),Cb=S(\"socialAction\",\"sa\"),Db=S(\"socialTarget\",\"st\"),Eb=S(\"l1\",\"plt\"),Fb=S(\"l2\",\"pdt\"),Gb=S(\"l3\",\"dns\"),Hb=S(\"l4\",\"rrt\"),Ib=S(\"l5\",\"srt\"),Jb=S(\"l6\",\"tcp\"),Kb=S(\"l7\",\"dit\"),Lb=S(\"l8\",\"clt\"),Mb=S(\"timingCategory\",\"utc\"),Nb=S(\"timingVar\",\"utv\"),Ob=S(\"timingLabel\",\"utl\"),Pb=S(\"timingValue\",\"utt\");\nS(\"appName\",\"an\");S(\"appVersion\",\"av\",\"\");S(\"appId\",\"aid\",\"\");S(\"appInstallerId\",\"aiid\",\"\");S(\"exDescription\",\"exd\");S(\"exFatal\",\"exf\");var Nc=S(\"expId\",\"xid\"),Oc=S(\"expVar\",\"xvar\"),m=S(\"exp\",\"exp\"),Rc=S(\"_utma\",\"_utma\"),Sc=S(\"_utmz\",\"_utmz\"),Tc=S(\"_utmht\",\"_utmht\"),Ua=S(\"_hc\",void 0,0),Xa=S(\"_ti\",void 0,0),Wa=S(\"_to\",void 0,20);cb(\"dimension([0-9]+)\",function(a){return new bb(a[0],\"cd\"+a[1])});cb(\"metric([0-9]+)\",function(a){return new bb(a[0],\"cm\"+a[1])});S(\"linkerParam\",void 0,void 0,Bc,db);\nvar ld=S(\"usage\",\"_u\"),Gd=S(\"_um\");S(\"forceSSL\",void 0,void 0,function(){return Ba},function(a,b,c){J(34);Ba=!!c});var ed=S(\"_j1\",\"jid\"),ia=S(\"_j2\",\"gjid\");cb(\"\\\\&(.*)\",function(a){var b=new bb(a[0],a[1]),c=yc(a[0].substring(1));c&&(b.Z=function(a){return a.get(c)},b.o=function(a,b,g,ca){a.set(c,g,ca)},b.F=void 0);return b});\nvar Qb=T(\"_oot\"),dd=S(\"previewTask\"),Rb=S(\"checkProtocolTask\"),md=S(\"validationTask\"),Sb=S(\"checkStorageTask\"),Uc=S(\"historyImportTask\"),Tb=S(\"samplerTask\"),Vb=S(\"_rlt\"),Wb=S(\"buildHitTask\"),Xb=S(\"sendHitTask\"),Vc=S(\"ceTask\"),zd=S(\"devIdTask\"),Cd=S(\"timingTask\"),Ld=S(\"displayFeaturesTask\"),oa=S(\"customTask\"),V=T(\"name\"),Q=T(\"clientId\",\"cid\"),n=T(\"clientIdTime\"),xd=T(\"storedClientId\"),Ad=S(\"userId\",\"uid\"),Na=T(\"trackingId\",\"tid\"),U=T(\"cookieName\",void 0,\"_ga\"),W=T(\"cookieDomain\"),Yb=T(\"cookiePath\",\nvoid 0,\"/\"),Zb=T(\"cookieExpires\",void 0,63072E3),Hd=T(\"cookieUpdate\",void 0,!0),$b=T(\"legacyCookieDomain\"),Wc=T(\"legacyHistoryImport\",void 0,!0),ac=T(\"storage\",void 0,\"cookie\"),bc=T(\"allowLinker\",void 0,!1),cc=T(\"allowAnchor\",void 0,!0),Ka=T(\"sampleRate\",\"sf\",100),dc=T(\"siteSpeedSampleRate\",void 0,1),ec=T(\"alwaysSendReferrer\",void 0,!1),I=T(\"_gid\",\"_gid\"),la=T(\"_gcn\"),Kd=T(\"useAmpClientId\"),ce=T(\"_gclid\"),fe=T(\"_gt\"),he=T(\"_ge\",void 0,7776E6),ie=T(\"_gclsrc\"),je=T(\"storeGac\",void 0,!0),gd=S(\"transportUrl\"),\nMd=S(\"_r\",\"_r\");function X(a,b,c,d){b[a]=function(){try{return d&&J(d),c.apply(this,arguments)}catch(e){throw ge(\"exc\",a,e&&e.name),e;}}};var Od=function(a,b){this.V=1E4;this.fa=a;this.$=!1;this.oa=b;this.ea=1},Ed=function(a,b){var c;if(a.fa&&a.$)return 0;a.$=!0;if(b){if(a.oa&&R(b,a.oa))return R(b,a.oa);if(0==b.get(dc))return 0}if(0==a.V)return 0;void 0===c&&(c=Bd());return 0==c%a.V?Math.floor(c/a.V)%a.ea+1:0};function fc(){var a,b;if((b=(b=O.navigator)?b.plugins:null)&&b.length)for(var c=0;c<b.length&&!a;c++){var d=b[c];-1<d.name.indexOf(\"Shockwave Flash\")&&(a=d.description)}if(!a)try{var e=new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");a=e.GetVariable(\"$version\")}catch(g){}if(!a)try{e=new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\"),a=\"WIN 6,0,21,0\",e.AllowScriptAccess=\"always\",a=e.GetVariable(\"$version\")}catch(g){}if(!a)try{e=new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\"),a=e.GetVariable(\"$version\")}catch(g){}a&&\n(e=a.match(/[\\d]+/g))&&3<=e.length&&(a=e[0]+\".\"+e[1]+\" r\"+e[2]);return a||void 0};var aa=function(a){var b=Math.min(R(a,dc),100);return La(P(a,Q))%100>=b?!1:!0},gc=function(a){var b={};if(Ec(b)||Fc(b)){var c=b[Eb];void 0==c||Infinity==c||isNaN(c)||(0<c?(Y(b,Gb),Y(b,Jb),Y(b,Ib),Y(b,Fb),Y(b,Hb),Y(b,Kb),Y(b,Lb),va(function(){a(b)},10)):L(O,\"load\",function(){gc(a)},!1))}},Ec=function(a){var b=O.performance||O.webkitPerformance;b=b&&b.timing;if(!b)return!1;var c=b.navigationStart;if(0==c)return!1;a[Eb]=b.loadEventStart-c;a[Gb]=b.domainLookupEnd-b.domainLookupStart;a[Jb]=b.connectEnd-\nb.connectStart;a[Ib]=b.responseStart-b.requestStart;a[Fb]=b.responseEnd-b.responseStart;a[Hb]=b.fetchStart-c;a[Kb]=b.domInteractive-c;a[Lb]=b.domContentLoadedEventStart-c;return!0},Fc=function(a){if(O.top!=O)return!1;var b=O.external,c=b&&b.onloadT;b&&!b.isValidLoadTime&&(c=void 0);2147483648<c&&(c=void 0);0<c&&b.setPageReadyTime();if(void 0==c)return!1;a[Eb]=c;return!0},Y=function(a,b){var c=a[b];if(isNaN(c)||Infinity==c||0>c)a[b]=void 0},Fd=function(a){return function(b){if(\"pageview\"==b.get(Va)&&\n!a.I){a.I=!0;var c=aa(b),d=0<E(b.get(kb),\"gclid\").length;(c||d)&&gc(function(b){c&&a.send(\"timing\",b);d&&a.send(\"adtiming\",b)})}}};var hc=!1,mc=function(a){if(\"cookie\"==P(a,ac)){if(a.get(Hd)||P(a,xd)!=P(a,Q)){var b=1E3*R(a,Zb);ma(a,Q,U,b)}ma(a,I,la,864E5);if(a.get(je)){if(b=a.get(ce)){var c=a.get(ie);if(c&&\"aw.ds\"!=c)J(69);else{b=[\"1\",a.get(fe),Cc(b)].join(\".\");c=kc(P(a,Yb));var d=lc(P(a,W)),e=P(a,Na),g=Math.min(R(a,he),1E3*R(a,Zb));g=Math.min(g,1E3*R(a,fe)+g-(new Date).getTime());a.data.set(he,g);0<g&&(J(77),zc(\"_gac_\"+Cc(e),b,c,d,e,g))}}}else J(75)}},ma=function(a,b,c,d){var e=nd(a,b);if(e){c=P(a,c);var g=kc(P(a,Yb)),ca=lc(P(a,\nW)),l=P(a,Na);if(\"auto\"!=ca)zc(c,e,g,ca,l,d)&&(hc=!0);else{J(32);for(var k=id(),w=0;w<k.length;w++)if(ca=k[w],a.data.set(W,ca),e=nd(a,b),zc(c,e,g,ca,l,d)){hc=!0;return}a.data.set(W,\"auto\")}}},nc=function(a){if(\"cookie\"==P(a,ac)&&!hc&&(mc(a),!hc))throw\"abort\";},Yc=function(a){if(a.get(Wc)){var b=P(a,W),c=P(a,$b)||xa(),d=Xc(\"__utma\",c,b);d&&(J(19),a.set(Tc,(new Date).getTime(),!0),a.set(Rc,d.R),(b=Xc(\"__utmz\",c,b))&&d.hash==b.hash&&a.set(Sc,b.R))}},nd=function(a,b){b=Cc(P(a,b));var c=lc(P(a,W)).split(\".\").length;\na=jc(P(a,Yb));1<a&&(c+=\"-\"+a);return b?[\"GA1\",c,b].join(\".\"):\"\"},Xd=function(a,b){return na(b,P(a,W),P(a,Yb))},na=function(a,b,c){if(!a||1>a.length)J(12);else{for(var d=[],e=0;e<a.length;e++){var g=a[e];var ca=g.split(\".\");var l=ca.shift();(\"GA1\"==l||\"1\"==l)&&1<ca.length?(g=ca.shift().split(\"-\"),1==g.length&&(g[1]=\"1\"),g[0]*=1,g[1]*=1,ca={H:g,s:ca.join(\".\")}):ca=kd.test(g)?{H:[0,0],s:g}:void 0;ca&&d.push(ca)}if(1==d.length)return J(13),d[0].s;if(0==d.length)J(12);else{J(14);d=Gc(d,lc(b).split(\".\").length,\n0);if(1==d.length)return d[0].s;d=Gc(d,jc(c),1);1<d.length&&J(41);return d[0]&&d[0].s}}},Gc=function(a,b,c){for(var d=[],e=[],g,ca=0;ca<a.length;ca++){var l=a[ca];l.H[c]==b?d.push(l):void 0==g||l.H[c]<g?(e=[l],g=l.H[c]):l.H[c]==g&&e.push(l)}return 0<d.length?d:e},lc=function(a){return 0==a.indexOf(\".\")?a.substr(1):a},id=function(){var a=[],b=xa().split(\".\");if(4==b.length){var c=b[b.length-1];if(parseInt(c,10)==c)return[\"none\"]}for(c=b.length-2;0<=c;c--)a.push(b.slice(c).join(\".\"));a.push(\"none\");\nreturn a},kc=function(a){if(!a)return\"/\";1<a.length&&a.lastIndexOf(\"/\")==a.length-1&&(a=a.substr(0,a.length-1));0!=a.indexOf(\"/\")&&(a=\"/\"+a);return a},jc=function(a){a=kc(a);return\"/\"==a?1:a.split(\"/\").length};function Xc(a,b,c){\"none\"==b&&(b=\"\");var d=[],e=Ca(a);a=\"__utma\"==a?6:2;for(var g=0;g<e.length;g++){var ca=(\"\"+e[g]).split(\".\");ca.length>=a&&d.push({hash:ca[0],R:e[g],O:ca})}if(0!=d.length)return 1==d.length?d[0]:Zc(b,d)||Zc(c,d)||Zc(null,d)||d[0]}function Zc(a,b){if(null==a)var c=a=1;else c=La(a),a=La(D(a,\".\")?a.substring(1):\".\"+a);for(var d=0;d<b.length;d++)if(b[d].hash==c||b[d].hash==a)return b[d]};var od=new RegExp(/^https?:\\/\\/([^\\/:]+)/),pd=/(.*)([?&#])(?:_ga=[^&#]*)(?:&?)(.*)/;function Bc(a){var b=a.get(Q),c=a.get(I)||\"\";b=\"_ga=2.\"+K(pa(c+b,0)+\".\"+c+\"-\"+b);if(c=a.get(ce)){var d=R(a,fe);1E3*d+R(a,he)<=(new Date).getTime()?(J(76),a=\"\"):(J(44),a=\"&_gac=1.\"+K([pa(c,0),d,c].join(\".\")))}else a=\"\";return b+a}\nfunction Ic(a,b){var c=new Date,d=O.navigator,e=d.plugins||[];a=[a,d.userAgent,c.getTimezoneOffset(),c.getYear(),c.getDate(),c.getHours(),c.getMinutes()+b];for(b=0;b<e.length;++b)a.push(e[b].description);return La(a.join(\".\"))}function pa(a,b){var c=new Date,d=O.navigator,e=c.getHours()+Math.floor((c.getMinutes()+b)/60);return La([a,d.userAgent,d.language||\"\",c.getTimezoneOffset(),c.getYear(),c.getDate()+Math.floor(e/24),(24+e)%24,(60+c.getMinutes()+b)%60].join(\".\"))}\nvar Dc=function(a){J(48);this.target=a;this.T=!1};Dc.prototype.ca=function(a,b){if(a.tagName){if(\"a\"==a.tagName.toLowerCase()){a.href&&(a.href=qd(this,a.href,b));return}if(\"form\"==a.tagName.toLowerCase())return rd(this,a)}if(\"string\"==typeof a)return qd(this,a,b)};\nvar qd=function(a,b,c){var d=pd.exec(b);d&&3<=d.length&&(b=d[1]+(d[3]?d[2]+d[3]:\"\"));a=a.target.get(\"linkerParam\");var e=b.indexOf(\"?\");d=b.indexOf(\"#\");c?b+=(-1==d?\"#\":\"&\")+a:(c=-1==e?\"?\":\"&\",b=-1==d?b+(c+a):b.substring(0,d)+c+a+b.substring(d));return b=b.replace(/&+_ga=/,\"&_ga=\")},rd=function(a,b){if(b&&b.action)if(\"get\"==b.method.toLowerCase()){a=a.target.get(\"linkerParam\").split(\"=\")[1];for(var c=b.childNodes||[],d=0;d<c.length;d++)if(\"_ga\"==c[d].name){c[d].setAttribute(\"value\",a);return}c=M.createElement(\"input\");\nc.setAttribute(\"type\",\"hidden\");c.setAttribute(\"name\",\"_ga\");c.setAttribute(\"value\",a);b.appendChild(c)}else\"post\"==b.method.toLowerCase()&&(b.action=qd(a,b.action))};\nDc.prototype.S=function(a,b,c){function d(c){try{c=c||O.event;a:{var d=c.target||c.srcElement;for(c=100;d&&0<c;){if(d.href&&d.nodeName.match(/^a(?:rea)?$/i)){var g=d;break a}d=d.parentNode;c--}g={}}(\"http:\"==g.protocol||\"https:\"==g.protocol)&&sd(a,g.hostname||\"\")&&g.href&&(g.href=qd(e,g.href,b))}catch(k){J(26)}}var e=this;this.T||(this.T=!0,L(M,\"mousedown\",d,!1),L(M,\"keyup\",d,!1));c&&L(M,\"submit\",function(b){b=b||O.event;if((b=b.target||b.srcElement)&&b.action){var c=b.action.match(od);c&&sd(a,c[1])&&\nrd(e,b)}})};function sd(a,b){if(b==M.location.hostname)return!1;for(var c=0;c<a.length;c++)if(a[c]instanceof RegExp){if(a[c].test(b))return!0}else if(0<=b.indexOf(a[c]))return!0;return!1}function ke(a,b){return b!=Ic(a,0)&&b!=Ic(a,-1)&&b!=Ic(a,-2)&&b!=pa(a,0)&&b!=pa(a,-1)&&b!=pa(a,-2)};var p=/^(GTM|OPT)-[A-Z0-9]+$/,q=/;_gaexp=[^;]*/g,r=/;((__utma=)|([^;=]+=GAX?\\d+\\.))[^;]*/g,Aa=/^https?:\\/\\/[\\w\\-.]+\\.google.com(:\\d+)?\\/optimize\\/opt-launch\\.html\\?.*$/,t=function(a){function b(a,b){b&&(c+=\"&\"+a+\"=\"+K(b))}var c=\"https://www.google-analytics.com/gtm/js?id=\"+K(a.id);\"dataLayer\"!=a.B&&b(\"l\",a.B);b(\"t\",a.target);b(\"cid\",a.clientId);b(\"cidt\",a.ka);b(\"gac\",a.la);b(\"aip\",a.ia);a.sync&&b(\"m\",\"sync\");b(\"cycle\",a.G);a.qa&&b(\"gclid\",a.qa);Aa.test(M.referrer)&&b(\"cb\",String(hd()));return c};var Jd=function(a,b,c){this.U=ed;this.aa=b;(b=c)||(b=(b=P(a,V))&&\"t0\"!=b?Wd.test(b)?\"_gat_\"+Cc(P(a,Na)):\"_gat_\"+Cc(b):\"_gat\");this.Y=b},Rd=function(a,b){var c=b.get(Wb);b.set(Wb,function(b){Pd(a,b,a.U);Pd(a,b,ia);var d=c(b);Qd(a,b);return d});var d=b.get(Xb);b.set(Xb,function(b){var c=d(b);Id(a,b);return c})},Pd=function(a,b,c){b.get(c)||(\"1\"==Ca(a.Y)[0]?b.set(c,\"\",!0):b.set(c,\"\"+hd(),!0))},Qd=function(a,b){b.get(a.U)&&zc(a.Y,\"1\",b.get(Yb),b.get(W),b.get(Na),6E4)},Id=function(a,b){if(b.get(a.U)){var c=\nnew ee,d=function(a){$a(a).F&&c.set($a(a).F,b.get(a))};d(hb);d(ib);d(Na);d(Q);d(Ad);d(a.U);d(ia);d(I);c.set($a(ld).F,Td(b));var e=a.aa;c.map(function(a,b){e+=K(a)+\"=\";e+=K(\"\"+b)+\"&\"});e+=\"z=\"+hd();ta(e);b.set(a.U,\"\",!0)}},Wd=/^gtm\\d+$/;var fd=function(a,b){a=a.b;if(!a.get(\"dcLoaded\")){Nd(a,29);b=b||{};var c;b[U]&&(c=Cc(b[U]));b=new Jd(a,\"https://stats.g.doubleclick.net/r/collect?t=dc&aip=1&_r=3&\",c);Rd(b,a);a.set(\"dcLoaded\",!0)}};var Sd=function(a){if(!a.get(\"dcLoaded\")&&\"cookie\"==a.get(ac)){Nd(a,51);var b=new Jd(a);Pd(b,a,b.U);Pd(b,a,ia);Qd(b,a);a.get(b.U)&&(a.set(Md,1,!0),a.set(gd,oc()+\"/r/collect\",!0))}};var Lc=function(){var a=O.gaGlobal=O.gaGlobal||{};return a.hid=a.hid||hd()};var ad,bd=function(a,b,c){if(!ad){var d=M.location.hash;var e=O.name,g=/^#?gaso=([^&]*)/;if(e=(d=(d=d&&d.match(g)||e&&e.match(g))?d[1]:Ca(\"GASO\")[0]||\"\")&&d.match(/^(?:!([-0-9a-z.]{1,40})!)?([-.\\w]{10,1200})$/i))zc(\"GASO\",\"\"+d,c,b,a,0),window._udo||(window._udo=b),window._utcp||(window._utcp=c),a=e[1],wa(\"https://www.google.com/analytics/web/inpage/pub/inpage.js?\"+(a?\"prefix=\"+a+\"&\":\"\")+hd(),\"_gasojs\");ad=!0}};var H=function(a){return a?(1*a).toFixed(3):\"0\"},da=function(a){var b=O.performance;if(b&&b.getEntriesByName){J(35);var c=\"https://www.google-analytics.com/analytics.js?wpid=\"+a;wa(c,void 0,void 0,function(){try{var d=1,e=b.getEntriesByName(\"https://www.google-analytics.com/analytics.js\");e&&0!=e.length||(e=b.getEntriesByName(\"http://www.google-analytics.com/analytics.js\"),d=0);var g=b.getEntriesByName(c);if(e&&1==e.length&&g&&1==g.length){J(37);var ca=e[0],l=g[0],k={tid:a,ad:H(ca.duration),bd:H(l.duration),\nar:H(ca.responseEnd-ca.requestStart),br:H(l.responseEnd-l.requestStart),an:H(ca.domainLookupEnd-ca.domainLookupStart),bn:H(l.domainLookupEnd-l.domainLookupStart),ac:H(ca.connectEnd-ca.connectStart),bc:H(l.connectEnd-l.connectStart),as:d};d=[];d.push(\"_v=j62\");d.push(\"id=10\");for(var w in k)k.hasOwnProperty(w)&&d.push(w+\"=\"+K(k[w]));d.push(\"z=\"+hd());wc(\"https://www.google-analytics.com/u/d\",d.join(\"&\"),ua)}}catch(ha){}})}};var wb=/^(UA|YT|MO|GP)-(\\d+)-(\\d+)$/,pc=function(a){function b(a,b){d.b.data.set(a,b)}function c(a,c){b(a,c);d.filters.add(a)}var d=this;this.b=new Ya;this.filters=new Ha;b(V,a[V]);b(Na,sa(a[Na]));b(U,a[U]);b(W,a[W]||xa());b(Yb,a[Yb]);b(Zb,a[Zb]);b(Hd,a[Hd]);b($b,a[$b]);b(Wc,a[Wc]);b(bc,a[bc]);b(cc,a[cc]);b(Ka,a[Ka]);b(dc,a[dc]);b(ec,a[ec]);b(ac,a[ac]);b(Ad,a[Ad]);b(n,a[n]);b(Kd,a[Kd]);b(je,a[je]);b(hb,1);b(ib,\"j62\");c(Qb,Ma);c(oa,ua);c(dd,cd);c(Rb,Oa);c(md,vb);c(Sb,nc);c(Uc,Yc);c(Tb,Ja);c(Vb,Ta);\nc(Vc,Hc);c(zd,yd);c(Ld,Sd);c(Wb,Pa);c(Xb,Sa);c(Cd,Fd(this));Kc(this.b);Jc(this.b,a[Q]);this.b.set(jb,Lc());bd(this.b.get(Na),this.b.get(W),this.b.get(Yb));this.ra=new Od(!0,\"gaexp10\")},Jc=function(a,b){var c=P(a,U);a.data.set(la,\"_ga\"==c?\"_gid\":c+\"_gid\");if(\"cookie\"==P(a,ac)){hc=!1;c=Ca(P(a,U));c=Xd(a,c);if(!c){c=P(a,W);var d=P(a,$b)||xa();c=Xc(\"__utma\",d,c);void 0!=c?(J(10),c=c.O[1]+\".\"+c.O[2]):c=void 0}c&&(hc=!0);if(d=c&&!a.get(Hd))if(d=c.split(\".\"),2!=d.length)d=!1;else if(d=Number(d[1])){var e=\nR(a,Zb);d=d+e<(new Date).getTime()/1E3}else d=!1;d&&(c=void 0);c&&(a.data.set(xd,c),a.data.set(Q,c),c=Ca(P(a,la)),(c=Xd(a,c))&&a.data.set(I,c));a.get(je)&&!a.get(ce)&&(c=Ca(\"_gac_\"+Cc(P(a,Na))))&&0!=c.length&&(1<c.length&&J(73),c=c[0],c=c.split(\".\"),\"1\"!=c[0]||3!=c.length?J(74):(a.data.set(fe,c[1]),a.data.set(ce,c[2])))}if(a.get(Hd))a:if(d=be(\"_ga\",a.get(cc)))if(a.get(bc))if(c=d.indexOf(\".\"),-1==c)J(22);else{e=d.substring(0,c);var g=d.substring(c+1);c=g.indexOf(\".\");d=g.substring(0,c);g=g.substring(c+\n1);if(\"1\"==e){if(c=g,ke(c,d)){J(23);break a}}else if(\"2\"==e){c=g.indexOf(\"-\");e=\"\";0<c?(e=g.substring(0,c),c=g.substring(c+1)):c=g.substring(1);if(ke(e+c,d)){J(53);break a}e&&(J(2),a.data.set(I,e))}else{J(22);break a}J(11);a.data.set(Q,c);if(c=be(\"_gac\",a.get(cc)))c=c.split(\".\"),\"1\"!=c[0]||4!=c.length?J(72):ke(c[3],c[1])?J(71):(a.data.set(ce,c[3]),a.data.set(fe,c[2]),J(70))}else J(21);b&&(J(9),a.data.set(Q,K(b)));a.get(Q)||((b=(b=O.gaGlobal&&O.gaGlobal.vid)&&-1!=b.search(jd)?b:void 0)?(J(17),a.data.set(Q,\nb)):(J(8),a.data.set(Q,ra())));a.get(I)||(J(3),a.data.set(I,ra()));mc(a)},Kc=function(a){var b=O.navigator,c=O.screen,d=M.location;a.set(lb,ya(a.get(ec),a.get(Kd)));if(d){var e=d.pathname||\"\";\"/\"!=e.charAt(0)&&(J(31),e=\"/\"+e);a.set(kb,d.protocol+\"//\"+d.hostname+e+d.search)}c&&a.set(qb,c.width+\"x\"+c.height);c&&a.set(pb,c.colorDepth+\"-bit\");c=M.documentElement;var g=(e=M.body)&&e.clientWidth&&e.clientHeight,ca=[];c&&c.clientWidth&&c.clientHeight&&(\"CSS1Compat\"===M.compatMode||!g)?ca=[c.clientWidth,\nc.clientHeight]:g&&(ca=[e.clientWidth,e.clientHeight]);c=0>=ca[0]||0>=ca[1]?\"\":ca.join(\"x\");a.set(rb,c);a.set(tb,fc());a.set(ob,M.characterSet||M.charset);a.set(sb,b&&\"function\"===typeof b.javaEnabled&&b.javaEnabled()||!1);a.set(nb,(b&&(b.language||b.browserLanguage)||\"\").toLowerCase());a.data.set(ce,be(\"gclid\",!0));a.data.set(ie,be(\"gclsrc\",!0));a.data.set(fe,Math.round((new Date).getTime()/1E3));if(d&&a.get(cc)&&(b=M.location.hash)){b=b.split(/[?&#]+/);d=[];for(c=0;c<b.length;++c)(D(b[c],\"utm_id\")||\nD(b[c],\"utm_campaign\")||D(b[c],\"utm_source\")||D(b[c],\"utm_medium\")||D(b[c],\"utm_term\")||D(b[c],\"utm_content\")||D(b[c],\"gclid\")||D(b[c],\"dclid\")||D(b[c],\"gclsrc\"))&&d.push(b[c]);0<d.length&&(b=\"#\"+d.join(\"&\"),a.set(kb,a.get(kb)+b))}};pc.prototype.get=function(a){return this.b.get(a)};pc.prototype.set=function(a,b){this.b.set(a,b)};var qc={pageview:[mb],event:[ub,xb,yb,zb],social:[Bb,Cb,Db],timing:[Mb,Nb,Pb,Ob]};\npc.prototype.send=function(a){if(!(1>arguments.length)){if(\"string\"===typeof arguments[0]){var b=arguments[0];var c=[].slice.call(arguments,1)}else b=arguments[0]&&arguments[0][Va],c=arguments;b&&(c=za(qc[b]||[],c),c[Va]=b,this.b.set(c,void 0,!0),this.filters.D(this.b),this.b.data.m={},Ed(this.ra,this.b)&&da(this.b.get(Na)))}};pc.prototype.ma=function(a,b){var c=this;u(a,c,b)||(v(a,function(){u(a,c,b)}),y(String(c.get(V)),a,void 0,b,!0))};var rc=function(a){if(\"prerender\"==M.visibilityState)return!1;a();return!0},z=function(a){if(!rc(a)){J(16);var b=!1,c=function(){if(!b&&rc(a)){b=!0;var d=c,e=M;e.removeEventListener?e.removeEventListener(\"visibilitychange\",d,!1):e.detachEvent&&e.detachEvent(\"onvisibilitychange\",d)}};L(M,\"visibilitychange\",c)}};var td=/^(?:(\\w+)\\.)?(?:(\\w+):)?(\\w+)$/,sc=function(a){if(ea(a[0]))this.u=a[0];else{var b=td.exec(a[0]);null!=b&&4==b.length&&(this.c=b[1]||\"t0\",this.K=b[2]||\"\",this.C=b[3],this.a=[].slice.call(a,1),this.K||(this.A=\"create\"==this.C,this.i=\"require\"==this.C,this.g=\"provide\"==this.C,this.ba=\"remove\"==this.C),this.i&&(3<=this.a.length?(this.X=this.a[1],this.W=this.a[2]):this.a[1]&&(qa(this.a[1])?this.X=this.a[1]:this.W=this.a[1])));b=a[1];a=a[2];if(!this.C)throw\"abort\";if(this.i&&(!qa(b)||\"\"==b))throw\"abort\";\nif(this.g&&(!qa(b)||\"\"==b||!ea(a)))throw\"abort\";if(ud(this.c)||ud(this.K))throw\"abort\";if(this.g&&\"t0\"!=this.c)throw\"abort\";}};function ud(a){return 0<=a.indexOf(\".\")||0<=a.indexOf(\":\")};var Yd,Zd,$d,A;Yd=new ee;$d=new ee;A=new ee;Zd={ec:45,ecommerce:46,linkid:47};\nvar u=function(a,b,c){b==N||b.get(V);var d=Yd.get(a);if(!ea(d))return!1;b.plugins_=b.plugins_||new ee;if(b.plugins_.get(a))return!0;b.plugins_.set(a,new d(b,c||{}));return!0},y=function(a,b,c,d,e){if(!ea(Yd.get(b))&&!$d.get(b)){Zd.hasOwnProperty(b)&&J(Zd[b]);if(p.test(b)){J(52);a=N.j(a);if(!a)return!0;c=d||{};d={id:b,B:c.dataLayer||\"dataLayer\",ia:!!a.get(\"anonymizeIp\"),sync:e,G:!1};a.get(\"&gtm\")==b&&(d.G=!0);var g=String(a.get(\"name\"));\"t0\"!=g&&(d.target=g);G(String(a.get(\"trackingId\")))||(d.clientId=\nString(a.get(Q)),d.ka=Number(a.get(n)),c=c.palindrome?r:q,c=(c=M.cookie.replace(/^|(; +)/g,\";\").match(c))?c.sort().join(\"\").substring(1):void 0,d.la=c,d.qa=E(a.b.get(kb)||\"\",\"gclid\"));a=d.B;c=(new Date).getTime();O[a]=O[a]||[];c={\"gtm.start\":c};e||(c.event=\"gtm.js\");O[a].push(c);c=t(d)}!c&&Zd.hasOwnProperty(b)?(J(39),c=b+\".js\"):J(43);c&&(c&&0<=c.indexOf(\"/\")||(c=(Ba||Ud()?\"https:\":\"http:\")+\"//www.google-analytics.com/plugins/ua/\"+c),d=ae(c),a=d.protocol,c=M.location.protocol,(\"https:\"==a||a==c||(\"http:\"!=\na?0:\"http:\"==c))&&B(d)&&(wa(d.url,void 0,e),$d.set(b,!0)))}},v=function(a,b){var c=A.get(a)||[];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;c<b.length;c++)b[c]();A.set(a,[])},B=function(a){var b=ae(M.location.href);if(D(a.url,\"https://www.google-analytics.com/gtm/js?id=\"))return!0;if(a.query||0<=a.url.indexOf(\"?\")||0<=a.path.indexOf(\"://\"))return!1;if(a.host==b.host&&a.port==b.port)return!0;b=\"http:\"==a.protocol?80:443;return\"www.google-analytics.com\"==a.host&&(a.port||\nb)==b&&D(a.path,\"/plugins/\")?!0:!1},ae=function(a){function b(a){var b=(a.hostname||\"\").split(\":\")[0].toLowerCase(),c=(a.protocol||\"\").toLowerCase();c=1*a.port||(\"http:\"==c?80:\"https:\"==c?443:\"\");a=a.pathname||\"\";D(a,\"/\")||(a=\"/\"+a);return[b,\"\"+c,a]}var c=M.createElement(\"a\");c.href=M.location.href;var d=(c.protocol||\"\").toLowerCase(),e=b(c),g=c.search||\"\",ca=d+\"//\"+e[0]+(e[1]?\":\"+e[1]:\"\");D(a,\"//\")?a=d+a:D(a,\"/\")?a=ca+a:!a||D(a,\"?\")?a=ca+e[2]+(a||g):0>a.split(\"/\")[0].indexOf(\":\")&&(a=ca+e[2].substring(0,\ne[2].lastIndexOf(\"/\"))+\"/\"+a);c.href=a;d=b(c);return{protocol:(c.protocol||\"\").toLowerCase(),host:d[0],port:d[1],path:d[2],query:c.search||\"\",url:a||\"\"}};var Z={ga:function(){Z.f=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments);b=Z.f.concat(b);for(Z.f=[];0<b.length&&!Z.v(b[0])&&!(b.shift(),0<Z.f.length););Z.f=Z.f.concat(b)};Z.J=function(a){for(var b=[],c=0;c<arguments.length;c++)try{var d=new sc(arguments[c]);d.g?C(d.a[0],d.a[1]):(d.i&&(d.ha=y(d.c,d.a[0],d.X,d.W)),b.push(d))}catch(e){}return b};\nZ.v=function(a){try{if(a.u)a.u.call(O,N.j(\"t0\"));else{var b=a.c==gb?N:N.j(a.c);if(a.A){if(\"t0\"==a.c&&(b=N.create.apply(N,a.a),null===b))return!0}else if(a.ba)N.remove(a.c);else if(b)if(a.i){if(a.ha&&(a.ha=y(a.c,a.a[0],a.X,a.W)),!u(a.a[0],b,a.W))return!0}else if(a.K){var c=a.C,d=a.a,e=b.plugins_.get(a.K);e[c].apply(e,d)}else b[a.C].apply(b,a.a)}}catch(g){}};var N=function(a){J(1);Z.D.apply(Z,[arguments])};N.h={};N.P=[];N.L=0;N.answer=42;var uc=[Na,W,V];\nN.create=function(a){var b=za(uc,[].slice.call(arguments));b[V]||(b[V]=\"t0\");var c=\"\"+b[V];if(N.h[c])return N.h[c];a:{if(b[Kd]){J(67);if(b[ac]&&\"cookie\"!=b[ac]){var d=!1;break a}if(void 0!==Ab)b[Q]||(b[Q]=Ab);else{b:{d=String(b[W]||xa());var e=String(b[Yb]||\"/\"),g=Ca(String(b[U]||\"_ga\"));d=na(g,d,e);if(!d||jd.test(d))d=!0;else if(d=Ca(\"AMP_TOKEN\"),0==d.length)d=!0;else{if(1==d.length&&(d=decodeURIComponent(d[0]),\"$RETRIEVING\"==d||\"$OPT_OUT\"==d||\"$ERROR\"==d||\"$NOT_FOUND\"==d)){d=!0;break b}d=!1}}if(d&&\ntc(ic,String(b[Na]))){d=!0;break a}}}d=!1}if(d)return null;b=new pc(b);N.h[c]=b;N.P.push(b);return b};N.remove=function(a){for(var b=0;b<N.P.length;b++)if(N.P[b].get(V)==a){N.P.splice(b,1);N.h[a]=null;break}};N.j=function(a){return N.h[a]};N.getAll=function(){return N.P.slice(0)};\nN.N=function(){\"ga\"!=gb&&J(49);var a=O[gb];if(!a||42!=a.answer){N.L=a&&a.l;N.loaded=!0;var b=O[gb]=N;X(\"create\",b,b.create);X(\"remove\",b,b.remove);X(\"getByName\",b,b.j,5);X(\"getAll\",b,b.getAll,6);b=pc.prototype;X(\"get\",b,b.get,7);X(\"set\",b,b.set,4);X(\"send\",b,b.send);X(\"requireSync\",b,b.ma);b=Ya.prototype;X(\"get\",b,b.get);X(\"set\",b,b.set);if(!Ud()&&!Ba){a:{b=M.getElementsByTagName(\"script\");for(var c=0;c<b.length&&100>c;c++){var d=b[c].src;if(d&&0==d.indexOf(\"https://www.google-analytics.com/analytics\")){J(33);\nb=!0;break a}}b=!1}b&&(Ba=!0)}Ud()||Ba||!Ed(new Od)||(J(36),Ba=!0);(O.gaplugins=O.gaplugins||{}).Linker=Dc;b=Dc.prototype;C(\"linker\",Dc);X(\"decorate\",b,b.ca,20);X(\"autoLink\",b,b.S,25);C(\"displayfeatures\",fd);C(\"adfeatures\",fd);a=a&&a.q;ka(a)?Z.D.apply(N,a):J(50)}};N.da=function(){for(var a=N.getAll(),b=0;b<a.length;b++)a[b].get(V)};var le=N.N,me=O[gb];me&&me.r?le():z(le);z(function(){Z.D([\"provide\",\"render\",ua])});function La(a){var b=1,c;if(a)for(b=0,c=a.length-1;0<=c;c--){var d=a.charCodeAt(c);b=(b<<6&268435455)+d+(d<<14);d=b&266338304;b=0!=d?b^d>>21:b}return b};})(window);\n"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/collaboration.js",
    "content": "$(function () {\n    if (chartId == \"\" || userId == \"\") {\n        return\n    }\n    CLB.init()\n});\nvar defaultUIData = { \"page\": { \"backgroundColor\": \"transparent\", \"width\": 1370.3999999999999, \"height\": 120, \"padding\": 20, \"showGrid\": false, \"gridSize\": 15, \"orientation\": \"portrait\" }, \"elements\": { \"16a10efd58b578\": { \"id\": \"16a10efd58b578\", \"name\": \"start\", \"title\": \"开始\", \"category\": \"dataSource\", \"group\": \"\", \"groupName\": null, \"locked\": false, \"link\": \"\", \"icon\": \"<i class=\\\"icon fa fa-flag-o\\\" style=\\\"color: #e44b4e;\\\"></i>\", \"selected\": [\"dataSource\"], \"children\": [], \"parent\": \"\", \"resizeDir\": [\"tl\", \"tr\", \"br\", \"bl\"], \"attribute\": { \"container\": false, \"visible\": true, \"rotatable\": true, \"linkable\": true, \"collapsable\": false, \"collapsed\": false, \"markerOffset\": 5 }, \"dataAttributes\": [], \"props\": { \"x\": 338, \"y\": 63, \"w\": 200, \"h\": 30, \"zindex\": 1, \"angle\": 0 }, \"shapeStyle\": { \"alpha\": 0.8 }, \"lineStyle\": {}, \"fillStyle\": {}, \"path\": [{ \"actions\": [{ \"action\": \"move\", \"x\": \"Math.min(w,h)/3\", \"y\": \"0\" }, { \"action\": \"line\", \"x\": \"w-Math.min(w,h)/3\", \"y\": \"0\" }, { \"action\": \"curve\", \"x1\": \"w+Math.min(w,h)/3/3\", \"y1\": \"0\", \"x2\": \"w+Math.min(w,h)/3/3\", \"y2\": \"h\", \"x\": \"w-Math.min(w,h)/3\", \"y\": \"h\" }, { \"action\": \"line\", \"x\": \"Math.min(w,h)/3\", \"y\": \"h\" }, { \"action\": \"curve\", \"x1\": \"-Math.min(w,h)/3/3\", \"y1\": \"h\", \"x2\": \"-Math.min(w,h)/3/3\", \"y2\": \"0\", \"x\": \"Math.min(w,h)/3\", \"y\": \"0\" }, { \"action\": \"close\" }] }], \"fontStyle\": {}, \"textBlock\": [{ \"position\": { \"x\": 10, \"y\": 0, \"w\": \"w-20\", \"h\": \"h\" }, \"text\": \"开始\" }], \"anchors\": [{ \"x\": \"w/2\", \"y\": \"0\" }, { \"x\": \"w/2\", \"y\": \"h\" }] } } }\nvar CLB = {\n    socket: null,\n    clientId: null,\n    url: \"\",\n    listenTime: \"\",\n    unloaded: false,\n    init: function () {\n        var b = Math.random();\n        var a = (b + new Date().getTime());\n        this.clientId = a.toString(16).replace(\".\", \"\");\n        this.listenTime = time;\n        this.startListen();\n        window.onbeforeunload = function () {\n            try {\n                if (CLB.sending || CLB.messageQueue.length > 0) {\n                    return \"您的修改尚未保存，如果离开，您的编辑可能会丢失！\"\n                }\n            } catch (c) { }\n            CLB.unloaded = true\n        }\n    },\n    connection: null,\n    listenFlag: true,\n    listen: function (a) {\n        if (this.listenFlag == false || CLB.connection != null) {\n            return\n        }\n        CLB.connection = $.ajax({\n            url: \"/diagraming/listen\",\n            data: {\n                clientId: CLB.clientId,\n                userId: userId,\n                name: userName,\n                subject: chartId,\n                listenTime: CLB.listenTime\n            },\n            type: \"get\",\n            success: function (b) {\n                CLB.connection = null;\n                CLB.onMessage(b.events);\n                if (typeof b.onlineUsers != \"undefined\") {\n                    CLB.manageOnlineUsers(b.onlineUsers)\n                }\n            },\n            error: function (b) {\n                CLB.connection = null;\n                if (CLB.unloaded == false) {\n                    if (a) {\n                        a()\n                    } else {\n                        CLB.listen(function () {\n                            CLB.listenFlag = false\n                        })\n                    }\n                }\n            }\n        })\n    },\n    startListen: function () {\n        this.listenFlag = true;\n        this.listen()\n    },\n    stopListen: function () {\n        this.listenFlag = false;\n        if (CLB.connection) {\n            CLB.connection.abort()\n        }\n        CLB.connection = null\n    },\n    sending: false,\n    onlineStatus: \"on\",\n    messageQueue: [],\n    send: function (c) {\n        console.log(\"send\")\n        var b = {\n            userId: userId,\n            clientId: CLB.clientId,\n            subject: chartId\n        };\n        var a = $.extend(b, c);\n        this.messageQueue.push(a);\n        if (this.sending == false) {\n            this.doSend()\n        }\n    },\n    sendErrorCount: 0,\n    localSaveCount: 0,\n    doSend: function (c) {\n        this.messageQueue = [];\n        var d = $(\".diagram_title\").text();\n        console.log(\"更新本地画布数据\");\n        localStorage[\"def_local_\" + chartId] = JSON.stringify(Model.define);\n        localStorage[\"title_local_\" + chartId] = d;\n        localStorage[\"version_local_\" + chartId] = chartVersion + 1;\n        this.localSaveCount++;\n        $(\"#saving_tip\").html(\"<span style='color:rgb(245,174,67)'>已保存到本地</span>\");\n        localStorage[\"def_\" + chartId] = JSON.stringify(Model.define);\n        if (this.localSaveCount >= 5) {\n            this.localSaveCount = 0;\n            this.localSaveCount = 0;\n            this.localToServer(function () {\n                $(\"#saving_tip\").text(\"所有更改已保存\");\n                CLB.online()\n            })\n        }\n        return\n    },\n    sendDirectly: function (b, e) {\n        var d = {\n            userId: userId,\n            clientId: CLB.clientId,\n            subject: chartId\n        };\n        var c = $.extend(d, b);\n        var a = JSON.stringify(c);\n        $.ajax({\n            url: \"/diagraming/msg_directly\",\n            data: {\n                msgStr: a,\n                ignore: \"msgStr\",\n                chartId: chartId\n            },\n            cache: false,\n            type: \"post\",\n            success: function (f) {\n                if (e) {\n                    e(f)\n                }\n            }\n        })\n    },\n    onMessage: function (b) {\n        for (var a = 0; a < b.length; a++) {\n            var d = b[a];\n            var c = d.action;\n            if (c == \"refresh\") {\n                CLB.listenTime = d.listenTime;\n                CLB.listen()\n            } else {\n                if (c == \"join\") {\n                    if ($(\"#chat_user_\" + d.userId).length == 0) {\n                        $(\"#collaborators\").append(\"<img id='chat_user_\" + d.userId + \"' src='\" + d.photoUrl + \"' class='' title='\" + d.name + \"'/>\")\n                    }\n                } else {\n                    if (c == \"leave\") {\n                        if (d.userId != userId) {\n                            $(\"#chat_user_\" + d.userId).remove()\n                        }\n                    } else {\n                        if (c == \"changeTitle\") {\n                            if (d.clientId != this.clientId) {\n                                $(\".diagram_title\").text(d.title)\n                            }\n                        } else {\n                            if (c == \"chat\") {\n                                if (d.clientId != this.clientId) {\n                                    this.appendChatMsg(d.name, d.message, true)\n                                }\n                            } else {\n                                if (c == \"changeSchema\") {\n                                    if (d.clientId != this.clientId) {\n                                        if (d.categories == \"\") {\n                                            Designer.setSchema([])\n                                        } else {\n                                            Designer.setSchema(d.categories.split(\",\"))\n                                        }\n                                    }\n                                } else {\n                                    if (c == \"command\") {\n                                        if (d.clientId != this.clientId) {\n                                            MessageSource.receive(d.messages)\n                                        }\n                                    } else {\n                                        if (c == \"addHistory\") {\n                                            if (Dock.historyVersions != null && d.clientId != this.clientId) {\n                                                Dock.loadHistorys()\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    },\n    offlineRemind: true,\n    offline: function () {\n        this.onlineStatus = \"off\";\n        this.sending = false;\n        if (this.offlineRemind) {\n            //UI.showTip(\"与服务器连接不稳定，文件暂时保存到本地，连接正常时会自动同步到服务器，期间请不要关闭或者刷新浏览器！！！<a href='javascript:' style='margin-left: 10px;color:#0080FF' onclick='CLB.notRemindOffline()'>不再提醒</a>\")\n            console.log('与服务器连接不稳定');\n        }\n        CLB.doSend()\n    },\n    online: function () {\n        UI.hideTip();\n        this.onlineStatus = \"on\";\n        this.doSend()\n    },\n    notRemindOffline: function () {\n        this.offlineRemind = false;\n        UI.hideTip()\n    },\n    showDisconnected: function () {\n        $(\"#disconnected\").dlg({\n            closable: false\n        })\n    },\n    localToServer: function (c) {\n        var a = localStorage[\"def_local_\" + chartId];\n        var b = localStorage[\"title_local_\" + chartId];\n        if (!a) {\n            return\n        } this.sending = true; $.ajax({\n            url: \"/diagraming/savelocal\",\n            data: {\n                def: a,\n                title: b,\n                chartId: chartId,\n                ignore: \"def\"\n            },\n            cache: false,\n            type: \"post\",\n            success: function (d) {\n                if (c) {\n                    c(d)\n                }\n                CLB.sending = false;\n                CLB.doSend();\n                CLB.removeLocal()\n            },\n            error: function () {\n                CLB.sending = false;\n                CLB.doSend()\n            }\n        })\n    },\n    findLocal: function () {\n        console.log(\"准备解析本地存储的数据成UI\");\n        var a = false;\n        if (localStorage && localStorage[\"def_local_\" + chartId]) {\n            var d = localStorage[\"def_local_\" + chartId];\n            console.log(\"d = \", d)\n            var c = parseInt(localStorage[\"version_local_\" + chartId]);\n            var b = parseInt(localStorage[\"title_local_\" + chartId]);\n            if (c >= chartVersion) {\n                console.log(\"解析本地数据\");\n                Designer.open(d);\n                this.localToServer();\n                a = true\n            } else {\n                this.removeLocal()\n            }\n        } else {\n            console.log(\"本地数据为空，加载默认值开始的组件\");\n            var dd = defaultUIData;\n            Designer.open(dd);\n            // this.localToServer();\n            a = true\n        }\n        return a\n    },\n    removeLocal: function () {\n        localStorage.removeItem(\"def_local_\" + chartId);\n        localStorage.removeItem(\"title_local_\" + chartId);\n        localStorage.removeItem(\"version_local_\" + chartId)\n    },\n    manageOnlineUsers: function (b) {\n        $(\"#collaborators\").children().attr(\"class\", \"\");\n        for (var c = 0; c < b.length; c++) {\n            var a = b[c];\n            if ($(\"#chat_user_\" + a.userId).length == 0) {\n                $(\"#collaborators\").append(\"<img id='chat_user_\" + a.userId + \"' src='\" + a.photoUrl + \"' title='\" + a.name + \"' title_pos='top'/>\")\n            }\n            $(\"#chat_user_\" + a.userId).attr(\"class\", \"online\")\n        }\n        $(\"#collaborators\").children(\"img[class!=online]\").remove()\n    },\n    showChatWin: function () {\n        if ($(\"#open_chat_btn\").button(\"isSelected\")) {\n            CLB.closeChatWin();\n            return\n        }\n        $(\"#open_chat_btn\").button(\"select\");\n        $(\"#chattingbox\").css(\"left\", $(\"#shape_panel\").outerWidth()).show();\n        $(\"#chatting_edit\").focus().unbind().bind(\"keydown\", function (a) {\n            if (a.keyCode == 13) {\n                if ($.trim($(this).val()) == \"\") {\n                    return\n                }\n                CLB.sendChatMsg();\n                return false\n            }\n        });\n        $(\"#chat_prompt\").hide().text(\"0\")\n    },\n    closeChatWin: function () {\n        $(\"#chattingbox\").hide();\n        $(\"#open_chat_btn\").button(\"unselect\")\n    },\n    sendChatMsg: function () {\n        var b = $(\"#chatting_edit\").val();\n        if (b == \"\") {\n            $(\"#chatting_edit\").focus();\n            return\n        }\n        var a = {\n            action: \"chat\",\n            message: b,\n            name: userName\n        };\n        CLB.sendDirectly(a);\n        this.appendChatMsg(userName, b, false);\n        $(\"#chatting_edit\").val(\"\").focus()\n    },\n    appendChatMsg: function (c, d, b) {\n        d = Utils.filterXss(d);\n        d = d.replace(/\\n/g, \"<br/>\");\n        $(\"#chat_messages\").append(\"<li><span>\" + c + \"</span>:&nbsp;\" + d + \"</li>\");\n        $(\"#chat_messages\").scrollTop(9999999);\n        if (b && !$(\"#open_chat_btn\").button(\"isSelected\")) {\n            var a = parseInt($(\"#chat_prompt\").text()) + 1;\n            $(\"#chat_prompt\").show().text(a).animate({\n                top: \"-15px\"\n            }, 200).animate({\n                top: \"-9px\"\n            }, 200)\n        }\n    },\n    setConfig: function (b, a) {\n        $.ajax({\n            url: \"/diagraming/config\",\n            data: {\n                field: b,\n                value: a\n            },\n            cache: false,\n            type: \"post\",\n            success: function () { }\n        })\n    }\n};"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/designer.core.js",
    "content": "Schema.init(true);\nSchema.initMarkers();\n$(function () {\n    Designer.init();\n    if (typeof isView != \"undefined\") {\n        return\n    }\n    if (role == \"trial\") {\n        Designer.status = \"demo\"\n    } else {\n        if (role == \"viewer\") {\n            Designer.status = \"readonly\"\n        }\n    }\n    if (Designer.status == \"readonly\") {\n        if (localRuntime == false) {\n            Designer.setReadonly(true)\n        }\n    } else {\n        UI.init();\n        Dock.init();\n        Navigator.init()\n    }\n    if (tutorial) {\n        createdTip = true;\n        UI.gettingStart()\n    }\n    if (!showToolbar) {\n        var a = $(\"#bar_collapse\").children(\"div\");\n        a.attr(\"class\", \"ico expand\");\n        $(\".titlebar\").hide();\n        $(\"#bar_return\").show();\n        $(\".layout\").height($(window).height() - 73)\n    }\n    $(\"#load_mask\").remove()\n});\nvar Designer = {\n    defaults: {\n        linkerBeginArrowStyle: null,\n        linkerEndArrowStyle: null\n    },\n    config: {\n        panelItemWidth: 30,\n        panelItemHeight: 30,\n        pageMargin: 0, anchorSize: 8,\n        rotaterSize: 9,\n        anchorColor: \"#833\",\n        selectorColor: \"#833\",\n        scale: 1\n    },\n    status: \"\",\n    initialize: {\n        initialized: false,\n        initLayout: function () {\n            $(window).bind(\"resize.designer\", function () {\n                var a = $(window).height() - $(\"#designer_header\").outerHeight() - $(\"#designer_footer\").outerHeight();\n                $(\".layout\").height(a - 30);\n                if ($(\"#demo_signup\").length) {\n                    $(\"#designer_layout\").height(a - $(\"#demo_signup\").outerHeight())\n                }\n            });\n            $(window).trigger(\"resize.designer\")\n        },\n        initModel: function () {\n            Model.define = {\n                page: Utils.copy(Schema.pageDefaults),\n                elements: {}\n            };\n            Model.persistence = {\n                page: Utils.copy(Schema.pageDefaults),\n                elements: {}\n            }\n        },\n        initCanvas: function () {\n            var l = Model.define.page.width.toScale();\n            var f = Model.define.page.height.toScale();\n            if (Model.define.page.orientation == \"landscape\") {\n                var n = l;\n                l = f;\n                f = n\n            }\n            var a = Model.define.page.backgroundColor;\n            if (a == \"transparent\") {\n                a = \"255,255,255\"\n            }\n            var j = Utils.getDarkerColor(a);\n            var b = Utils.getDarkestColor(a);\n            $(\"#designer_canvas\").css({\n                \"background-color\": \"rgb(\" + j + \")\"\n            });\n            var e = $(\"#designer_grids\");\n            if (e.length > 0) {\n                e.attr({\n                    width: l,\n                    height: f\n                });\n                var o = e[0].getContext(\"2d\");\n                o.clearRect(0, 0, l, f);\n                var k = Model.define.page.padding.toScale();\n                var c = l - k * 2;\n                var m = f - k * 2;\n                o.fillStyle = \"rgb(\" + a + \")\";\n                o.beginPath();\n                o.rect(k, k, c, m);\n                o.fill();\n                var d = Math.round(Model.define.page.gridSize.toScale());\n                if (d < 10) {\n                    d = 10\n                }\n                if (Model.define.page.showGrid) {\n                    o.translate(k, k);\n                    o.lineWidth = 1;\n                    o.save();\n                    var i = 0.5;\n                    var g = 0;\n                    while (i <= m) {\n                        o.restore();\n                        if (g % 4 == 0) {\n                            o.strokeStyle = \"rgb(\" + b + \")\"\n                        } else {\n                            o.strokeStyle = \"rgb(\" + j + \")\"\n                        }\n                        o.beginPath();\n                        o.moveTo(0, i);\n                        o.lineTo(c, i);\n                        i += d;\n                        g++;\n                        o.stroke()\n                    }\n                    i = 0.5;\n                    g = 0;\n                    while (i <= c) {\n                        o.restore();\n                        if (g % 4 == 0) {\n                            o.strokeStyle = \"rgb(\" + b + \")\"\n                        } else {\n                            o.strokeStyle = \"rgb(\" + j + \")\"\n                        }\n                        o.beginPath();\n                        o.moveTo(i, 0);\n                        o.lineTo(i, m);\n                        i += d;\n                        g++;\n                        o.stroke()\n                    }\n                }\n            }\n            $(\"#canvas_container\").css({\n                width: l,\n                //height: f,\n                padding: Designer.config.pageMargin\n            });\n            if (!this.initialized) {\n                $(\"#designer_layout\").scrollTop(Designer.config.pageMargin - 10);\n                $(\"#designer_layout\").scrollLeft(Designer.config.pageMargin - 10)\n            }\n        },\n        initShapes: function () {\n            $(\"#shape_panel\").empty();\n            //$(\"#shape_panel\").append(\"<div class='panel_container panel_collapsed'><h3 class='panel_title search'><input id='shape_search' placeholder='搜索'  title='搜索ProcessOn图形和网络图标，搜索网络图标建议使用英文单词，搜索更精准。' title_pos='right'/></h3><div id='panel_search' class='content'></div></div>\");\n            for (var f = 0; f < Schema.categories.length; f++) {\n                var g = Schema.categories[f];\n                if (g.name == \"standard\") {\n                    continue\n                }\n                //隐藏开始的分类\n                if (g.name == 'dataSource') {\n                    $(\"#shape_panel\").append(\"<div class='panel_container' ><h3 class='panel_title'><div class='ico ico_accordion'></div>\" + g.text + \"</h3><div id='panel_\" + g.name + \"' class='content'></div></div>\")\n\n                } else {\n                    $(\"#shape_panel\").append(\"<div class='panel_container'><h3 class='panel_title'><div class='ico ico_accordion'></div>\" + g.text + \"</h3><div id='panel_\" + g.name + \"' class='content'></div></div>\")\n\n                }\n            }\n            $(\".panel_title\").unbind().bind(\"click\", function () {\n                if (!$(this).hasClass(\"search\")) {\n                    $(this).parent().toggleClass(\"panel_collapsed\")\n                }\n            });\n            for (var b in Schema.shapes) {\n                var j = Schema.shapes[b];\n                if (j.attribute.visible && j.category != \"standard\") {\n                    if (!j.groupName) {\n                        e(j)\n                    } else {\n                        var k = SchemaGroup.getGroup(j.groupName);\n                        if (k[0] == b) {\n                            e(j, j.groupName)\n                        }\n                    }\n                }\n            }\n\n            function e(l, o) {\n                l = Utils.copy(l);\n                var icon = (l.icon || '&nbsp;').replace('icon', '');\n                var n = \"<div class='panel_box' shapeName='\" + l.name + \"'><canvas class='panel_item' width='\" + (Designer.config.panelItemWidth) + \"' height='\" + (Designer.config.panelItemHeight) + \"'></canvas><a>\" + icon + '&nbsp;&nbsp;' + l.title + \"</a></div>\";\n                var i = $(n).appendTo(\"#panel_\" + l.category);\n                if (o) {\n                    i.append(\"<div class='group_icon' onmousedown='Designer.op.showPanelGroup(\\\"\" + o + \"\\\", event, this)'></div>\")\n                }\n                var m = i.children()[0];\n                i.bind(\"mouseenter\", function () {\n                    return;\n                    if ($(this).hasClass(\"readonly\")) {\n                        return\n                    }\n                    var q = $(\"#shape_thumb\");\n                    q.children(\"div\").html(l.title);\n                    var p = q.children(\"canvas\")[0].getContext(\"2d\");\n                    q.attr(\"current\", l.name);\n                    var r = {\n                        x: 0,\n                        y: 0,\n                        w: l.props.w,\n                        h: l.props.h,\n                        angle: l.props.angle\n                    };\n                    var t = 160;\n                    var s = 160;\n                    p.clearRect(0, 0, t, s);\n                    if (l.props.w >= l.props.h) {\n                        if (l.props.w > t) {\n                            r.w = t;\n                            r.h = parseInt(l.props.h / l.props.w * r.w)\n                        }\n                    } else {\n                        if (l.props.h > s) {\n                            r.h = s;\n                            r.w = parseInt(l.props.w / l.props.h * r.h)\n                        }\n                    }\n                    q.children(\"canvas\").attr({\n                        width: t + 20,\n                        height: r.h + 20\n                    });\n                    //q.show();\n                    l.props = r;\n                    p.save();\n                    p.lineJoin = \"round\";\n                    p.globalAlpha = l.shapeStyle.alpha;\n                    var w = (t + 20 - r.w) / 2;\n                    var v = 10;\n                    p.translate(w, v);\n                    p.translate(r.w / 2, r.h / 2);\n                    p.rotate(r.angle);\n                    p.translate(-(r.w / 2), -(r.h / 2));\n                    Designer.painter.renderShapePath(p, l, false, function () {\n                        if ($(\"#shape_thumb[current=\" + l.name + \"]:visible\").length > 0) {\n                            i.trigger(\"mouseenter\")\n                        }\n                    });\n                    Designer.painter.renderMarkers(p, l, false);\n                    p.restore();\n                    p.translate(w, v);\n                    var u = i.offset().top - $(\"#designer_header\").outerHeight() + i.height() / 2 - q.outerHeight() / 2;\n                    if (u < 5) {\n                        u = 5\n                    } else {\n                        if (u + q.outerHeight() > $(\"#designer_viewport\").height() - 5) {\n                            u = $(\"#designer_viewport\").height() - 5 - q.outerHeight()\n                        }\n                    }\n                    q.css(\"top\", u)\n                }).bind(\"mouseleave\", function () {\n                    $(\"#shape_thumb\").hide()\n                });\n                Designer.painter.drawPanelItem(m, l.name)\n            }\n            c();\n\n            function c() {\n                $(\".panel_box\").die().live(\"mousedown\", function (s) {\n                    console.log(\"mousedown\")\n                    var p = $(this);\n                    if (p.hasClass(\"readonly\")) {\n                        return\n                    }\n                    var i = p.attr(\"shapeName\");\n                    var r = [];\n                    Designer.op.changeState(\"creating_from_panel\");\n                    var l = null;\n                    var q = null;\n                    var o = $(\"#designer_canvas\");\n                    var m = a(i);\n                    $(\"#designer\").bind(\"mousemove.creating\", function (t) {\n                        console.log(\"mousemove.creating\")\n                        h(m, t)\n                    });\n                    $(\"#canvas_container\").bind(\"mousemove.create\", function (A) {\n                        console.log(\"mousemove.create\")\n                        var v = Utils.getRelativePos(A.pageX, A.pageY, o);\n                        if (l == null) {\n                            l = d(i, v.x, v.y);\n                            q = $(\"#\" + l.id);\n                            q.attr(\"class\", \"shape_box_creating\")\n                        }\n                        q.css({\n                            left: v.x - q.width() / 2 + \"px\",\n                            top: v.y - q.height() / 2 + \"px\",\n                            \"z-index\": Model.orderList.length\n                        });\n                        l.props.x = v.x.restoreScale() - l.props.w / 2;\n                        l.props.y = v.y.restoreScale() - l.props.h / 2;\n                        var z = l.props;\n                        var y = Designer.op.snapLine(z, [l.id], true, l);\n                        if (y.attach) {\n                            l.attachTo = y.attach.id\n                        } else {\n                            delete l.attachTo\n                        }\n                        if (y.container) {\n                            j.container = y.container.id\n                        } else {\n                            delete j.container\n                        }\n                        q.css({\n                            left: (l.props.x - 10).toScale() + \"px\",\n                            top: (l.props.y - 10).toScale() + \"px\",\n                            \"z-index\": Model.orderList.length\n                        });\n                        r = Utils.getShapeAnchorInLinker(l);\n                        Designer.op.hideLinkPoint();\n                        for (var w = 0; w < r.length; w++) {\n                            var u = r[w];\n                            for (var t = 0; t < u.anchors.length; t++) {\n                                var x = u.anchors[t];\n                                Designer.op.showLinkPoint(Utils.toScale(x))\n                            }\n                        }\n                    });\n                    var n = false;\n                    $(\"#canvas_container\").bind(\"mouseup.create\", function (t) {\n                        console.log('mouseup.create');\n                        n = true\n                    });\n                    $(document).bind(\"mouseup.create\", function () {\n                        console.log(\"mouseup.create\");\n                        $(this).unbind(\"mouseup.create\");\n                        $(\"#designer\").unbind(\"mousemove.creating\");\n                        $(\"#creating_shape_container\").hide();\n                        Designer.op.hideLinkPoint();\n                        Designer.op.hideSnapLine();\n                        $(\"#canvas_container\").unbind(\"mouseup.create\").unbind(\"mousemove.create\");\n                        console.log(\"l = \", l);//l:当前画布节点\n                        console.log(\"q = \", q);\n\n                        window.parent.postMessage(JSON.stringify({ code: 0, value: l }), \"*\");\n\n\n\n                        if (l != null) {\n                            if (n == false) {\n                                q.remove()\n                            } else {\n                                console.log(\"进去了\")\n                                MessageSource.beginBatch();\n                                if (l.onCreated) {\n                                    var J = l.onCreated();\n                                    if (J == false) {\n                                        q.remove();\n                                        MessageSource.commit();\n                                        return\n                                    }\n                                }\n                                q.attr(\"class\", \"shape_box\");\n                                Designer.events.push(\"created\", l);\n                                Model.add(l);\n                                var w = Utils.getShapeContext(l.id);\n                                var x = q.position();\n                                var C = 7;\n                                for (var z = 0; z < r.length; z++) {\n                                    var u = r[z];\n                                    var A = u.linker;\n                                    if (u.type == \"line\") {\n                                        var t = Utils.copy(A);\n                                        var E = Utils.copy(A);\n                                        E.id = Utils.newId();\n                                        if (u.anchors.length == 1) {\n                                            var y = u.anchors[0];\n                                            var v = Utils.getPointAngle(l.id, y.x, y.y, C);\n                                            A.to = {\n                                                id: l.id,\n                                                x: y.x,\n                                                y: y.y,\n                                                angle: v\n                                            };\n                                            E.from = {\n                                                id: l.id,\n                                                x: y.x,\n                                                y: y.y,\n                                                angle: v\n                                            }\n                                        } else {\n                                            if (u.anchors.length == 2) {\n                                                var I = u.anchors[0];\n                                                var H = u.anchors[1];\n                                                var D = Utils.measureDistance(A.from, I);\n                                                var B = Utils.measureDistance(A.from, H);\n                                                var F, G;\n                                                if (D < B) {\n                                                    F = I;\n                                                    G = H\n                                                } else {\n                                                    F = H;\n                                                    G = I\n                                                }\n                                                var v = Utils.getPointAngle(l.id, F.x, F.y, C);\n                                                A.to = {\n                                                    id: l.id,\n                                                    x: F.x,\n                                                    y: F.y,\n                                                    angle: v\n                                                };\n                                                v = Utils.getPointAngle(l.id, G.x, G.y, C);\n                                                E.from = {\n                                                    id: l.id,\n                                                    x: G.x,\n                                                    y: G.y,\n                                                    angle: v\n                                                }\n                                            }\n                                        }\n                                        if (u.anchors.length <= 2) {\n                                            Designer.painter.renderLinker(A, true);\n                                            Model.update(A);\n                                            Designer.painter.renderLinker(E, true);\n                                            E.props.zindex = Model.maxZIndex + 1;\n                                            Model.add(E);\n                                            Designer.events.push(\"linkerCreated\", E)\n                                        }\n                                    } else {\n                                        var y = u.anchors[0];\n                                        var v = Utils.getPointAngle(l.id, y.x, y.y, C);\n                                        if (u.type == \"from\") {\n                                            A.from = {\n                                                id: l.id,\n                                                x: y.x,\n                                                y: y.y,\n                                                angle: v\n                                            }\n                                        } else {\n                                            A.to = {\n                                                id: l.id,\n                                                x: y.x,\n                                                y: y.y,\n                                                angle: v\n                                            }\n                                        }\n                                        Designer.painter.renderLinker(A, true);\n                                        Model.update(A)\n                                    }\n                                }\n                                Utils.unselect();\n                                Utils.selectShape(l.id);\n                                MessageSource.commit();\n                                Designer.op.editShapeText(l)\n                            }\n                        } else if (!chartId) {\n                            UI.showTip('亲，您还没新建任务');\n                        }\n                        p.css({\n                            left: \"0px\",\n                            top: \"0px\"\n                        });\n                        Designer.op.resetState()\n                    })\n                })\n            }\n\n            function a(m) {\n                var l = $(\"#creating_shape_canvas\");\n                var i = $(\"#creating_shape_container\");\n                if (l.length == 0) {\n                    i = $(\"<div id='creating_shape_container'></div>\").appendTo(\"#designer\");\n                    l = $(\"<canvas id='creating_shape_canvas' width='\" + (Designer.config.panelItemWidth) + \"' height='\" + (Designer.config.panelItemHeight) + \"'></canvas>\").appendTo(i)\n                }\n                i.css({\n                    left: \"0px\",\n                    top: \"0px\",\n                    width: $(\".panel_container\").width(),\n                    height: $(\"#shape_panel\").outerHeight()\n                });\n                Designer.painter.drawPanelItem(l[0], m);\n                return l\n            }\n\n            function h(l, m) {\n                $(\"#creating_shape_container\").show();\n                var i = Utils.getRelativePos(m.pageX, m.pageY, $(\"#creating_shape_container\"));\n                l.css({\n                    left: i.x - Designer.config.panelItemWidth / 2,\n                    top: i.y - Designer.config.panelItemHeight / 2\n                })\n            }\n\n            function d(o, q, p) {\n                var n = Utils.newId();\n                var l = Schema.shapes[o];\n                var i = q.restoreScale() - l.props.w / 2;\n                var r = p.restoreScale() - l.props.h / 2;\n                var m = Model.create(o, i, r);\n                Designer.painter.renderShape(m);\n                return m\n            }\n            $(\"#shape_search\").unbind(\"keydown\").bind(\"keydown\", function (q) {\n                if (q.keyCode == 13) {\n                    $(\"#panel_search\").empty();\n                    var n = $(this).val().toLowerCase();\n                    if (n.trim() != \"\") {\n                        $(\"#panel_search\").parent().removeClass(\"panel_collapsed\");\n                        for (var m in Schema.shapes) {\n                            if (m.indexOf(\"image_search_\") >= 0) {\n                                delete Schema.shapes[m]\n                            }\n                        }\n                        for (var m in SchemaGroup.groups) {\n                            if (m.indexOf(\"image_search_\") >= 0) {\n                                delete SchemaGroup.groups[m]\n                            }\n                        }\n                        var p = false;\n                        for (var m in Schema.shapes) {\n                            var l = Schema.shapes[m];\n                            if (l.title && l.title.toLowerCase().indexOf(n) >= 0 && l.attribute.visible && l.category != \"standard\") {\n                                p = true;\n                                var r = Utils.copy(l);\n                                r.category = \"search\";\n                                e(r)\n                            }\n                        }\n                        if (p) {\n                            $(\"#panel_search\").prepend(\"<div class='search_panel_title'>ProcessOn图形</div>\")\n                        }\n                        $(\"#panel_search\").append(\"<div class='search_panel_title'>网络图标</div>\");\n                        var o = 0;\n\n                        function i() {\n                            $(\"#panel_search\").append(\"<div class='search_panel_loading'>正在搜索网络图标...</div>\");\n                            $(\".search_panel_btn\").remove();\n                            var s = Schema.shapes.standardImage;\n                            $.getJSON(\"https://api.iconfinder.com/v2/icons/search?query=\" + n + \"&offset=\" + o + \"&count=24&minimum_size=64&vector=false&premium=false\", function (w) {\n                                if (w.total_count == 0) {\n                                    $(\".search_panel_loading\").text(\"没有搜索到网络图标，建议使用常用英文单词进行搜索。\");\n                                    return\n                                }\n                                $(\".search_panel_loading\").remove();\n                                var D = w.icons;\n                                for (var x = 0; x < D.length; x++) {\n                                    var y = D[x];\n                                    var F = y.raster_sizes;\n                                    F.sort(function (H, G) {\n                                        if (H.size == 128) {\n                                            return -1\n                                        }\n                                        return H.size - G.size\n                                    });\n                                    var B = \"image_search_\" + Utils.newId();\n                                    var z = false;\n                                    var A = y.tags.join(\", \");\n                                    for (var v = 0; v < F.length; v++) {\n                                        var E = F[v];\n                                        var t = E.formats[0].preview_url;\n                                        if (typeof s == \"undefined\") {\n                                            continue\n                                        }\n                                        var C = Utils.copy(s);\n                                        C.props = {\n                                            w: E.size_width,\n                                            h: E.size_height\n                                        };\n                                        C.fillStyle = {\n                                            type: \"image\",\n                                            fileId: t,\n                                            display: \"fill\",\n                                            imageW: E.size_width,\n                                            imageH: E.size_height\n                                        };\n                                        C.attribute.visible = true;\n                                        C.name = \"image_search_\" + Utils.newId();\n                                        C.category = \"search\";\n                                        C.title = A + \"<br/>\" + E.size_width + \"x\" + E.size_height;\n                                        C.groupName = B;\n                                        Schema.shapes[C.name] = C;\n                                        SchemaGroup.addGroupShape(B, C.name);\n                                        if ((E.size == 128 || v == F.length - 1) && z == false) {\n                                            e(C, C.groupName);\n                                            z = true\n                                        }\n                                    }\n                                }\n                                o += 24;\n                                if (o < w.total_count) {\n                                    var u = $(\"<div class='toolbar_button active search_panel_btn'>加载更多</div>\").appendTo(\"#panel_search\");\n                                    u.bind(\"click\", function () {\n                                        i()\n                                    })\n                                }\n                            })\n                        }\n                        i()\n                    } else {\n                        $(\"#panel_search\").parent().addClass(\"panel_collapsed\")\n                    }\n                }\n            })\n        }\n    },\n    hotkey: {\n        init: function () {\n            var a = null;\n            $(window).unbind(\"keydown.hotkey\").bind(\"keydown.hotkey\", function (j) {\n                if ((j.ctrlKey || j.metaKey) && j.keyCode == 83) {\n                    j.preventDefault()\n                } else {\n                    if ((j.ctrlKey || j.metaKey) && j.keyCode == 65) {//全选\n                        Designer.selectAll();\n                        j.preventDefault()\n                    } else {\n                        if (j.keyCode == 46 || j.keyCode == 8) {//删除\n                            Designer.op.removeShape();\n                            j.preventDefault()\n                        } else {\n                            if ((j.ctrlKey || j.metaKey) && j.keyCode == 90) {//撤销\n                                MessageSource.undo();\n                                j.preventDefault()\n                            } else {\n                                if ((j.ctrlKey || j.metaKey) && j.keyCode == 89) {//重做\n                                    MessageSource.redo();\n                                    j.preventDefault()\n                                } else {\n                                    if ((j.ctrlKey || j.metaKey) && !j.shiftKey && j.keyCode == 67) {//复制\n                                        Designer.clipboard.copy();\n                                        j.preventDefault()\n                                    } else {\n                                        if ((j.ctrlKey || j.metaKey) && j.keyCode == 88) {//剪切\n                                            Designer.clipboard.cut();\n                                            j.preventDefault()\n                                        } else {\n                                            if ((j.ctrlKey || j.metaKey) && j.keyCode == 86) {//粘贴\n                                                Designer.clipboard.paste();\n                                                j.preventDefault()\n                                            } else {\n                                                if ((j.ctrlKey || j.metaKey) && j.keyCode == 68) {//ctrl+d\n                                                    Designer.clipboard.duplicate();\n                                                    j.preventDefault()\n                                                } else {\n                                                    if ((j.ctrlKey || j.metaKey) && j.shiftKey && j.keyCode == 66) {//ctrl+shift+b\n                                                        Designer.clipboard.brush();\n                                                        j.preventDefault()\n                                                    } else {\n                                                        if ((j.altKey || j.metaKey) && (j.keyCode == 187 || j.keyCode == 107)) {//ctrl +'+'\n                                                            Designer.zoomIn();\n                                                            j.preventDefault()\n                                                        } else {\n                                                            if ((j.altKey || j.metaKey) && (j.keyCode == 189 || j.keyCode == 109)) {//ctrl +'-'\n                                                                Designer.zoomOut();\n                                                                j.preventDefault()\n                                                            } else {\n                                                                if (j.keyCode >= 37 && j.keyCode <= 40) {\n                                                                    if (a == null || Utils.getSelected().length > 0) {\n                                                                        var d = Utils.getSelected();\n                                                                        var m = Utils.getFamilyShapes(d);\n                                                                        d = d.concat(m);\n                                                                        var g = Utils.getContainedShapes(d);\n                                                                        d = d.concat(g);\n                                                                        var f = Utils.getAttachedShapes(d);\n                                                                        d = d.concat(f);\n                                                                        var k = Utils.getCollapsedShapes(d);\n                                                                        d = d.concat(k);\n                                                                        var n = Utils.getOutlinkers(d);\n                                                                        a = d.concat(n)\n                                                                    }\n                                                                    if (a.length > 0) {\n                                                                        j.preventDefault();\n                                                                        var b = 10;\n                                                                        if (j.ctrlKey || j.shiftKey) {\n                                                                            b = 1\n                                                                        }\n                                                                        Utils.hideLinkerCursor();\n                                                                        UI.hideShapeOptions();\n                                                                        if (j.keyCode == 37) {\n                                                                            Designer.op.moveShape(a, {\n                                                                                x: -b,\n                                                                                y: 0\n                                                                            })\n                                                                        } else {\n                                                                            if (j.keyCode == 38) {\n                                                                                Designer.op.moveShape(a, {\n                                                                                    x: 0,\n                                                                                    y: -b\n                                                                                });\n                                                                                j.preventDefault()\n                                                                            } else {\n                                                                                if (j.keyCode == 39) {\n                                                                                    Designer.op.moveShape(a, {\n                                                                                        x: b,\n                                                                                        y: 0\n                                                                                    })\n                                                                                } else {\n                                                                                    if (j.keyCode == 40) {\n                                                                                        Designer.op.moveShape(a, {\n                                                                                            x: 0,\n                                                                                            y: b\n                                                                                        });\n                                                                                        j.preventDefault()\n                                                                                    }\n                                                                                }\n                                                                            }\n                                                                        }\n                                                                        $(document).unbind(\"keyup.moveshape\").bind(\"keyup.moveshape\", function () {\n                                                                            Model.updateMulti(a);\n                                                                            a = null;\n                                                                            $(document).unbind(\"keyup.moveshape\");\n                                                                            Designer.op.hideTip();\n                                                                            Utils.showLinkerCursor();\n                                                                            UI.showShapeOptions()\n                                                                        })\n                                                                    }\n                                                                } else {\n                                                                    if ((j.ctrlKey || j.metaKey) && j.keyCode == 221) {\n                                                                        var l = \"front\";\n                                                                        if (j.shiftKey) {\n                                                                            l = \"forward\"\n                                                                        }\n                                                                        Designer.layerShapes(l)\n                                                                    } else {\n                                                                        if ((j.ctrlKey || j.metaKey) && j.keyCode == 219) {\n                                                                            var l = \"back\";\n                                                                            if (j.shiftKey) {\n                                                                                l = \"backward\"\n                                                                            }\n                                                                            Designer.layerShapes(l)\n                                                                        } else {\n                                                                            if ((j.ctrlKey || j.metaKey) && j.keyCode == 71) {\n                                                                                j.preventDefault();\n                                                                                if (j.shiftKey) {\n                                                                                    Designer.ungroup()\n                                                                                } else {\n                                                                                    Designer.group()\n                                                                                }\n                                                                            } else {\n                                                                                if ((j.ctrlKey || j.metaKey) && j.keyCode == 76) {\n                                                                                    j.preventDefault();\n                                                                                    if (j.shiftKey) {\n                                                                                        Designer.unlockShapes()\n                                                                                    } else {\n                                                                                        Designer.lockShapes()\n                                                                                    }\n                                                                                } else {\n                                                                                    if (j.keyCode == 18) {\n                                                                                        Designer.op.changeState(\"drag_canvas\")\n                                                                                    } else {\n                                                                                        if (j.keyCode == 27) {\n                                                                                            if (!Designer.op.state) {\n                                                                                                Utils.unselect();\n                                                                                                $(\".options_menu\").hide();\n                                                                                                $(\".color_picker\").hide()\n                                                                                            } else {\n                                                                                                if (Designer.op.state == \"creating_free_text\" || Designer.op.state == \"creating_free_linker\") {\n                                                                                                    Designer.op.resetState()\n                                                                                                }\n                                                                                            }\n                                                                                        } else {\n                                                                                            if (j.keyCode == 84 && !(j.ctrlKey || j.metaKey)) {\n                                                                                                $(\".menu.list\").hide();\n                                                                                                Designer.op.changeState(\"creating_free_text\")\n                                                                                            } else {\n                                                                                                if (j.keyCode == 73 && !(j.ctrlKey || j.metaKey)) {\n                                                                                                    $(\".menu.list\").hide();\n                                                                                                    UI.showImageSelect(function (o, e, p) {\n                                                                                                        UI.insertImage(o, e, p)\n                                                                                                    });\n                                                                                                    $(\"#designer_contextmenu\").hide()\n                                                                                                } else {\n                                                                                                    if (j.keyCode == 76 && !(j.ctrlKey || j.metaKey)) {\n                                                                                                        $(\".menu.list\").hide();\n                                                                                                        Designer.op.changeState(\"creating_free_linker\");\n                                                                                                        $(\"#designer_contextmenu\").hide()\n                                                                                                    } else {\n                                                                                                        if (j.keyCode == 66 && (j.ctrlKey || j.metaKey)) {\n                                                                                                            var i = Utils.getSelectedIds();\n                                                                                                            if (i.length > 0) {\n                                                                                                                var h = Model.getShapeById(i[0]);\n                                                                                                                var c = Utils.getShapeFontStyle(h.fontStyle);\n                                                                                                                Designer.setFontStyle({\n                                                                                                                    bold: !c.bold\n                                                                                                                });\n                                                                                                                UI.update()\n                                                                                                            }\n                                                                                                            j.preventDefault()\n                                                                                                        } else {\n                                                                                                            if (j.keyCode == 73 && (j.ctrlKey || j.metaKey)) {\n                                                                                                                var i = Utils.getSelectedIds();\n                                                                                                                if (i.length > 0) {\n                                                                                                                    var h = Model.getShapeById(i[0]);\n                                                                                                                    var c = Utils.getShapeFontStyle(h.fontStyle);\n                                                                                                                    Designer.setFontStyle({\n                                                                                                                        italic: !h.fontStyle.italic\n                                                                                                                    });\n                                                                                                                    UI.update()\n                                                                                                                }\n                                                                                                                j.preventDefault()\n                                                                                                            } else {\n                                                                                                                if (j.keyCode == 85 && (j.ctrlKey || j.metaKey)) {\n                                                                                                                    var i = Utils.getSelectedIds();\n                                                                                                                    if (i.length > 0) {\n                                                                                                                        var h = Model.getShapeById(i[0]);\n                                                                                                                        var c = Utils.getShapeFontStyle(h.fontStyle);\n                                                                                                                        Designer.setFontStyle({\n                                                                                                                            underline: !c.underline\n                                                                                                                        });\n                                                                                                                        UI.update()\n                                                                                                                    }\n                                                                                                                    j.preventDefault()\n                                                                                                                } else {\n                                                                                                                    if (j.keyCode == 32 && !(j.ctrlKey || j.metaKey)) {\n                                                                                                                        var i = Utils.getSelectedIds();\n                                                                                                                        if (i.length == 1) {\n                                                                                                                            var h = Model.getShapeById(i[0]);\n                                                                                                                            Designer.op.editShapeText(h)\n                                                                                                                        }\n                                                                                                                        j.preventDefault()\n                                                                                                                    } else {\n                                                                                                                        if (j.keyCode == 121) {\n                                                                                                                            j.preventDefault();\n                                                                                                                            Dock.enterPresentation()\n                                                                                                                        } else {\n                                                                                                                            if (j.keyCode == 91) {\n                                                                                                                                Designer.op.isMetaKey = true;\n                                                                                                                                j.preventDefault();\n                                                                                                                                return false\n                                                                                                                            }\n                                                                                                                        }\n                                                                                                                    }\n                                                                                                                }\n                                                                                                            }\n                                                                                                        }\n                                                                                                    }\n                                                                                                }\n                                                                                            }\n                                                                                        }\n                                                                                    }\n                                                                                }\n                                                                            }\n                                                                        }\n                                                                    }\n                                                                }\n                                                            }\n                                                        }\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            });\n            $(\"input,textarea,select\").die().live(\"keydown.hotkey\", function (b) {\n                b.stopPropagation()\n            });\n            $(window).unbind(\"keyup.hotkey\").bind(\"keyup.hotkey\", function (b) {\n                if (b.keyCode == 91) {\n                    b.preventDefault();\n                    Designer.op.isMetaKey = false;\n                    return false\n                }\n            })\n        },\n        cancel: function () {\n            $(window).unbind(\"keydown.hotkey\")\n        }\n    },\n    contextMenu: {\n        init: function () {\n            $(\"#designer_contextmenu\").unbind(\"mousedown\").bind(\"mousedown\", function (a) {\n                a.stopPropagation()\n            });\n            $(\"#designer_contextmenu\").find(\"li:not(.devider)\").unbind(\"click\").bind(\"click\", function () {\n                var a = $(this);\n                if (!a.menuitem(\"isDisabled\") && a.children(\".extend_menu\").length == 0) {\n                    Designer.contextMenu.execAction(a);\n                    Designer.contextMenu.hide()\n                }\n            });\n            $(\"#canvas_container\").unbind(\"contextmenu\").bind(\"contextmenu\", function (b) {\n                b.preventDefault();\n                if (!b.ctrlKey) {\n                    var a = $(\"#designer_canvas\");\n                    var c = Utils.getRelativePos(b.pageX, b.pageY, a);\n                    Designer.contextMenu.show(c.x, c.y)\n                    console.log(\"右键\")\n                }\n            })\n        },\n        destroy: function () {\n            $(\"#canvas_container\").unbind(\"contextmenu\");\n            this.hide()\n        },\n        menuPos: {\n            x: 0,\n            y: 0,\n            shape: null\n        },\n        show: function (i, h) {\n            this.menuPos.x = i;\n            this.menuPos.y = h;\n            var c = $(\"#designer_contextmenu\");\n            var a = Utils.getShapeByPosition(i, h, false);\n            c.children().hide();\n            c.children(\"li[ac=selectall]\").show();\n            c.children(\".devi_selectall\").show();\n            c.children(\"li[ac=drawline]\").show();\n            var b = Designer.clipboard.elements.length;\n            if (b == 0) {\n                if (localStorage.clipboard) {\n                    var d = JSON.parse(localStorage.clipboard);\n                    b = d.length\n                }\n            }\n            if (a == null) {\n                if (b > 0) {\n                    c.children(\"li[ac=paste]\").show();\n                    c.children(\".devi_clip\").show()\n                }\n            } else {\n                var f = a.shape;\n                this.menuPos.shape = f;\n                if (f.locked) {\n                    if (b > 0) {\n                        c.children(\"li[ac=paste]\").show();\n                        c.children(\".devi_clip\").show()\n                    }\n                    c.children(\"li[ac=unlock]\").show();\n                    c.children(\".devi_shape\").show()\n                } else {\n                    c.children(\"li[ac=cut]\").show();\n                    c.children(\"li[ac=copy]\").show();\n                    c.children(\"li[ac=duplicate]\").show();\n                    if (b > 0) {\n                        c.children(\"li[ac=paste]\").show()\n                    }\n                    c.children(\".devi_clip\").show();\n                    c.children(\"li[ac=front]\").show();\n                    c.children(\"li[ac=back]\").show();\n                    c.children(\"li[ac=lock]\").show();\n                    var g = Utils.getSelectedIds();\n                    var e = g.length;\n                    if (e >= 2) {\n                        c.children(\"li[ac=group]\").show();\n                        $(\"#ctxmenu_align\").show()\n                    }\n                    var j = Utils.getSelectedGroups().length;\n                    if (j >= 1) {\n                        c.children(\"li[ac=ungroup]\").show()\n                    }\n                    c.children(\".devi_shape\").show();\n                    if (e == 1 && f.name != \"linker\" && f.link) {\n                        c.children(\"li[ac=changelink]\").show()\n                    }\n                    if (f.name == \"linker\" || (f.textBlock && f.textBlock.length > 0)) {\n                        c.children(\"li[ac=edit]\").show()\n                    }\n                    c.children(\"li[ac=delete]\").show();\n                    c.children(\".devi_del\").show()\n                }\n            }\n            try {\n                if (showMenu && typeof (showMenu) == \"function\") showMenu(c);\n            } catch (e) { }\n            c.css({\n                display: \"block\",\n                \"z-index\": Model.orderList.length + 3,\n                left: i,\n                top: h\n            });\n            $(document).bind(\"mousedown.ctxmenu\", function () {\n                Designer.contextMenu.hide()\n            })\n        },\n        hide: function () {\n            $(\"#designer_contextmenu\").hide();\n            $(document).unbind(\"mousedown.ctxmenu\")\n        },\n        execAction: function (a) {\n            var b = a.attr(\"ac\");\n            if (b == \"cut\") {\n                Designer.clipboard.cut()\n            } else {\n                if (b == \"copy\") {\n                    Designer.clipboard.copy()\n                } else {\n                    if (b == \"paste\") {\n                        Designer.clipboard.paste(this.menuPos.x, this.menuPos.y)\n                    } else {\n                        if (b == \"duplicate\") {\n                            Designer.clipboard.duplicate()\n                        } else {\n                            if (b == \"front\") {\n                                Designer.layerShapes(\"front\")\n                            } else {\n                                if (b == \"back\") {\n                                    Designer.layerShapes(\"back\")\n                                } else {\n                                    if (b == \"lock\") {\n                                        Designer.lockShapes()\n                                    } else {\n                                        if (b == \"unlock\") {\n                                            Designer.unlockShapes()\n                                        } else {\n                                            if (b == \"group\") {\n                                                Designer.group()\n                                            } else {\n                                                if (b == \"ungroup\") {\n                                                    Designer.ungroup()\n                                                } else {\n                                                    if (b == \"align_shape\") {\n                                                        var c = a.attr(\"al\");\n                                                        Designer.alignShapes(c)\n                                                    } else {\n                                                        if (b == \"edit\") {\n                                                            Designer.op.editShapeText(this.menuPos.shape, this.menuPos)\n                                                        } else {\n                                                            if (b == \"delete\") {\n                                                                Designer.op.removeShape()\n                                                            } else {\n                                                                if (b == \"selectall\") {\n                                                                    Designer.selectAll()\n                                                                } else {\n                                                                    if (b == \"drawline\") {\n                                                                        Designer.op.changeState(\"creating_free_linker\")\n                                                                    } else {\n                                                                        if (b == \"changelink\") {\n                                                                            UI.showInsertLink()\n                                                                        }\n                                                                    }\n                                                                }\n                                                            }\n                                                        }\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    },\n    init: function () {\n        this.initialize.initLayout();\n        this.initialize.initModel();\n        if (localRuntime == false) {\n            this.initialize.initCanvas()\n        }\n        this.initialize.initShapes();\n        this.hotkey.init();\n        this.contextMenu.init();\n        Designer.op.init();\n        this.initialize.initialized = true;\n        Designer.events.push(\"initialized\");\n        $(\"#designer_layout\").on(\"scroll\", function () {\n            $(document).trigger(\"mouseup.multiselect\")\n        });\n    },\n    op: {\n        init: function () {\n            var b = $(\"#designer_canvas\");\n            var a = $(\"#canvas_container\");\n            a.unbind(\"mousemove.operate\").bind(\"mousemove.operate\", function (g) {\n                if (Designer.op.state != null) {\n                    return\n                }\n                Designer.op.destroy();\n                var f = Utils.getRelativePos(g.pageX, g.pageY, b);\n                var c = Utils.getShapeByPosition(f.x, f.y);\n                if (c != null) {\n                    if (c.type == \"dataAttribute\") {\n                        Designer.op.linkClickable(c.attribute.value, f)\n                    } else {\n                        if (c.type == \"linker\") {\n                            a.css(\"cursor\", \"pointer\");\n                            Designer.op.shapeSelectable(c.shape);\n                            var e = c.shape;\n                            var d = c.pointIndex;\n                            if (e.linkerType == \"broken\" && d > 1 && d <= e.points.length) {\n                                Designer.op.brokenLinkerChangable(e, d - 1)\n                            } else {\n                                if (e.from.id == null && e.to.id == null) {\n                                    a.css(\"cursor\", \"move\");\n                                    Designer.op.shapeDraggable()\n                                }\n                            }\n                            Designer.op.linkerClickable(e)\n                        } else {\n                            if (c.type == \"linker_point\") {\n                                a.css(\"cursor\", \"move\");\n                                Designer.op.shapeSelectable(c.shape);\n                                Designer.op.linkerDraggable(c.shape, c.point);\n                                Designer.op.linkerEditable(c.shape)\n                            } else {\n                                if (c.type == \"linker_text\") {\n                                    a.css(\"cursor\", \"text\");\n                                    Designer.op.shapeSelectable(c.shape);\n                                    Designer.op.linkerEditable(c.shape)\n                                } else {\n                                    if (c.type == \"shape\") {\n                                        if (c.shape.locked) {\n                                            a.css(\"cursor\", \"default\");\n                                            Designer.op.shapeSelectable(c.shape);\n                                        } else {\n                                            a.css(\"cursor\", \"move\");\n                                            Designer.op.shapeSelectable(c.shape);\n                                            Designer.op.shapeClickable(c.shape);\n                                            Designer.op.shapeEditable(c.shape);\n                                            Designer.op.shapeDraggable();\n                                            if (c.shape.link) {\n                                                Designer.op.linkClickable(c.shape.link, f)\n                                            }\n                                        }\n                                    } else {\n                                        a.css(\"cursor\", \"crosshair\");\n                                        Designer.op.shapeSelectable(c.shape);\n                                        Designer.op.shapeLinkable(c.shape, c.linkPoint)\n                                    }\n                                    if (c.shape.parent) {\n                                        Utils.showAnchors(Model.getShapeById(c.shape.parent))\n                                    } else {\n                                        Utils.showAnchors(c.shape)\n                                    }\n                                }\n                            }\n                        }\n                    }\n                } else {\n                    a.css(\"cursor\", \"default\");\n                    Designer.op.shapeMultiSelectable()\n                }\n            })\n        },\n        cancel: function () {\n            $(\"#canvas_container\").unbind(\"mousemove.operate\").css(\"cursor\", \"default\");\n            this.destroy()\n        },\n        destroy: function () {\n            $(\"#designer_canvas\").unbind(\"mousedown.drag\").unbind(\"dblclick.edit\").unbind(\"mousedown.draglinker\").unbind(\"mousedown.select\").unbind(\"mousedown.brokenLinker\").unbind(\"dblclick.edit_linker\");\n            $(\"#canvas_container\").unbind(\"mousedown.link\").unbind(\"mousedown.create_text\").unbind(\"mousedown.drag_canvas\");\n            $(\"#designer_layout\").unbind(\"mousedown.multiselect\");\n            Utils.hideAnchors();\n            $(\"#link_spot\").hide()\n        },\n        state: null,\n        changeState: function (a) {\n            this.state = a;\n            if (a == \"creating_free_text\") {\n                this.destroy();\n                $(\"#canvas_container\").css(\"cursor\", \"crosshair\");\n                this.textCreatable()\n            } else {\n                if (a == \"creating_free_linker\") {\n                    this.destroy();\n                    $(\"#canvas_container\").css(\"cursor\", \"crosshair\");\n                    this.shapeLinkable()\n                } else {\n                    if (a == \"drag_canvas\") {\n                        this.destroy();\n                        this.canvasDraggable()\n                    } else {\n                        if (a == \"changing_curve\") {\n                            this.destroy()\n                        }\n                    }\n                }\n            }\n        },\n        resetState: function () {\n            this.state = null;\n            $(\"#canvas_container\").css(\"cursor\", \"default\")\n        },\n        shapeSelectable: function (a) {\n            // console.log(\"选择了组件\");\n            var b = $(\"#designer_canvas\");\n            b.bind(\"mousedown.select\", function (d) {\n                Designer.op.changeState(\"seelcting_shapes\");\n                var e = a.id;\n                var c = [];\n                if (d.ctrlKey) {\n                    var c = Utils.getSelectedIds();\n                    if (Utils.isSelected(e)) {\n                        Utils.removeFromArray(c, e)\n                    } else {\n                        c.push(e)\n                    }\n                    Utils.unselect();\n                    if (c.length > 0) {\n                        Utils.selectShape(c)\n                    }\n                } else {\n                    if (Utils.selectIds.indexOf(e) < 0) {\n                        Utils.unselect();\n                        Utils.selectShape(e)\n                    }\n                }\n                $(document).bind(\"mouseup.select\", function () {\n                    Designer.op.resetState();\n                    b.unbind(\"mousedown.select\");\n                    $(document).unbind(\"mouseup.select\")\n                })\n            })\n        },\n        isMetaKey: false,\n        shapeDraggable: function () {\n\n            var c = $(\"#designer_canvas\");\n            var b = $(\"#canvas_container\");\n            var a = false;\n            c.bind(\"mousedown.drag\", function (f) {\n                Utils.hideLinkerCursor();\n                Utils.hideLinkerControls();\n                Designer.op.changeState(\"dragging\");\n                var r = Utils.getSelected();\n                var u = Utils.getRelativePos(f.pageX, f.pageY, c);\n                var q = true;\n                if (r.length == 1 && r[0].name == \"linker\") {\n                    q = false\n                }\n                var l = null;\n                if (q) {\n                    l = Utils.getShapesBounding(r)\n                }\n                var p = Utils.getFamilyShapes(r);\n                r = r.concat(p);\n                var n = Utils.getContainedShapes(r);\n                r = r.concat(n);\n                var x = Utils.getAttachedShapes(r);\n                r = r.concat(x);\n                var j = Utils.getCollapsedShapes(r);\n                r = r.concat(j);\n                var d = [];\n                if (q) {\n                    for (var t = 0; t < r.length; t++) {\n                        var h = r[t];\n                        if (h.name == \"linker\") {\n                            if (h.from.id && d.indexOf(h.from.id) < 0) {\n                                d.push(h.from.id)\n                            }\n                            if (h.to.id && d.indexOf(h.to.id) < 0) {\n                                d.push(h.to.id)\n                            }\n                        }\n                        if (d.indexOf(h.id) < 0) {\n                            d.push(h.id)\n                        }\n                    }\n                }\n                var w = r;\n                if (r.length == 0) {\n                    c.unbind(\"mousedown.drag\");\n                    return\n                }\n                var e = Utils.getOutlinkers(r);\n                r = r.concat(e);\n                var s = [];\n                for (var v = 0; v < r.length; v++) {\n                    var h = r[v];\n                    s.push(h.id)\n                }\n                var g = Model.define.page.width.toScale();\n                var m = Model.define.page.height.toScale();\n                var k = w[0].props.w;\n                var o = w[0].props.h;\n                b.bind(\"mousemove.drag\", function (B) {\n                    if (Designer.op.isMetaKey) {\n                        if (a == false) {\n                            Designer.clipboard.copy();\n                            Designer.clipboard.paste();\n                            r = Utils.getSelected();\n                            a = true\n                        }\n                    }\n                    UI.hideShapeOptions();\n                    var A = Utils.getRelativePos(B.pageX, B.pageY, c);\n                    var D = {\n                        x: A.x - u.x,\n                        y: A.y - u.y\n                    };\n                    var i = null;\n                    if (q) {\n                        var E = Utils.copy(l);\n                        E.x += D.x;\n                        E.y += D.y;\n                        var C = Designer.op.snapLine(E, d);\n                        D = {\n                            x: E.x - l.x,\n                            y: E.y - l.y\n                        };\n                        A = {\n                            x: u.x + D.x,\n                            y: u.y + D.y\n                        };\n                        l.x += D.x;\n                        l.y += D.y;\n                        if (w.length == 1 && w[0].groupName == \"boundaryEvent\") {\n                            if (C.attach) {\n                                w[0].attachTo = C.attach.id\n                            } else {\n                                delete r[0].attachTo\n                            }\n                        }\n                        if (C.container) {\n                            i = C.container\n                        }\n                    }\n                    if (D.x == 0 && D.y == 0) {\n                        return\n                    }\n                    for (var z = 0; z < r.length; z++) {\n                        var y = r[z];\n                        if (y.name == \"linker\") {\n                            continue\n                        } else {\n                            if (y.container && s.indexOf(y.container) >= 0) {\n                                continue\n                            }\n                        }\n                        if (i) {\n                            y.container = i.id\n                        } else {\n                            delete y.container\n                        }\n                    }\n                    Designer.op.moveShape(r, D);\n                    u = A;\n                    $(document).unbind(\"mouseup.drop\").bind(\"mouseup.drop\", function () {\n                        Model.updateMulti(r);\n                        $(document).unbind(\"mouseup.drop\")\n                    })\n                });\n                $(document).bind(\"mouseup.drag\", function () {\n                    Designer.op.isMetaKey = false;\n                    a = false;\n                    UI.showShapeOptions();\n                    Designer.op.resetState();\n                    b.unbind(\"mousemove.drag\");\n                    c.unbind(\"mousedown.drag\");\n                    $(document).unbind(\"mouseup.drag\");\n                    Designer.op.hideTip();\n                    Designer.op.hideSnapLine();\n                    Utils.showLinkerCursor();\n                    Utils.showLinkerControls();\n                    if (Model.define.page.orientation == \"portrait\" && Designer.config.scale == 1) {\n                        if (u.x + k / 2 > g) {\n                            Designer.setPageStyle({\n                                width: g + 120\n                            })\n                        }\n                        if (u.y + o / 2 > m) {\n                            Designer.setPageStyle({\n                                height: m + 120\n                            })\n                        }\n                    }\n                })\n            })\n        },\n        changeSpacing: function (n, c) {\n            var j = Utils.getSelectedIds();\n            var r = Utils.getSelected();\n            Utils.hideLinkerCursor();\n            var l = $(\"#canvas_container\");\n            var f = $(\"#designer_canvas\");\n            var q = Utils.getControlBox(j);\n            var y = n.attr(\"resizeDir\");\n            var x = {};\n            if (y.indexOf(\"l\") >= 0) {\n                x.x = q.x + q.w\n            } else {\n                if (y.indexOf(\"r\") >= 0) {\n                    x.x = q.x\n                } else {\n                    x.x = q.x + q.w / 2\n                }\n            }\n            if (y.indexOf(\"t\") >= 0) {\n                x.y = q.y + q.h\n            } else {\n                if (y.indexOf(\"b\") >= 0) {\n                    x.y = q.y\n                } else {\n                    x.y = q.y + q.h / 2\n                }\n            }\n\n            function v(i, C) {\n                if (i.id == null) {\n                    if (C) {\n                        return {\n                            type: \"box\",\n                            x: (i.x - q.x) / q.w,\n                            y: (i.y - q.y) / q.h\n                        }\n                    } else {\n                        return {\n                            type: \"fixed\"\n                        }\n                    }\n                } else {\n                    if (Utils.isSelected(i.id)) {\n                        var A = Model.getShapeById(i.id);\n                        var B = {\n                            x: A.props.x + A.props.w / 2,\n                            y: A.props.y + A.props.h / 2\n                        };\n                        var p = Utils.getRotated(B, i, -A.props.angle);\n                        return {\n                            type: \"shape\",\n                            x: (p.x - A.props.x) / A.props.w,\n                            y: (p.y - A.props.y) / A.props.h\n                        }\n                    } else {\n                        return {\n                            type: \"fixed\"\n                        }\n                    }\n                }\n            }\n            var h = [];\n            var a = {};\n            var e = [];\n            var z = Utils.getAttachedShapes(r);\n            r = r.concat(z);\n            var s = [];\n            var b = {\n                w: 20,\n                h: 20\n            };\n            for (var u = 0; u < r.length; u++) {\n                var d = r[u];\n                s.push(d.id);\n                if (d.parent) {\n                    s.push(d.parent)\n                }\n                if (d.name == \"linker\") {\n                    if (e.indexOf(d.id) == -1) {\n                        e.push(d.id)\n                    }\n                } else {\n                    h.push(d);\n                    if (d.props.w > b.w) {\n                        b.w = d.props.w\n                    }\n                    if (d.props.h > b.h) {\n                        b.h = d.props.h\n                    }\n                    if (d.attachTo && !Utils.isSelected(d.id)) {\n                        a[d.id] = {\n                            type: \"attached\",\n                            x: (d.props.x + d.props.w / 2 - q.x) / q.w,\n                            y: (d.props.y + d.props.h / 2 - q.y) / q.h\n                        }\n                    } else {\n                        a[d.id] = {\n                            x: (d.props.x - q.x) / q.w,\n                            y: (d.props.y - q.y) / q.h\n                        }\n                    }\n                    var t = Model.getShapeLinkers(d.id);\n                    if (t && t.length > 0) {\n                        for (var k = 0; k < t.length; k++) {\n                            var o = t[k];\n                            if (e.indexOf(o) == -1) {\n                                e.push(o)\n                            }\n                        }\n                    }\n                }\n            }\n            for (var u = 0; u < e.length; u++) {\n                var o = e[u];\n                var m = Model.getShapeById(o);\n                h.push(m);\n                var r = Utils.isSelected(o);\n                a[m.id] = {\n                    from: v(m.from, r),\n                    to: v(m.to, r)\n                }\n            }\n            var g = n.css(\"cursor\");\n            l.css(\"cursor\", g);\n            var w = [];\n            Designer.events.push(\"beforeResize\", {\n                minSize: b,\n                shapes: h,\n                dir: y\n            });\n            l.bind(\"mousemove.resize\", function (A) {\n                UI.hideShapeOptions();\n                w = [];\n                var B = Utils.getRelativePos(A.pageX, A.pageY, f);\n                B = Utils.restoreScale(B);\n                var D = Utils.copy(q);\n                if (y.indexOf(\"r\") >= 0) {\n                    D.w = B.x - x.x\n                } else {\n                    if (y.indexOf(\"l\") >= 0) {\n                        D.w = x.x - B.x\n                    }\n                }\n                if (y.indexOf(\"b\") >= 0) {\n                    D.h = B.y - x.y\n                } else {\n                    if (y.indexOf(\"t\") >= 0) {\n                        D.h = x.y - B.y\n                    }\n                }\n                if (D.w < b.w) {\n                    D.w = b.w\n                }\n                if (D.h < b.h) {\n                    D.h = b.h\n                }\n                if (y.indexOf(\"l\") >= 0) {\n                    D.x = x.x - D.w\n                }\n                if (y.indexOf(\"t\") >= 0) {\n                    D.y = x.y - D.h\n                }\n                Utils.removeAnchors();\n                for (var E = 0; E < h.length; E++) {\n                    var H = h[E];\n                    var G = a[H.id];\n                    if (H.name != \"linker\") {\n                        if (G.type == \"attached\") {\n                            H.props.x = D.x + D.w * G.x - H.props.w / 2;\n                            H.props.y = D.y + D.h * G.y - H.props.h / 2\n                        } else {\n                            H.props.x = D.x + D.w * G.x;\n                            H.props.y = D.y + D.h * G.y;\n                            Designer.painter.renderShape(H);\n                            Utils.showAnchors(H)\n                        }\n                    } else {\n                        if (G.from.type == \"box\") {\n                            H.from.x = D.x + D.w * G.from.x;\n                            H.from.y = D.y + D.h * G.from.y\n                        } else {\n                            if (G.from.type == \"shape\") {\n                                var p = Model.getShapeById(H.from.id);\n                                var J = {\n                                    x: p.props.x + p.props.w * G.from.x,\n                                    y: p.props.y + p.props.h * G.from.y\n                                };\n                                var F = {\n                                    x: p.props.x + p.props.w / 2,\n                                    y: p.props.y + p.props.h / 2\n                                };\n                                var C = Utils.getRotated(F, J, p.props.angle);\n                                H.from.x = C.x;\n                                H.from.y = C.y\n                            }\n                        }\n                        if (G.to.type == \"box\") {\n                            H.to.x = D.x + D.w * G.to.x;\n                            H.to.y = D.y + D.h * G.to.y\n                        } else {\n                            if (G.to.type == \"shape\") {\n                                var p = Model.getShapeById(H.to.id);\n                                var J = {\n                                    x: p.props.x + p.props.w * G.to.x,\n                                    y: p.props.y + p.props.h * G.to.y\n                                };\n                                var F = {\n                                    x: p.props.x + p.props.w / 2,\n                                    y: p.props.y + p.props.h / 2\n                                };\n                                var C = Utils.getRotated(F, J, p.props.angle);\n                                H.to.x = C.x;\n                                H.to.y = C.y\n                            }\n                        }\n                        Designer.painter.renderLinker(H, true)\n                    }\n                }\n                Designer.painter.drawControls(j);\n                var I = \"W: \" + Math.round(D.w) + \"&nbsp;&nbsp;H: \" + Math.round(D.h);\n                if (D.x != q.x) {\n                    I = \"X: \" + Math.round(D.x) + \"&nbsp;&nbsp;Y: \" + Math.round(D.y) + \"<br/>\" + I\n                }\n                Designer.op.showTip(I);\n                $(document).unbind(\"mouseup.resize_ok\").bind(\"mouseup.resize_ok\", function () {\n                    if (w.length > 0) {\n                        h = h.concat(w)\n                    }\n                    if (y.indexOf(\"t\") >= 0 || y.indexOf(\"l\") >= 0) {\n                        for (var M = 0; M < h.length; M++) {\n                            var L = h[M];\n                            if (L.attribute && L.attribute.collapsed) {\n                                var O = Utils.getCollapsedShapesById(L.id);\n                                if (O.length > 0) {\n                                    var N = Utils.getOutlinkers(O);\n                                    O = O.concat(N);\n                                    var K = Model.getPersistenceById(L.id);\n                                    var i = L.props.x - K.props.x;\n                                    var P = L.props.y - K.props.y;\n                                    Designer.op.moveShape(O, {\n                                        x: i,\n                                        y: P\n                                    }, true);\n                                    h = h.concat(O)\n                                }\n                            }\n                        }\n                        Designer.painter.drawControls(j)\n                    }\n                    Model.updateMulti(h);\n                    $(document).unbind(\"mouseup.resize_ok\")\n                })\n            });\n            $(document).bind(\"mouseup.resize\", function () {\n                UI.showShapeOptions();\n                l.css(\"cursor\", \"default\");\n                Designer.op.resetState();\n                l.unbind(\"mousemove.resize\");\n                $(document).unbind(\"mouseup.resize\");\n                Designer.op.hideTip();\n                Utils.showLinkerCursor();\n                Designer.op.hideSnapLine()\n            })\n        },\n        shapeResizable: function () {\n            $(\".shape_controller\").bind(\"mousedown\", function (c) {\n                c.stopPropagation();\n                Designer.op.changeState(\"resizing\");\n                var j = Utils.getSelectedIds();\n                var r = Utils.getSelected();\n                if ($(\"#shape_text_edit\").length > 0) {\n                    if (r[0].name != \"cls\" && r[0].name != \"interface\") {\n                        var v = $(\"#shape_text_edit\").val();\n                        r[0].textBlock[0].text = v\n                    }\n                }\n                Utils.hideLinkerCursor();\n                var l = $(\"#canvas_container\");\n                var f = $(\"#designer_canvas\");\n                var n = $(this);\n                var q;\n                if (j.length == 1) {\n                    var d = Model.getShapeById(j[0]);\n                    q = Utils.copy(d.props)\n                } else {\n                    q = Utils.getControlBox(j);\n                    q.angle = 0\n                }\n                var z = {\n                    x: q.x + q.w / 2,\n                    y: q.y + q.h / 2\n                };\n                var A = n.attr(\"resizeDir\");\n                var y = {};\n                if (A.indexOf(\"l\") >= 0) {\n                    y.x = q.x + q.w\n                } else {\n                    if (A.indexOf(\"r\") >= 0) {\n                        y.x = q.x\n                    } else {\n                        y.x = q.x + q.w / 2\n                    }\n                }\n                if (A.indexOf(\"t\") >= 0) {\n                    y.y = q.y + q.h\n                } else {\n                    if (A.indexOf(\"b\") >= 0) {\n                        y.y = q.y\n                    } else {\n                        y.y = q.y + q.h / 2\n                    }\n                }\n                y = Utils.getRotated(z, y, q.angle);\n\n                function w(i, E) {\n                    if (i.id == null) {\n                        if (E) {\n                            return {\n                                type: \"box\",\n                                x: (i.x - q.x) / q.w,\n                                y: (i.y - q.y) / q.h\n                            }\n                        } else {\n                            return {\n                                type: \"fixed\"\n                            }\n                        }\n                    } else {\n                        if (Utils.isSelected(i.id)) {\n                            var C = Model.getShapeById(i.id);\n                            var D = {\n                                x: C.props.x + C.props.w / 2,\n                                y: C.props.y + C.props.h / 2\n                            };\n                            var p = Utils.getRotated(D, i, -C.props.angle);\n                            return {\n                                type: \"shape\",\n                                x: (p.x - C.props.x) / C.props.w,\n                                y: (p.y - C.props.y) / C.props.h\n                            }\n                        } else {\n                            return {\n                                type: \"fixed\"\n                            }\n                        }\n                    }\n                }\n                var h = [];\n                var b = {};\n                var e = [];\n                var B = Utils.getAttachedShapes(r);\n                r = r.concat(B);\n                var s = [];\n                for (var u = 0; u < r.length; u++) {\n                    var d = r[u];\n                    s.push(d.id);\n                    if (d.parent) {\n                        s.push(d.parent)\n                    }\n                    if (d.name == \"linker\") {\n                        if (e.indexOf(d.id) == -1) {\n                            e.push(d.id)\n                        }\n                    } else {\n                        h.push(d);\n                        if (d.attachTo && !Utils.isSelected(d.id)) {\n                            b[d.id] = {\n                                type: \"attached\",\n                                x: (d.props.x + d.props.w / 2 - q.x) / q.w,\n                                y: (d.props.y + d.props.h / 2 - q.y) / q.h\n                            }\n                        } else {\n                            b[d.id] = {\n                                x: (d.props.x - q.x) / q.w,\n                                y: (d.props.y - q.y) / q.h,\n                                w: d.props.w / q.w,\n                                h: d.props.h / q.h\n                            }\n                        }\n                        var t = Model.getShapeLinkers(d.id);\n                        if (t && t.length > 0) {\n                            for (var k = 0; k < t.length; k++) {\n                                var o = t[k];\n                                if (e.indexOf(o) == -1) {\n                                    e.push(o)\n                                }\n                            }\n                        }\n                    }\n                }\n                for (var u = 0; u < e.length; u++) {\n                    var o = e[u];\n                    var m = Model.getShapeById(o);\n                    h.push(m);\n                    var r = Utils.isSelected(o);\n                    b[m.id] = {\n                        from: w(m.from, r),\n                        to: w(m.to, r)\n                    }\n                }\n                var g = n.css(\"cursor\");\n                l.css(\"cursor\", g);\n                var x = [];\n                var a = {\n                    w: 20,\n                    h: 20\n                };\n                Designer.events.push(\"beforeResize\", {\n                    minSize: a,\n                    shapes: h,\n                    dir: A\n                });\n                l.bind(\"mousemove.resize\", function (X) {\n                    UI.hideShapeOptions();\n                    x = [];\n                    var G = Utils.getRelativePos(X.pageX, X.pageY, f);\n                    G = Utils.restoreScale(G);\n                    var O = Utils.getRotated(y, G, -q.angle);\n                    var D = Utils.copy(q);\n                    if (A.indexOf(\"r\") >= 0) {\n                        D.w = O.x - y.x\n                    } else {\n                        if (A.indexOf(\"l\") >= 0) {\n                            D.w = y.x - O.x\n                        }\n                    }\n                    if (A.indexOf(\"b\") >= 0) {\n                        D.h = O.y - y.y\n                    } else {\n                        if (A.indexOf(\"t\") >= 0) {\n                            D.h = y.y - O.y\n                        }\n                    }\n                    if (X.ctrlKey && A.length == 2) {\n                        if (q.w >= q.h) {\n                            D.h = q.h / q.w * D.w;\n                            if (D.h < a.h) {\n                                D.h = a.h;\n                                D.w = q.w / q.h * D.h\n                            }\n                        } else {\n                            D.w = q.w / q.h * D.h;\n                            if (D.w < a.w) {\n                                D.w = a.w;\n                                D.h = q.h / q.w * D.w\n                            }\n                        }\n                    } else {\n                        if (D.w < a.w) {\n                            D.w = a.w\n                        }\n                        if (D.h < a.h) {\n                            D.h = a.h\n                        }\n                    }\n                    var U = {};\n                    if (A.indexOf(\"r\") >= 0) {\n                        U.x = y.x + D.w\n                    } else {\n                        if (A.indexOf(\"l\") >= 0) {\n                            U.x = y.x - D.w\n                        } else {\n                            U.x = y.x\n                        }\n                    }\n                    if (A.indexOf(\"b\") >= 0) {\n                        U.y = y.y + D.h\n                    } else {\n                        if (A.indexOf(\"t\") >= 0) {\n                            U.y = y.y - D.h\n                        } else {\n                            U.y = y.y\n                        }\n                    }\n                    var K = Utils.getRotated(y, U, q.angle);\n                    var M = {\n                        x: 0.5 * y.x + 0.5 * K.x,\n                        y: 0.5 * y.y + 0.5 * K.y\n                    };\n                    var S = Utils.getRotated(M, y, -q.angle);\n                    if (A.indexOf(\"r\") >= 0) {\n                        D.x = S.x\n                    } else {\n                        if (A.indexOf(\"l\") >= 0) {\n                            D.x = S.x - D.w\n                        } else {\n                            D.x = S.x - D.w / 2\n                        }\n                    }\n                    if (A.indexOf(\"b\") >= 0) {\n                        D.y = S.y\n                    } else {\n                        if (A.indexOf(\"t\") >= 0) {\n                            D.y = S.y - D.h\n                        } else {\n                            D.y = S.y - D.h / 2\n                        }\n                    }\n                    if (D.angle == 0) {\n                        var p = h[0];\n                        var Q = Designer.op.snapResizeLine(D, s, A)\n                    }\n                    Utils.removeAnchors();\n                    for (var T = 0; T < h.length; T++) {\n                        var F = h[T];\n                        var P = b[F.id];\n                        if (F.name == \"linker\") {\n                            if (P.from.type == \"box\") {\n                                F.from.x = D.x + D.w * P.from.x;\n                                F.from.y = D.y + D.h * P.from.y\n                            } else {\n                                if (P.from.type == \"shape\") {\n                                    var V = Model.getShapeById(F.from.id);\n                                    var R = {\n                                        x: V.props.x + V.props.w * P.from.x,\n                                        y: V.props.y + V.props.h * P.from.y\n                                    };\n                                    var W = {\n                                        x: V.props.x + V.props.w / 2,\n                                        y: V.props.y + V.props.h / 2\n                                    };\n                                    var H = Utils.getRotated(W, R, V.props.angle);\n                                    F.from.x = H.x;\n                                    F.from.y = H.y\n                                }\n                            }\n                            if (P.to.type == \"box\") {\n                                F.to.x = D.x + D.w * P.to.x;\n                                F.to.y = D.y + D.h * P.to.y\n                            } else {\n                                if (P.to.type == \"shape\") {\n                                    var V = Model.getShapeById(F.to.id);\n                                    var R = {\n                                        x: V.props.x + V.props.w * P.to.x,\n                                        y: V.props.y + V.props.h * P.to.y\n                                    };\n                                    var W = {\n                                        x: V.props.x + V.props.w / 2,\n                                        y: V.props.y + V.props.h / 2\n                                    };\n                                    var H = Utils.getRotated(W, R, V.props.angle);\n                                    F.to.x = H.x;\n                                    F.to.y = H.y\n                                }\n                            }\n                            Designer.painter.renderLinker(F, true)\n                        } else {\n                            if (P.type == \"attached\") {\n                                F.props.x = D.x + D.w * P.x - F.props.w / 2;\n                                F.props.y = D.y + D.h * P.y - F.props.h / 2\n                            } else {\n                                var C = Utils.copy(F.props);\n                                F.props.x = D.x + D.w * P.x;\n                                F.props.y = D.y + D.h * P.y;\n                                F.props.w = D.w * P.w;\n                                F.props.h = D.h * P.h;\n                                var E = Model.getShapeById(F.id).props;\n                                E.x = D.x + D.w * P.x;\n                                E.y = D.y + D.h * P.y;\n                                E.w = D.w * P.w;\n                                E.h = D.h * P.h;\n                                var J = {\n                                    x: F.props.x - C.x,\n                                    y: F.props.y - C.y,\n                                    w: F.props.w - C.w,\n                                    h: F.props.h - C.h\n                                };\n                                var N = {\n                                    shape: F,\n                                    offset: J,\n                                    dir: A\n                                };\n                                var L = Designer.events.push(\"resizing\", N);\n                                if (L) {\n                                    x = x.concat(L)\n                                }\n                            }\n                            Designer.painter.renderShape(F);\n                            Utils.showAnchors(F)\n                        }\n                    }\n                    Designer.painter.drawControls(j);\n                    var I = \"W: \" + Math.round(D.w) + \"&nbsp;&nbsp;H: \" + Math.round(D.h);\n                    if (D.x != q.x) {\n                        I = \"X: \" + Math.round(D.x) + \"&nbsp;&nbsp;Y: \" + Math.round(D.y) + \"<br/>\" + I\n                    }\n                    Designer.op.showTip(I);\n                    $(document).unbind(\"mouseup.resize_ok\").bind(\"mouseup.resize_ok\", function () {\n                        if (x.length > 0) {\n                            h = h.concat(x)\n                        }\n                        if (A.indexOf(\"t\") >= 0 || A.indexOf(\"l\") >= 0) {\n                            for (var aa = 0; aa < h.length; aa++) {\n                                var Z = h[aa];\n                                if (Z.attribute && Z.attribute.collapsed) {\n                                    var ac = Utils.getCollapsedShapesById(Z.id);\n                                    if (ac.length > 0) {\n                                        var ab = Utils.getOutlinkers(ac);\n                                        ac = ac.concat(ab);\n                                        var Y = Model.getPersistenceById(Z.id);\n                                        var i = Z.props.x - Y.props.x;\n                                        var ad = Z.props.y - Y.props.y;\n                                        Designer.op.moveShape(ac, {\n                                            x: i,\n                                            y: ad\n                                        }, true);\n                                        h = h.concat(ac)\n                                    }\n                                }\n                            }\n                            Designer.painter.drawControls(j)\n                        }\n                        Model.updateMulti(h);\n                        $(document).unbind(\"mouseup.resize_ok\")\n                    })\n                });\n                $(document).bind(\"mouseup.resize\", function () {\n                    UI.showShapeOptions();\n                    l.css(\"cursor\", \"default\");\n                    Designer.op.resetState();\n                    l.unbind(\"mousemove.resize\");\n                    $(document).unbind(\"mouseup.resize\");\n                    Designer.op.hideTip();\n                    Utils.showLinkerCursor();\n                    Designer.op.hideSnapLine()\n                })\n            })\n        },\n        shapeRotatable: function () {\n            $(\".shape_rotater\").bind(\"mousemove\", function (d) {\n                var c = $(this);\n                var a = d.pageX - c.offset().left;\n                var f = d.pageY - c.offset().top;\n                var b = c[0].getContext(\"2d\");\n                c.unbind(\"mousedown\");\n                c.removeClass(\"rotate_enable\");\n                if (b.isPointInPath(a, f)) {\n                    c.addClass(\"rotate_enable\");\n                    c.bind(\"mousedown\", function (p) {\n                        Utils.hideLinkerCursor();\n                        if ($(\"#shape_text_edit\").length) {\n                            $(\"#shape_text_edit\").trigger(\"blur\")\n                        }\n                        p.stopPropagation();\n                        Designer.op.changeState(\"rotating\");\n                        var l = Utils.getSelectedIds();\n                        var o;\n                        var k;\n                        if (l.length == 1) {\n                            var m = Model.getShapeById(l[0]);\n                            o = m.props;\n                            k = m.props.angle\n                        } else {\n                            o = Utils.getControlBox(l);\n                            k = 0\n                        }\n                        var e = {\n                            x: o.x + o.w / 2,\n                            y: o.y + o.h / 2\n                        };\n                        var n = Utils.toScale(e);\n                        var g = $(\"#designer_canvas\");\n                        var i = Utils.getSelected();\n                        var j = Utils.getAttachedShapes(i);\n                        i = i.concat(j);\n                        var q = Utils.getOutlinkers(i);\n                        i = i.concat(q);\n                        var h = k;\n                        $(document).bind(\"mousemove.rotate\", function (r) {\n                            UI.hideShapeOptions();\n                            var C = Utils.getRelativePos(r.pageX, r.pageY, g);\n                            var v = Math.atan(Math.abs(C.x - n.x) / Math.abs(n.y - C.y));\n                            if (C.x >= n.x && C.y >= n.y) {\n                                v = Math.PI - v\n                            } else {\n                                if (C.x <= n.x && C.y >= n.y) {\n                                    v = Math.PI + v\n                                } else {\n                                    if (C.x <= n.x && C.y <= n.y) {\n                                        v = Math.PI * 2 - v\n                                    }\n                                }\n                            }\n                            v = v % (Math.PI * 2);\n                            var D = Math.PI / 36;\n                            var A = Math.round(v / D);\n                            v = D * A;\n                            if (v == h) {\n                                return\n                            }\n                            h = v;\n                            Designer.op.showTip(A * 5 % 360 + \"°\");\n                            Designer.painter.rotateControls(o, v);\n                            Utils.removeAnchors();\n                            var E = v - k;\n                            for (var w = 0; w < i.length; w++) {\n                                var y = i[w];\n                                var u = Model.getPersistenceById(y.id);\n                                if (y.name != \"linker\") {\n                                    y.props.angle = Math.abs((E + u.props.angle) % (Math.PI * 2));\n                                    var x = {\n                                        x: u.props.x + u.props.w / 2,\n                                        y: u.props.y + u.props.h / 2\n                                    };\n                                    var B = Utils.getRotated(e, x, E);\n                                    y.props.x = B.x - y.props.w / 2;\n                                    y.props.y = B.y - y.props.h / 2;\n                                    Designer.painter.renderShape(y);\n                                    Utils.showAnchors(y)\n                                } else {\n                                    var z = false;\n                                    if ((Utils.isSelected(y.id) && y.from.id == null) || Utils.isSelected(y.from.id)) {\n                                        var s = Utils.getRotated(e, u.from, E);\n                                        y.from.x = s.x;\n                                        y.from.y = s.y;\n                                        if (y.from.angle != null) {\n                                            y.from.angle = Math.abs((u.from.angle + E) % (Math.PI * 2))\n                                        }\n                                        z = true\n                                    }\n                                    var t = false;\n                                    if ((Utils.isSelected(y.id) && y.to.id == null) || Utils.isSelected(y.to.id)) {\n                                        var s = Utils.getRotated(e, u.to, E);\n                                        y.to.x = s.x;\n                                        y.to.y = s.y;\n                                        if (y.to.angle != null) {\n                                            y.to.angle = Math.abs((u.to.angle + E) % (Math.PI * 2))\n                                        }\n                                        t = true\n                                    }\n                                    if (z || t) {\n                                        Designer.painter.renderLinker(y, true)\n                                    }\n                                }\n                            }\n                        }).bind(\"mouseup.rotate\", function () {\n                            UI.showShapeOptions();\n                            $(document).unbind(\"mousemove.rotate\").unbind(\"mouseup.rotate\");\n                            Designer.op.resetState();\n                            Model.updateMulti(i);\n                            Designer.painter.drawControls(l);\n                            Designer.op.hideTip();\n                            Utils.showLinkerCursor()\n                        })\n                    })\n                } else {\n                    c.removeClass(\"rotate_enable\");\n                    c.unbind(\"mousedown\")\n                }\n            })\n        },\n        groupShapeChangable: function () {\n            $(\".change_shape_icon\").bind(\"mousedown\", function (f) {\n                f.stopPropagation();\n                var a = Utils.getSelected()[0];\n                var h = a.groupName;\n                var d = $(this).parent();\n                var g = d.position();\n                var c = g.left + d.width();\n                var b = g.top + d.height() + 10;\n                Designer.op.groupDashboard(h, c, b, function (e) {\n                    if (a.name != e) {\n                        var i = Designer.events.push(\"shapeChanged\", {\n                            shape: a,\n                            name: e\n                        });\n                        Model.changeShape(a, e);\n                        var j = [a];\n                        if (i && i.length > 0) {\n                            j = j.concat(i)\n                        }\n                        Model.updateMulti(j)\n                    }\n                })\n            })\n        },\n        shapeMultiSelectable: function () {\n            var a = $(\"#designer_canvas\");\n            var b = $(\"#designer_layout\");\n            b.unbind(\"mousedown.multiselect\").bind(\"mousedown.multiselect\", function (e) {\n                var d = null;\n                if (!e.ctrlKey) {\n                    Utils.unselect()\n                }\n                var c = Utils.getRelativePos(e.pageX, e.pageY, a);\n                Designer.op.changeState(\"multi_selecting\");\n                b.bind(\"mousemove.multiselect\", function (g) {\n                    if (d == null) {\n                        d = $(\"<div id='selecting_box'></div>\").appendTo(a)\n                    }\n                    var f = Utils.getRelativePos(g.pageX, g.pageY, a);\n                    var h = {\n                        \"z-index\": Model.orderList.length,\n                        left: f.x,\n                        top: f.y\n                    };\n                    if (f.x > c.x) {\n                        h.left = c.x\n                    }\n                    if (f.y > c.y) {\n                        h.top = c.y\n                    }\n                    h.width = Math.abs(f.x - c.x);\n                    h.height = Math.abs(f.y - c.y);\n                    d.css(h)\n                });\n                $(document).unbind(\"mouseup.multiselect\").bind(\"mouseup.multiselect\", function (h) {\n                    if (d != null) {\n                        var f = {\n                            x: d.position().left.restoreScale(),\n                            y: d.position().top.restoreScale(),\n                            w: d.width().restoreScale(),\n                            h: d.height().restoreScale()\n                        };\n                        var i = Utils.getShapesByRange(f);\n                        if (h.ctrlKey) {\n                            var g = Utils.getSelectedIds();\n                            Utils.mergeArray(i, g)\n                        }\n                        Utils.unselect();\n                        Utils.selectShape(i);\n                        d.remove()\n                    }\n                    Designer.op.resetState();\n                    $(document).unbind(\"mouseup.multiselect\");\n                    b.unbind(\"mousemove.multiselect\")\n                });\n                b.unbind(\"mousedown.multiselect\")\n            })\n        },\n        shapeEditable: function (a) {\n            var b = $(\"#designer_canvas\");\n            b.unbind(\"dblclick.edit\").bind(\"dblclick.edit\", function (c) {\n                b.unbind(\"dblclick.edit\");\n                var d = Utils.getRelativePos(c.pageX, c.pageY, b);\n                console.log(\"双击了组件\");\n                parent.postMessage(JSON.stringify({ code: 1, value: a }), '*'); //window.postMessage\n                // Designer.op.editShapeText(a, d)\n            })\n        },\n        shapeClickable: function (a) {\n            var b = $(\"#designer_canvas\");\n            b.unbind(\"click\").bind(\"click\", function (c) {\n                b.unbind(\"click\");\n                var d = Utils.getRelativePos(c.pageX, c.pageY, b);\n                console.log(\"单击了组件\");\n                Designer.op.editShapeText(a, d);\n\n                var uiData = JSON.parse(localStorage.def_local_1);\n                var fromNode = {};\n                for (const key in uiData) {\n                    if (uiData.hasOwnProperty(key)) {\n                        const element = uiData[key];\n                        if (element.name == 'linker') {\n                            if (element.to.id == a.id) {\n                                fromNode = uiData[element.from.id];\n                            }\n                        }\n                    }\n                }\n\n                parent.postMessage(JSON.stringify({ code: 0, value: a, from: fromNode }), '*'); //window.postMessage\n\n            })\n        },\n        linkerClickable: function (a) {\n            var b = $(\"#designer_canvas\");\n            b.unbind(\"click\").bind(\"click\", function (c) {\n                b.unbind(\"click\");\n                var d = Utils.getRelativePos(c.pageX, c.pageY, b);\n                console.log(\"单击了连线\");\n\n                //判断是否条件控制节点下面的连线\n                var isControl_linker = false;\n                var def_local_1_data = JSON.parse(localStorage.def_local_1);\n                for (const key in def_local_1_data.elements) {\n                    if (def_local_1_data.elements.hasOwnProperty(key)) {\n                        const element = def_local_1_data.elements[key];\n                        if (key === a.from.id) {\n                            if (element.name == 'control') {\n                                Designer.op.editShapeText(a, d);\n                                isControl_linker = true;\n                                parent.postMessage(JSON.stringify({ code: 0, value: a }), '*'); //window.postMessage\n                            }\n                        }\n                    }\n                }\n                if (!isControl_linker) parent.postMessage(JSON.stringify({ code: -1, value: a }), '*');//如果不是控制节点的连线，那就隐藏右边所有的属性面板\n\n\n            })\n        },\n        editShapeText: function (a, h) {\n\n            console.log(\"a = \", a);\n            console.log(\"h = \", h);\n            // parent.postMessage('来自iframe的信息 我新建或者双击了组件 当前双击的组件类型是' + a, '*'); //window.postMessage\n            if (a.name == \"linker\") {\n                // this.editLinkerText(a);\n                return\n            }\n            if (!a.textBlock || a.textBlock.length == 0) {\n                return\n            }\n            if (a) {\n                try {\n                    if (nodeConf && typeof (nodeConf) == \"function\") nodeConf(a);\n                } catch (e) { }\n                return;\n            }\n            var g = a.getTextBlock();\n            var j = 0;\n            if (h) {\n                h.x = h.x.restoreScale();\n                h.y = h.y.restoreScale();\n                if (a.props.angle != 0) {\n                    var s = {\n                        x: a.props.x + a.props.w / 2,\n                        y: a.props.y + a.props.h / 2\n                    };\n                    h = Utils.getRotated(s, h, -a.props.angle)\n                }\n                var f = h.x - a.props.x;\n                var e = h.y - a.props.y;\n                for (var o = 0; o < g.length; o++) {\n                    var l = g[o];\n                    if (Utils.pointInRect(f, e, l.position)) {\n                        j = o;\n                        break\n                    }\n                }\n            }\n            Designer.contextMenu.hide();\n            var n = $(\"#shape_text_edit\");\n            if (n.length == 0) {\n                n = $(\"<textarea id='shape_text_edit'></textarea>\").appendTo(\"#designer_canvas\")\n            }\n            var m = $(\"#shape_text_ruler\");\n            if (m.length == 0) {\n                m = $(\"<textarea id='shape_text_ruler'></textarea>\").appendTo(\"#designer_canvas\")\n            }\n            $(\".text_canvas[forshape=\" + a.id + \"][ind=\" + j + \"]\").hide();\n            var r = g[j];\n            var t = a.textBlock[j];\n            var b = Utils.getShapeFontStyle(a.fontStyle);\n            b = $.extend({}, b, r.fontStyle);\n            var p = r.position;\n            if (b.orientation == \"horizontal\") {\n                var k = {\n                    x: p.x + p.w / 2,\n                    y: p.y + p.h / 2\n                };\n                p = {\n                    x: k.x - p.h / 2,\n                    y: k.y - p.w / 2,\n                    w: p.h,\n                    h: p.w\n                }\n            }\n            var q = {\n                width: p.w + \"px\",\n                \"z-index\": Model.orderList.length + 2,\n                \"line-height\": Math.round(b.size * 1.25) + \"px\",\n                \"font-size\": b.size + \"px\",\n                \"font-family\": b.fontFamily,\n                \"font-weight\": b.bold ? \"bold\" : \"normal\",\n                \"font-style\": b.italic ? \"italic\" : \"normal\",\n                \"text-align\": b.textAlign,\n                color: \"rgb(\" + b.color + \")\",\n                \"text-decoration\": b.underline ? \"underline\" : \"none\"\n            };\n            n.css(q);\n            m.css(q);\n            n.show();\n            p.x += a.props.x;\n            p.y += a.props.y;\n            n.val(r.text);\n            var d = 0;\n            $(\"#shape_text_edit\").unbind().bind(\"keyup\", function () {\n                var B = $(this).val();\n                m.val(B);\n                m.scrollTop(99999);\n                d = m.scrollTop();\n                n.css({\n                    height: d\n                });\n                var v = {\n                    x: p.x + p.w / 2,\n                    y: p.y + p.h / 2\n                };\n                var w = 0;\n                var y = 0;\n                var D = p.h;\n                if (b.vAlign == \"middle\") {\n                    if (d > D) {\n                        D = d;\n                        w = (v.y - D / 2);\n                        y = 0\n                    } else {\n                        w = (v.y - p.h / 2);\n                        y = (p.h - d) / 2;\n                        D = p.h - y\n                    }\n                } else {\n                    if (b.vAlign == \"bottom\") {\n                        if (d > D) {\n                            D = d;\n                            w = (v.y + p.h / 2 - D);\n                            y = 0\n                        } else {\n                            w = (v.y - p.h / 2);\n                            y = p.h - d;\n                            D = p.h - y\n                        }\n                    } else {\n                        w = (v.y - p.h / 2);\n                        y = 0;\n                        if (d > D) {\n                            D = d\n                        } else {\n                            D = p.h\n                        }\n                    }\n                }\n                var C = y + D;\n                var A = {\n                    x: p.x + p.w / 2,\n                    y: w + C / 2\n                };\n                var z = a.props.angle;\n                if (z != 0) {\n                    var i = {\n                        x: a.props.x + a.props.w / 2,\n                        y: a.props.y + a.props.h / 2\n                    };\n                    A = Utils.getRotated(i, A, z)\n                }\n                if (b.orientation == \"horizontal\") {\n                    z = (Math.PI * 1.5 + z) % (Math.PI * 2)\n                }\n                var u = Math.round(z / (Math.PI * 2) * 360);\n                var x = \"rotate(\" + u + \"deg) scale(\" + Designer.config.scale + \")\";\n                n.css({\n                    width: p.w,\n                    height: D,\n                    \"padding-top\": y,\n                    left: A.x.toScale() - p.w / 2 - 2,\n                    top: A.y.toScale() - C / 2 - 2,\n                    \"-webkit-transform\": x,\n                    \"-ms-transform\": x,\n                    \"-o-transform\": x,\n                    \"-moz-transform\": x,\n                    transform: x\n                })\n            }).bind(\"keydown\", function (w) {\n                var i = $(this);\n                if (w.keyCode == 13 && w.ctrlKey) {\n                    c();\n                    return false\n                } else {\n                    if (w.keyCode == 27) {\n                        i.unbind().remove();\n                        $(\".text_canvas[forshape=\" + a.id + \"][ind=\" + j + \"]\").show()\n                    } else {\n                        if (w.keyCode == 66 && w.ctrlKey) {\n                            var u = !b.bold;\n                            if (a.textBlock.length == 1) {\n                                a.fontStyle.bold = u\n                            } else {\n                                t.fontStyle = $.extend(t.fontStyle, {\n                                    bold: u\n                                })\n                            }\n                            b.bold = u;\n                            Model.update(a);\n                            var v = u ? \"bold\" : \"normal\";\n                            $(this).css(\"font-weight\", v);\n                            m.css(\"font-weight\", v);\n                            UI.update();\n                            w.preventDefault()\n                        } else {\n                            if (w.keyCode == 73 && w.ctrlKey) {\n                                var u = !b.italic;\n                                if (a.textBlock.length == 1) {\n                                    a.fontStyle.italic = u\n                                } else {\n                                    t.fontStyle = $.extend(t.fontStyle, {\n                                        italic: u\n                                    })\n                                }\n                                b.italic = u;\n                                Model.update(a);\n                                var v = u ? \"italic\" : \"normal\";\n                                $(this).css(\"font-style\", v);\n                                m.css(\"font-style\", v);\n                                UI.update();\n                                w.preventDefault()\n                            } else {\n                                if (w.keyCode == 85 && w.ctrlKey) {\n                                    var u = !b.underline;\n                                    if (a.textBlock.length == 1) {\n                                        a.fontStyle.underline = u\n                                    } else {\n                                        t.fontStyle = $.extend(t.fontStyle, {\n                                            underline: u\n                                        })\n                                    }\n                                    b.underline = u;\n                                    Model.update(a);\n                                    var v = u ? \"underline\" : \"none\";\n                                    $(this).css(\"text-decoration\", v);\n                                    m.css(\"text-decoration\", v);\n                                    w.preventDefault();\n                                    UI.update();\n                                    w.preventDefault()\n                                }\n                            }\n                        }\n                    }\n                }\n            }).bind(\"blur\", function (i) {\n                c()\n            }).bind(\"mousemove\", function (i) {\n                i.stopPropagation()\n            }).bind(\"mousedown\", function (i) {\n                i.stopPropagation()\n            }).bind(\"mouseenter\", function (i) {\n                Designer.op.destroy()\n            });\n            $(\"#shape_text_edit\").trigger(\"keyup\");\n            n.select();\n\n            function c() {\n                var i = $(\"#shape_text_edit\").val();\n                if ($(\"#shape_text_edit\").length && $(\"#shape_text_edit\").is(\":visible\")) {\n                    if (i != t.text) {\n                        t.text = i;\n                        if (a.name == \"interface\" || a.name == \"cls\") {\n                            Designer.op.shapeChangeHeight(a, j, d, i)\n                        }\n                        Model.update(a)\n                    }\n                    Designer.painter.renderShape(a);\n                    $(\"#shape_text_edit\").remove()\n                }\n            }\n        },\n        shapeChangeHeight: function (f, d, a, i) {\n            if (f.name == \"interface\") {\n                if (d == 1) {\n                    a = a < 30 ? 30 : a;\n                    var b = f.props.h - f.textBlock[0].position.h;\n                    f.props.h += a - b\n                } else {\n                    if (d == 0) {\n                        a = a < 30 ? 30 : a;\n                        var c = \"h-\" + a;\n                        f.props.h += (a - f.path[1].actions[0].y);\n                        f.path[1].actions[0].y = a;\n                        f.path[1].actions[1].y = a;\n                        f.textBlock[0].position.h = a;\n                        f.textBlock[1].position.y = a;\n                        f.textBlock[1].position.h = c\n                    }\n                }\n                Schema.initShapeFunctions(f)\n            } else {\n                if (f.name == \"cls\") {\n                    var h = Number(f.textBlock[0].position.h);\n                    var g = f.textBlock[1].position.h + \"\";\n                    var e = f.textBlock[2].position.h + \"\";\n                    if (g.indexOf(\"h\") >= 0) {\n                        g = (f.props.h - h) / 2\n                    }\n                    if (e.indexOf(\"h\") >= 0) {\n                        e = (f.props.h - h) / 2\n                    }\n                    g = Number(g);\n                    e = Number(e);\n                    a = a < 30 ? 30 : a;\n                    if (d == 0) {\n                        var j = a - h;\n                        if (j == 0) {\n                            return\n                        }\n                        f.props.h = a + g + e;\n                        f.textBlock[0].position.h = a;\n                        f.textBlock[1].position.y = a;\n                        f.textBlock[1].position.h = (f.props.h - a) / 2;\n                        f.textBlock[2].position.y = (f.props.h - a) / 2 + a;\n                        f.textBlock[2].position.h = (f.props.h - a) / 2;\n                        f.path[1].actions[0].y = a;\n                        f.path[1].actions[1].y = a;\n                        f.path[1].actions[2].y = f.props.h / 2 + a / 2;\n                        f.path[1].actions[3].y = f.props.h / 2 + a / 2\n                    }\n                    if (d == 1) {\n                        var j = a - g;\n                        if (j == 0) {\n                            return\n                        }\n                        f.props.h += j;\n                        f.textBlock[1].position.h = a;\n                        f.textBlock[1].position.y = h;\n                        f.textBlock[2].position.y = h + a + 2;\n                        f.textBlock[2].position.h = f.props.h - a - h;\n                        f.path[1].actions[0].y = h;\n                        f.path[1].actions[1].y = h;\n                        f.path[1].actions[2].y = h + a + 2;\n                        f.path[1].actions[3].y = h + a + 2\n                    } else {\n                        if (d == 2) {\n                            var j = a - e;\n                            if (j == 0) {\n                                return\n                            }\n                            f.props.h = a + g + h;\n                            f.textBlock[1].position.h = g;\n                            f.path[1].actions[2].y = h + g;\n                            f.path[1].actions[3].y = h + g;\n                            f.textBlock[2].position.y = Number(h) + Number(g);\n                            f.textBlock[2].position.h = a\n                        }\n                    }\n                    Schema.initShapeFunctions(f)\n                }\n            }\n        },\n        shapeLinkable: function (c, a) {\n            var d = $(\"#designer_canvas\");\n            var b = $(\"#canvas_container\");\n            b.unbind(\"mousedown.link\").bind(\"mousedown.link\", function (h) {\n                Designer.op.changeState(\"linking_from_shape\");\n                var f = null;\n                var g = null;\n                var j;\n                if (!c) {\n                    var i = Utils.getRelativePos(h.pageX, h.pageY, d);\n                    j = {\n                        x: i.x.restoreScale(),\n                        y: i.y.restoreScale(),\n                        id: null,\n                        angle: null\n                    }\n                } else {\n                    j = a;\n                    j.id = c.id\n                }\n                b.bind(\"mousemove.link\", function (l) {\n                    b.css(\"cursor\", \"default\");\n                    var k = Utils.getRelativePos(l.pageX, l.pageY, d);\n                    if (g == null) {\n                        g = e(j, k);\n                        Designer.events.push(\"linkerCreating\", g)\n                    }\n                    Designer.op.moveLinker(g, \"to\", k.x, k.y);\n                    $(document).unbind(\"mouseup.droplinker\").bind(\"mouseup.droplinker\", function () {\n                        if (Math.abs(k.x - j.x) > 20 || Math.abs(k.y - j.y) > 20) {\n                            Model.add(g);\n                            Designer.events.push(\"linkerCreated\", g);\n                            if (g.to.id == null && g.from.id != null) {\n                                Designer.op.linkDashboard(g)\n                            }\n                            Utils.showLinkerCursor()\n                        } else {\n                            $(\"#\" + g.id).remove()\n                        }\n                        Designer.op.hideSnapLine();\n                        $(document).unbind(\"mouseup.droplinker\")\n                    })\n                });\n                $(document).bind(\"mouseup.link\", function () {\n                    Designer.op.hideLinkPoint();\n                    Designer.op.resetState();\n                    b.unbind(\"mousedown.link\");\n                    b.unbind(\"mousemove.link\");\n                    $(document).unbind(\"mouseup.link\");\n\n                    //判断组件之间关联\n                    if (!g || g == null || !g.from || g.from == null) return;\n                    var from = Model.getShapeById(g.from.id);\n                    var to = Model.getShapeById(g.to.id);\n                    console.log(\"连接线\");\n                    console.log(\"to\", to);\n                    console.log(\"from\", from);\n                    console.log(JSON.parse(localStorage.def_local_1));\n                    var linked = false;\n                    if (from && from.selected && from.selected.length > 0) {\n                        $.each(from.selected, function () {\n                            var name = this;\n                            if (to && name == to.name) {\n                                linked = true;\n                                return false;\n                            }\n                        });\n\n                    } else {\n                        linked = false;\n                    }\n                    if (!linked && to) {\n                        Utils.unselect();\n                        $('.shape_dashboard.menu').remove();\n                        Model.add(g);\n                        Utils.selectShape(g.id)\n                        setTimeout(Designer.op.removeShape);\n                        UI.showTip('节点之间无关联!');\n                        console.warn(\"节点之间无关联!\");\n                    }\n                })\n            });\n\n            function e(j, i) {\n                console.log(\"创建linker\");\n                console.log('j = ', j);\n                console.log('i = ', i);\n\n\n                if (localStorage.def_local_1) {\n                    var fromId = j.id;\n                    var uiData = JSON.parse(localStorage.def_local_1);//本地的数据\n                    //限制连线的个数\n                    switch (uiData.elements[fromId].name) {\n                        case 'control'://如果是条件控制节点，限制只能拉两条线（命中和非命中）\n                            var linkerCount = 0;\n                            for (const key in uiData.elements) {\n                                if (uiData.elements.hasOwnProperty(key)) {\n                                    const element = uiData.elements[key];\n                                    if (element.name === 'linker' && element.from.id === fromId) {\n                                        linkerCount++;\n                                    }\n                                }\n                            }\n                            if (linkerCount >= 2) {\n                                UI.showTip('条件控制节点只能有两条分支');\n                                return null\n                            }\n                            break;\n                        case 'dataSource'://如果是数据源节点，限制只能拉一条线\n                            var linkerCount = 0;\n                            for (const key in uiData.elements) {\n                                if (uiData.elements.hasOwnProperty(key)) {\n                                    const element = uiData.elements[key];\n                                    if (element.name === 'linker' && element.from.id === fromId) {\n                                        linkerCount++;\n                                    }\n                                }\n                            }\n                            if (linkerCount >= 1) {\n                                UI.showTip('数据源节点只能有一条分支');\n                                return null\n                            }\n                            break;\n                        case 'output'://如果是输出节点，不能拉线\n                            UI.showTip('输出节点没有分支');\n                            return null\n\n                        case 'start'://如果是根节点，限制只能拉一条线\n                            var linkerCount = 0;\n                            for (const key in uiData.elements) {\n                                if (uiData.elements.hasOwnProperty(key)) {\n                                    const element = uiData.elements[key];\n                                    if (element.name === 'linker' && element.from.id === fromId) {\n                                        linkerCount++;\n                                    }\n                                }\n                            }\n                            if (linkerCount >= 1) {\n                                UI.showTip('根节点只能有一条分支');\n                                return null\n                            }\n                            break;\n                        default:\n                            break;\n                    }\n\n                }\n\n\n\n\n                if (localStorage.def_local_1) {\n                    console.log(JSON.parse(localStorage.def_local_1));\n                }\n                var g = Utils.newId();\n                var h = Utils.copy(Schema.linkerDefaults);\n                h.from = j;\n                h.to = {\n                    id: null,\n                    x: i.x,\n                    y: i.y,\n                    angle: null\n                };\n                h.props = {\n                    zindex: Model.maxZIndex + 1\n                };\n                delete h.fontStyle;\n                var f = {};\n                if (Designer.defaults.linkerBeginArrowStyle) {\n                    f.beginArrowStyle = Designer.defaults.linkerBeginArrowStyle\n                }\n                if (Designer.defaults.linkerEndArrowStyle) {\n                    f.endArrowStyle = Designer.defaults.linkerEndArrowStyle\n                }\n                h.lineStyle = f;\n                h.id = g;\n                return h\n            }\n        },\n        linkerEditable: function (b) {\n\n            var a = $(\"#designer_canvas\");\n            a.unbind(\"dblclick.edit_linker\").bind(\"dblclick.edit_linker\", function () {\n                console.log(\"双击了连线\", b);\n                // Designer.op.editLinkerText(b);\n\n                //判断是否条件控制节点下面的连线\n                // var def_local_1_data = JSON.parse(localStorage.def_local_1);\n                // for (const key in def_local_1_data.elements) {\n                //     if (def_local_1_data.elements.hasOwnProperty(key)) {\n                //         const element = def_local_1_data.elements[key];\n                //         if (key === b.from.id) {\n                //             if (element.name == 'control') {\n                //                 parent.postMessage(JSON.stringify({ code: 1, value: b }), '*'); //window.postMessage\n                //             }\n                //         }\n                //     }\n                // }\n\n                a.unbind(\"dblclick.edit_linker\")\n            })\n        },\n        editLinkerText: function (e) {\n            Designer.contextMenu.hide();\n            var d = Designer.painter.getLinkerMidpoint(e);\n            var h = $(\"#\" + e.id).find(\".text_canvas\");\n            var b = $(\"#linker_text_edit\");\n            if (b.length == 0) {\n                b = $(\"<textarea id='linker_text_edit'></textarea>\").appendTo(\"#designer_canvas\")\n            }\n            $(\"#\" + e.id).find(\".text_canvas\").hide();\n            var g = Utils.getLinkerFontStyle(e.fontStyle);\n            var f = \"scale(\" + Designer.config.scale + \")\";\n            var a = Math.round(g.size * 1.25);\n            b.css({\n                \"z-index\": Model.orderList.length,\n                \"line-height\": a + \"px\",\n                \"font-size\": g.size + \"px\",\n                \"font-family\": g.fontFamily,\n                \"font-weight\": g.bold ? \"bold\" : \"normal\",\n                \"font-style\": g.italic ? \"italic\" : \"normal\",\n                \"text-align\": g.textAlign,\n                color: \"rgb(\" + g.color + \")\",\n                \"text-decoration\": g.underline ? \"underline\" : \"none\",\n                \"-webkit-transform\": f,\n                \"-ms-transform\": f,\n                \"-o-transform\": f,\n                \"-moz-transform\": f,\n                transform: f\n            });\n            b.val(e.text).show().select();\n            b.unbind().bind(\"keyup\", function () {\n                var k = $(this).val();\n                var l = k.replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\\n/g, \"<br/>\");\n                h.html(l + \"<br/>\");\n                var i = h.width();\n                if (i < 50) {\n                    i = 50\n                }\n                var j = h.height();\n                if (j < a) {\n                    j = a\n                }\n                if (typeof e.textPos != \"undefined\") {\n                    b.css({\n                        left: e.textPos.x,\n                        top: e.textPos.y,\n                        width: i,\n                        height: j\n                    })\n                } else {\n                    b.css({\n                        left: d.x.toScale() - i / 2 - 2,\n                        top: d.y.toScale() - j / 2 - 2,\n                        width: i,\n                        height: j\n                    })\n                }\n            }).bind(\"mousedown\", function (i) {\n                i.stopPropagation()\n            }).bind(\"keydown\", function (k) {\n                if (k.keyCode == 13 && k.ctrlKey) {\n                    c();\n                    return false\n                } else {\n                    if (k.keyCode == 27) {\n                        b.unbind().remove();\n                        Designer.painter.renderLinkerText(e)\n                    } else {\n                        if (k.keyCode == 66 && k.ctrlKey) {\n                            var l = Utils.getLinkerFontStyle(e.fontStyle);\n                            var i = !l.bold;\n                            e.fontStyle.bold = i;\n                            Model.update(e);\n                            var j = i ? \"bold\" : \"normal\";\n                            $(this).css(\"font-weight\", j);\n                            h.css(\"font-weight\", j);\n                            UI.update()\n                        } else {\n                            if (k.keyCode == 73 && k.ctrlKey) {\n                                var l = Utils.getLinkerFontStyle(e.fontStyle);\n                                var i = !l.italic;\n                                e.fontStyle.italic = i;\n                                Model.update(e);\n                                var j = i ? \"italic\" : \"normal\";\n                                $(this).css(\"font-style\", j);\n                                h.css(\"font-style\", j);\n                                UI.update()\n                            } else {\n                                if (k.keyCode == 85 && k.ctrlKey) {\n                                    var l = Utils.getLinkerFontStyle(e.fontStyle);\n                                    var i = !l.underline;\n                                    e.fontStyle.underline = i;\n                                    Model.update(e);\n                                    var j = i ? \"underline\" : \"none\";\n                                    $(this).css(\"text-decoration\", j);\n                                    h.css(\"text-decoration\", j);\n                                    k.preventDefault();\n                                    UI.update()\n                                }\n                            }\n                        }\n                    }\n                }\n            }).bind(\"blur\", function () {\n                c()\n            });\n            b.trigger(\"keyup\");\n\n            function c() {\n                var i = $(\"#linker_text_edit\");\n                if (i.length && i.is(\":visible\")) {\n                    var j = i.val();\n                    if (j != e.text) {\n                        e.text = j;\n                        Model.update(e)\n                    }\n                    Designer.painter.renderLinker(e);\n                    i.remove()\n                }\n            }\n        },\n        linkerDraggable: function (d, a) {\n            console.log(\"linkerDraggable\")\n            if (d.locked) {\n                return\n            }\n            var linked = false;\n            var c = $(\"#designer_canvas\");\n            var b = $(\"#canvas_container\");\n            c.bind(\"mousedown.draglinker\", function (f) {\n                console.log(\"mousedown.draglinker\");\n                Utils.hideLinkerControls();\n                Designer.op.changeState(\"dragging_linker\");\n                var e = Utils.getSelectedIds();\n                var g = false;\n                if (e.length > 1) {\n                    g = true\n                }\n                b.bind(\"mousemove.draglinker\", function (i) {\n                    console.log(\"mousemove.draglinker\")\n                    b.css(\"cursor\", \"default\");\n                    var h = Utils.getRelativePos(i.pageX, i.pageY, c);\n                    Designer.op.moveLinker(d, a, h.x, h.y);\n                    if (g) {\n                        Designer.painter.drawControls(e)\n                    }\n                    $(document).unbind(\"mouseup.droplinker\").bind(\"mouseup.droplinker\", function () {\n                        $(document).unbind(\"mouseup.droplinker\");\n                        if (linked) {\n                            console.log(\"组件之间关联成功\");\n                            Model.update(d);\n                        } else {\n                            $('.shape_dashboard.menu').remove();\n                            Designer.op.removeShape();\n                            UI.showTip('组件之间无关联1!');\n                        }\n                        Utils.showLinkerControls();\n                        Designer.op.hideSnapLine()\n                    })\n                });\n                $(document).bind(\"mouseup.draglinker\", function () {\n                    console.log(\"mouseup.draglinker\")\n                    Designer.op.hideLinkPoint();\n                    Designer.op.resetState();\n                    c.unbind(\"mousedown.draglinker\");\n                    b.unbind(\"mousemove.draglinker\");\n                    $(document).unbind(\"mouseup.draglinker\");\n                    Utils.showLinkerControls()\n                    if (!d.to.id) {\n                        //没指向节点，显示可选节点\n                        linked = true;\n                        Designer.op.linkDashboard(d);\n                    } else {\n                        //判断节点之间是可关联\n                        var from = Model.getShapeById(d.from.id);\n                        var to = Model.getShapeById(d.to.id);\n\n                        if (from && from.selected && from.selected.length > 0) {\n                            $.each(from.selected, function () {\n                                var name = this;\n                                if (name == to.name) {\n                                    linked = true;\n                                    return false;\n                                }\n                            });\n                        } else {\n                            linked = false;\n                        }\n                    }\n                })\n            })\n        },\n        linkClickable: function (a, c) {\n            console.log(\"linkClickable\");\n            var b = $(\"#link_spot\");\n            if (b.length == 0) {\n                b = $(\"<a id='link_spot' target='_blank' style='cursor: pointer'></a>\").appendTo(\"#designer_canvas\");\n                b.bind(\"dragstart\", function () {\n                    return false\n                })\n            }\n            if (a.trim().toLowerCase().indexOf(\"http\") == -1) {\n                a = \"http://\" + a\n            }\n            b.attr(\"href\", a);\n            b.show().css({\n                left: c.x - 50,\n                top: c.y - 50,\n                \"z-index\": Model.orderList.length + 3\n            })\n        },\n        textCreatable: function () {\n            var b = $(\"#designer_canvas\");\n            var a = $(\"#canvas_container\");\n            a.unbind(\"mousedown.create_text\").bind(\"mousedown.create_text\", function (f) {\n                var d = null;\n                if (!f.ctrlKey) {\n                    Utils.unselect()\n                }\n                var c = Utils.getRelativePos(f.pageX, f.pageY, b);\n                var e = null;\n                a.bind(\"mousemove.create_text\", function (g) {\n                    if (d == null) {\n                        d = $(\"<div id='texting_box'></div>\").appendTo(b)\n                    }\n                    var h = Utils.getRelativePos(g.pageX, g.pageY, b);\n                    e = {\n                        \"z-index\": Model.orderList.length,\n                        left: h.x - 1,\n                        top: h.y - 1\n                    };\n                    if (h.x > c.x) {\n                        e.left = c.x - 1\n                    }\n                    if (h.y > c.y) {\n                        e.top = c.y - 1\n                    }\n                    e.width = Math.abs(h.x - c.x - 2);\n                    e.height = Math.abs(h.y - c.y - 2);\n                    d.css(e)\n                });\n                $(document).unbind(\"mouseup.create_text\").bind(\"mouseup.create_text\", function (h) {\n                    if (e != null && e.width >= 20 && e.height >= 20) {\n                        var g = Model.create(\"standardText\", e.left.restoreScale(), e.top.restoreScale());\n                        g.props.w = e.width.restoreScale();\n                        g.props.h = e.height.restoreScale();\n                        Model.add(g);\n                        Designer.painter.renderShape(g);\n                        Designer.op.editShapeText(g);\n                        Utils.unselect();\n                        Utils.selectShape(g.id)\n                    }\n                    d.remove();\n                    Designer.op.resetState();\n                    $(document).unbind(\"mouseup.create_text\");\n                    a.unbind(\"mousemove.create_text\")\n                });\n                a.unbind(\"mousedown.create_text\")\n            })\n        },\n        canvasDragTimeout: null,\n        canvasDraggable: function () {\n            var a = $(\"#canvas_container\");\n            //a.css(\"cursor\", \"url(/themes/default/images/diagraming/cursor_hand.png) 8 8, auto\");\n            a.off(\"mousedown.drag_canvas\").on(\"mousedown.drag_canvas\", function (d) {\n                var c = $(\"#designer_layout\").scrollTop();\n                var b = $(\"#designer_layout\").scrollLeft();\n                a.on(\"mousemove.drag_canvas\", function (f) {\n                    var e = f.pageX - d.pageX;\n                    var g = f.pageY - d.pageY;\n                    $(\"#designer_layout\").scrollLeft(b - e);\n                    $(\"#designer_layout\").scrollTop(c - g)\n                });\n                $(document).off(\"mouseup.drag_canvas\").on(\"mouseup.drag_canvas\", function (e) {\n                    a.off(\"mousemove.drag_canvas\");\n                    $(document).off(\"mouseup.drag_canvas\")\n                })\n            });\n            $(document).off(\"keyup.drag_canvas\").on(\"keyup.drag_canvas\", function (b) {\n                a.off(\"mousedown.drag_canvas\");\n                Designer.op.resetState();\n                $(document).off(\"mouseup.drag_canvas\");\n                b.preventDefault();\n                a.off(\"mousemove.drag_canvas\")\n            })\n        },\n        canvasFreeDraggable: function () {\n            var a = $(\"#canvas_container\");\n            //a.css(\"cursor\", \"url(/themes/default/images/diagraming/cursor_hand.png) 8 8, auto\");\n            a.unbind(\"mousedown.drag_canvas\").bind(\"mousedown.drag_canvas\", function (d) {\n                var c = $(\"#designer_layout\").scrollTop();\n                var b = $(\"#designer_layout\").scrollLeft();\n                a.bind(\"mousemove.drag_canvas\", function (f) {\n                    var e = f.pageX - d.pageX;\n                    var g = f.pageY - d.pageY;\n                    $(\"#designer_layout\").scrollLeft(b - e);\n                    $(\"#designer_layout\").scrollTop(c - g)\n                });\n                $(document).unbind(\"mouseup.drag_canvas\").bind(\"mouseup.drag_canvas\", function (e) {\n                    a.unbind(\"mousemove.drag_canvas\");\n                    $(document).unbind(\"mouseup.drag_canvas\")\n                })\n            })\n        },\n        moveShape: function (q, h, c) {\n            var r = [];\n            for (var t = 0; t < q.length; t++) {\n                var b = q[t];\n                r.push(b.id)\n            }\n            var w = Utils.restoreScale(h);\n            for (var t = 0; t < q.length; t++) {\n                var b = q[t];\n                if (b.name == \"linker\") {\n                    var m = b;\n                    var s = m.from;\n                    var d = m.to;\n                    var j = false;\n                    var n = false;\n                    if (!Utils.isSelected(m.id)) {\n                        if (s.id != null && r.indexOf(s.id) >= 0) {\n                            m.from.x += w.x;\n                            m.from.y += w.y;\n                            j = true\n                        }\n                        if (d.id != null && r.indexOf(d.id) >= 0) {\n                            m.to.x += w.x;\n                            m.to.y += w.y;\n                            n = true\n                        }\n                    } else {\n                        if (s.id == null || r.indexOf(s.id) >= 0) {\n                            m.from.x += w.x;\n                            m.from.y += w.y;\n                            j = true\n                        }\n                        if (d.id == null || r.indexOf(d.id) >= 0) {\n                            m.to.x += w.x;\n                            m.to.y += w.y;\n                            n = true\n                        }\n                    }\n                    if (j && n) {\n                        for (var u = 0; u < m.points.length; u++) {\n                            var o = m.points[u];\n                            o.x += w.x;\n                            o.y += w.y\n                        }\n                        var v = $(\"#\" + b.id);\n                        if (v.length > 0) {\n                            var f = v.position();\n                            v.css({\n                                left: f.left += h.x,\n                                top: f.top += h.y\n                            })\n                        }\n                    } else {\n                        if (j || n) {\n                            Designer.painter.renderLinker(m, true)\n                        }\n                    }\n                } else {\n                    a(b);\n                    $(\".shape_contour[forshape=\" + b.id + \"]\").css({\n                        left: b.props.x.toScale(),\n                        top: b.props.y.toScale()\n                    })\n                }\n            }\n            var e = Utils.getSelectedLinkerIds();\n            if (q.length == 1 && e.length == 1) {\n                return\n            }\n            if (typeof c == \"undefined\") {\n                if (e.length > 0) {\n                    var g = Utils.getSelectedIds();\n                    Designer.painter.drawControls(g)\n                } else {\n                    var l = $(\"#shape_controls\");\n                    l.css({\n                        left: parseFloat(l.css(\"left\")) + h.x,\n                        top: parseFloat(l.css(\"top\")) + h.y\n                    })\n                }\n                var k = $(\"#shape_controls\").position();\n                Designer.op.showTip(\"X: \" + Math.round(k.left.restoreScale()) + \"&nbsp;&nbsp;Y: \" + Math.round(k.top.restoreScale()))\n            }\n\n            function a(i) {\n                i.props.x += w.x;\n                i.props.y += w.y;\n                var p = $(\"#\" + i.id);\n                p.css({\n                    left: parseFloat(p.css(\"left\")) + h.x,\n                    top: parseFloat(p.css(\"top\")) + h.y\n                })\n            }\n        },\n        moveLinker: function (i, q, f, e) {\n            var b = null;\n            var j = null;\n            var m = Utils.getShapeByPosition(f, e, true);\n            Designer.op.hideLinkPoint();\n            if (m != null) {\n                var a = m.shape;\n                Utils.showAnchors(a);\n                j = a.id;\n                if (m.type == \"bounding\") {\n                    b = m.linkPoint;\n                    Designer.op.showLinkPoint(Utils.toScale(b))\n                } else {\n                    if (m.type == \"shape\") {\n                        var s;\n                        var d;\n                        if (q == \"from\") {\n                            s = {\n                                x: i.to.x,\n                                y: i.to.y\n                            };\n                            d = i.to.id\n                        } else {\n                            s = {\n                                x: i.from.x,\n                                y: i.from.y\n                            };\n                            d = i.from.id\n                        }\n                        if (a.id == d) {\n                            Designer.op.hideLinkPoint();\n                            b = {\n                                x: f.restoreScale(),\n                                y: e.restoreScale()\n                            };\n                            b.angle = null;\n                            j = null\n                        } else {\n                            var k = a.getAnchors();\n                            var h = -1;\n                            var l;\n                            var t = {\n                                x: a.props.x + a.props.w / 2,\n                                y: a.props.y + a.props.h / 2\n                            };\n                            for (var r = 0; r < k.length; r++) {\n                                var o = k[r];\n                                var g = Utils.getRotated(t, {\n                                    x: a.props.x + o.x,\n                                    y: a.props.y + o.y\n                                }, a.props.angle);\n                                var p = Utils.measureDistance(g, s);\n                                if (h == -1 || p < h) {\n                                    h = p;\n                                    l = g\n                                }\n                            }\n                            var c = Utils.getPointAngle(a.id, l.x, l.y, 7);\n                            b = {\n                                x: l.x,\n                                y: l.y,\n                                angle: c\n                            };\n                            //不选中\n                            Designer.op.showLinkPoint(Utils.toScale(b))\n                        }\n                    }\n                }\n            } else {\n                Designer.op.hideLinkPoint();\n                Utils.hideAnchors();\n                var n = Designer.op.snapLinkerLine(f, e);\n                b = {\n                    x: n.x.restoreScale(),\n                    y: n.y.restoreScale()\n                };\n                b.angle = null;\n                j = null\n            }\n            if (q == \"from\") {\n                i.from.id = j;\n                i.from.x = b.x;\n                i.from.y = b.y;\n                i.from.angle = b.angle;\n                if (j == null) {\n                    if (b.x >= i.to.x - 6 && b.x <= i.to.x + 6) {\n                        i.from.x = i.to.x\n                    }\n                    if (b.y >= i.to.y - 6 && b.y <= i.to.y + 6) {\n                        i.from.y = i.to.y\n                    }\n                }\n            } else {\n                i.to.x = b.x;\n                i.to.y = b.y;\n                i.to.id = j;\n                i.to.angle = b.angle;\n                if (j == null) {\n                    if (b.x >= i.from.x - 6 && b.x <= i.from.x + 6) {\n                        i.to.x = i.from.x\n                    }\n                    if (b.y >= i.from.y - 6 && b.y <= i.from.y + 6) {\n                        i.to.y = i.from.y\n                    }\n                }\n            }\n            Designer.painter.renderLinker(i, true)\n        },\n        showLinkPoint: function (a) {\n            var c = $(\"<canvas class='link_point_canvas' width=32 height=32></canvas>\").appendTo($(\"#designer_canvas\"));\n            var b = c[0].getContext(\"2d\");\n            b.translate(1, 1);\n            b.lineWidth = 1;\n            b.globalAlpha = 0.3;\n            b.strokeStyle = Designer.config.anchorColor;\n            b.fillStyle = Designer.config.anchorColor;\n            b.beginPath();\n            b.moveTo(0, 15);\n            b.bezierCurveTo(0, -5, 30, -5, 30, 15);\n            b.bezierCurveTo(30, 35, 0, 35, 0, 15);\n            b.closePath();\n            b.fill();\n            b.stroke();\n            c.css({\n                left: a.x - 16,\n                top: a.y - 16,\n                \"z-index\": Model.orderList.length\n            }).show()\n        },\n        hideLinkPoint: function () {\n            $(\".link_point_canvas\").remove()\n        },\n        brokenLinkerChangable: function (d, c) {\n            var a = $(\"#canvas_container\");\n            var b = $(\"#designer_canvas\");\n            var f = d.points[c - 1];\n            var e = d.points[c];\n            if (f.x == e.x) {\n                a.css(\"cursor\", \"e-resize\")\n            } else {\n                a.css(\"cursor\", \"n-resize\")\n            }\n            b.bind(\"mousedown.brokenLinker\", function (i) {\n                Designer.op.changeState(\"changing_broken_linker\");\n                var h = Utils.getRelativePos(i.pageX, i.pageY, b);\n                var g = Utils.getSelectedIds();\n                a.bind(\"mousemove.brokenLinker\", function (k) {\n                    var j = Utils.getRelativePos(k.pageX, k.pageY, b);\n                    var l = {\n                        x: j.x - h.x,\n                        y: j.y - h.y\n                    };\n                    l = Utils.restoreScale(l);\n                    if (f.x == e.x) {\n                        f.x += l.x;\n                        e.x += l.x\n                    } else {\n                        f.y += l.y;\n                        e.y += l.y\n                    }\n                    Designer.painter.renderLinker(d);\n                    if (g.length > 1) {\n                        Designer.painter.drawControls(g)\n                    }\n                    h = j;\n                    $(document).unbind(\"mouseup.changed\").bind(\"mouseup.changed\", function () {\n                        Model.update(d);\n                        $(document).unbind(\"mouseup.changed\")\n                    })\n                });\n                $(document).bind(\"mouseup.brokenLinker\", function () {\n                    Designer.op.resetState();\n                    a.unbind(\"mousemove.brokenLinker\");\n                    b.unbind(\"mousedown.brokenLinker\");\n                    $(document).unbind(\"mouseup.brokenLinker\")\n                })\n            })\n        },\n        removeShape: function () {\n            var d = Utils.getSelected();\n            if (d.length > 0) {\n                Utils.unselect();\n                var e = Utils.getAttachedShapes(d);\n                d = d.concat(e);\n                var c = [];\n                for (var b = 0; b < d.length; b++) {\n                    var a = Utils.getChildrenShapes(d[b]);\n                    c = c.concat(a)\n                }\n                d = d.concat(c);\n                var f = Utils.getCollapsedShapes(d);\n                d = d.concat(f);\n                Model.remove(d)\n            }\n        },\n        showTip: function (c) {\n            var a = $(\"#designer_op_tip\");\n            if (a.length == 0) {\n                a = $(\"<div id='designer_op_tip'></div>\").appendTo(\"#designer_canvas\")\n            }\n            a.stop().html(c);\n            var b = $(\"#shape_controls\");\n            var d = b.position();\n            a.css({\n                top: d.top + b.height() + 5,\n                left: d.left + b.width() / 2 - a.outerWidth() / 2,\n                \"z-index\": Model.orderList.length\n            }).show()\n        },\n        hideTip: function () {\n            $(\"#designer_op_tip\").fadeOut(100)\n        },\n        snapLine: function (t, u, E, j) {\n            var s = t.y;\n            var I = t.y + t.h / 2;\n            var k = t.y + t.h;\n            var g = t.x;\n            var D = t.x + t.w / 2;\n            var B = t.x + t.w;\n            var f = 2;\n            var m = {\n                v: null,\n                h: null,\n                attach: null,\n                container: null\n            };\n            var C = null;\n            if (E) {\n                C = j\n            } else {\n                C = Model.getShapeById(u[0])\n            }\n            if (u.length == 1 && C.groupName == \"boundaryEvent\") {\n                for (var x = Model.orderList.length - 1; x >= 0; x--) {\n                    var F = Model.orderList[x].id;\n                    var d = Model.getShapeById(F);\n                    if (d.attribute && d.attribute.collapseBy) {\n                        continue\n                    }\n                    if (d.name != \"linker\" && d.id != C.id) {\n                        var v = d.props;\n                        if (m.attach == null && v.angle == 0 && (d.groupName == \"task\" || d.groupName == \"callActivity\" || d.groupName == \"subProcess\")) {\n                            var z = {\n                                x: v.x - f,\n                                y: v.y - f,\n                                w: v.w + f * 2,\n                                h: v.h + f * 2\n                            };\n                            if (Utils.pointInRect(D, I, z)) {\n                                var c = v.y;\n                                var l = v.y + v.h;\n                                var H = v.x;\n                                var w = v.x + v.w;\n                                var r = false;\n                                var n = false;\n                                if (c >= I - f && c <= I + f) {\n                                    t.y = c - t.h / 2;\n                                    n = true\n                                } else {\n                                    if (l >= I - f && l <= I + f) {\n                                        t.y = l - t.h / 2;\n                                        n = true\n                                    }\n                                }\n                                if (H >= D - f && H <= D + f) {\n                                    t.x = H - t.w / 2;\n                                    r = true\n                                } else {\n                                    if (w >= D - f && w <= D + f) {\n                                        t.x = w - t.w / 2;\n                                        r = true\n                                    }\n                                }\n                                if (r || n) {\n                                    m.attach = d\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            if (m.attach == null) {\n                for (var x = Model.orderList.length - 1; x >= 0; x--) {\n                    var F = Model.orderList[x].id;\n                    var d = Model.getShapeById(F);\n                    if (d.attribute && d.attribute.collapseBy) {\n                        continue\n                    }\n                    if (d.name == \"linker\" || u.indexOf(F) >= 0 || d.parent) {\n                        continue\n                    }\n                    var v = d.props;\n                    if (m.h == null) {\n                        var c = v.y;\n                        var b = v.y + v.h / 2;\n                        var l = v.y + v.h;\n                        if (b >= I - f && b <= I + f) {\n                            m.h = {\n                                type: \"middle\",\n                                y: b\n                            };\n                            t.y = b - t.h / 2\n                        } else {\n                            if (c >= s - f && c <= s + f) {\n                                m.h = {\n                                    type: \"top\",\n                                    y: c\n                                };\n                                t.y = c\n                            } else {\n                                if (l >= k - f && l <= k + f) {\n                                    m.h = {\n                                        type: \"bottom\",\n                                        y: l\n                                    };\n                                    t.y = l - t.h\n                                } else {\n                                    if (l >= s - f && l <= s + f) {\n                                        m.h = {\n                                            type: \"top\",\n                                            y: l\n                                        };\n                                        t.y = l\n                                    } else {\n                                        if (c >= k - f && c <= k + f) {\n                                            m.h = {\n                                                type: \"bottom\",\n                                                y: c\n                                            };\n                                            t.y = c - t.h\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                    if (m.v == null) {\n                        var H = v.x;\n                        var G = v.x + v.w / 2;\n                        var w = v.x + v.w;\n                        if (G >= D - f && G <= D + f) {\n                            m.v = {\n                                type: \"center\",\n                                x: G\n                            };\n                            t.x = G - t.w / 2\n                        } else {\n                            if (H >= g - f && H <= g + f) {\n                                m.v = {\n                                    type: \"left\",\n                                    x: H\n                                };\n                                t.x = H\n                            } else {\n                                if (w >= B - f && w <= B + f) {\n                                    m.v = {\n                                        type: \"right\",\n                                        x: w\n                                    };\n                                    t.x = w - t.w\n                                } else {\n                                    if (w >= g - f && w <= g + f) {\n                                        m.v = {\n                                            type: \"left\",\n                                            x: w\n                                        };\n                                        t.x = w\n                                    } else {\n                                        if (H >= B - f && H <= B + f) {\n                                            m.v = {\n                                                type: \"right\",\n                                                x: H\n                                            };\n                                            t.x = H - t.w\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                    if (m.container == null) {\n                        if (d.attribute && d.attribute.container) {\n                            if (Utils.rectInRect(t, d.props)) {\n                                m.container = d\n                            }\n                        }\n                    }\n                    if (m.h != null && m.v != null && m.container != null) {\n                        break\n                    }\n                }\n            }\n            this.hideSnapLine();\n            var e = $(\"#designer_canvas\");\n            if (m.attach != null || m.container != null) {\n                var q = $(\"#designer_op_snapline_attach\");\n                if (q.length == 0) {\n                    q = $(\"<div id='designer_op_snapline_attach'></div>\").appendTo(e)\n                }\n                var y = m.attach || m.container;\n                var h = Utils.getShapeLineStyle(y.lineStyle);\n                var a = h.lineWidth;\n                q.css({\n                    width: (y.props.w + a).toScale(),\n                    height: (y.props.h + a).toScale(),\n                    left: (y.props.x - a / 2).toScale() - 2,\n                    top: (y.props.y - a / 2).toScale() - 2,\n                    \"z-index\": $(\"#\" + y.id).css(\"z-index\")\n                }).show()\n            }\n            if (m.h != null) {\n                var A = $(\"#designer_op_snapline_h\");\n                if (A.length == 0) {\n                    A = $(\"<div id='designer_op_snapline_h'></div>\").appendTo(e)\n                }\n                A.css({\n                    width: e.width() + Designer.config.pageMargin * 2,\n                    left: -Designer.config.pageMargin,\n                    top: Math.round(m.h.y.toScale()),\n                    \"z-index\": Model.orderList.length + 1\n                }).show()\n            }\n            if (m.v != null) {\n                var o = $(\"#designer_op_snapline_v\");\n                if (o.length == 0) {\n                    o = $(\"<div id='designer_op_snapline_v'></div>\").appendTo(e)\n                }\n                o.css({\n                    height: e.height() + Designer.config.pageMargin * 2,\n                    top: -Designer.config.pageMargin,\n                    left: Math.round(m.v.x.toScale()),\n                    \"z-index\": Model.orderList.length + 1\n                }).show()\n            }\n            return m\n        },\n        snapLinkerLine: function (o, m) {\n            var q = {\n                v: null,\n                h: null\n            };\n            var k = 2;\n            for (var h = Model.orderList.length - 1; h >= 0; h--) {\n                var n = Model.orderList[h].id;\n                var l = Model.getShapeById(n);\n                if (l.attribute && l.attribute.collapseBy) {\n                    continue\n                }\n                if (l.name == \"linker\" || l.parent) {\n                    continue\n                }\n                var f = l.props;\n                if (q.h == null) {\n                    var d = f.y;\n                    var j = f.y + f.h;\n                    if (d >= m - k && d <= m + k) {\n                        q.h = d\n                    } else {\n                        if (j >= m - k && j <= m + k) {\n                            q.h = j\n                        }\n                    }\n                }\n                if (q.v == null) {\n                    var p = f.x;\n                    var e = f.x + f.w;\n                    if (p >= o - k && p <= o + k) {\n                        q.v = p\n                    } else {\n                        if (e >= o - k && e <= o + k) {\n                            q.v = e\n                        }\n                    }\n                }\n                if (q.h != null && q.v != null) {\n                    break\n                }\n            }\n            this.hideSnapLine();\n            var c = $(\"#designer_canvas\");\n            if (q.h != null) {\n                var g = $(\"#designer_op_snapline_h\");\n                if (g.length == 0) {\n                    g = $(\"<div id='designer_op_snapline_h'></div>\").appendTo(c)\n                }\n                g.css({\n                    width: c.width() + Designer.config.pageMargin * 2,\n                    left: -Designer.config.pageMargin,\n                    top: Math.round(q.h.toScale()),\n                    \"z-index\": Model.orderList.length + 1\n                }).show()\n            }\n            if (q.v != null) {\n                var a = $(\"#designer_op_snapline_v\");\n                if (a.length == 0) {\n                    a = $(\"<div id='designer_op_snapline_v'></div>\").appendTo(c)\n                }\n                a.css({\n                    height: c.height() + Designer.config.pageMargin * 2,\n                    top: -Designer.config.pageMargin,\n                    left: Math.round(q.v.toScale()),\n                    \"z-index\": Model.orderList.length + 1\n                }).show()\n            }\n            var b = {\n                x: o,\n                y: m\n            };\n            if (q.h != null) {\n                b.y = q.h\n            }\n            if (q.v != null) {\n                b.x = q.v\n            }\n            return b\n        },\n        snapResizeLine: function (m, o, n) {\n            var l = m.y;\n            var z = m.y + m.h / 2;\n            var g = m.y + m.h;\n            var f = m.x;\n            var v = m.x + m.w / 2;\n            var u = m.x + m.w;\n            var e = 2;\n            var j = {\n                v: null,\n                h: null\n            };\n            for (var s = Model.orderList.length - 1; s >= 0; s--) {\n                var w = Model.orderList[s].id;\n                var b = Model.getShapeById(w);\n                if (b.attribute && b.attribute.collapseBy) {\n                    continue\n                }\n                if (b.name == \"linker\" || o.indexOf(w) >= 0 || b.parent) {\n                    continue\n                }\n                var q = b.props;\n                if (j.h == null && (n.indexOf(\"t\") >= 0 || n.indexOf(\"b\") >= 0)) {\n                    var c = q.y;\n                    var a = q.y + q.h / 2;\n                    var h = q.y + q.h;\n                    if (a >= z - e && a <= z + e) {\n                        j.h = {\n                            type: \"middle\",\n                            y: a\n                        };\n                        if (n.indexOf(\"t\") >= 0) {\n                            m.h = (g - a) * 2;\n                            m.y = g - m.h\n                        } else {\n                            m.h = (a - m.y) * 2\n                        }\n                    } else {\n                        if (n.indexOf(\"t\") >= 0 && c >= l - e && c <= l + e) {\n                            j.h = {\n                                type: \"top\",\n                                y: c\n                            };\n                            m.y = c;\n                            m.h = g - c\n                        } else {\n                            if (n.indexOf(\"b\") >= 0 && h >= g - e && h <= g + e) {\n                                j.h = {\n                                    type: \"bottom\",\n                                    y: h\n                                };\n                                m.h = h - l\n                            } else {\n                                if (n.indexOf(\"t\") >= 0 && h >= l - e && h <= l + e) {\n                                    j.h = {\n                                        type: \"top\",\n                                        y: h\n                                    };\n                                    m.y = h;\n                                    m.h = g - h\n                                } else {\n                                    if (n.indexOf(\"b\") >= 0 && c >= g - e && c <= g + e) {\n                                        j.h = {\n                                            type: \"bottom\",\n                                            y: c\n                                        };\n                                        m.h = c - m.y\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                if (j.v == null && (n.indexOf(\"l\") >= 0 || n.indexOf(\"r\") >= 0)) {\n                    var y = q.x;\n                    var x = q.x + q.w / 2;\n                    var r = q.x + q.w;\n                    if (x >= v - e && x <= v + e) {\n                        j.v = {\n                            type: \"center\",\n                            x: x\n                        };\n                        if (n.indexOf(\"l\") >= 0) {\n                            m.w = (u - x) * 2;\n                            m.x = u - m.w\n                        } else {\n                            m.w = (x - m.x) * 2\n                        }\n                    } else {\n                        if (n.indexOf(\"l\") >= 0 && y >= f - e && y <= f + e) {\n                            j.v = {\n                                type: \"left\",\n                                x: y\n                            };\n                            m.x = y;\n                            m.w = u - y\n                        } else {\n                            if (n.indexOf(\"r\") >= 0 && r >= u - e && r <= u + e) {\n                                j.v = {\n                                    type: \"right\",\n                                    x: r\n                                };\n                                m.w = r - m.x\n                            } else {\n                                if (n.indexOf(\"l\") >= 0 && r >= f - e && r <= f + e) {\n                                    j.v = {\n                                        type: \"left\",\n                                        x: r\n                                    };\n                                    m.x = r;\n                                    m.w = u - r\n                                } else {\n                                    if (n.indexOf(\"r\") >= 0 && y >= u - e && y <= u + e) {\n                                        j.v = {\n                                            type: \"right\",\n                                            x: y\n                                        };\n                                        m.w = y - m.x\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                if (j.h != null && j.v != null) {\n                    break\n                }\n            }\n            this.hideSnapLine();\n            var d = $(\"#designer_canvas\");\n            if (j.h != null) {\n                var t = $(\"#designer_op_snapline_h\");\n                if (t.length == 0) {\n                    t = $(\"<div id='designer_op_snapline_h'></div>\").appendTo(d)\n                }\n                t.css({\n                    width: d.width() + Designer.config.pageMargin * 2,\n                    left: -Designer.config.pageMargin,\n                    top: Math.round(j.h.y.toScale()),\n                    \"z-index\": Model.orderList.length + 1\n                }).show()\n            }\n            if (j.v != null) {\n                var k = $(\"#designer_op_snapline_v\");\n                if (k.length == 0) {\n                    k = $(\"<div id='designer_op_snapline_v'></div>\").appendTo(d)\n                }\n                k.css({\n                    height: d.height() + Designer.config.pageMargin * 2,\n                    top: -Designer.config.pageMargin,\n                    left: Math.round(j.v.x.toScale()),\n                    \"z-index\": Model.orderList.length + 1\n                }).show()\n            }\n            return j\n        },\n        hideSnapLine: function () {\n            $(\"#designer_op_snapline_h\").hide();\n            $(\"#designer_op_snapline_v\").hide();\n            $(\"#designer_op_snapline_attach\").hide()\n        },\n        linkDashboard: function (d) {\n            var h = Model.getShapeById(d.from.id);\n            var a = h.category;\n            if ($(\"#panel_\" + a).length != 0) {\n                var e = $(\"#shape_dashboard_\" + a);\n                if (e.length == 0) {\n                    e = $(\"<div id='shape_dashboard_\" + a + \"' class='shape_dashboard menu'></div>\").appendTo(\"#designer_canvas\");\n\n                    function c(l, o) {\n                        /*\n                        var n = \"<div class='dashboard_box' shapeName='\" + l.name + \"'><canvas title='\" + l.title + \"' title_pos='right' class='panel_item' width='\" + (Designer.config.panelItemWidth) + \"' height='\" + (Designer.config.panelItemHeight) + \"'></canvas></div>\";\n                        var k = $(n).appendTo(e);\n                        if (o) {\n                            k.append(\"<div class='group_icon link_shape_icon' group='\" + o + \"'></div>\")\n                        }\n                        var m = k.children()[0];\n                        Designer.painter.drawPanelItem(m, l.name)\n                        */\n                        if (l.name) {\n                            var n = \"<div class='dashboard_box' shapeName='\" + l.name + \"'>\" + l.icon + \"</div>\";\n                            var k = $(n).appendTo(e);\n                            k.find('.icon').attr('title', l.title);\n                        } else {\n                            $('<div style=\"text-align:center;\">' + l.msg + '</div>').appendTo(e);\n                        }\n                    }\n\n                    if (h.selected && h.selected.length > 0) {\n                        $.each(h.selected, function () {\n                            var name = this;\n                            $.each(Schema.shapes, function () {\n                                if (name == this.name) {\n                                    c(this);\n                                    return false;\n                                }\n                            });\n                        });\n                    } else {\n                        c({ name: '', title: '', msg: '无可用组件!' });\n                    }\n                    /*for (var i in Schema.shapes) {\n                        var f = Schema.shapes[i];\n                        if (f.category == a) {\n                            var b = f.attribute;\n                            if (b.visible && b.linkable) {\n                                if (!f.groupName) {\n                                    c(f)\n                                } else {\n                                    var j = SchemaGroup.getGroup(f.groupName);\n                                    if (j[0] == f.name) {\n                                        c(f, f.groupName)\n                                    }\n                                }\n                            }\n                        }\n                    }*/\n\n                    e.bind(\"mousemove\", function (k) {\n                        k.stopPropagation()\n                    }).bind(\"mousedown\", function (k) {\n                        k.stopPropagation()\n                    })\n                }\n                e.css({\n                    left: d.to.x.toScale(),\n                    top: d.to.y.toScale(),\n                    \"z-index\": Model.orderList.length\n                }).show();\n                e.find(\".link_shape_icon\").unbind().bind(\"mousedown\", function (n) {\n                    n.stopPropagation();\n                    var m = $(this).attr(\"group\");\n                    var p = $(this).parent().position();\n                    var o = e.position();\n                    var l = p.left + o.left + $(this).parent().outerWidth() - 10;\n                    var k = p.top + o.top + $(this).parent().outerHeight();\n                    Designer.op.groupDashboard(m, l, k, function (q) {\n                        g(q);\n                        e.hide();\n                        $(document).unbind(\"mousedown.dashboard\")\n                    })\n                }).bind(\"click\", function (k) {\n                    k.stopPropagation()\n                });\n                e.children(\".dashboard_box\").unbind().bind(\"click\", function () {\n                    e.hide();\n                    $(document).unbind(\"mousedown.dashboard\");\n                    var l = $(this);\n                    var k = l.attr(\"shapeName\");\n                    g(k);\n                    if ($(\"#hover_tip\").length > 0) {\n                        $(\"#hover_tip\").remove()\n                    }\n                    e.remove();\n                });\n                $(document).bind(\"mousedown.dashboard\", function () {\n                    e.hide();\n                    $(document).unbind(\"mousedown.dashboard\");\n                    e.remove();\n                });\n\n                function g(n) {\n                    var v = Schema.shapes[n];\n                    var o = Utils.getEndpointAngle(d, \"to\");\n                    var q = Utils.getAngleDir(o);\n                    var m = v.getAnchors();\n                    var t;\n                    if (q == 1) {\n                        var p = null;\n                        for (var w = 0; w < m.length; w++) {\n                            var u = m[w];\n                            if (p == null || u.y < p) {\n                                p = u.y;\n                                t = u\n                            }\n                        }\n                    } else {\n                        if (q == 2) {\n                            var l = null;\n                            for (var w = 0; w < m.length; w++) {\n                                var u = m[w];\n                                if (l == null || u.x > l) {\n                                    l = u.x;\n                                    t = u\n                                }\n                            }\n                        } else {\n                            if (q == 3) {\n                                var k = null;\n                                for (var w = 0; w < m.length; w++) {\n                                    var u = m[w];\n                                    if (k == null || u.y > k) {\n                                        k = u.y;\n                                        t = u\n                                    }\n                                }\n                            } else {\n                                if (q == 4) {\n                                    var s = null;\n                                    for (var w = 0; w < m.length; w++) {\n                                        var u = m[w];\n                                        if (s == null || u.x < s) {\n                                            s = u.x;\n                                            t = u\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                    var x = Model.create(n, d.to.x - t.x, d.to.y - t.y);\n                    Designer.painter.renderShape(x);\n                    MessageSource.beginBatch();\n                    if (x.onCreated) {\n                        x.onCreated()\n                    }\n                    Designer.events.push(\"created\", x);\n                    Model.add(x);\n                    var r = Utils.getPointAngle(x.id, d.to.x, d.to.y, 7);\n                    d.to.id = x.id;\n                    d.to.angle = r;\n                    // Designer.painter.renderLinker(d, true);\n                    Model.update(d);\n                    MessageSource.commit();\n                    Utils.unselect();\n                    // Utils.selectShape(x.id);\n                    // Designer.op.editShapeText(x)\n                }\n            }\n        },\n        groupDashboard: function (k, d, j, c) {\n            $(\".group_dashboard\").hide();\n            var h = $(\"#shape_group_dashboard_\" + k);\n            if (h.length == 0) {\n                h = $(\"<div id='shape_group_dashboard_\" + k + \"' class='group_dashboard menu'></div>\").appendTo(\"#designer_canvas\");\n                var l = SchemaGroup.getGroup(k);\n                for (var e = 0; e < l.length; e++) {\n                    var a = l[e];\n                    var g = Schema.shapes[a];\n                    if (g.attribute.visible) {\n                        var f = $(\"<div class='dashboard_box' shapeName='\" + a + \"'><canvas title='\" + g.title + \"' title_pos='right' width='\" + (Designer.config.panelItemWidth) + \"' height='\" + (Designer.config.panelItemHeight) + \"'></canvas></div>\").appendTo(h);\n                        var b = f.children(\"canvas\")[0];\n                        Designer.painter.drawPanelItem(b, g.name)\n                    }\n                }\n                h.bind(\"mousedown\", function (i) {\n                    i.stopPropagation()\n                })\n            }\n            h.css({\n                left: d,\n                top: j,\n                \"z-index\": Model.orderList.length + 1\n            }).show();\n            $(\".dashboard_box\").unbind().bind(\"click\", function () {\n                var i = $(this).attr(\"shapeName\");\n                c(i);\n                h.hide();\n                $(document).unbind(\"mousedown.group_dashboard\")\n            });\n            $(document).bind(\"mousedown.group_dashboard\", function () {\n                h.hide();\n                $(document).unbind(\"mousedown.group_dashboard\")\n            });\n            return h\n        },\n        showPanelGroup: function (m, a, g) {\n            a.stopPropagation();\n            var h = $(\"#group_dashboard_\" + m);\n            $(\".group_dashboard\").hide();\n            if (h.length == 0) {\n                h = $(\"<div id='group_dashboard_\" + m + \"' class='group_dashboard menu'></div>\").appendTo(\"#designer\");\n                var n = SchemaGroup.getGroup(m);\n                for (var e = 0; e < n.length; e++) {\n                    var b = n[e];\n                    var j = Schema.shapes[b];\n                    if (j.attribute.visible) {\n                        var f = $(\"<div class='panel_box' shapeName='\" + b + \"'><canvas title='\" + j.title + \"' title_pos='right' width='\" + (Designer.config.panelItemWidth) + \"' height='\" + (Designer.config.panelItemHeight) + \"'></canvas></div>\").appendTo(h);\n                        var c = f.children(\"canvas\")[0];\n                        Designer.painter.drawPanelItem(c, j.name)\n                    }\n                }\n                h.css(\"position\", \"fixed\")\n            }\n            var l = $(g).parent();\n            var d = l.offset();\n            h.show();\n            var k = d.top + l.outerHeight() - 2;\n            if (k + h.outerHeight() > $(window).height()) {\n                k = $(window).height() - h.outerHeight()\n            }\n            h.css({\n                left: d.left - 5,\n                top: k\n            });\n            $(document).bind(\"mousedown.group_board\", function () {\n                h.hide();\n                $(document).unbind(\"mousedown.group_board\")\n            })\n        },\n        changeShapeProps: function (a, d) {\n            function c(i) {\n                if (typeof d.x != \"undefined\") {\n                    i.x += (d.x - a.props.x)\n                }\n                if (typeof d.y != \"undefined\") {\n                    i.y += (d.y - a.props.y)\n                }\n                if (typeof d.w != \"undefined\" || typeof d.h != \"undefined\" || typeof d.angle != \"undefined\") {\n                    var q = $.extend({}, a.props, d);\n                    var o = {\n                        x: a.props.x + a.props.w / 2,\n                        y: a.props.y + a.props.h / 2\n                    };\n                    var l = Utils.getRotated(o, i, -a.props.angle);\n                    var k = a.props.w;\n                    var n = a.props.h;\n                    if (typeof d.w != \"undefined\") {\n                        i.x = a.props.x + (l.x - a.props.x) / a.props.w * d.w;\n                        k = d.w\n                    } else {\n                        i.x = l.x\n                    }\n                    if (typeof d.h != \"undefined\") {\n                        i.y = a.props.y + (l.y - a.props.y) / a.props.h * d.h;\n                        n = d.h\n                    } else {\n                        i.y = l.y\n                    }\n                    var j = {\n                        x: a.props.x + k / 2,\n                        y: a.props.y + n / 2\n                    };\n                    var m = Utils.getRotated(j, i, q.angle);\n                    i.x = m.x;\n                    i.y = m.y\n                }\n                if (typeof d.angle != \"undefined\") {\n                    i.angle += d.angle - a.props.angle\n                }\n            }\n            var f = [];\n            var g = Model.getShapeLinkers(a.id);\n            if (g && g.length > 0) {\n                for (var b = 0; b < g.length; b++) {\n                    var h = g[b];\n                    var e = Model.getShapeById(h);\n                    if (a.id == e.from.id) {\n                        c(e.from)\n                    }\n                    if (a.id == e.to.id) {\n                        c(e.to)\n                    }\n                }\n                f = g\n            }\n            $.extend(a.props, d);\n            Designer.painter.renderShape(a);\n            Utils.showLinkerCursor();\n            UI.showShapeOptions();\n            return f\n        },\n        googleImgCallback: function (e) {\n            var c = e.responseData;\n            var b = c.results;\n            for (var a = 0; a < b.length; a++) {\n                var d = b[a];\n                UI.appendGoogleImage(d)\n            }\n            $(\"#google_image_items\").append(\"<div style='clear: both'></div>\");\n            $(\".img_gg_loading_tip\").remove();\n            $(\".gg_img_more\").remove();\n            if (this.searchIndex <= 3) {\n                $(\"#google_image_items\").append(\"<div onclick='UI.loadGoogleImg()' class='gg_img_more toolbar_button active'>显示更多结果...</div>\")\n            }\n        }\n    },\n    events: {\n        push: function (c, a) {\n            var b = this.listeners[c];\n            if (b) {\n                return b(a)\n            }\n            return null\n        },\n        listeners: {},\n        addEventListener: function (b, a) {\n            this.listeners[b] = a\n        }\n    },\n    clipboard: {\n        elements: [],\n        presetedIds: {},\n        presetIds: function () {\n            this.presetedIds = {};\n            for (var b = 0; b < this.elements.length; b++) {\n                var a = this.elements[b];\n                this.presetedIds[a.id] = Utils.newId();\n                if (a.group && !this.presetedIds[a.group]) {\n                    this.presetedIds[a.group] = Utils.newId()\n                }\n            }\n            localStorage.presetedIds = JSON.stringify(this.presetedIds)\n        },\n        plus: true,\n        copy: function () {\n            this.elements = [];\n            var d = Utils.getSelected();\n            var c = Utils.getFamilyShapes(d);\n            d = d.concat(c);\n            d.sort(function e(g, f) {\n                return g.props.zindex - f.props.zindex\n            });\n            for (var b = 0; b < d.length; b++) {\n                var a = Utils.copy(d[b]);\n                if (a.name == \"linker\") {\n                    if (a.from.id != null) {\n                        if (!Utils.isSelected(a.from.id)) {\n                            a.from.id = null;\n                            a.from.angle = null\n                        }\n                    }\n                    if (a.to.id != null) {\n                        if (!Utils.isSelected(a.to.id)) {\n                            a.to.id = null;\n                            a.to.angle = null\n                        }\n                    }\n                }\n                this.elements.push(a)\n            }\n            this.elements.sort(function e(g, f) {\n                return g.props.zindex - f.props.zindex\n            });\n            this.presetIds();\n            this.plus = true;\n            Designer.events.push(\"clipboardChanged\", this.elements.length);\n            localStorage.clipboard = JSON.stringify(this.elements);\n            localStorage.clientId = CLB.clientId\n        },\n        cut: function () {\n            this.copy();\n            Designer.op.removeShape();\n            this.plus = false\n        },\n        paste: function (n, m) {\n            if (localStorage.clipboard) {\n                var e = JSON.parse(localStorage.clipboard);\n                var c = localStorage.clientId;\n                if (CLB.clientId != c) {\n                    this.elements = e;\n                    for (var w = 0; w < this.elements.length; w++) {\n                        var a = this.elements[w];\n                        if (a.name != \"linker\") {\n                            Schema.initShapeFunctions(a)\n                        }\n                    }\n                    this.presetedIds = JSON.parse(localStorage.presetedIds);\n                    if (typeof n == \"undefined\") {\n                        var b = $(\"#designer_layout\").scrollTop();\n                        var k = b - Designer.config.pageMargin + $(\"#designer_layout\").height().restoreScale() / 2;\n                        var t = $(\"#designer_layout\").scrollLeft();\n                        var l = t - Designer.config.pageMargin + $(\"#designer_layout\").width().restoreScale() / 2;\n                        n = l;\n                        m = k\n                    }\n                }\n            }\n            if (this.elements.length == 0) {\n                return\n            }\n            var A = 20;\n            var z = 20;\n            if (typeof n != \"undefined\") {\n                var g = Utils.getShapesBounding(this.elements);\n                A = n - g.x - g.w / 2;\n                z = m - g.y - g.h / 2\n            }\n            var h = [];\n            var d = [];\n            for (var w = 0; w < this.elements.length; w++) {\n                var a = this.elements[w];\n                if (a.name != \"linker\") {\n                    var C;\n                    var a = this.elements[w];\n                    a.props.zindex = Model.maxZIndex + (w + 1);\n                    var q = this.presetedIds[a.id];\n                    if (this.plus || typeof n != \"undefined\") {\n                        a.props.x += A;\n                        a.props.y += z\n                    }\n                    C = Utils.copy(a);\n                    for (var v = 0; v < C.dataAttributes.length; v++) {\n                        var s = C.dataAttributes[v];\n                        s.id = Utils.newId()\n                    }\n                    C.id = q;\n                    if (C.children) {\n                        for (var o = 0; o < C.children.length; o++) {\n                            var u = C.children[o];\n                            C.children[o] = this.presetedIds[u]\n                        }\n                    }\n                    if (C.parent) {\n                        C.parent = this.presetedIds[C.parent]\n                    }\n                    h.push(C);\n                    d.push(q);\n                    if (a.group) {\n                        var f = this.presetedIds[a.group];\n                        C.group = f\n                    }\n                }\n            }\n            for (var w = 0; w < this.elements.length; w++) {\n                var a = this.elements[w];\n                if (a.name == \"linker\") {\n                    var C;\n                    a.props.zindex = Model.maxZIndex + (w + 1);\n                    var q = this.presetedIds[a.id];\n                    if (this.plus || typeof n != \"undefined\") {\n                        a.from.x += A;\n                        a.from.y += z;\n                        a.to.x += A;\n                        a.to.y += z;\n                        for (var B = 0; B < a.points.length; B++) {\n                            var r = a.points[B];\n                            r.x += A;\n                            r.y += z\n                        }\n                    }\n                    C = Utils.copy(a);\n                    if (!C.dataAttributes) {\n                        C.dataAttributes = []\n                    }\n                    for (var v = 0; v < C.dataAttributes.length; v++) {\n                        var s = C.dataAttributes[v];\n                        s.id = Utils.newId()\n                    }\n                    if (a.from.id != null) {\n                        C.from.id = this.presetedIds[a.from.id]\n                    }\n                    if (a.to.id != null) {\n                        C.to.id = this.presetedIds[a.to.id]\n                    }\n                    C.id = q;\n                    h.push(C);\n                    d.push(q);\n                    if (a.group) {\n                        var f = this.presetedIds[a.group];\n                        C.group = f\n                    }\n                }\n            }\n            Model.addMulti(h);\n            for (var w = 0; w < h.length; w++) {\n                var a = h[w];\n                Designer.painter.renderShape(a)\n            }\n            Model.build();\n            this.presetIds();\n            Utils.unselect();\n            Utils.selectShape(d);\n            this.plus = true\n        },\n        duplicate: function () {\n            this.copy();\n            this.paste()\n        },\n        brush: function () {\n            var d = Utils.getSelected();\n            if (d.length == 0) {\n                return\n            }\n            var a = {\n                fontStyle: {},\n                lineStyle: {},\n                fillStyle: null,\n                shapeStyle: null\n            };\n            for (var c = 0; c < d.length; c++) {\n                var b = d[c];\n                if (b.name == \"linker\") {\n                    $.extend(a.lineStyle, b.lineStyle);\n                    $.extend(a.fontStyle, b.fontStyle)\n                } else {\n                    if (a.fillStyle == null) {\n                        a.fillStyle = {}\n                    }\n                    if (a.shapeStyle == null) {\n                        a.shapeStyle = {}\n                    }\n                    $.extend(a.lineStyle, b.lineStyle);\n                    $.extend(a.fontStyle, b.fontStyle);\n                    $.extend(a.shapeStyle, b.shapeStyle);\n                    $.extend(a.fillStyle, b.fillStyle)\n                }\n            }\n            delete a.fontStyle.orientation;\n            $(\"#bar_brush\").button(\"select\");\n            UI.showTip(\"选择目标图形并使用格式刷样式，Esc取消\", \"left\", function () {\n                $(\"#bar_brush\").button(\"unselect\");\n                $(document).unbind(\"keydown.cancelbrush\");\n                Utils.selectCallback = null;\n                $(\"#bar_brush\").button(\"disable\")\n            });\n            $(document).unbind(\"keydown.cancelbrush\").bind(\"keydown.cancelbrush\", function (f) {\n                if (f.keyCode == 27) {\n                    UI.hideTip();\n                    $(\"#bar_brush\").button(\"unselect\");\n                    $(document).unbind(\"keydown.cancelbrush\");\n                    Utils.selectCallback = null;\n                    $(\"#bar_brush\").button(\"disable\")\n                }\n            });\n            Utils.selectCallback = function () {\n                var f = Utils.getSelected();\n                for (var g = 0; g < f.length; g++) {\n                    var e = f[g];\n                    $.extend(e.lineStyle, a.lineStyle);\n                    $.extend(e.fontStyle, a.fontStyle);\n                    if (e.name != \"linker\") {\n                        e.lineStyle = a.lineStyle;\n                        delete e.lineStyle.beginArrowStyle;\n                        delete e.lineStyle.endArrowStyle;\n                        if (a.fillStyle != null) {\n                            e.fillStyle = a.fillStyle\n                        }\n                        if (a.shapeStyle != null) {\n                            e.shapeStyle = a.shapeStyle\n                        }\n                    } else {\n                        if (e.fontStyle) {\n                            delete e.fontStyle.vAlign\n                        }\n                    }\n                    Designer.painter.renderShape(e)\n                }\n                Model.updateMulti(f)\n            }\n        }\n    },\n    addFunction: function (b, a) {\n        if (Designer[b]) {\n            throw \"Duplicate function name!\"\n        } else {\n            this[b] = a\n        }\n    },\n    painter: {\n        actions: {\n            move: function (a) {\n                this.moveTo(a.x, a.y);\n                this.prePoint = a;\n                if (this.beginPoint == null) {\n                    this.beginPoint = a\n                }\n            },\n            line: function (d) {\n                if (typeof this.webkitLineDash != \"undefined\" && typeof this.lineDashOffset == \"undefined\" && this.lineWidth != 0) {\n                    var f = this.webkitLineDash;\n                    var c = this.prePoint;\n                    var h = Utils.measureDistance(c, d);\n                    var k = 0;\n                    var b = 1 / h;\n                    var j = c;\n                    var e = 0;\n                    var g = true;\n                    while (k < 1) {\n                        k += b;\n                        if (k > 1) {\n                            k = 1\n                        }\n                        var i = {\n                            x: (1 - k) * c.x + k * d.x,\n                            y: (1 - k) * c.y + k * d.y\n                        };\n                        var a = Utils.measureDistance(j, i);\n                        if (a >= f[e] || k >= 1) {\n                            if (g) {\n                                this.lineTo(i.x, i.y)\n                            } else {\n                                this.moveTo(i.x, i.y)\n                            }\n                            g = !g;\n                            j = i;\n                            e++;\n                            if (e >= f.length) {\n                                e = 0\n                            }\n                        }\n                    }\n                    this.moveTo(d.x, d.y)\n                } else {\n                    this.lineTo(d.x, d.y)\n                }\n                this.prePoint = d;\n                if (this.beginPoint == null) {\n                    this.beginPoint = d\n                }\n            },\n            curve: function (e) {\n                if (typeof this.webkitLineDash != \"undefined\" && typeof this.lineDashOffset == \"undefined\" && this.lineWidth != 0) {\n                    var g = this.webkitLineDash;\n                    var d = this.prePoint;\n                    var i = Utils.measureDistance(d, e);\n                    var n = 0;\n                    var b = 1 / i;\n                    var l = d;\n                    var f = 0;\n                    var h = true;\n                    var c = 0;\n                    while (n < 1) {\n                        n += b;\n                        if (n > 1) {\n                            n = 1\n                        }\n                        var k = {\n                            x: d.x * Math.pow((1 - n), 3) + e.x1 * n * Math.pow((1 - n), 2) * 3 + e.x2 * Math.pow(n, 2) * (1 - n) * 3 + e.x * Math.pow(n, 3),\n                            y: d.y * Math.pow((1 - n), 3) + e.y1 * n * Math.pow((1 - n), 2) * 3 + e.y2 * Math.pow(n, 2) * (1 - n) * 3 + e.y * Math.pow(n, 3)\n                        };\n                        var a = Utils.measureDistance(l, k);\n                        if (a >= g[f] || n >= 1) {\n                            if (h) {\n                                var m = c + (n - c) / 2;\n                                var j = {\n                                    x: d.x * Math.pow((1 - m), 3) + e.x1 * m * Math.pow((1 - m), 2) * 3 + e.x2 * Math.pow(m, 2) * (1 - m) * 3 + e.x * Math.pow(m, 3),\n                                    y: d.y * Math.pow((1 - m), 3) + e.y1 * m * Math.pow((1 - m), 2) * 3 + e.y2 * Math.pow(m, 2) * (1 - m) * 3 + e.y * Math.pow(m, 3)\n                                };\n                                this.lineTo(j.x, j.y);\n                                this.lineTo(k.x, k.y)\n                            } else {\n                                this.moveTo(k.x, k.y)\n                            }\n                            h = !h;\n                            l = k;\n                            c = n;\n                            f++;\n                            if (f >= g.length) {\n                                f = 0\n                            }\n                        }\n                    }\n                    this.moveTo(e.x, e.y)\n                } else {\n                    this.bezierCurveTo(e.x1, e.y1, e.x2, e.y2, e.x, e.y)\n                }\n                this.prePoint = e;\n                if (this.beginPoint == null) {\n                    this.beginPoint = e\n                }\n            },\n            quadraticCurve: function (e) {\n                if (typeof this.webkitLineDash != \"undefined\" && typeof this.lineDashOffset == \"undefined\" && this.lineWidth != 0) {\n                    var g = this.webkitLineDash;\n                    var d = this.prePoint;\n                    var i = Utils.measureDistance(d, e);\n                    var n = 0;\n                    var b = 1 / i;\n                    var l = d;\n                    var f = 0;\n                    var h = true;\n                    var c = 0;\n                    while (n < 1) {\n                        n += b;\n                        if (n > 1) {\n                            n = 1\n                        }\n                        var k = {\n                            x: d.x * Math.pow((1 - n), 2) + e.x1 * n * (1 - n) * 2 + e.x * Math.pow(n, 2),\n                            y: d.y * Math.pow((1 - n), 2) + e.y1 * n * (1 - n) * 2 + e.y * Math.pow(n, 2)\n                        };\n                        var a = Utils.measureDistance(l, k);\n                        if (a >= g[f] || n >= 1) {\n                            if (h) {\n                                var m = c + (n - c) / 2;\n                                var j = {\n                                    x: d.x * Math.pow((1 - m), 2) + e.x1 * m * (1 - m) * 2 + e.x * Math.pow(m, 2),\n                                    y: d.y * Math.pow((1 - m), 2) + e.y1 * m * (1 - m) * 2 + e.y * Math.pow(m, 2)\n                                };\n                                this.lineTo(j.x, j.y);\n                                this.lineTo(k.x, k.y)\n                            } else {\n                                this.moveTo(k.x, k.y)\n                            }\n                            h = !h;\n                            l = k;\n                            c = n;\n                            f++;\n                            if (f >= g.length) {\n                                f = 0\n                            }\n                        }\n                    }\n                    this.moveTo(e.x, e.y)\n                } else {\n                    this.quadraticCurveTo(e.x1, e.y1, e.x, e.y)\n                }\n                this.prePoint = e;\n                if (this.beginPoint == null) {\n                    this.beginPoint = e\n                }\n            },\n            close: function () {\n                if (typeof this.webkitLineDash != \"undefined\" && typeof this.lineDashOffset == \"undefined\" && this.lineWidth != 0) {\n                    var f = this.webkitLineDash;\n                    var c = this.prePoint;\n                    var d = this.beginPoint;\n                    var h = Utils.measureDistance(c, d);\n                    var k = 0;\n                    var b = 1 / h;\n                    var j = c;\n                    var e = 0;\n                    var g = true;\n                    while (k < 1) {\n                        k += b;\n                        if (k > 1) {\n                            k = 1\n                        }\n                        var i = {\n                            x: (1 - k) * c.x + k * d.x,\n                            y: (1 - k) * c.y + k * d.y\n                        };\n                        var a = Utils.measureDistance(j, i);\n                        if (a >= f[e] || k >= 1) {\n                            if (g) {\n                                this.lineTo(i.x, i.y)\n                            } else {\n                                this.moveTo(i.x, i.y)\n                            }\n                            g = !g;\n                            j = i;\n                            e++;\n                            if (e >= f.length) {\n                                e = 0\n                            }\n                        }\n                    }\n                }\n                this.closePath()\n            }\n        },\n        setLineDash: function (a, b) {\n            if (!a.setLineDash) {\n                a.setLineDash = function () { }\n            }\n            a.setLineDash(b);\n            a.mozDash = b;\n            a.webkitLineDash = b\n        },\n        renderShapePath: function (a, b, c, d) {\n            var e;\n            if (c && b.drawIcon) {\n                e = b.drawIcon(b.props.w, b.props.h)\n            } else {\n                e = b.getPath()\n            }\n            this.renderPath(a, b, e, c, d)\n        },\n        renderPath: function (m, k, o, b, f) {\n            var a = Utils.getShapeFillStyle(k.fillStyle, !b);\n            var p = Utils.getShapeLineStyle(k.lineStyle, !b);\n            for (var g = 0; g < o.length; g++) {\n                var c = o[g];\n                m.save();\n                var h = $.extend({}, p, c.lineStyle);\n                var l = $.extend({}, a, c.fillStyle);\n                var d = false;\n                if (h.lineStyle != \"solid\" && typeof m.lineDashOffset == \"undefined\" && l.type != \"none\") {\n                    d = true\n                }\n                if (d) {\n                    m.save();\n                    m.beginPath();\n                    m.lineWidth = 0;\n                    delete m.webkitLineDash;\n                    for (var e = 0; e < c.actions.length; e++) {\n                        var n = c.actions[e];\n                        this.actions[n.action].call(m, n)\n                    }\n                    this.fillShape(k, m, l, f);\n                    m.restore()\n                }\n                m.beginPath();\n                m.beginPoint = null;\n                if (h.lineWidth) {\n                    m.lineWidth = h.lineWidth;\n                    if (h.lineStyle == \"dashed\") {\n                        if (b) {\n                            this.setLineDash(m, [h.lineWidth * 3, h.lineWidth * 1])\n                        } else {\n                            this.setLineDash(m, [h.lineWidth * 5, h.lineWidth * 2])\n                        }\n                    } else {\n                        if (h.lineStyle == \"dot\") {\n                            this.setLineDash(m, [h.lineWidth, h.lineWidth * 1.5])\n                        } else {\n                            if (h.lineStyle == \"dashdot\") {\n                                this.setLineDash(m, [h.lineWidth * 5, h.lineWidth * 2, h.lineWidth, h.lineWidth * 2])\n                            } else {\n                                delete m.webkitLineDash\n                            }\n                        }\n                    }\n                } else {\n                    m.lineWidth = 0;\n                    delete m.webkitLineDash\n                }\n                for (var e = 0; e < c.actions.length; e++) {\n                    var n = c.actions[e];\n                    this.actions[n.action].call(m, n)\n                }\n                if (d == false) {\n                    this.fillShape(k, m, l, f)\n                }\n                if (h.lineWidth) {\n                    m.lineWidth = h.lineWidth;\n                    m.strokeStyle = \"rgb(\" + h.lineColor + \")\";\n                    m.stroke()\n                }\n                m.restore()\n            }\n        },\n        drawImage: function (a, b) {\n            var c = $(\".shape_img[src='\" + b.image + \"']\");\n            if (c.length == 0) {\n                c = $(\"<img class='shape_img' loaded='0' src=''/>\").appendTo(\"#shape_img_container\");\n                c.bind(\"load.drawshape\", function () {\n                    a.drawImage(c[0], b.x, b.y, b.w, b.h);\n                    $(this).attr(\"loaded\", \"1\")\n                });\n                c.attr(\"src\", b.image)\n            } else {\n                if (c.attr(\"loaded\") == \"0\") {\n                    c.bind(\"load.drawshape\", function () {\n                        a.drawImage(c[0], b.x, b.y, b.w, b.h)\n                    })\n                } else {\n                    a.drawImage(c[0], b.x, b.y, b.w, b.h)\n                }\n            }\n        },\n        drawPanelItem: function (d, e) {\n            // var b = d.getContext(\"2d\");\n            // var c = Utils.copy(Schema.shapes[e]);\n            // var f = {\n            //     x: 0,\n            //     y: 0,\n            //     w: c.props.w,\n            //     h: c.props.h,\n            //     angle: c.props.angle\n            // };\n            // b.clearRect(0, 0, Designer.config.panelItemWidth, Designer.config.panelItemHeight);\n            // if (f.w >= Designer.config.panelItemWidth || f.h >= Designer.config.panelItemWidth) {\n            //     var a = Utils.getShapeLineStyle(c.lineStyle, false);\n            //     if (c.props.w >= c.props.h) {\n            //         f.w = Designer.config.panelItemWidth - a.lineWidth * 2;\n            //         f.h = parseInt(c.props.h / c.props.w * f.w)\n            //     } else {\n            //         f.h = Designer.config.panelItemHeight - a.lineWidth * 2;\n            //         f.w = parseInt(c.props.w / c.props.h * f.h)\n            //     }\n            // }\n            // c.props = f;\n            // b.save();\n            // b.lineJoin = \"round\";\n            // b.globalAlpha = c.shapeStyle.alpha;\n            // var h = (Designer.config.panelItemWidth - f.w) / 2;\n            // var g = (Designer.config.panelItemHeight - f.h) / 2;\n            // b.translate(h, g);\n            // b.translate(f.w / 2, f.h / 2);\n            // b.rotate(f.angle);\n            // b.translate(-(f.w / 2), -(f.h / 2));\n            // this.renderShapePath(b, c, true, function () {\n            //     Designer.painter.drawPanelItem(d, e)\n            // });\n            // this.renderMarkers(b, c, true);\n            // b.restore()\n        },\n        renderShape: function (j) {\n            if (j.name == \"linker\") {\n                this.renderLinker(j);\n                return\n            }\n            j.textBlock[0].text = j.title;//脱拽后立即有文字显示\n            var m = $(\"#\" + j.id);\n            if (m.length == 0) {\n                var c = $(\"#designer_canvas\");\n                m = $(\"<div id='\" + j.id + \"' class='shape_box'><canvas class='shape_canvas'></canvas></div>\").appendTo(c)\n            }\n            if (typeof isView != \"undefined\" && j.link) {\n                var h = j.link;\n                if (h.trim().toLowerCase().indexOf(\"http\") == -1) {\n                    h = \"http://\" + h\n                }\n                var k = $(\"<a title='\" + j.link + \"' target='_blank' href='\" + h + \"' class='shape_link'></a>\");\n                k.appendTo(m)\n            }\n            if (j.attribute && j.attribute.collapseBy) {\n                m.hide()\n            } else {\n                m.show()\n            }\n            var e = Utils.getShapeBox(j);\n            var b = (e.w + 20).toScale();\n            var f = (e.h + 20).toScale();\n            m.find(\".shape_canvas\").attr({\n                width: b,\n                height: f\n            });\n            m.css({\n                left: (e.x - 10).toScale() + \"px\",\n                top: (e.y - 10).toScale() + \"px\",\n                width: b,\n                height: f\n            });\n            var n = m.find(\".shape_canvas\")[0].getContext(\"2d\");\n            n.clearRect(0, 0, j.props.w + 20, j.props.h + 20);\n            n.scale(Designer.config.scale, Designer.config.scale);\n            n.translate(10, 10);\n            n.translate(j.props.x - e.x, j.props.y - e.y);\n            n.translate(j.props.w / 2, j.props.h / 2);\n            n.rotate(j.props.angle);\n            n.translate(-(j.props.w / 2), -(j.props.h / 2));\n            n.globalAlpha = j.shapeStyle.alpha;\n            n.lineJoin = \"round\";\n            // this.renderShapePath(n, j, false, function () {\n            //     var q = j.id;\n            //     var r = Model.getShapeById(q);\n            //     Designer.painter.renderShape(r)\n            // });\n            this.renderMarkers(n, j);\n            var p = j.getPath();\n            var l = Utils.copy(p[p.length - 1]);\n            l.fillStyle = {\n                type: \"none\"\n            };\n            l.lineStyle = {\n                lineWidth: 0\n            };\n            var d = [l];\n            this.renderPath(n, j, d);\n            this.renderText(j, e);\n            this.renderDataAttributes(j, e);\n            m.children(\".shape_comment_ico\").remove();\n            if (showCommentIco) {\n                var i = false;\n                if (Model.comments && Model.comments.length > 0) {\n                    for (var o = 0; o < Model.comments.length; o++) {\n                        var a = Model.comments[o];\n                        if (a.shapeId == j.id) {\n                            i = true;\n                            break\n                        }\n                    }\n                }\n                if (i) {\n                    var g = $(\"<div class='shape_comment_ico'></div>\").appendTo(m);\n                    g.bind(\"mousedown\", function (q) {\n                        q.stopPropagation();\n                        Dock.showView(\"comment\");\n                        Utils.selectShape(j.id)\n                    })\n                }\n            }\n        },\n        fillShape: function (c, a, b, e) {\n            a.save();\n            if (b.type != \"none\" && typeof b.alpha != \"undefined\") {\n                a.globalAlpha = b.alpha\n            }\n            if (b.type == \"solid\") {\n                a.fillStyle = \"rgb(\" + b.color + \")\";\n                a.fill()\n            } else {\n                if (b.type == \"gradient\") {\n                    var h;\n                    if (b.gradientType == \"linear\") {\n                        h = GradientHelper.createLinearGradient(c, a, b)\n                    } else {\n                        h = GradientHelper.createRadialGradient(c, a, b)\n                    }\n                    a.fillStyle = h;\n                    a.fill()\n                } else {\n                    if (b.type == \"image\") {\n                        var d;\n                        if (b.fileId.indexOf(\"qiniu/\") >= 0) {\n                            d = b.fileId.replace(/^qiniu/, \"http://7xpicf.com1.z0.glb.clouddn.com\")\n                        } else {\n                            if (b.fileId.indexOf(\"http\") == 0) {\n                                d = b.fileId\n                            } else {\n                                if (b.fileId.indexOf(\"/images/\") >= 0) {\n                                    d = b.fileId;\n                                    if (localRuntime) {\n                                        d = \"http://localhost:8080\" + d\n                                    }\n                                } else {\n                                    d = \"/file/id/\" + b.fileId + \"/diagram_user_image\";\n                                    if (localRuntime) {\n                                        d = \"http://localhost:8080\" + d\n                                    }\n                                }\n                            }\n                        }\n                        var g = $(\".shape_img[src='\" + d + \"']\");\n                        if (g.length == 0) {\n                            g = $(\"<img class='shape_img' loaded='0' src=''/>\").appendTo(\"#shape_img_container\");\n                            g.bind(\"load.drawshape\", function () {\n                                $(this).attr(\"loaded\", \"1\");\n                                if (e) {\n                                    e()\n                                }\n                            });\n                            g.attr(\"src\", d)\n                        } else {\n                            if (g.attr(\"loaded\") == \"0\") {\n                                g.bind(\"load.drawshape\", function () {\n                                    if (e) {\n                                        e()\n                                    }\n                                })\n                            } else {\n                                f(g)\n                            }\n                        }\n                    }\n                }\n            }\n            a.restore();\n\n            function f(j) {\n                a.save();\n                a.clip();\n                if (b.display == \"fit\") {\n                    var n = j.width();\n                    var k = j.height();\n                    var q = n / k;\n                    var m = c.props.w / c.props.h;\n                    if (q > m) {\n                        var l = c.props.w;\n                        var p = 0;\n                        var i = l / q;\n                        var o = c.props.h / 2 - i / 2;\n                        a.drawImage(j[0], p, o, l, i)\n                    } else {\n                        var i = c.props.h;\n                        var o = 0;\n                        var l = i * q;\n                        var p = c.props.w / 2 - l / 2;\n                        a.drawImage(j[0], p, o, l, i)\n                    }\n                } else {\n                    if (b.display == \"stretch\") {\n                        a.drawImage(j[0], 0, 0, c.props.w, c.props.h)\n                    } else {\n                        if (b.display == \"original\") {\n                            var n = j.width();\n                            var k = j.height();\n                            var p = c.props.w / 2 - n / 2;\n                            var o = c.props.h / 2 - k / 2;\n                            a.drawImage(j[0], p, o, n, k)\n                        } else {\n                            if (b.display == \"tile\") {\n                                var p = 0;\n                                var n = j.width();\n                                var k = j.height();\n                                while (p < c.props.w) {\n                                    var o = 0;\n                                    while (o < c.props.h) {\n                                        a.drawImage(j[0], p, o, n, k);\n                                        o += k\n                                    }\n                                    p += n\n                                }\n                            } else {\n                                if (b.display == \"static\") {\n                                    var p = 0;\n                                    var n = j.width();\n                                    var k = j.height();\n                                    a.drawImage(j[0], b.imageX, b.imageY, n, k)\n                                } else {\n                                    var n = j.width();\n                                    var k = j.height();\n                                    var q = n / k;\n                                    var m = c.props.w / c.props.h;\n                                    if (q > m) {\n                                        var i = c.props.h;\n                                        var o = 0;\n                                        var l = i * q;\n                                        var p = c.props.w / 2 - l / 2;\n                                        a.drawImage(j[0], p, o, l, i)\n                                    } else {\n                                        var l = c.props.w;\n                                        var p = 0;\n                                        var i = l / q;\n                                        var o = c.props.h / 2 - i / 2;\n                                        a.drawImage(j[0], p, o, l, i)\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                a.restore()\n            }\n        },\n        renderText: function (a, u) {\n            console.log(\"a = \", a)\n            console.log(\"u = \", u)\n            var o = $(\"#\" + a.id);\n            var b = a.getTextBlock();\n            console.log(\"b = \", b)\n            o.find(\".text_canvas\").remove();\n            for (var n = 0; n < b.length; n++) {\n                var s = b[n];\n                console.log(\"s = \", s);\n                var l = o.find(\".text_canvas[ind=\" + n + \"]\");\n                if (l.length == 0) {\n                    l = $(\"<p title=\" + s.text + \" class='text_canvas' forshape='\" + a.id + \"' ind='\" + n + \"'></p>\").appendTo(o);\n                    l.bind(\"focus\", function () {\n                        $(this).blur()\n                    })\n                }\n                l.attr(\"readonly\", \"readonly\");\n                if (!s.text || s.text.trim() == \"\") {\n                    l.css({\n                        height: \"0px\",\n                        width: \"0px\"\n                    }).hide();\n                    // continue\n                }\n                var d = Utils.getShapeFontStyle(a.fontStyle);\n                d = $.extend({}, d, s.fontStyle);\n                var q = d.fontFamily;\n                if (localRuntime) {\n                    if (Utils.containsChinese(s.text) && !Utils.containsChinese(q)) {\n                        q = \"宋体\"\n                    }\n                }\n                var p_line_height = 34;\n                if (s.text && String(s.text).length > 7) p_line_height = 17;\n                var p = {\n                    // \"line-height\": Math.round(d.size * 1.25) + \"px\",\n                    \"line-height\": p_line_height + \"px\",\n                    \"font-size\": a.fontStyle ? a.fontStyle.size : d.size + \"px\",\n                    \"font-family\": q,\n                    \"font-weight\": d.bold ? \"bold\" : \"normal\",\n                    \"font-style\": d.italic ? \"italic\" : \"normal\",\n                    \"text-align\": d.textAlign,\n                    color: \"rgb(\" + d.color + \")\",\n                    \"text-decoration\": d.underline ? \"underline\" : \"none\",\n                    opacity: a.shapeStyle.alpha,\n                    paddingLeft: a.name === 'start' ? 0 : 20,\n                    margin: 0\n                };\n                l.css(p);\n                l.show();\n                var e = s.position;\n                if (d.orientation == \"horizontal\") {\n                    var h = {\n                        x: e.x + e.w / 2,\n                        y: e.y + e.h / 2\n                    };\n                    e = {\n                        x: h.x - e.h / 2,\n                        y: h.y - e.w / 2,\n                        w: e.h,\n                        h: e.w\n                    }\n                }\n                l.css({\n                    width: e.w\n                });\n\n                l.height(0);\n                l.text(s.text);\n                if (a.icon && l.siblings('.icon').length == 0) {\n                    l.after(a.icon);\n                }\n                if (!a.status || a.status == 0) {\n                    l.after('<i class=\"status fa fa-clock-o\"></i>');\n                } else {\n                    l.after('<i class=\"status fa fa-check\"></i>');\n                }\n                l.scrollTop(99999);\n                var v = l.scrollTop();\n                var m = 0;\n                if (d.vAlign == \"middle\") {\n                    m = (e.y + e.h / 2 - v / 2)\n                } else {\n                    if (d.vAlign == \"bottom\") {\n                        m = (e.y + e.h - v)\n                    } else {\n                        m = e.y\n                    }\n                }\n                var g = {\n                    x: e.x + e.w / 2,\n                    y: m + v / 2\n                };\n                var f = a.props.angle;\n                if (f != 0) {\n                    var t = {\n                        x: a.props.w / 2,\n                        y: a.props.h / 2\n                    };\n                    g = Utils.getRotated(t, g, f)\n                }\n                if (d.orientation == \"horizontal\") {\n                    f = (Math.PI * 1.5 + f) % (Math.PI * 2)\n                }\n                var j = Math.round(f / (Math.PI * 2) * 360);\n                var r = \"rotate(\" + j + \"deg) scale(\" + Designer.config.scale + \")\";\n                var c = e.w;\n                var k = v;\n                l.css({\n                    width: c,\n                    height: 34,\n                    left: (g.x + (a.props.x - u.x) + 10).toScale() - e.w / 2,\n                    top: (o.height()) / 2 - 34 / 2,\n                    \"-webkit-transform\": r,\n                    \"-ms-transform\": r,\n                    \"-o-transform\": r,\n                    \"-moz-transform\": r,\n                    transform: r\n                })\n            }\n        },\n        calculateTextLines: function (g, u, n) {\n            var f = u.w;\n            var r = u.h;\n            var a = [];\n            var c = g.split(/\\n/);\n            for (var q = 0; q < c.length; q++) {\n                var l = c[q];\n                var m = n.measureText(l);\n                if (m.width <= f) {\n                    a.push(l)\n                } else {\n                    var k = l.split(/\\s/);\n                    var e = \"\";\n                    for (var o = 0; o < k.length; o++) {\n                        var t = k[o];\n                        if (o != k.length - 1) {\n                            t += \" \"\n                        }\n                        var v = n.measureText(t).width;\n                        if (v > f) {\n                            for (var b = 0; b < t.length; b++) {\n                                var s = e + t[b];\n                                var d = n.measureText(s).width;\n                                if (d > f) {\n                                    a.push(e);\n                                    e = t[b]\n                                } else {\n                                    e = s\n                                }\n                            }\n                        } else {\n                            var s = e + t;\n                            var d = n.measureText(s).width;\n                            if (d > f) {\n                                a.push(e);\n                                e = t\n                            } else {\n                                e = s\n                            }\n                        }\n                    }\n                    if (e != \"\") {\n                        a.push(e)\n                    }\n                }\n            }\n            return a\n        },\n        renderMarkers: function (l, g, c) {\n            if (g.attribute && g.attribute.markers && g.attribute.markers.length > 0) {\n                var d = g.attribute.markers;\n                var m = Schema.config.markerSize;\n                var h = 4;\n                if (c) {\n                    m = 10\n                }\n                var e = g.attribute.markerOffset;\n                if (c) {\n                    e = 5\n                }\n                var b = d.length * m + (d.length - 1) * h;\n                var j = g.props.w / 2 - b / 2;\n                for (var f = 0; f < d.length; f++) {\n                    var k = d[f];\n                    l.save();\n                    l.translate(j, g.props.h - m - e);\n                    var a = Schema.markers[k].call(g, m);\n                    this.renderPath(l, g, a);\n                    l.restore();\n                    j += m + h\n                }\n            }\n        },\n        renderDataAttributes: function (e, h) {\n            $(\"#\" + e.id).children(\".attr_canvas\").remove();\n            if (!e.dataAttributes || e.dataAttributes.length == 0) {\n                return\n            }\n            var d = {\n                x: e.props.w / 2,\n                y: e.props.h / 2\n            };\n            var a = Utils.getShapeFontStyle(e);\n            for (var c = 0; c < e.dataAttributes.length; c++) {\n                var f = e.dataAttributes[c];\n                if (f.showType == \"none\") {\n                    continue\n                }\n                var j = \"\";\n                var g = \"\";\n                if (f.showName) {\n                    j = f.name + \": \"\n                }\n                if (f.showType == \"text\") {\n                    j += f.value\n                } else {\n                    if (f.showType == \"icon\") {\n                        g = f.icon\n                    }\n                }\n                if (j == \"\" && g == \"\") {\n                    continue\n                }\n                b(f, j, g)\n            }\n\n            function b(z, r, D) {\n                var E = z.horizontal;\n                var k = z.vertical;\n                var l = $(\"<canvas id='attr_canvas_\" + z.id + \"' class='attr_canvas'></canvas>\").appendTo($(\"#\" + e.id));\n                var A = l[0].getContext(\"2d\");\n                var s = \"12px \";\n                var C = a.fontFamily;\n                if (localRuntime) {\n                    if (Utils.containsChinese(r) && !Utils.containsChinese(C)) {\n                        C = \"宋体\"\n                    }\n                }\n                s += C;\n                A.font = s;\n                var q = A.measureText(r).width;\n                var B = 20;\n                if (D != \"\") {\n                    q += 20\n                }\n                var p, o;\n                if (E == \"mostleft\") {\n                    p = -q - 2\n                } else {\n                    if (E == \"leftedge\") {\n                        p = -q / 2\n                    } else {\n                        if (E == \"left\") {\n                            p = 2\n                        } else {\n                            if (E == \"center\") {\n                                p = (e.props.w - q) / 2\n                            } else {\n                                if (E == \"right\") {\n                                    p = e.props.w - q - 2\n                                } else {\n                                    if (E == \"rightedge\") {\n                                        p = e.props.w - q / 2\n                                    } else {\n                                        p = e.props.w + 2\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                if (k == \"mosttop\") {\n                    o = -B\n                } else {\n                    if (k == \"topedge\") {\n                        o = -B / 2\n                    } else {\n                        if (k == \"top\") {\n                            o = 0\n                        } else {\n                            if (k == \"middle\") {\n                                o = (e.props.h - B) / 2\n                            } else {\n                                if (k == \"bottom\") {\n                                    o = e.props.h - B\n                                } else {\n                                    if (k == \"bottomedge\") {\n                                        o = e.props.h - B / 2\n                                    } else {\n                                        o = e.props.h\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                var F = {\n                    x: p,\n                    y: o,\n                    w: q,\n                    h: B\n                };\n                var n = Utils.getRotatedBox(F, e.props.angle, d);\n                l.attr({\n                    width: n.w.toScale(),\n                    height: n.h.toScale()\n                });\n                A.font = s;\n                var v = (n.x + (e.props.x - h.x) + 10).toScale();\n                var u = (n.y + (e.props.y - h.y) + 10).toScale();\n                l.css({\n                    left: v,\n                    top: u\n                });\n                A.scale(Designer.config.scale, Designer.config.scale);\n                A.translate(n.w / 2, n.h / 2);\n                A.rotate(e.props.angle);\n                A.translate(-n.w / 2, -n.h / 2);\n                A.translate((n.w - F.w) / 2, (n.h - F.h) / 2);\n                A.globalAlpha = e.shapeStyle.alpha;\n                if (z.type == \"link\") {\n                    A.fillStyle = \"#4183C4\"\n                } else {\n                    A.fillStyle = \"#333\"\n                }\n                A.textBaseline = \"middle\";\n                A.fillText(r, 0, B / 2);\n                if (D != \"\") {\n                    var i = \"/images/data-attr/\" + D + \".png\";\n                    if (localRuntime) {\n                        i = \"http://localhost:8080\" + i\n                    }\n                    var t = $(\".shape_img[src='\" + i + \"']\");\n                    if (t.length == 0) {\n                        t = $(\"<img class='shape_img' loaded='false' src='\" + i + \"'/>\").appendTo(\"#shape_img_container\")\n                    }\n                    if (t.attr(\"loaded\") == \"true\") {\n                        A.drawImage(t[0], F.w - 20, 0, 20, 20)\n                    } else {\n                        t.bind(\"load.drawshape\", function () {\n                            $(this).attr(\"loaded\", \"true\");\n                            A.drawImage(t[0], F.w - 20, 0, 20, 20)\n                        })\n                    }\n                }\n                A.beginPath();\n                A.rect(0, 0, q, B);\n                A.closePath();\n                if (z.type == \"link\") {\n                    var m = $(\"<a href='\" + z.value + \"' target='_blank' class='attr_link'></canvas>\").appendTo($(\"#\" + e.id));\n                    m.css({\n                        left: v,\n                        top: u,\n                        width: n.w.toScale(),\n                        height: n.h.toScale(),\n                        position: \"absolute\"\n                    })\n                }\n            }\n        },\n        renderLinker: function (h, k) {\n            console.log(\"renderLinker\");\n            if (k) {\n                h.points = Utils.getLinkerPoints(h)\n            }\n            if (h.linkerType == \"curve\" || h.linkerType == \"broken\") {\n                if (!h.points || h.points.length == 0) {\n                    h.points = Utils.getLinkerPoints(h)\n                }\n            }\n            var q = h.points;\n            var o = Utils.copy(h.from);\n            var a = Utils.copy(h.to);\n            if (h.attribute && h.attribute.collapseBy) {\n                $(\"#\" + h.id).hide();\n                return\n            } else {\n                $(\"#\" + h.id).show()\n            }\n            var p = Utils.getEndpointAngle(h, \"from\");\n            var d = Utils.getEndpointAngle(h, \"to\");\n            var b = Utils.getLinkerLineStyle(h.lineStyle);\n            l(o, h, b.beginArrowStyle, p);\n            l(a, h, b.endArrowStyle, d);\n            var B = a.x;\n            var x = a.y;\n            var y = o.x;\n            var w = o.y;\n            if (a.x < o.x) {\n                B = a.x;\n                y = o.x\n            } else {\n                B = o.x;\n                y = a.x\n            }\n            if (a.y < o.y) {\n                x = a.y;\n                w = o.y\n            } else {\n                x = o.y;\n                w = a.y\n            }\n            for (var r = 0; r < q.length; r++) {\n                var n = q[r];\n                if (n.x < B) {\n                    B = n.x\n                } else {\n                    if (n.x > y) {\n                        y = n.x\n                    }\n                }\n                if (n.y < x) {\n                    x = n.y\n                } else {\n                    if (n.y > w) {\n                        w = n.y\n                    }\n                }\n            }\n            var f = {\n                x: B,\n                y: x,\n                w: y - B,\n                h: w - x\n            };\n            var C = $(\"#\" + h.id);\n            if (C.length == 0) {\n                var g = $(\"#designer_canvas\");\n                C = $(\"<div id='\" + h.id + \"' class='shape_box linker_box'><canvas class='shape_canvas'></canvas></div>\").appendTo(g)\n            }\n            if (!Model.getShapeById(h.id)) {\n                C.css(\"z-index\", Model.orderList.length + 1)\n            }\n            var A = C.find(\".shape_canvas\");\n            A.attr({\n                width: (f.w + 20).toScale(),\n                height: (f.h + 20).toScale()\n            });\n            C.css({\n                left: (f.x - 10).toScale(),\n                top: (f.y - 10).toScale(),\n                width: (f.w + 20).toScale(),\n                height: (f.h + 20).toScale()\n            });\n            var m = A[0].getContext(\"2d\");\n            m.scale(Designer.config.scale, Designer.config.scale);\n            m.translate(10, 10);\n            var s = Utils.getLinkerLineStyle(h.lineStyle);\n            m.lineWidth = s.lineWidth;\n            m.strokeStyle = \"rgb(\" + s.lineColor + \")\";\n            m.fillStyle = \"rgb(\" + s.lineColor + \")\";\n            m.save();\n            var z = {\n                x: o.x - f.x,\n                y: o.y - f.y\n            };\n            var c = {\n                x: a.x - f.x,\n                y: a.y - f.y\n            };\n            m.save();\n            if (s.lineStyle == \"dashed\") {\n                this.setLineDash(m, [s.lineWidth * 5, s.lineWidth * 2])\n            } else {\n                if (s.lineStyle == \"dot\") {\n                    this.setLineDash(m, [s.lineWidth, s.lineWidth * 1.5])\n                } else {\n                    if (s.lineStyle == \"dashdot\") {\n                        this.setLineDash(m, [s.lineWidth * 5, s.lineWidth * 2, s.lineWidth, s.lineWidth * 2])\n                    }\n                }\n            }\n            m.lineJoin = \"round\";\n            m.beginPath();\n            this.actions.move.call(m, z);\n            if (h.linkerType == \"curve\") {\n                var v = q[0];\n                var u = q[1];\n                var t = {\n                    x1: v.x - f.x,\n                    y1: v.y - f.y,\n                    x2: u.x - f.x,\n                    y2: u.y - f.y,\n                    x: c.x,\n                    y: c.y\n                };\n                this.actions.curve.call(m, t)\n            } else {\n                for (var r = 0; r < q.length; r++) {\n                    var D = q[r];\n                    this.actions.line.call(m, {\n                        x: D.x - f.x,\n                        y: D.y - f.y\n                    })\n                }\n                this.actions.line.call(m, c)\n            }\n            var j = Utils.isSelected(h.id);\n            if (j) {\n                m.shadowBlur = 1;\n                m.shadowColor = \"red\";\n                if (h.linkerType == \"curve\" && Utils.getSelectedIds().length == 1) { }\n            }\n            m.stroke();\n            m.restore();\n            delete m.webkitLineDash;\n            e(z, p, o.id, s.beginArrowStyle, h, o.angle);\n            e(c, d, a.id, s.endArrowStyle, h, a.angle);\n            m.restore();\n            this.renderLinkerText(h);\n\n            function l(M, H, i, J) {\n                if (M.id) {\n                    var E = Model.getShapeById(M.id);\n                    if (E) {\n                        var G = {\n                            x: 0,\n                            y: 0\n                        };\n                        var I = Utils.getShapeLineStyle(E.lineStyle);\n                        var L = Utils.getLinkerLineStyle(H.lineStyle);\n                        if (i == \"none\" || i == \"cross\") {\n                            G.x = -I.lineWidth / 2\n                        } else {\n                            if (i == \"solidArrow\" || i == \"dashedArrow\") {\n                                G.x = -I.lineWidth / 2 - L.lineWidth * 1.3\n                            } else {\n                                if (i == \"solidDiamond\" || i == \"dashedDiamond\") {\n                                    G.x = -I.lineWidth / 2 - L.lineWidth\n                                } else {\n                                    G.x = -I.lineWidth / 2 - L.lineWidth / 2\n                                }\n                            }\n                        }\n                        var K = {\n                            x: 0,\n                            y: 0\n                        };\n                        var F = Utils.getRotated(K, G, J);\n                        M.x += F.x;\n                        M.y += F.y\n                    }\n                }\n            }\n\n            function e(W, M, Q, Y, R, E) {\n                if (Y == \"normal\") {\n                    var S = 12;\n                    var ac = Math.PI / 5;\n                    var V = S / Math.cos(ac);\n                    var L = W.x - V * Math.cos(M - ac);\n                    var K = W.y - V * Math.sin(M - ac);\n                    var O = W.x - V * Math.sin(Math.PI / 2 - M - ac);\n                    var N = W.y - V * Math.cos(Math.PI / 2 - M - ac);\n                    m.beginPath();\n                    m.moveTo(L, K);\n                    m.lineTo(W.x, W.y);\n                    m.lineTo(O, N);\n                    m.stroke()\n                } else {\n                    if (Y == \"solidArrow\") {\n                        var S = 12;\n                        var ac = Math.PI / 10;\n                        var V = S / Math.cos(ac);\n                        var L = W.x - V * Math.cos(M - ac);\n                        var K = W.y - V * Math.sin(M - ac);\n                        var O = W.x - V * Math.sin(Math.PI / 2 - M - ac);\n                        var N = W.y - V * Math.cos(Math.PI / 2 - M - ac);\n                        m.beginPath();\n                        m.moveTo(W.x, W.y);\n                        m.lineTo(L, K);\n                        m.lineTo(O, N);\n                        m.lineTo(W.x, W.y);\n                        m.closePath();\n                        m.fill();\n                        m.stroke()\n                    } else {\n                        if (Y == \"dashedArrow\") {\n                            m.save();\n                            var S = 12;\n                            var ac = Math.PI / 10;\n                            var V = S / Math.cos(ac);\n                            var L = W.x - V * Math.cos(M - ac);\n                            var K = W.y - V * Math.sin(M - ac);\n                            var O = W.x - V * Math.sin(Math.PI / 2 - M - ac);\n                            var N = W.y - V * Math.cos(Math.PI / 2 - M - ac);\n                            m.beginPath();\n                            m.moveTo(W.x, W.y);\n                            m.lineTo(L, K);\n                            m.lineTo(O, N);\n                            m.lineTo(W.x, W.y);\n                            m.closePath();\n                            m.fillStyle = \"white\";\n                            m.fill();\n                            m.stroke();\n                            m.restore()\n                        } else {\n                            if (Y == \"solidCircle\") {\n                                m.save();\n                                var i = 4;\n                                var J = W.x - i * Math.cos(M);\n                                var I = W.y - i * Math.sin(M);\n                                m.beginPath();\n                                m.arc(J, I, i, 0, Math.PI * 2, false);\n                                m.closePath();\n                                m.fill();\n                                m.stroke();\n                                m.restore()\n                            } else {\n                                if (Y == \"dashedCircle\") {\n                                    m.save();\n                                    var i = 4;\n                                    var J = W.x - i * Math.cos(M);\n                                    var I = W.y - i * Math.sin(M);\n                                    m.beginPath();\n                                    m.arc(J, I, i, 0, Math.PI * 2, false);\n                                    m.closePath();\n                                    m.fillStyle = \"white\";\n                                    m.fill();\n                                    m.stroke();\n                                    m.restore()\n                                } else {\n                                    if (Y == \"solidDiamond\") {\n                                        m.save();\n                                        var S = 8;\n                                        var ac = Math.PI / 7;\n                                        var V = S / Math.cos(ac);\n                                        var L = W.x - V * Math.cos(M - ac);\n                                        var K = W.y - V * Math.sin(M - ac);\n                                        var O = W.x - V * Math.sin(Math.PI / 2 - M - ac);\n                                        var N = W.y - V * Math.cos(Math.PI / 2 - M - ac);\n                                        var U = W.x - S * 2 * Math.cos(M);\n                                        var T = W.y - S * 2 * Math.sin(M);\n                                        m.beginPath();\n                                        m.moveTo(W.x, W.y);\n                                        m.lineTo(L, K);\n                                        m.lineTo(U, T);\n                                        m.lineTo(O, N);\n                                        m.lineTo(W.x, W.y);\n                                        m.closePath();\n                                        m.fill();\n                                        m.stroke();\n                                        m.restore()\n                                    } else {\n                                        if (Y == \"dashedDiamond\") {\n                                            m.save();\n                                            var S = 8;\n                                            var ac = Math.PI / 7;\n                                            var V = S / Math.cos(ac);\n                                            var L = W.x - V * Math.cos(M - ac);\n                                            var K = W.y - V * Math.sin(M - ac);\n                                            var O = W.x - V * Math.sin(Math.PI / 2 - M - ac);\n                                            var N = W.y - V * Math.cos(Math.PI / 2 - M - ac);\n                                            var U = W.x - S * 2 * Math.cos(M);\n                                            var T = W.y - S * 2 * Math.sin(M);\n                                            m.beginPath();\n                                            m.moveTo(W.x, W.y);\n                                            m.lineTo(L, K);\n                                            m.lineTo(U, T);\n                                            m.lineTo(O, N);\n                                            m.lineTo(W.x, W.y);\n                                            m.closePath();\n                                            m.fillStyle = \"white\";\n                                            m.fill();\n                                            m.stroke();\n                                            m.restore()\n                                        } else {\n                                            if (Y == \"cross\") {\n                                                var H = 6;\n                                                var P = 14;\n                                                var ab = H * Math.cos(Math.PI / 2 - M);\n                                                var aa = H * Math.sin(Math.PI / 2 - M);\n                                                var Z = W.x + ab;\n                                                var G = W.y - aa;\n                                                var U = W.x - P * Math.cos(M);\n                                                var T = W.y - P * Math.sin(M);\n                                                var X = U - ab;\n                                                var F = T + aa;\n                                                m.beginPath();\n                                                m.moveTo(Z, G);\n                                                m.lineTo(X, F);\n                                                m.stroke()\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        },\n        renderLinkerText: function (h) {\n            var g = $(\"#\" + h.id);\n            var b = g.find(\".text_canvas\");\n            if (b.length == 0) {\n                b = $(\"<div class='text_canvas linker_text'></div>\").appendTo(g)\n            }\n            var e = Utils.getLinkerFontStyle(h.fontStyle);\n            var c = \"scale(\" + Designer.config.scale + \")\";\n            var f = e.fontFamily;\n            if (localRuntime) {\n                if (Utils.containsChinese(h.text) && !Utils.containsChinese(f)) {\n                    f = \"宋体\"\n                }\n            }\n            var textColor = e.color;\n            switch (h.text) {\n                case '命中':\n                    textColor = \"228, 75, 78\";\n                    break;\n                case '非命中':\n                    textColor = \"24, 144, 255\";\n                    break;\n                default:\n                    break;\n            }\n            var a = {\n                \"line-height\": Math.round(e.size * 1.25) + \"px\",\n                \"font-size\": e.size + \"px\",\n                \"font-family\": f,\n                \"font-weight\": e.bold ? \"bold\" : \"normal\",\n                \"font-style\": e.italic ? \"italic\" : \"normal\",\n                \"text-align\": e.textAlign,\n                color: \"rgb(\" + textColor + \")\",\n                \"text-decoration\": e.underline ? \"underline\" : \"none\",\n                \"-webkit-transform\": c,\n                \"-ms-transform\": c,\n                \"-o-transform\": c,\n                \"-moz-transform\": c,\n                transform: c\n            };\n            b.css(a);\n            if (h.text == null || h.text == \"\") {\n                b.hide();\n                return\n            }\n            b.show();\n            var i = h.text.replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\\n/g, \"<br/>\");\n            b.html(i + \"<br/>\");\n            if (typeof h.textPos != \"undefined\") {\n                b.css({\n                    left: h.textPos.x,\n                    top: h.textPos.y\n                });\n                return\n            }\n            var j = this.getLinkerMidpoint(h);\n            if (j.x != null) {\n                var d = g.position();\n                b.css({\n                    left: j.x.toScale() - d.left - b.width() / 2,\n                    top: j.y.toScale() - d.top - b.height() / 2\n                })\n            }\n        },\n        getLinkerMidpoint: function (c) {\n            var g = {};\n            if (c.linkerType == \"normal\") {\n                g = {\n                    x: 0.5 * c.from.x + 0.5 * c.to.x,\n                    y: 0.5 * c.from.y + 0.5 * c.to.y\n                }\n            } else {\n                if (c.linkerType == \"curve\") {\n                    var o = c.from;\n                    var m = c.points[0];\n                    var h = c.points[1];\n                    var f = c.to;\n                    g = {\n                        x: o.x * 0.125 + m.x * 0.375 + h.x * 0.375 + f.x * 0.125,\n                        y: o.y * 0.125 + m.y * 0.375 + h.y * 0.375 + f.y * 0.125\n                    }\n                } else {\n                    var i = [];\n                    i.push(c.from);\n                    i = i.concat(c.points);\n                    i.push(c.to);\n                    var l = 0;\n                    for (var b = 1; b < i.length; b++) {\n                        var m = i[b - 1];\n                        var h = i[b];\n                        var e = Utils.measureDistance(m, h);\n                        l += e\n                    }\n                    var k = l / 2;\n                    var a = 0;\n                    for (var b = 1; b < i.length; b++) {\n                        var m = i[b - 1];\n                        var h = i[b];\n                        var e = Utils.measureDistance(m, h);\n                        var j = a + e;\n                        if (j >= k) {\n                            var n = (k - a) / e;\n                            g = {\n                                x: (1 - n) * m.x + n * h.x,\n                                y: (1 - n) * m.y + n * h.y\n                            };\n                            break\n                        }\n                        a = j\n                    }\n                }\n            }\n            return g\n        },\n        controlStatus: {\n            resizeDir: [],\n            rotatable: true\n        },\n        drawControls: function (h) {\n            var g = $(\"#shape_controls\");\n            if (g.length == 0) {\n                var c = $(\"#designer_canvas\");\n                g = $(\"<div id='shape_controls'></div>\").appendTo(c);\n                g.append(\"<canvas id='controls_bounding'></canvas>\");\n                // g.append(\"<div class='shape_controller' index='0' resizeDir='tl'></div>\");\n                // g.append(\"<div class='shape_controller' index='1' resizeDir='tr'></div>\");\n                // g.append(\"<div class='shape_controller' index='2' resizeDir='br'></div>\");\n                // g.append(\"<div class='shape_controller' index='3' resizeDir='bl'></div>\");\n                // g.append(\"<div class='shape_controller' resizeDir='l'></div>\");\n                // g.append(\"<div class='shape_controller' resizeDir='t'></div>\");\n                // g.append(\"<div class='shape_controller' resizeDir='r'></div>\");\n                // g.append(\"<div class='shape_controller' resizeDir='b'></div>\");\n                // Designer.op.shapeResizable();\n                g.append(\"<canvas class='shape_rotater' width='41px' height='40px'></canvas>\");\n                // Designer.op.shapeRotatable();\n                g.append(\"<div class='group_icon change_shape_icon'></div>\");\n                Designer.op.groupShapeChangable();\n                $(\".shape_controller\").css({\n                    \"border-color\": Designer.config.anchorColor,\n                    width: Designer.config.anchorSize - 2,\n                    height: Designer.config.anchorSize - 2\n                })\n            }\n            $(\".shape_controller\").css({\n                \"z-index\": Model.orderList.length\n            });\n            $(\".change_shape_icon\").hide();\n            g.show();\n            var e = 0;\n            var k;\n            var d;\n            if (h.length == 1) {\n                var j = Model.getShapeById(h[0]);\n                k = j.props;\n                e = j.props.angle;\n                d = j.resizeDir;\n                if (j.groupName && SchemaGroup.groupExists(j.groupName)) {\n                    $(\".change_shape_icon\").show()\n                }\n            } else {\n                k = Utils.getControlBox(h);\n                d = [\"tl\", \"tr\", \"br\", \"bl\"]\n            }\n            var a = true;\n            for (var f = 0; f < h.length; f++) {\n                var b = h[f];\n                var j = Model.getShapeById(b);\n                if (j.attribute && j.attribute.rotatable == false) {\n                    a = false\n                }\n                if ((j.resizeDir && j.resizeDir.length == 0) || (j.parent && h.length > 1)) {\n                    d = []\n                }\n            }\n            this.controlStatus.rotatable = a;\n            this.controlStatus.resizeDir = d;\n            this.rotateControls(k, e);\n            return g\n        },\n        rotateControls: function (g, u) {\n            var k = $(\"#shape_controls\");\n            var l = Utils.getRotatedBox(g, u);\n            var z = l.w.toScale();\n            var h = l.h.toScale();\n            k.css({\n                left: l.x.toScale(),\n                top: l.y.toScale(),\n                width: z,\n                height: h,\n                \"z-index\": Model.orderList.length\n            });\n            var j = z + 20;\n            var o = h + 20;\n            var f = $(\"#controls_bounding\");\n            f.attr({\n                width: j,\n                height: o\n            });\n            var p = f[0].getContext(\"2d\");\n            p.lineJoin = \"round\";\n            if (this.controlStatus.resizeDir.length == 0) {\n                p.lineWidth = 2;\n                p.strokeStyle = Designer.config.selectorColor;\n                p.globalAlpha = 0.8\n            } else {\n                p.lineWidth = 1;\n                p.strokeStyle = Designer.config.selectorColor;\n                p.globalAlpha = 0.5\n            }\n            p.save();\n            p.clearRect(0, 0, j, o);\n            p.translate(j / 2, o / 2);\n            p.rotate(u);\n            p.translate(-j / 2, -o / 2);\n            p.translate(9.5, 9.5);\n            var b = {\n                x: Math.round((g.x - l.x).toScale()),\n                y: Math.round((g.y - l.y).toScale()),\n                w: Math.floor(g.w.toScale() + 1),\n                h: Math.floor(g.h.toScale() + 1)\n            };\n            p.strokeRect(b.x, b.y, b.w, b.h);\n            p.restore();\n            var y = 0 - Designer.config.anchorSize / 2;\n            var s = {};\n            g = Utils.toScale(g);\n            l = Utils.toScale(l);\n            var v = {\n                x: (g.x + g.w / 2),\n                y: g.y + g.h / 2\n            };\n            k.children(\".shape_controller\").hide();\n            for (var r = 0; r < this.controlStatus.resizeDir.length; r++) {\n                var n = this.controlStatus.resizeDir[r];\n                var a = $(\".shape_controller[resizeDir=\" + n + \"]\");\n                a.show();\n                var d, c;\n                if (n.indexOf(\"l\") >= 0) {\n                    d = g.x\n                } else {\n                    if (n.indexOf(\"r\") >= 0) {\n                        d = g.x + g.w\n                    } else {\n                        d = g.x + g.w / 2\n                    }\n                }\n                if (n.indexOf(\"t\") >= 0) {\n                    c = g.y\n                } else {\n                    if (n.indexOf(\"b\") >= 0) {\n                        c = g.y + g.h\n                    } else {\n                        c = g.y + g.h / 2\n                    }\n                }\n                var e = Utils.getRotated(v, {\n                    x: d,\n                    y: c\n                }, u);\n                a.css({\n                    left: e.x - l.x + y,\n                    top: e.y - l.y + y\n                })\n            }\n            var m = Math.PI / 8;\n            k.children(\".shape_controller\").removeClass(\"s n e w\");\n            if (u > m && u <= m * 3) {\n                k.children(\"div[resizeDir=tl]\").addClass(\"n\");\n                k.children(\"div[resizeDir=tr]\").addClass(\"e\");\n                k.children(\"div[resizeDir=br]\").addClass(\"s\");\n                k.children(\"div[resizeDir=bl]\").addClass(\"w\");\n                k.children(\"div[resizeDir=l]\").addClass(\"n w\");\n                k.children(\"div[resizeDir=r]\").addClass(\"s e\");\n                k.children(\"div[resizeDir=b]\").addClass(\"s w\");\n                k.children(\"div[resizeDir=t]\").addClass(\"n e\")\n            } else {\n                if (u > m * 3 && u <= m * 5) {\n                    k.children(\"div[resizeDir=tl]\").addClass(\"n e\");\n                    k.children(\"div[resizeDir=tr]\").addClass(\"s e\");\n                    k.children(\"div[resizeDir=br]\").addClass(\"s w\");\n                    k.children(\"div[resizeDir=bl]\").addClass(\"n w\");\n                    k.children(\"div[resizeDir=l]\").addClass(\"n\");\n                    k.children(\"div[resizeDir=r]\").addClass(\"s\");\n                    k.children(\"div[resizeDir=b]\").addClass(\"w\");\n                    k.children(\"div[resizeDir=t]\").addClass(\"e\")\n                } else {\n                    if (u > m * 5 && u <= m * 7) {\n                        k.children(\"div[resizeDir=tl]\").addClass(\"e\");\n                        k.children(\"div[resizeDir=tr]\").addClass(\"s\");\n                        k.children(\"div[resizeDir=br]\").addClass(\"w\");\n                        k.children(\"div[resizeDir=bl]\").addClass(\"n\");\n                        k.children(\"div[resizeDir=l]\").addClass(\"n e\");\n                        k.children(\"div[resizeDir=r]\").addClass(\"s w\");\n                        k.children(\"div[resizeDir=b]\").addClass(\"n w\");\n                        k.children(\"div[resizeDir=t]\").addClass(\"s e\")\n                    } else {\n                        if (u > m * 7 && u <= m * 9) {\n                            k.children(\"div[resizeDir=tl]\").addClass(\"s e\");\n                            k.children(\"div[resizeDir=tr]\").addClass(\"s w\");\n                            k.children(\"div[resizeDir=br]\").addClass(\"n w\");\n                            k.children(\"div[resizeDir=bl]\").addClass(\"n e\");\n                            k.children(\"div[resizeDir=l]\").addClass(\"e\");\n                            k.children(\"div[resizeDir=r]\").addClass(\"w\");\n                            k.children(\"div[resizeDir=b]\").addClass(\"n\");\n                            k.children(\"div[resizeDir=t]\").addClass(\"s\")\n                        } else {\n                            if (u > m * 9 && u <= m * 11) {\n                                k.children(\"div[resizeDir=tl]\").addClass(\"s\");\n                                k.children(\"div[resizeDir=tr]\").addClass(\"w\");\n                                k.children(\"div[resizeDir=br]\").addClass(\"n\");\n                                k.children(\"div[resizeDir=bl]\").addClass(\"e\");\n                                k.children(\"div[resizeDir=l]\").addClass(\"s e\");\n                                k.children(\"div[resizeDir=r]\").addClass(\"n w\");\n                                k.children(\"div[resizeDir=b]\").addClass(\"n e\");\n                                k.children(\"div[resizeDir=t]\").addClass(\"s w\")\n                            } else {\n                                if (u > m * 11 && u <= m * 13) {\n                                    k.children(\"div[resizeDir=tl]\").addClass(\"s w\");\n                                    k.children(\"div[resizeDir=tr]\").addClass(\"n w\");\n                                    k.children(\"div[resizeDir=br]\").addClass(\"n e\");\n                                    k.children(\"div[resizeDir=bl]\").addClass(\"s e\");\n                                    k.children(\"div[resizeDir=l]\").addClass(\"s\");\n                                    k.children(\"div[resizeDir=r]\").addClass(\"n\");\n                                    k.children(\"div[resizeDir=b]\").addClass(\"e\");\n                                    k.children(\"div[resizeDir=t]\").addClass(\"w\")\n                                } else {\n                                    if (u > m * 13 && u <= m * 15) {\n                                        k.children(\"div[resizeDir=tl]\").addClass(\"w\");\n                                        k.children(\"div[resizeDir=tr]\").addClass(\"n\");\n                                        k.children(\"div[resizeDir=br]\").addClass(\"e\");\n                                        k.children(\"div[resizeDir=bl]\").addClass(\"s\");\n                                        k.children(\"div[resizeDir=l]\").addClass(\"s w\");\n                                        k.children(\"div[resizeDir=r]\").addClass(\"n e\");\n                                        k.children(\"div[resizeDir=b]\").addClass(\"s e\");\n                                        k.children(\"div[resizeDir=t]\").addClass(\"n w\")\n                                    } else {\n                                        k.children(\"div[resizeDir=tl]\").addClass(\"n w\");\n                                        k.children(\"div[resizeDir=tr]\").addClass(\"n e\");\n                                        k.children(\"div[resizeDir=br]\").addClass(\"s e\");\n                                        k.children(\"div[resizeDir=bl]\").addClass(\"s w\");\n                                        k.children(\"div[resizeDir=l]\").addClass(\"w\");\n                                        k.children(\"div[resizeDir=r]\").addClass(\"e\");\n                                        k.children(\"div[resizeDir=b]\").addClass(\"s\");\n                                        k.children(\"div[resizeDir=t]\").addClass(\"n\")\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            if (this.controlStatus.rotatable) {\n                var x = k.find(\".shape_rotater\");\n                //x.show();\n                var w = {\n                    x: g.x + g.w / 2,\n                    y: g.y - 20\n                };\n                var t = Utils.getRotated(v, w, u);\n                x.css({\n                    top: t.y - 20 - l.y,\n                    left: t.x - 20.5 - l.x\n                });\n                var q = x[0].getContext(\"2d\");\n                q.lineWidth = 1;\n                q.strokeStyle = Designer.config.selectorColor;\n                q.fillStyle = \"white\";\n                q.save();\n                q.clearRect(0, 0, 41, 40);\n                q.translate(20.5, 20);\n                q.rotate(u);\n                q.translate(-20.5, -20);\n                q.beginPath();\n                q.moveTo(20.5, 20);\n                q.lineTo(20.5, 40);\n                q.stroke();\n                q.beginPath();\n                q.arc(20.5, 20, Designer.config.rotaterSize / 2, 0, Math.PI * 2);\n                q.closePath();\n                q.fill();\n                q.stroke();\n                q.restore()\n            } else {\n                k.find(\".shape_rotater\").hide()\n            }\n        }\n    }\n};\nvar Model = {\n    define: {},\n    persistence: {},\n    orderList: [],\n    maxZIndex: 0,\n    linkerMap: {\n        map: {},\n        add: function (b, a) {\n            if (!this.map[b]) {\n                this.map[b] = []\n            }\n            if (this.map[b].indexOf(a) < 0) {\n                this.map[b].push(a)\n            }\n        },\n        remove: function (b, a) {\n            if (this.map[b]) {\n                Utils.removeFromArray(this.map[b], a)\n            }\n        },\n        empty: function () {\n            this.map = {}\n        }\n    },\n    groupMap: {\n        map: {},\n        add: function (a, b) {\n            this.map[a] = b\n        },\n        push: function (a, b) {\n            if (!this.map[a]) {\n                this.map[a] = []\n            }\n            this.map[a].push(b)\n        },\n        remove: function (a) {\n            delete this.map[a]\n        },\n        empty: function () {\n            this.map = {}\n        }\n    },\n    create: function (e, b, g) {\n        var d = Utils.newId();\n        var c = Utils.copy(Schema.shapes[e]);\n        c.id = d;\n        c.props.x = b;\n        c.props.y = g;\n        c.props.zindex = Model.maxZIndex + 1;\n        c.props = $.extend(true, {}, Schema.shapeDefaults.props, c.props);\n        for (var f = 0; f < c.dataAttributes.length; f++) {\n            var a = c.dataAttributes[f];\n            a.id = Utils.newId()\n        }\n        Designer.events.push(\"create\", c);\n        return c\n    },\n    add: function (a, b) {\n        this.addMulti([a], b)\n    },\n    addMulti: function (b, e) {\n        if (typeof e == \"undefined\") {\n            e = true\n        }\n        var a = [];\n        for (var d = 0; d < b.length; d++) {\n            var c = b[d];\n            a.push(Utils.copy(c));\n            this.define.elements[c.id] = Utils.copy(c);\n            this.persistence.elements[c.id] = Utils.copy(c)\n        }\n        this.build();\n        if (e) {\n            MessageSource.send(\"create\", a)\n        }\n    },\n    update: function (a) {\n        this.updateMulti([a])\n    },\n    updateMulti: function (c) {\n        var a = [];\n        var b = [];\n        for (var e = 0; e < c.length; e++) {\n            var d = c[e];\n            if (this.define.elements[d.id]) {\n                this.define.elements[d.id] = Utils.copy(d);\n                b.push(Utils.copy(this.getPersistenceById(d.id)));\n                a.push(Utils.copy(d));\n                this.persistence.elements[d.id] = Utils.copy(d)\n            }\n        }\n        this.build();\n        var f = {\n            shapes: b,\n            updates: a\n        };\n        MessageSource.send(\"update\", f)\n    },\n    remove: function (b, k) {\n        if (typeof k == \"undefined\") {\n            k = true\n        }\n        if (k) {\n            b = Designer.events.push(\"beforeRemove\", b)\n        }\n        var h = [];\n        var n = [];\n        var e = [];\n        var o = [];\n        var d = [];\n        if (b.length == 0) {\n            return false\n        }\n        for (var f = 0; f < b.length; f++) {\n            var j = b[f];\n            if (j.name == \"linker\") {\n                d.push(j.id)\n            } else {\n                o.push(j.id)\n            }\n        }\n        for (var f = 0; f < b.length; f++) {\n            var j = b[f];\n            h.push(Utils.copy(j));\n            $(\"#\" + j.id).remove();\n            delete this.define.elements[j.id];\n            delete this.persistence.elements[j.id];\n            this.groupMap.remove(j.group);\n            if (j.name == \"linker\") {\n                if (j.from.id != null) {\n                    this.linkerMap.remove(j.from.id, j.id)\n                }\n                if (j.to.id != null) {\n                    this.linkerMap.remove(j.to.id, j.id)\n                }\n            } else {\n                if (j.parent && o.indexOf(j.parent) < 0) {\n                    var l = Model.getShapeById(j.parent);\n                    if (l) {\n                        Utils.removeFromArray(l.children, j.id);\n                        if (n.indexOf(j.parent) < 0) {\n                            n.push(j.parent);\n                            e.push(l)\n                        }\n                    }\n                }\n                var p = this.getShapeLinkers(j.id);\n                if (p && p.length > 0) {\n                    for (var g = 0; g < p.length; g++) {\n                        var a = p[g];\n                        if (d.indexOf(a) < 0) {\n                            var c = this.getShapeById(a);\n                            if (c.from.id != null && c.from.id == j.id) {\n                                c.from.id = null;\n                                c.from.angle = null\n                            }\n                            if (c.to.id != null && c.to.id == j.id) {\n                                c.to.id = null;\n                                c.to.angle = null\n                            }\n                            if (n.indexOf(a) < 0) {\n                                n.push(a);\n                                e.push(c)\n                            }\n                        }\n                    }\n                }\n                delete this.linkerMap.map[j.id]\n            }\n        }\n        this.build();\n        MessageSource.beginBatch();\n        MessageSource.send(\"remove\", h);\n        if (k) {\n            var m = Designer.events.push(\"removed\", {\n                shapes: b,\n                changedIds: n,\n                range: o\n            });\n            if (m && m.length) {\n                e = e.concat(m)\n            }\n        }\n        if (e.length > 0) {\n            this.updateMulti(e)\n        }\n        MessageSource.commit();\n        return true\n    },\n    updatePage: function (a, c) {\n        var b = $.extend(Model.define.page, a);\n        var d = {\n            page: Utils.copy(Model.persistence.page),\n            update: Utils.copy(b)\n        };\n        Model.persistence.page = Utils.copy(b);\n        MessageSource.send(\"updatePage\", d);\n        Designer.initialize.initCanvas()\n    },\n    setTheme: function (b) {\n        Model.define.theme = b;\n        var c = {\n            theme: Utils.copy(Model.persistence.theme),\n            update: Utils.copy(b)\n        };\n        Model.persistence.theme = Utils.copy(b);\n        MessageSource.send(\"setTheme\", c);\n        for (var d in Model.define.elements) {\n            var a = Model.getShapeById(d);\n            Designer.painter.renderShape(a)\n        }\n    },\n    getShapeById: function (a) {\n        return this.define.elements[a]\n    },\n    getPersistenceById: function (a) {\n        return this.persistence.elements[a]\n    },\n    build: function () {\n        this.orderList = [];\n        this.linkerMap.empty();\n        for (var e in Model.define.elements) {\n            var a = Model.getShapeById(e);\n            this.orderList.push({\n                id: a.id,\n                zindex: a.props.zindex\n            });\n            if (a.name == \"linker\") {\n                if (a.from.id != null) {\n                    this.linkerMap.add(a.from.id, a.id)\n                }\n                if (a.to.id != null) {\n                    this.linkerMap.add(a.to.id, a.id)\n                }\n            }\n            if (a.group) {\n                this.groupMap.push(a.group, a.id)\n            }\n        }\n        this.orderList.sort(function d(g, f) {\n            return g.zindex - f.zindex\n        });\n        for (var c = 0; c < Model.orderList.length; c++) {\n            var e = Model.orderList[c].id;\n            $(\"#\" + e).css(\"z-index\", c)\n        }\n        var b = 0;\n        if (this.orderList.length > 0) {\n            b = this.orderList[this.orderList.length - 1].zindex\n        }\n        this.maxZIndex = b\n    },\n    getShapeLinkers: function (a) {\n        return this.linkerMap.map[a]\n    },\n    getGroupShapes: function (a) {\n        return this.groupMap.map[a]\n    },\n    changeShape: function (b, e) {\n        var c = Utils.copy(Schema.shapes[e]);\n        b.name = e;\n        b.title = c.shapeName;\n        var a = c.attribute;\n        if (b.attribute && typeof b.attribute.collapsed != \"undefined\") {\n            a.collapsed = b.attribute.collapsed\n        }\n        if (b.attribute && typeof b.attribute.collapseW != \"undefined\") {\n            a.collapseW = b.attribute.collapseW\n        }\n        if (b.attribute && typeof b.attribute.collapseH != \"undefined\") {\n            a.collapseH = b.attribute.collapseH\n        }\n        if (b.attribute && b.attribute.markers && b.attribute.markers.indexOf(\"expand\") >= 0) {\n            if (!a.markers) {\n                a.markers = []\n            }\n            a.markers.push(\"expand\")\n        }\n        b.attribute = a;\n        b.dataAttributes = c.dataAttributes;\n        if (b.dataAttributes) {\n            for (var d = 0; d < b.dataAttributes.length; d++) {\n                var a = b.dataAttributes[d];\n                a.id = Utils.newId()\n            }\n        }\n        b.path = c.path;\n        b.textBlock = c.textBlock;\n        b.anchors = c.anchors;\n        if (b.fillStyle && b.fillStyle.type == \"image\" && c.fillStyle && c.fillStyle.type == \"image\") {\n            b.fillStyle = c.fillStyle\n        }\n        Schema.initShapeFunctions(b);\n        Designer.painter.renderShape(b)\n    }\n};\nvar Utils = {\n    getDomById: function (a) {\n        return document.getElementById(a)\n    },\n    newId: function () {\n        var b = Math.random();\n        var a = (b + new Date().getTime());\n        return a.toString(16).replace(\".\", \"\")\n    },\n    getShapeByPosition: function (M, L, G) {\n        var m = [];\n        for (var U = Model.orderList.length - 1; U >= 0; U--) {\n            var P = Model.orderList[U].id;\n            var V = $(\"#\" + P);\n            var s = Model.getShapeById(P);\n            if (s.attribute && s.attribute.collapseBy) {\n                continue\n            }\n            var u = V.position();\n            var F = M - u.left;\n            var E = L - u.top;\n            var Q = {\n                x: u.left,\n                y: u.top,\n                w: V.width(),\n                h: V.height()\n            };\n            var S = V.find(\".shape_canvas\")[0];\n            var k = S.getContext(\"2d\");\n            var c = this.pointInRect(M, L, Q);\n            if (s.name == \"linker\") {\n                if (!c) {\n                    continue\n                }\n                if (G) {\n                    continue\n                }\n                var N = 10;\n                N = N.toScale();\n                var D = {\n                    x: M - N,\n                    y: L - N,\n                    w: N * 2,\n                    h: N * 2\n                };\n                if (this.pointInRect(s.to.x.toScale(), s.to.y.toScale(), D)) {\n                    var t = {\n                        type: \"linker_point\",\n                        point: \"end\",\n                        shape: s\n                    };\n                    m.push(t);\n                    continue\n                } else {\n                    if (this.pointInRect(s.from.x.toScale(), s.from.y.toScale(), D)) {\n                        var t = {\n                            type: \"linker_point\",\n                            point: \"from\",\n                            shape: s\n                        };\n                        m.push(t);\n                        continue\n                    } else {\n                        var v = V.find(\".text_canvas\");\n                        var A = v.position();\n                        var D = {\n                            x: A.left,\n                            y: A.top,\n                            w: v.width(),\n                            h: v.height()\n                        };\n                        if (this.pointInRect(F, E, D)) {\n                            var t = {\n                                type: \"linker_text\",\n                                shape: s\n                            };\n                            m.push(t);\n                            continue\n                        }\n                        N = 7;\n                        N = N.toScale();\n                        var B = this.pointInLinker({\n                            x: M.restoreScale(),\n                            y: L.restoreScale()\n                        }, s, N);\n                        if (B > -1) {\n                            var t = {\n                                type: \"linker\",\n                                shape: s,\n                                pointIndex: B\n                            };\n                            m.push(t);\n                            continue\n                        }\n                    }\n                }\n            } else {\n                if (c && s.locked && !G) {\n                    if (k.isPointInPath(F, E)) {\n                        var t = {\n                            type: \"shape\",\n                            shape: s\n                        };\n                        m.push(t)\n                    }\n                    continue\n                }\n                var N = 7;\n                if (c) {\n                    N = N.toScale();\n                    var D = {\n                        x: M - N,\n                        y: L - N,\n                        w: N * 2,\n                        h: N * 2\n                    };\n                    var I = {\n                        x: s.props.x + s.props.w / 2,\n                        y: s.props.y + s.props.h / 2\n                    };\n                    var q = s.getAnchors();\n                    var t = null;\n                    for (var h = 0; h < q.length; h++) {\n                        var f = q[h];\n                        f = this.getRotated(I, {\n                            x: s.props.x + f.x,\n                            y: s.props.y + f.y\n                        }, s.props.angle);\n                        if (Utils.pointInRect(f.x.toScale(), f.y.toScale(), D)) {\n                            var r = Utils.getPointAngle(P, f.x, f.y, N);\n                            f.angle = r;\n                            t = {\n                                type: \"bounding\",\n                                shape: s,\n                                linkPoint: f\n                            };\n                            if (k.isPointInPath(F, E)) {\n                                t.inPath = true\n                            }\n                            break\n                        }\n                    }\n                    if (t != null) {\n                        m.push(t);\n                        continue\n                    }\n                }\n                if (s.dataAttributes) {\n                    var t = null;\n                    for (var l = 0; l < s.dataAttributes.length; l++) {\n                        var p = s.dataAttributes[l];\n                        if (p.type == \"link\" && p.showType && p.showType != \"none\") {\n                            var C = V.children(\"#attr_canvas_\" + p.id);\n                            if (C.length > 0) {\n                                var w = C.position();\n                                var K = F - w.left;\n                                var J = E - w.top;\n                                var n = C[0].getContext(\"2d\");\n                                if (n.isPointInPath(K, J)) {\n                                    t = {\n                                        type: \"dataAttribute\",\n                                        shape: s,\n                                        attribute: p\n                                    };\n                                    break\n                                }\n                            }\n                        }\n                    }\n                    if (t != null) {\n                        m.push(t);\n                        continue\n                    }\n                }\n                if (!c) {\n                    continue\n                }\n                if (k.isPointInPath(F, E)) {\n                    if (G) {\n                        var q = s.getAnchors();\n                        if (q && q.length) {\n                            var z = false;\n                            for (var T = U + 1; T < Model.orderList.length; T++) {\n                                var a = Model.orderList[T].id;\n                                var R = Model.getShapeById(a);\n                                if (Utils.rectInRect(R.props, s.props)) {\n                                    z = true;\n                                    continue\n                                }\n                            }\n                            if (z) {\n                                continue\n                            }\n                            var t = {\n                                type: \"shape\",\n                                shape: s\n                            };\n                            m.push(t);\n                            continue\n                        } else {\n                            continue\n                        }\n                    } else {\n                        var t = {\n                            type: \"shape\",\n                            shape: s\n                        };\n                        m.push(t);\n                        continue\n                    }\n                } else {\n                    if (!s.attribute || typeof s.attribute.linkable == \"undefined\" || s.attribute.linkable) {\n                        var r = Utils.getPointAngle(P, M.restoreScale(), L.restoreScale(), N);\n                        if (r != null) {\n                            var t = null;\n                            var b = {\n                                angle: r\n                            };\n                            for (var H = 1; H <= N; H++) {\n                                if (r == 0) {\n                                    b.x = F + H;\n                                    b.y = E\n                                } else {\n                                    if (r < Math.PI / 2) {\n                                        b.x = F + H * Math.cos(r);\n                                        b.y = E + H * Math.sin(r)\n                                    } else {\n                                        if (r == Math.PI / 2) {\n                                            b.x = F;\n                                            b.y = E + H\n                                        } else {\n                                            if (r < Math.PI) {\n                                                b.x = F - H * Math.sin(r - Math.PI / 2);\n                                                b.y = E + H * Math.cos(r - Math.PI / 2)\n                                            } else {\n                                                if (r == Math.PI) {\n                                                    b.x = F - H;\n                                                    b.y = E\n                                                } else {\n                                                    if (r < Math.PI / 2 * 3) {\n                                                        b.x = F - H * Math.cos(r - Math.PI);\n                                                        b.y = E - H * Math.sin(r - Math.PI)\n                                                    } else {\n                                                        if (r == Math.PI / 2 * 3) {\n                                                            b.x = F;\n                                                            b.y = E - H\n                                                        } else {\n                                                            b.x = F + H * Math.sin(r - Math.PI / 2 * 3);\n                                                            b.y = E - H * Math.cos(r - Math.PI / 2 * 3)\n                                                        }\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n                                if (k.isPointInPath(b.x, b.y)) {\n                                    b.x += u.left;\n                                    b.y += u.top;\n                                    b.x = b.x.restoreScale();\n                                    b.y = b.y.restoreScale();\n                                    t = {\n                                        type: \"bounding\",\n                                        shape: s,\n                                        linkPoint: b\n                                    };\n                                    break\n                                }\n                            }\n                            if (t != null) {\n                                m.push(t);\n                                continue\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        var t = null;\n        if (m.length == 1) {\n            t = m[0]\n        }\n        if (m.length > 1 && G) {\n            t = m[0]\n        } else {\n            if (m.length > 1) {\n                var g = m[0];\n                if (g.type == \"bounding\" && g.type != \"linker_point\" && g.type != \"linker\") {\n                    return g\n                }\n                var B = [];\n                var d = [];\n                var o = [];\n                for (var U = 0; U < m.length; U++) {\n                    var O = m[U];\n                    if (O.type == \"bounding\") {\n                        o.push(O)\n                    } else {\n                        if (O.type == \"linker\") {\n                            B.push(O)\n                        } else {\n                            if (O.type == \"linker_point\") {\n                                d.push(O)\n                            }\n                        }\n                    }\n                }\n                if (o.length > 0 && d.length > 0) {\n                    for (var U = 0; U < o.length; U++) {\n                        var O = o[U];\n                        if (O.inPath) {\n                            t = O;\n                            break\n                        }\n                    }\n                }\n                if (t == null && d.length > 0) {\n                    d.sort(function e(j, i) {\n                        if (Utils.isSelected(j.shape.id) && !Utils.isSelected(i.shape.id)) {\n                            return -1\n                        } else {\n                            if (!Utils.isSelected(j.shape.id) && Utils.isSelected(i.shape.id)) {\n                                return 1\n                            } else {\n                                return i.shape.props.zindex - j.shape.props.zindex\n                            }\n                        }\n                    });\n                    t = d[0]\n                }\n                if (t == null && B.length > 0) {\n                    B.sort(function e(j, i) {\n                        if (Utils.isSelected(j.shape.id) && !Utils.isSelected(i.shape.id)) {\n                            return -1\n                        } else {\n                            if (!Utils.isSelected(j.shape.id) && Utils.isSelected(i.shape.id)) {\n                                return 1\n                            } else {\n                                return i.shape.props.zindex - j.shape.props.zindex\n                            }\n                        }\n                    });\n                    t = B[0]\n                }\n                if (t == null) {\n                    t = m[0]\n                }\n            }\n        }\n        return t\n    },\n    checkCross: function (i, g, f, e) {\n        var a = false;\n        var h = (g.x - i.x) * (e.y - f.y) - (g.y - i.y) * (e.x - f.x);\n        if (h != 0) {\n            var c = ((i.y - f.y) * (e.x - f.x) - (i.x - f.x) * (e.y - f.y)) / h;\n            var b = ((i.y - f.y) * (g.x - i.x) - (i.x - f.x) * (g.y - i.y)) / h;\n            if ((c >= 0) && (c <= 1) && (b >= 0) && (b <= 1)) {\n                a = true\n            }\n        }\n        return a\n    },\n    rectCross: function (h, g) {\n        var d = h.x;\n        var f = h.x + h.w;\n        var j = h.y;\n        var b = h.y + h.h;\n        var c = g.x;\n        var e = g.x + g.w;\n        var i = g.y;\n        var a = g.y + g.h;\n        if (((d < e) && (c < f)) && ((j < a) && (i < b))) {\n            return true\n        } else {\n            return false\n        }\n    },\n    rectInRect: function (c, a) {\n        var f = {\n            x: c.x,\n            y: c.y\n        };\n        var e = {\n            x: c.x + c.w,\n            y: c.y\n        };\n        var d = {\n            x: c.x + c.w,\n            y: c.y + c.h\n        };\n        var b = {\n            x: c.x,\n            y: c.y + c.h\n        };\n        if (this.pointInRect(f.x, f.y, a) && this.pointInRect(e.x, e.y, a) && this.pointInRect(d.x, d.y, a) && this.pointInRect(b.x, b.y, a)) {\n            return true\n        } else {\n            return false\n        }\n    },\n    pointInPolygon: function (a, c) {\n        var h, g, f, e;\n        h = a;\n        g = {\n            x: -1000000,\n            y: a.y\n        };\n        var d = 0;\n        for (var b = 0; b < c.length - 1; b++) {\n            f = c[b];\n            e = c[b + 1];\n            if (Utils.checkCross(h, g, f, e) == true) {\n                d++\n            }\n        }\n        f = c[c.length - 1];\n        e = c[0];\n        if (Utils.checkCross(h, g, f, e) == true) {\n            d++\n        }\n        return (d % 2 == 0) ? false : true\n    },\n    pointInRect: function (b, a, c) {\n        if (b >= c.x && b <= c.x + c.w && a >= c.y && a <= c.y + c.h) {\n            return true\n        }\n        return false\n    },\n    pointInLinker: function (h, e, f) {\n        var j = this.getLinkerLinePoints(e);\n        var c = {\n            x: h.x - f,\n            y: h.y\n        };\n        var b = {\n            x: h.x + f,\n            y: h.y\n        };\n        var a = {\n            x: h.x,\n            y: h.y - f\n        };\n        var l = {\n            x: h.x,\n            y: h.y + f\n        };\n        for (var d = 1; d < j.length; d++) {\n            var k = j[d - 1];\n            var i = j[d];\n            var g = this.checkCross(c, b, k, i);\n            if (g) {\n                return d\n            }\n            g = this.checkCross(a, l, k, i);\n            if (g) {\n                return d\n            }\n        }\n        return -1\n    },\n    getLinkerLength: function (c) {\n        var b = this.getLinkerLinePoints(c);\n        var a = 0;\n        for (var f = 1; f < b.length; f++) {\n            var h = b[f - 1];\n            var e = b[f];\n            var g = Utils.measureDistance(h, e);\n            a += g\n        }\n        return a\n    },\n    getShapesByRange: function (c) {\n        var a = [];\n        for (var e in Model.define.elements) {\n            var b = Model.getShapeById(e);\n            var d = b.props;\n            if (b.name == \"linker\") {\n                d = this.getLinkerBox(b)\n            } else {\n                d = this.getShapeBox(b)\n            }\n            if (this.pointInRect(d.x, d.y, c) && this.pointInRect(d.x + d.w, d.y, c) && this.pointInRect(d.x + d.w, d.y + d.h, c) && this.pointInRect(d.x, d.y + d.h, c)) {\n                a.push(b.id)\n            }\n        }\n        return a\n    },\n    getControlBox: function (e) {\n        var g = {\n            x1: null,\n            y1: null,\n            x2: null,\n            y2: null\n        };\n        for (var b = 0; b < e.length; b++) {\n            var f = e[b];\n            var a = Model.getShapeById(f);\n            var d;\n            if (a.name == \"linker\") {\n                d = this.getLinkerBox(a)\n            } else {\n                d = this.getShapeBox(a)\n            }\n            if (g.x1 == null || d.x < g.x1) {\n                g.x1 = d.x\n            }\n            if (g.y1 == null || d.y < g.y1) {\n                g.y1 = d.y\n            }\n            if (g.x2 == null || d.x + d.w > g.x2) {\n                g.x2 = d.x + d.w\n            }\n            if (g.y2 == null || d.y + d.h > g.y2) {\n                g.y2 = d.y + d.h\n            }\n        }\n        var c = {\n            x: g.x1,\n            y: g.y1,\n            w: g.x2 - g.x1,\n            h: g.y2 - g.y1\n        };\n        return c\n    },\n    getShapesBounding: function (a) {\n        var f = {\n            x1: null,\n            y1: null,\n            x2: null,\n            y2: null\n        };\n        for (var c = 0; c < a.length; c++) {\n            var b = a[c];\n            var d;\n            if (b.name == \"linker\") {\n                d = this.getLinkerBox(b)\n            } else {\n                d = b.props\n            }\n            if (f.x1 == null || d.x < f.x1) {\n                f.x1 = d.x\n            }\n            if (f.y1 == null || d.y < f.y1) {\n                f.y1 = d.y\n            }\n            if (f.x2 == null || d.x + d.w > f.x2) {\n                f.x2 = d.x + d.w\n            }\n            if (f.y2 == null || d.y + d.h > f.y2) {\n                f.y2 = d.y + d.h\n            }\n        }\n        var e = {\n            x: f.x1,\n            y: f.y1,\n            w: f.x2 - f.x1,\n            h: f.y2 - f.y1\n        };\n        return e\n    },\n    getShapeContext: function (b) {\n        var a = Utils.getDomById(b);\n        return a.getElementsByTagName(\"canvas\")[0].getContext(\"2d\")\n    },\n    selectIds: [],\n    selectShape: function (h, d) {\n        if (typeof h == \"string\") {\n            var m = h;\n            h = [];\n            h.push(m)\n        }\n        if (h.length <= 0) {\n            return\n        }\n        var j = [];\n        for (var f = 0; f < h.length; f++) {\n            var b = h[f];\n            var l = Model.getShapeById(b);\n            if (l.attribute && l.attribute.collapseBy) {\n                continue\n            }\n            j.push(b);\n            if (l.group) {\n                var c = Model.getGroupShapes(l.group);\n                Utils.mergeArray(j, c)\n            }\n        }\n        var a = [];\n        for (var f = 0; f < j.length; f++) {\n            var b = j[f];\n            var l = Model.getShapeById(b);\n            if (l.parent && l.resizeDir.length == 0 && a.indexOf(l.parent) < 0) {\n                a.push(l.parent)\n            } else {\n                if (a.indexOf(b) < 0) {\n                    a.push(b)\n                }\n            }\n        }\n        h = a;\n        Utils.removeAnchors();\n        Utils.selectIds = [];\n        for (var k = 0; k < h.length; k++) {\n            var m = h[k];\n            var l = Model.getShapeById(m);\n            Utils.selectIds.push(m);\n            if (l.name == \"linker\") {\n                if (this.isLocked(l.id)) {\n                    Utils.showLockers(l)\n                } else {\n                    Designer.painter.renderLinker(l)\n                }\n            } else {\n                if (this.isLocked(l.id)) {\n                    Utils.showLockers(l)\n                } else {\n                    Utils.showAnchors(l)\n                }\n            }\n        }\n        var a = Utils.getSelectedIds();\n        var n = false;\n        if (a.length == 1) {\n            var g = Model.getShapeById(a[0]);\n            if (g.name == \"linker\") {\n                n = true;\n                Utils.showLinkerControls()\n            }\n        }\n        if (a.length > 0 && !n) {\n            var e = Designer.painter.drawControls(a)\n        }\n        if (typeof d == \"undefined\") {\n            d = true\n        }\n        if (this.selectCallback && d) {\n            this.selectCallback()\n        }\n        Designer.events.push(\"selectChanged\");\n        this.showLinkerCursor()\n    },\n    selectCallback: null,\n    unselect: function () {\n        var c = this.selectIds;\n        this.selectIds = [];\n        for (var b = 0; b < c.length; b++) {\n            var d = c[b];\n            var a = Model.getShapeById(d);\n            if (a.name == \"linker\") {\n                Designer.painter.renderLinker(a)\n            }\n        }\n        $(\"#shape_controls\").hide();\n        Utils.removeLockers();\n        Utils.removeAnchors();\n        Designer.events.push(\"selectChanged\");\n        this.hideLinkerCursor();\n        this.hideLinkerControls()\n    },\n    getSelected: function () {\n        var a = [];\n        for (var b = 0; b < this.selectIds.length; b++) {\n            var d = this.selectIds[b];\n            if (!Utils.isLocked(d)) {\n                var c = Model.getShapeById(d);\n                a.push(c)\n            }\n        }\n        return a\n    },\n    getSelectedIds: function () {\n        var a = [];\n        for (var b = 0; b < this.selectIds.length; b++) {\n            var c = this.selectIds[b];\n            if (!Utils.isLocked(c)) {\n                a.push(c)\n            }\n        }\n        return a\n    },\n    getSelectedLinkers: function () {\n        var a = [];\n        for (var b = 0; b < this.selectIds.length; b++) {\n            var d = this.selectIds[b];\n            if (!Utils.isLocked(d)) {\n                var c = Model.getShapeById(d);\n                if (c.name == \"linker\") {\n                    a.push(c)\n                }\n            }\n        }\n        return a\n    },\n    getSelectedLinkerIds: function () {\n        var a = [];\n        for (var b = 0; b < this.selectIds.length; b++) {\n            var d = this.selectIds[b];\n            if (!Utils.isLocked(d)) {\n                var c = Model.getShapeById(d);\n                if (c.name == \"linker\") {\n                    a.push(d)\n                }\n            }\n        }\n        return a\n    },\n    getSelectedShapeIds: function () {\n        var a = [];\n        for (var b = 0; b < this.selectIds.length; b++) {\n            var d = this.selectIds[b];\n            if (!Utils.isLocked(d)) {\n                var c = Model.getShapeById(d);\n                if (c.name != \"linker\") {\n                    a.push(d)\n                }\n            }\n        }\n        return a\n    },\n    getSelectedLockedIds: function () {\n        var a = [];\n        for (var b = 0; b < this.selectIds.length; b++) {\n            var c = this.selectIds[b];\n            if (Utils.isLocked(c)) {\n                a.push(c)\n            }\n        }\n        return a\n    },\n    getSelectedGroups: function () {\n        var a = [];\n        for (var c = 0; c < this.selectIds.length; c++) {\n            var d = this.selectIds[c];\n            var b = Model.getShapeById(d);\n            if (b.group && a.indexOf(b.group) < 0) {\n                a.push(b.group)\n            }\n        }\n        return a\n    },\n    isSelected: function (a) {\n        if (this.selectIds.indexOf(a) >= 0 && !this.isLocked(a)) {\n            return true\n        }\n        return false\n    },\n    isLocked: function (a) {\n        // console.log(\"Model.getShapeById(a)\", Model.getShapeById(a));\n        if (!Model.getShapeById(a)) return false\n        if (Model.getShapeById(a).locked) {\n            return true\n        } else {\n            return false\n        }\n    },\n    linkerCursorTimer: null,\n    showLinkerCursor: function () {\n        this.hideLinkerCursor();\n        var l = Utils.getSelectedIds();\n        if (l.length == 1) {\n            var c = Model.getShapeById(l[0]);\n            if (c.name != \"linker\") {\n                var f = Model.linkerMap.map[c.id];\n                if (f && f.length) {\n                    var m = [];\n                    for (var o = 0; o < f.length; o++) {\n                        var v = f[o];\n                        var j = Model.getShapeById(v);\n                        if (c.id != j.from.id || !j.to.id) {\n                            continue\n                        }\n                        var q = this.getLinkerLength(j).toScale();\n                        var n = [];\n                        if (j.linkerType == \"broken\") {\n                            n.push({\n                                x: j.from.x.toScale(),\n                                y: j.from.y.toScale(),\n                                t: 0\n                            });\n                            for (var t = 0; t < j.points.length; t++) {\n                                var k = j.points[t];\n                                n.push({\n                                    x: k.x.toScale(),\n                                    y: k.y.toScale()\n                                })\n                            }\n                            n.push({\n                                x: j.to.x.toScale(),\n                                y: j.to.y.toScale()\n                            });\n                            var s = 0;\n                            for (var t = 1; t < n.length; t++) {\n                                var b = n[t - 1];\n                                var a = n[t];\n                                s += Utils.measureDistance(b, a);\n                                a.t = s / q\n                            }\n                        }\n                        var h = Math.floor(q / 120) + 1;\n                        var e = 3 / q;\n                        var u = (Math.ceil(q / 120) * 120) / q;\n                        var r = 0;\n                        while (r < q) {\n                            var g = {\n                                t: r / q,\n                                step: e,\n                                linker: j,\n                                points: n,\n                                maxT: u\n                            };\n                            m.push(g);\n                            r += 120\n                        }\n                    }\n                    // this.playLinkerCursor(m)//选择节点组件，其下面的直接连线会有动态效果\n                }\n            }\n        }\n    },\n    playLinkerCursor: function (f) {\n        for (var c = 0; c < f.length; c++) {\n            var h = f[c];\n            var g = $(\"<div class='linker_cursor'></div>\").appendTo(\"#designer_canvas\");\n            var e = h.linker;\n            var a = Utils.getLinkerLineStyle(e.lineStyle);\n            var b = (a.lineWidth + 2).toScale();\n            if (b < 5) {\n                b = 5\n            }\n            var d = b / 2;\n            h.half = d;\n            h.dom = g;\n            g.css({\n                width: b,\n                height: b,\n                \"-webkit-border-radius\": d,\n                \"-moz-border-radius\": d,\n                \"-ms-border-radius\": d,\n                \"-o-border-radius\": d,\n                \"border-radius\": d,\n                \"z-index\": $(\"#\" + e.id).css(\"z-index\")\n            })\n        }\n        this.linkerCursorTimer = setInterval(function () {\n            for (var j = 0; j < f.length; j++) {\n                var q = f[j];\n                var l = q.linker;\n                if (q.t >= q.maxT) {\n                    q.t = 0;\n                    q.dom.show()\n                }\n                var u = q.t;\n                if (l.linkerType == \"broken\") {\n                    for (var k = 1; k < q.points.length; k++) {\n                        var r = q.points[k - 1];\n                        var p = q.points[k];\n                        if (u >= r.t && u < p.t) {\n                            var v = (u - r.t) / (p.t - r.t);\n                            var n = (1 - v) * r.x + v * p.x;\n                            var m = (1 - v) * r.y + v * p.y;\n                            q.dom.css({\n                                left: n - q.half,\n                                top: m - q.half\n                            });\n                            break\n                        }\n                    }\n                } else {\n                    if (l.linkerType == \"curve\") {\n                        var s = l.from;\n                        var r = l.points[0];\n                        var p = l.points[1];\n                        var o = l.to;\n                        var n = s.x.toScale() * Math.pow((1 - u), 3) + r.x.toScale() * u * Math.pow((1 - u), 2) * 3 + p.x.toScale() * Math.pow(u, 2) * (1 - u) * 3 + o.x.toScale() * Math.pow(u, 3);\n                        var m = s.y.toScale() * Math.pow((1 - u), 3) + r.y.toScale() * u * Math.pow((1 - u), 2) * 3 + p.y.toScale() * Math.pow(u, 2) * (1 - u) * 3 + o.y.toScale() * Math.pow(u, 3);\n                        q.dom.css({\n                            left: n - q.half,\n                            top: m - q.half\n                        })\n                    } else {\n                        var n = (1 - u) * l.from.x.toScale() + u * l.to.x.toScale();\n                        var m = (1 - u) * l.from.y.toScale() + u * l.to.y.toScale();\n                        q.dom.css({\n                            left: n - q.half,\n                            top: m - q.half\n                        })\n                    }\n                }\n                q.t += q.step;\n                if (q.t >= 1) {\n                    q.dom.hide()\n                }\n            }\n        }, 30)\n    },\n    hideLinkerCursor: function () {\n        if (this.linkerCursorTimer) {\n            clearInterval(this.linkerCursorTimer)\n        }\n        $(\".linker_cursor\").remove()\n    },\n    showLinkerControls: function () {\n        this.hideLinkerControls();\n        var b = Utils.getSelectedIds();\n        var c = null;\n        if (b.length == 1) {\n            var a = Model.getShapeById(b[0]);\n            if (a.name == \"linker\" && a.linkerType == \"curve\") {\n                c = a\n            }\n        }\n        if (c == null) {\n            return\n        }\n\n        function d(i, h) {\n            var g = null;\n            var n = null;\n            if (h == \"from\") {\n                g = i.from;\n                n = i.points[0]\n            } else {\n                g = i.to;\n                n = i.points[1]\n            }\n            var j = Utils.measureDistance(g, n).toScale() - 6;\n            var m = {\n                x: (0.5 * g.x + 0.5 * n.x).toScale(),\n                y: (0.5 * g.y + 0.5 * n.y).toScale()\n            };\n            var f = Utils.getAngle(g, n) + Math.PI / 2;\n            var o = $(\"<div class='linker_control_line'></div>\").appendTo(\"#designer_canvas\");\n            var l = $(\"<div class='linker_control_point'></div>\").appendTo(\"#designer_canvas\");\n            var e = Math.round(f / (Math.PI * 2) * 360);\n            var k = \"rotate(\" + e + \"deg)\";\n            o.css({\n                left: m.x,\n                top: m.y - j / 2,\n                height: j,\n                \"z-index\": Model.orderList.length,\n                \"-webkit-transform\": k,\n                \"-ms-transform\": k,\n                \"-o-transform\": k,\n                \"-moz-transform\": k,\n                transform: k\n            });\n            l.css({\n                left: n.x.toScale() - 4,\n                top: n.y.toScale() - 4,\n                \"z-index\": Model.orderList.length\n            });\n            l.attr(\"ty\", h);\n            l.unbind().bind(\"mousedown\", function (p) {\n                i = Model.getShapeById(i.id);\n                var q = null;\n                if (h == \"from\") {\n                    q = i.points[0]\n                } else {\n                    q = i.points[1]\n                }\n                p.stopPropagation();\n                l.addClass(\"moving\");\n                Designer.op.changeState(\"changing_curve\");\n                $(document).bind(\"mousemove.change_curve\", function (r) {\n                    var s = Utils.getRelativePos(r.pageX, r.pageY, $(\"#designer_canvas\"));\n                    q.x = s.x;\n                    q.y = s.y;\n                    Designer.painter.renderLinker(i);\n                    Model.define.elements[i.id] = i;\n                    Utils.showLinkerControls();\n                    $(\".linker_control_point[ty=\" + l.attr(\"ty\") + \"]\").addClass(\"moving\");\n                    $(document).unbind(\"mouseup.changed_curve\").bind(\"mouseup.changed_curve\", function (t) {\n                        Model.update(i);\n                        $(document).unbind(\"mouseup.changed_curve\")\n                    })\n                });\n                $(document).unbind(\"mouseup.change_curve\").bind(\"mouseup.change_curve\", function (r) {\n                    $(document).unbind(\"mouseup.change_curve\");\n                    $(document).unbind(\"mousemove.change_curve\");\n                    $(\".linker_control_point\").removeClass(\"moving\");\n                    Designer.op.resetState()\n                })\n            });\n            Utils.hideLinkerControls();\n            return l\n        }\n        d(c, \"from\");\n        d(c, \"to\")\n    },\n    hideLinkerControls: function () {\n        $(\".linker_control_line\").remove();\n        $(\".linker_control_point\").remove()\n    },\n    showAnchors: function (i) {\n        if ($(\".shape_contour[forshape=\" + i.id + \"]\").length > 0) {\n            return\n        }\n        var f = $(\"<div class='shape_contour' forshape='\" + i.id + \"'></div>\").appendTo($(\"#designer_canvas\"));\n        f.css({\n            left: i.props.x.toScale(),\n            top: i.props.y.toScale(),\n            \"z-index\": Model.orderList.length + 1\n        });\n        if (!Utils.isSelected(i.id)) {\n            f.addClass(\"hovered_contour\")\n        }\n        var c = Designer.config.anchorSize - 2;\n        var b = {\n            \"border-color\": Designer.config.anchorColor,\n            \"border-radius\": Designer.config.anchorSize / 2,\n            width: c,\n            height: c\n        };\n        var a = i.getAnchors();\n        var h = {\n            x: i.props.w / 2,\n            y: i.props.h / 2\n        };\n        var e = i.props.angle;\n        for (var j = 0; j < a.length; j++) {\n            var g = a[j];\n            var k = $(\"<div class='shape_anchor'></div>\").appendTo(f);\n            var d = this.getRotated(h, g, e);\n            b.left = d.x.toScale() - Designer.config.anchorSize / 2;\n            b.top = d.y.toScale() - Designer.config.anchorSize / 2;\n            k.css(b)\n        }\n    },\n    hideAnchors: function () {\n        $(\".hovered_contour\").remove()\n    },\n    removeAnchors: function () {\n        $(\".shape_contour\").remove()\n    },\n    showLockers: function (d) {\n        var j = $(\"#\" + d.id);\n        var f = j.position();\n\n        function c() {\n            var n = $(\"<canvas class='shape_locker' width='10px' height='10px'></canvas>\").appendTo(j);\n            var m = n[0].getContext(\"2d\");\n            m.strokeStyle = \"#777\";\n            m.lineWidth = 1;\n            var l = 9;\n            m.beginPath();\n            m.moveTo(2, 2);\n            m.lineTo(l, l);\n            m.moveTo(2, l);\n            m.lineTo(l, 2);\n            m.stroke();\n            return n\n        }\n\n        function e(l) {\n            var m = c();\n            m.css({\n                left: l.x.toScale() - f.left - 5,\n                top: l.y.toScale() - f.top - 5\n            })\n        }\n        if (d.name != \"linker\") {\n            var b = d.props;\n            var a = {\n                x: b.x + b.w / 2,\n                y: b.y + b.h / 2\n            };\n            var k = this.getRotated(a, {\n                x: b.x,\n                y: b.y\n            }, d.props.angle);\n            e(k);\n            var i = this.getRotated(a, {\n                x: b.x + b.w,\n                y: b.y\n            }, d.props.angle);\n            e(i);\n            var h = this.getRotated(a, {\n                x: b.x + b.w,\n                y: b.y + b.h\n            }, d.props.angle);\n            e(h);\n            var g = this.getRotated(a, {\n                x: b.x,\n                y: b.y + b.h\n            }, d.props.angle);\n            e(g)\n        } else {\n            e(d.from);\n            e(d.to)\n        }\n    },\n    removeLockers: function () {\n        $(\".shape_locker\").remove()\n    },\n    measureDistance: function (d, c) {\n        var b = c.y - d.y;\n        var a = c.x - d.x;\n        return Math.sqrt(Math.pow(b, 2) + Math.pow(a, 2))\n    },\n    removeFromArray: function (c, b) {\n        var a = c.indexOf(b);\n        if (a >= 0) {\n            c.splice(a, 1)\n        }\n        return c\n    },\n    addToArray: function (c, b) {\n        var a = c.indexOf(b);\n        if (a < 0) {\n            c.push(b)\n        }\n        return c\n    },\n    mergeArray: function (b, a) {\n        for (var c = 0; c < a.length; c++) {\n            var d = a[c];\n            if (b.indexOf(d) < 0) {\n                b.push(d)\n            }\n        }\n        return b\n    },\n    getCirclePoints: function (a, h, e) {\n        var g = Math.PI / 18;\n        var d = [];\n        for (var c = 0; c < 36; c++) {\n            var b = g * c;\n            var f = {\n                x: a - Math.cos(b) * e,\n                y: h - Math.sin(b) * e,\n                angle: b\n            };\n            d.push(f)\n        }\n        return d\n    },\n    getPointAngle: function (n, q, o, a) {\n        var j = $(\"#\" + n).position();\n        var h = Utils.getShapeContext(n);\n        q = q.toScale() - j.left;\n        o = o.toScale() - j.top;\n        var b = this.getCirclePoints(q, o, a);\n        var m = b.length;\n        var t = false;\n        for (var k = 0; k < m; k++) {\n            var c = b[k];\n            if (h.isPointInPath(c.x, c.y)) {\n                c.inPath = true;\n                t = true\n            } else {\n                c.inPath = false\n            }\n        }\n        if (t == false) {\n            return null\n        }\n        var d = null;\n        var g = null;\n        for (var k = 0; k < m; k++) {\n            var c = b[k];\n            if (!c.inPath) {\n                if (d == null) {\n                    var f = b[(k - 1 + m) % m];\n                    if (f.inPath) {\n                        d = c.angle\n                    }\n                }\n                if (g == null) {\n                    var l = b[(k + 1 + m) % m];\n                    if (l.inPath) {\n                        g = c.angle\n                    }\n                }\n                if (d != null && g != null) {\n                    break\n                }\n            }\n        }\n        var s = (Math.PI * 2 + g - d) % (Math.PI * 2) / 2;\n        var e = (d + s) % (Math.PI * 2);\n        return e\n    },\n    getAngleDir: function (b) {\n        var a = Math.PI;\n        if (b >= a / 4 && b < a / 4 * 3) {\n            return 1\n        } else {\n            if (b >= a / 4 * 3 && b < a / 4 * 5) {\n                return 2\n            } else {\n                if (b >= a / 4 * 5 && b < a / 4 * 7) {\n                    return 3\n                } else {\n                    return 4\n                }\n            }\n        }\n    },\n    getLinkerPoints: function (t) {\n        var A = [];\n        if (t.linkerType == \"broken\") {\n            var C = Math.PI;\n            var w = t.from;\n            var d = t.to;\n            var m = Math.abs(d.x - w.x);\n            var D = Math.abs(d.y - w.y);\n            var r = 30;\n            if (w.id != null && d.id != null) {\n                var c = this.getAngleDir(w.angle);\n                var b = this.getAngleDir(d.angle);\n                var g, i, l;\n                if (c == 1 && b == 1) {\n                    if (w.y < d.y) {\n                        g = w;\n                        i = d;\n                        l = false\n                    } else {\n                        g = d;\n                        i = w;\n                        l = true\n                    }\n                    var h = Model.getShapeById(g.id).props;\n                    var v = Model.getShapeById(i.id).props;\n                    if (i.x >= h.x - r && i.x <= h.x + h.w + r) {\n                        var o;\n                        if (i.x < h.x + h.w / 2) {\n                            o = h.x - r\n                        } else {\n                            o = h.x + h.w + r\n                        }\n                        var n = g.y - r;\n                        A.push({\n                            x: g.x,\n                            y: n\n                        });\n                        A.push({\n                            x: o,\n                            y: n\n                        });\n                        n = i.y - r;\n                        A.push({\n                            x: o,\n                            y: n\n                        });\n                        A.push({\n                            x: i.x,\n                            y: n\n                        })\n                    } else {\n                        var n = g.y - r;\n                        A.push({\n                            x: g.x,\n                            y: n\n                        });\n                        A.push({\n                            x: i.x,\n                            y: n\n                        })\n                    }\n                } else {\n                    if (c == 3 && b == 3) {\n                        if (w.y > d.y) {\n                            g = w;\n                            i = d;\n                            l = false\n                        } else {\n                            g = d;\n                            i = w;\n                            l = true\n                        }\n                        var h = Model.getShapeById(g.id).props;\n                        var v = Model.getShapeById(i.id).props;\n                        if (i.x >= h.x - r && i.x <= h.x + h.w + r) {\n                            var n = g.y + r;\n                            var o;\n                            if (i.x < h.x + h.w / 2) {\n                                o = h.x - r\n                            } else {\n                                o = h.x + h.w + r\n                            }\n                            A.push({\n                                x: g.x,\n                                y: n\n                            });\n                            A.push({\n                                x: o,\n                                y: n\n                            });\n                            n = i.y + r;\n                            A.push({\n                                x: o,\n                                y: n\n                            });\n                            A.push({\n                                x: i.x,\n                                y: n\n                            })\n                        } else {\n                            var n = g.y + r;\n                            A.push({\n                                x: g.x,\n                                y: n\n                            });\n                            A.push({\n                                x: i.x,\n                                y: n\n                            })\n                        }\n                    } else {\n                        if (c == 2 && b == 2) {\n                            if (w.x > d.x) {\n                                g = w;\n                                i = d;\n                                l = false\n                            } else {\n                                g = d;\n                                i = w;\n                                l = true\n                            }\n                            var h = Model.getShapeById(g.id).props;\n                            var v = Model.getShapeById(i.id).props;\n                            if (i.y >= h.y - r && i.y <= h.y + h.h + r) {\n                                var o = g.x + r;\n                                var n;\n                                if (i.y < h.y + h.h / 2) {\n                                    n = h.y - r\n                                } else {\n                                    n = h.y + h.h + r\n                                }\n                                A.push({\n                                    x: o,\n                                    y: g.y\n                                });\n                                A.push({\n                                    x: o,\n                                    y: n\n                                });\n                                o = i.x + r;\n                                A.push({\n                                    x: o,\n                                    y: n\n                                });\n                                A.push({\n                                    x: o,\n                                    y: i.y\n                                })\n                            } else {\n                                var o = g.x + r;\n                                A.push({\n                                    x: o,\n                                    y: g.y\n                                });\n                                A.push({\n                                    x: o,\n                                    y: i.y\n                                })\n                            }\n                        } else {\n                            if (c == 4 && b == 4) {\n                                if (w.x < d.x) {\n                                    g = w;\n                                    i = d;\n                                    l = false\n                                } else {\n                                    g = d;\n                                    i = w;\n                                    l = true\n                                }\n                                var h = Model.getShapeById(g.id).props;\n                                var v = Model.getShapeById(i.id).props;\n                                if (i.y >= h.y - r && i.y <= h.y + h.h + r) {\n                                    var o = g.x - r;\n                                    var n;\n                                    if (i.y < h.y + h.h / 2) {\n                                        n = h.y - r\n                                    } else {\n                                        n = h.y + h.h + r\n                                    }\n                                    A.push({\n                                        x: o,\n                                        y: g.y\n                                    });\n                                    A.push({\n                                        x: o,\n                                        y: n\n                                    });\n                                    o = i.x - r;\n                                    A.push({\n                                        x: o,\n                                        y: n\n                                    });\n                                    A.push({\n                                        x: o,\n                                        y: i.y\n                                    })\n                                } else {\n                                    var o = g.x - r;\n                                    A.push({\n                                        x: o,\n                                        y: g.y\n                                    });\n                                    A.push({\n                                        x: o,\n                                        y: i.y\n                                    })\n                                }\n                            } else {\n                                if ((c == 1 && b == 3) || (c == 3 && b == 1)) {\n                                    if (c == 1) {\n                                        g = w;\n                                        i = d;\n                                        l = false\n                                    } else {\n                                        g = d;\n                                        i = w;\n                                        l = true\n                                    }\n                                    var h = Model.getShapeById(g.id).props;\n                                    var v = Model.getShapeById(i.id).props;\n                                    if (i.y <= g.y) {\n                                        var n = g.y - D / 2;\n                                        A.push({\n                                            x: g.x,\n                                            y: n\n                                        });\n                                        A.push({\n                                            x: i.x,\n                                            y: n\n                                        })\n                                    } else {\n                                        var a = h.x + h.w;\n                                        var j = v.x + v.w;\n                                        var n = g.y - r;\n                                        var o;\n                                        if (j >= h.x && v.x <= a) {\n                                            var z = h.x + h.w / 2;\n                                            if (i.x < z) {\n                                                o = h.x < v.x ? h.x - r : v.x - r\n                                            } else {\n                                                o = a > j ? a + r : j + r\n                                            }\n                                            if (v.y < g.y) {\n                                                n = v.y - r\n                                            }\n                                        } else {\n                                            if (i.x < g.x) {\n                                                o = j + (h.x - j) / 2\n                                            } else {\n                                                o = a + (v.x - a) / 2\n                                            }\n                                        }\n                                        A.push({\n                                            x: g.x,\n                                            y: n\n                                        });\n                                        A.push({\n                                            x: o,\n                                            y: n\n                                        });\n                                        n = i.y + r;\n                                        A.push({\n                                            x: o,\n                                            y: n\n                                        });\n                                        A.push({\n                                            x: i.x,\n                                            y: n\n                                        })\n                                    }\n                                } else {\n                                    if ((c == 2 && b == 4) || (c == 4 && b == 2)) {\n                                        if (c == 2) {\n                                            g = w;\n                                            i = d;\n                                            l = false\n                                        } else {\n                                            g = d;\n                                            i = w;\n                                            l = true\n                                        }\n                                        var h = Model.getShapeById(g.id).props;\n                                        var v = Model.getShapeById(i.id).props;\n                                        if (i.x > g.x) {\n                                            var o = g.x + m / 2;\n                                            A.push({\n                                                x: o,\n                                                y: g.y\n                                            });\n                                            A.push({\n                                                x: o,\n                                                y: i.y\n                                            })\n                                        } else {\n                                            var u = h.y + h.h;\n                                            var p = v.y + v.h;\n                                            var o = g.x + r;\n                                            var n;\n                                            if (p >= h.y && v.y <= u) {\n                                                var z = h.y + h.h / 2;\n                                                if (i.y < z) {\n                                                    n = h.y < v.y ? h.y - r : v.y - r\n                                                } else {\n                                                    n = u > p ? u + r : p + r\n                                                }\n                                                if (v.x + v.w > g.x) {\n                                                    o = v.x + v.w + r\n                                                }\n                                            } else {\n                                                if (i.y < g.y) {\n                                                    n = p + (h.y - p) / 2\n                                                } else {\n                                                    n = u + (v.y - u) / 2\n                                                }\n                                            }\n                                            A.push({\n                                                x: o,\n                                                y: g.y\n                                            });\n                                            A.push({\n                                                x: o,\n                                                y: n\n                                            });\n                                            o = i.x - r;\n                                            A.push({\n                                                x: o,\n                                                y: n\n                                            });\n                                            A.push({\n                                                x: o,\n                                                y: i.y\n                                            })\n                                        }\n                                    } else {\n                                        if ((c == 1 && b == 2) || (c == 2 && b == 1)) {\n                                            if (c == 2) {\n                                                g = w;\n                                                i = d;\n                                                l = false\n                                            } else {\n                                                g = d;\n                                                i = w;\n                                                l = true\n                                            }\n                                            var h = Model.getShapeById(g.id).props;\n                                            var v = Model.getShapeById(i.id).props;\n                                            if (i.x > g.x && i.y > g.y) {\n                                                A.push({\n                                                    x: i.x,\n                                                    y: g.y\n                                                })\n                                            } else {\n                                                if (i.x > g.x && v.x > g.x) {\n                                                    var o;\n                                                    if (v.x - g.x < r * 2) {\n                                                        o = g.x + (v.x - g.x) / 2\n                                                    } else {\n                                                        o = g.x + r\n                                                    }\n                                                    var n = i.y - r;\n                                                    A.push({\n                                                        x: o,\n                                                        y: g.y\n                                                    });\n                                                    A.push({\n                                                        x: o,\n                                                        y: n\n                                                    });\n                                                    A.push({\n                                                        x: i.x,\n                                                        y: n\n                                                    })\n                                                } else {\n                                                    if (i.x <= g.x && i.y > h.y + h.h) {\n                                                        var u = h.y + h.h;\n                                                        var o = g.x + r;\n                                                        var n;\n                                                        if (i.y - u < r * 2) {\n                                                            n = u + (i.y - u) / 2\n                                                        } else {\n                                                            n = i.y - r\n                                                        }\n                                                        A.push({\n                                                            x: o,\n                                                            y: g.y\n                                                        });\n                                                        A.push({\n                                                            x: o,\n                                                            y: n\n                                                        });\n                                                        A.push({\n                                                            x: i.x,\n                                                            y: n\n                                                        })\n                                                    } else {\n                                                        var o;\n                                                        var j = v.x + v.w;\n                                                        if (j > g.x) {\n                                                            o = j + r\n                                                        } else {\n                                                            o = g.x + r\n                                                        }\n                                                        var n;\n                                                        if (i.y < h.y) {\n                                                            n = i.y - r\n                                                        } else {\n                                                            n = h.y - r\n                                                        }\n                                                        A.push({\n                                                            x: o,\n                                                            y: g.y\n                                                        });\n                                                        A.push({\n                                                            x: o,\n                                                            y: n\n                                                        });\n                                                        A.push({\n                                                            x: i.x,\n                                                            y: n\n                                                        })\n                                                    }\n                                                }\n                                            }\n                                        } else {\n                                            if ((c == 1 && b == 4) || (c == 4 && b == 1)) {\n                                                if (c == 4) {\n                                                    g = w;\n                                                    i = d;\n                                                    l = false\n                                                } else {\n                                                    g = d;\n                                                    i = w;\n                                                    l = true\n                                                }\n                                                var h = Model.getShapeById(g.id).props;\n                                                var v = Model.getShapeById(i.id).props;\n                                                var j = v.x + v.w;\n                                                if (i.x < g.x && i.y > g.y) {\n                                                    A.push({\n                                                        x: i.x,\n                                                        y: g.y\n                                                    })\n                                                } else {\n                                                    if (i.x < g.x && j < g.x) {\n                                                        var o;\n                                                        if (g.x - j < r * 2) {\n                                                            o = j + (g.x - j) / 2\n                                                        } else {\n                                                            o = g.x - r\n                                                        }\n                                                        var n = i.y - r;\n                                                        A.push({\n                                                            x: o,\n                                                            y: g.y\n                                                        });\n                                                        A.push({\n                                                            x: o,\n                                                            y: n\n                                                        });\n                                                        A.push({\n                                                            x: i.x,\n                                                            y: n\n                                                        })\n                                                    } else {\n                                                        if (i.x >= g.x && i.y > h.y + h.h) {\n                                                            var u = h.y + h.h;\n                                                            var o = g.x - r;\n                                                            var n;\n                                                            if (i.y - u < r * 2) {\n                                                                n = u + (i.y - u) / 2\n                                                            } else {\n                                                                n = i.y - r\n                                                            }\n                                                            A.push({\n                                                                x: o,\n                                                                y: g.y\n                                                            });\n                                                            A.push({\n                                                                x: o,\n                                                                y: n\n                                                            });\n                                                            A.push({\n                                                                x: i.x,\n                                                                y: n\n                                                            })\n                                                        } else {\n                                                            var o;\n                                                            if (v.x < g.x) {\n                                                                o = v.x - r\n                                                            } else {\n                                                                o = g.x - r\n                                                            }\n                                                            var n;\n                                                            if (i.y < h.y) {\n                                                                n = i.y - r\n                                                            } else {\n                                                                n = h.y - r\n                                                            }\n                                                            A.push({\n                                                                x: o,\n                                                                y: g.y\n                                                            });\n                                                            A.push({\n                                                                x: o,\n                                                                y: n\n                                                            });\n                                                            A.push({\n                                                                x: i.x,\n                                                                y: n\n                                                            })\n                                                        }\n                                                    }\n                                                }\n                                            } else {\n                                                if ((c == 2 && b == 3) || (c == 3 && b == 2)) {\n                                                    if (c == 2) {\n                                                        g = w;\n                                                        i = d;\n                                                        l = false\n                                                    } else {\n                                                        g = d;\n                                                        i = w;\n                                                        l = true\n                                                    }\n                                                    var h = Model.getShapeById(g.id).props;\n                                                    var v = Model.getShapeById(i.id).props;\n                                                    if (i.x > g.x && i.y < g.y) {\n                                                        A.push({\n                                                            x: i.x,\n                                                            y: g.y\n                                                        })\n                                                    } else {\n                                                        if (i.x > g.x && v.x > g.x) {\n                                                            var o;\n                                                            if (v.x - g.x < r * 2) {\n                                                                o = g.x + (v.x - g.x) / 2\n                                                            } else {\n                                                                o = g.x + r\n                                                            }\n                                                            var n = i.y + r;\n                                                            A.push({\n                                                                x: o,\n                                                                y: g.y\n                                                            });\n                                                            A.push({\n                                                                x: o,\n                                                                y: n\n                                                            });\n                                                            A.push({\n                                                                x: i.x,\n                                                                y: n\n                                                            })\n                                                        } else {\n                                                            if (i.x <= g.x && i.y < h.y) {\n                                                                var o = g.x + r;\n                                                                var n;\n                                                                if (h.y - i.y < r * 2) {\n                                                                    n = i.y + (h.y - i.y) / 2\n                                                                } else {\n                                                                    n = i.y + r\n                                                                }\n                                                                A.push({\n                                                                    x: o,\n                                                                    y: g.y\n                                                                });\n                                                                A.push({\n                                                                    x: o,\n                                                                    y: n\n                                                                });\n                                                                A.push({\n                                                                    x: i.x,\n                                                                    y: n\n                                                                })\n                                                            } else {\n                                                                var o;\n                                                                var j = v.x + v.w;\n                                                                if (j > g.x) {\n                                                                    o = j + r\n                                                                } else {\n                                                                    o = g.x + r\n                                                                }\n                                                                var n;\n                                                                if (i.y > h.y + h.h) {\n                                                                    n = i.y + r\n                                                                } else {\n                                                                    n = h.y + h.h + r\n                                                                }\n                                                                A.push({\n                                                                    x: o,\n                                                                    y: g.y\n                                                                });\n                                                                A.push({\n                                                                    x: o,\n                                                                    y: n\n                                                                });\n                                                                A.push({\n                                                                    x: i.x,\n                                                                    y: n\n                                                                })\n                                                            }\n                                                        }\n                                                    }\n                                                } else {\n                                                    if ((c == 3 && b == 4) || (c == 4 && b == 3)) {\n                                                        if (c == 4) {\n                                                            g = w;\n                                                            i = d;\n                                                            l = false\n                                                        } else {\n                                                            g = d;\n                                                            i = w;\n                                                            l = true\n                                                        }\n                                                        var h = Model.getShapeById(g.id).props;\n                                                        var v = Model.getShapeById(i.id).props;\n                                                        var j = v.x + v.w;\n                                                        if (i.x < g.x && i.y < g.y) {\n                                                            A.push({\n                                                                x: i.x,\n                                                                y: g.y\n                                                            })\n                                                        } else {\n                                                            if (i.x < g.x && j < g.x) {\n                                                                var o;\n                                                                if (g.x - j < r * 2) {\n                                                                    o = j + (g.x - j) / 2\n                                                                } else {\n                                                                    o = g.x - r\n                                                                }\n                                                                var n = i.y + r;\n                                                                A.push({\n                                                                    x: o,\n                                                                    y: g.y\n                                                                });\n                                                                A.push({\n                                                                    x: o,\n                                                                    y: n\n                                                                });\n                                                                A.push({\n                                                                    x: i.x,\n                                                                    y: n\n                                                                })\n                                                            } else {\n                                                                if (i.x >= g.x && i.y < h.y) {\n                                                                    var o = g.x - r;\n                                                                    var n;\n                                                                    if (h.y - i.y < r * 2) {\n                                                                        n = i.y + (h.y - i.y) / 2\n                                                                    } else {\n                                                                        n = i.y + r\n                                                                    }\n                                                                    A.push({\n                                                                        x: o,\n                                                                        y: g.y\n                                                                    });\n                                                                    A.push({\n                                                                        x: o,\n                                                                        y: n\n                                                                    });\n                                                                    A.push({\n                                                                        x: i.x,\n                                                                        y: n\n                                                                    })\n                                                                } else {\n                                                                    var o;\n                                                                    if (v.x < g.x) {\n                                                                        o = v.x - r\n                                                                    } else {\n                                                                        o = g.x - r\n                                                                    }\n                                                                    var n;\n                                                                    if (i.y > h.y + h.h) {\n                                                                        n = i.y + r\n                                                                    } else {\n                                                                        n = h.y + h.h + r\n                                                                    }\n                                                                    A.push({\n                                                                        x: o,\n                                                                        y: g.y\n                                                                    });\n                                                                    A.push({\n                                                                        x: o,\n                                                                        y: n\n                                                                    });\n                                                                    A.push({\n                                                                        x: i.x,\n                                                                        y: n\n                                                                    })\n                                                                }\n                                                            }\n                                                        }\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                if (l) {\n                    A.reverse()\n                }\n            } else {\n                if (w.id != null || d.id != null) {\n                    var g, i, l, B;\n                    if (w.id != null) {\n                        g = w;\n                        i = d;\n                        l = false;\n                        B = w.angle\n                    } else {\n                        g = d;\n                        i = w;\n                        l = true;\n                        B = d.angle\n                    }\n                    var e = Model.getShapeById(g.id).props;\n                    if (B >= C / 4 && B < C / 4 * 3) {\n                        if (i.y < g.y) {\n                            if (m >= D) {\n                                A.push({\n                                    x: g.x,\n                                    y: i.y\n                                })\n                            } else {\n                                var z = D / 2;\n                                A.push({\n                                    x: g.x,\n                                    y: g.y - z\n                                });\n                                A.push({\n                                    x: i.x,\n                                    y: g.y - z\n                                })\n                            }\n                        } else {\n                            A.push({\n                                x: g.x,\n                                y: g.y - r\n                            });\n                            if (m >= D) {\n                                if (i.x >= e.x - r && i.x <= e.x + e.w + r) {\n                                    var q = e.x + e.w / 2;\n                                    if (i.x < q) {\n                                        A.push({\n                                            x: e.x - r,\n                                            y: g.y - r\n                                        });\n                                        A.push({\n                                            x: e.x - r,\n                                            y: i.y\n                                        })\n                                    } else {\n                                        A.push({\n                                            x: e.x + e.w + r,\n                                            y: g.y - r\n                                        });\n                                        A.push({\n                                            x: e.x + e.w + r,\n                                            y: i.y\n                                        })\n                                    }\n                                } else {\n                                    if (i.x < e.x) {\n                                        A.push({\n                                            x: i.x + r,\n                                            y: g.y - r\n                                        });\n                                        A.push({\n                                            x: i.x + r,\n                                            y: i.y\n                                        })\n                                    } else {\n                                        A.push({\n                                            x: i.x - r,\n                                            y: g.y - r\n                                        });\n                                        A.push({\n                                            x: i.x - r,\n                                            y: i.y\n                                        })\n                                    }\n                                }\n                            } else {\n                                if (i.x >= e.x - r && i.x <= e.x + e.w + r) {\n                                    var q = e.x + e.w / 2;\n                                    if (i.x < q) {\n                                        A.push({\n                                            x: e.x - r,\n                                            y: g.y - r\n                                        });\n                                        A.push({\n                                            x: e.x - r,\n                                            y: i.y - r\n                                        });\n                                        A.push({\n                                            x: i.x,\n                                            y: i.y - r\n                                        })\n                                    } else {\n                                        A.push({\n                                            x: e.x + e.w + r,\n                                            y: g.y - r\n                                        });\n                                        A.push({\n                                            x: e.x + e.w + r,\n                                            y: i.y - r\n                                        });\n                                        A.push({\n                                            x: i.x,\n                                            y: i.y - r\n                                        })\n                                    }\n                                } else {\n                                    A.push({\n                                        x: i.x,\n                                        y: g.y - r\n                                    })\n                                }\n                            }\n                        }\n                    } else {\n                        if (B >= C / 4 * 3 && B < C / 4 * 5) {\n                            if (i.x > g.x) {\n                                if (m >= D) {\n                                    var z = m / 2;\n                                    A.push({\n                                        x: g.x + z,\n                                        y: g.y\n                                    });\n                                    A.push({\n                                        x: g.x + z,\n                                        y: i.y\n                                    })\n                                } else {\n                                    A.push({\n                                        x: i.x,\n                                        y: g.y\n                                    })\n                                }\n                            } else {\n                                A.push({\n                                    x: g.x + r,\n                                    y: g.y\n                                });\n                                if (m >= D) {\n                                    if (i.y >= e.y - r && i.y <= e.y + e.h + r) {\n                                        var q = e.y + e.h / 2;\n                                        if (i.y < q) {\n                                            A.push({\n                                                x: g.x + r,\n                                                y: e.y - r\n                                            });\n                                            A.push({\n                                                x: i.x + r,\n                                                y: e.y - r\n                                            });\n                                            A.push({\n                                                x: i.x + r,\n                                                y: i.y\n                                            })\n                                        } else {\n                                            A.push({\n                                                x: g.x + r,\n                                                y: e.y + e.h + r\n                                            });\n                                            A.push({\n                                                x: i.x + r,\n                                                y: e.y + e.h + r\n                                            });\n                                            A.push({\n                                                x: i.x + r,\n                                                y: i.y\n                                            })\n                                        }\n                                    } else {\n                                        A.push({\n                                            x: g.x + r,\n                                            y: i.y\n                                        })\n                                    }\n                                } else {\n                                    if (i.y >= e.y - r && i.y <= e.y + e.h + r) {\n                                        var q = e.y + e.h / 2;\n                                        if (i.y < q) {\n                                            A.push({\n                                                x: g.x + r,\n                                                y: e.y - r\n                                            });\n                                            A.push({\n                                                x: i.x,\n                                                y: e.y - r\n                                            })\n                                        } else {\n                                            A.push({\n                                                x: g.x + r,\n                                                y: e.y + e.h + r\n                                            });\n                                            A.push({\n                                                x: i.x,\n                                                y: e.y + e.h + r\n                                            })\n                                        }\n                                    } else {\n                                        if (i.y < g.y) {\n                                            A.push({\n                                                x: g.x + r,\n                                                y: i.y + r\n                                            });\n                                            A.push({\n                                                x: i.x,\n                                                y: i.y + r\n                                            })\n                                        } else {\n                                            A.push({\n                                                x: g.x + r,\n                                                y: i.y - r\n                                            });\n                                            A.push({\n                                                x: i.x,\n                                                y: i.y - r\n                                            })\n                                        }\n                                    }\n                                }\n                            }\n                        } else {\n                            if (B >= C / 4 * 5 && B < C / 4 * 7) {\n                                if (i.y > g.y) {\n                                    if (m >= D) {\n                                        A.push({\n                                            x: g.x,\n                                            y: i.y\n                                        })\n                                    } else {\n                                        var z = D / 2;\n                                        A.push({\n                                            x: g.x,\n                                            y: g.y + z\n                                        });\n                                        A.push({\n                                            x: i.x,\n                                            y: g.y + z\n                                        })\n                                    }\n                                } else {\n                                    A.push({\n                                        x: g.x,\n                                        y: g.y + r\n                                    });\n                                    if (m >= D) {\n                                        if (i.x >= e.x - r && i.x <= e.x + e.w + r) {\n                                            var q = e.x + e.w / 2;\n                                            if (i.x < q) {\n                                                A.push({\n                                                    x: e.x - r,\n                                                    y: g.y + r\n                                                });\n                                                A.push({\n                                                    x: e.x - r,\n                                                    y: i.y\n                                                })\n                                            } else {\n                                                A.push({\n                                                    x: e.x + e.w + r,\n                                                    y: g.y + r\n                                                });\n                                                A.push({\n                                                    x: e.x + e.w + r,\n                                                    y: i.y\n                                                })\n                                            }\n                                        } else {\n                                            if (i.x < e.x) {\n                                                A.push({\n                                                    x: i.x + r,\n                                                    y: g.y + r\n                                                });\n                                                A.push({\n                                                    x: i.x + r,\n                                                    y: i.y\n                                                })\n                                            } else {\n                                                A.push({\n                                                    x: i.x - r,\n                                                    y: g.y + r\n                                                });\n                                                A.push({\n                                                    x: i.x - r,\n                                                    y: i.y\n                                                })\n                                            }\n                                        }\n                                    } else {\n                                        if (i.x >= e.x - r && i.x <= e.x + e.w + r) {\n                                            var q = e.x + e.w / 2;\n                                            if (i.x < q) {\n                                                A.push({\n                                                    x: e.x - r,\n                                                    y: g.y + r\n                                                });\n                                                A.push({\n                                                    x: e.x - r,\n                                                    y: i.y + r\n                                                });\n                                                A.push({\n                                                    x: i.x,\n                                                    y: i.y + r\n                                                })\n                                            } else {\n                                                A.push({\n                                                    x: e.x + e.w + r,\n                                                    y: g.y + r\n                                                });\n                                                A.push({\n                                                    x: e.x + e.w + r,\n                                                    y: i.y + r\n                                                });\n                                                A.push({\n                                                    x: i.x,\n                                                    y: i.y + r\n                                                })\n                                            }\n                                        } else {\n                                            A.push({\n                                                x: i.x,\n                                                y: g.y + r\n                                            })\n                                        }\n                                    }\n                                }\n                            } else {\n                                if (i.x < g.x) {\n                                    if (m >= D) {\n                                        var z = m / 2;\n                                        A.push({\n                                            x: g.x - z,\n                                            y: g.y\n                                        });\n                                        A.push({\n                                            x: g.x - z,\n                                            y: i.y\n                                        })\n                                    } else {\n                                        A.push({\n                                            x: i.x,\n                                            y: g.y\n                                        })\n                                    }\n                                } else {\n                                    A.push({\n                                        x: g.x - r,\n                                        y: g.y\n                                    });\n                                    if (m >= D) {\n                                        if (i.y >= e.y - r && i.y <= e.y + e.h + r) {\n                                            var q = e.y + e.h / 2;\n                                            if (i.y < q) {\n                                                A.push({\n                                                    x: g.x - r,\n                                                    y: e.y - r\n                                                });\n                                                A.push({\n                                                    x: i.x - r,\n                                                    y: e.y - r\n                                                });\n                                                A.push({\n                                                    x: i.x - r,\n                                                    y: i.y\n                                                })\n                                            } else {\n                                                A.push({\n                                                    x: g.x - r,\n                                                    y: e.y + e.h + r\n                                                });\n                                                A.push({\n                                                    x: i.x - r,\n                                                    y: e.y + e.h + r\n                                                });\n                                                A.push({\n                                                    x: i.x - r,\n                                                    y: i.y\n                                                })\n                                            }\n                                        } else {\n                                            A.push({\n                                                x: g.x - r,\n                                                y: i.y\n                                            })\n                                        }\n                                    } else {\n                                        if (i.y >= e.y - r && i.y <= e.y + e.h + r) {\n                                            var q = e.y + e.h / 2;\n                                            if (i.y < q) {\n                                                A.push({\n                                                    x: g.x - r,\n                                                    y: e.y - r\n                                                });\n                                                A.push({\n                                                    x: i.x,\n                                                    y: e.y - r\n                                                })\n                                            } else {\n                                                A.push({\n                                                    x: g.x - r,\n                                                    y: e.y + e.h + r\n                                                });\n                                                A.push({\n                                                    x: i.x,\n                                                    y: e.y + e.h + r\n                                                })\n                                            }\n                                        } else {\n                                            if (i.y < g.y) {\n                                                A.push({\n                                                    x: g.x - r,\n                                                    y: i.y + r\n                                                });\n                                                A.push({\n                                                    x: i.x,\n                                                    y: i.y + r\n                                                })\n                                            } else {\n                                                A.push({\n                                                    x: g.x - r,\n                                                    y: i.y - r\n                                                });\n                                                A.push({\n                                                    x: i.x,\n                                                    y: i.y - r\n                                                })\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                    if (l) {\n                        A.reverse()\n                    }\n                } else {\n                    if (m >= D) {\n                        var z = (d.x - w.x) / 2;\n                        A.push({\n                            x: w.x + z,\n                            y: w.y\n                        });\n                        A.push({\n                            x: w.x + z,\n                            y: d.y\n                        })\n                    } else {\n                        var z = (d.y - w.y) / 2;\n                        A.push({\n                            x: w.x,\n                            y: w.y + z\n                        });\n                        A.push({\n                            x: d.x,\n                            y: w.y + z\n                        })\n                    }\n                }\n            }\n        } else {\n            if (t.linkerType == \"curve\") {\n                var w = t.from;\n                var d = t.to;\n                var f = this.measureDistance(w, d);\n                var k = f * 0.4;\n\n                function s(E, F) {\n                    if (E.id != null) {\n                        return {\n                            x: E.x - k * Math.cos(E.angle),\n                            y: E.y - k * Math.sin(E.angle)\n                        }\n                    } else {\n                        var G = Math.abs(E.y - F.y);\n                        var y = Math.abs(E.x - F.x);\n                        var H = Math.atan(G / y);\n                        var x = {};\n                        if (E.x <= F.x) {\n                            x.x = E.x + k * Math.cos(H)\n                        } else {\n                            x.x = E.x - k * Math.cos(H)\n                        }\n                        if (E.y <= F.y) {\n                            x.y = E.y + k * Math.sin(H)\n                        } else {\n                            x.y = E.y - k * Math.sin(H)\n                        }\n                        return x\n                    }\n                }\n                A.push(s(w, d));\n                A.push(s(d, w))\n            }\n        }\n        return A\n    },\n    getLinkerLinePoints: function (d) {\n        var b = [];\n        if (d.linkerType != \"curve\") {\n            b.push(d.from);\n            b = b.concat(d.points)\n        } else {\n            var c = 0.05;\n            var a = 0;\n            while (a <= 1) {\n                var e = {\n                    x: (1 - a) * (1 - a) * (1 - a) * d.from.x + 3 * (1 - a) * (1 - a) * a * d.points[0].x + 3 * (1 - a) * a * a * d.points[1].x + a * a * a * d.to.x,\n                    y: (1 - a) * (1 - a) * (1 - a) * d.from.y + 3 * (1 - a) * (1 - a) * a * d.points[0].y + 3 * (1 - a) * a * a * d.points[1].y + a * a * a * d.to.y\n                };\n                b.push(e);\n                a += c\n            }\n        }\n        b.push(d.to);\n        return b\n    },\n    getLinkerBox: function (g) {\n        var j = this.getLinkerLinePoints(g);\n        var d = j[0].x;\n        var c = j[0].y;\n        var b = j[0].x;\n        var a = j[0].y;\n        for (var e = 0; e < j.length; e++) {\n            var h = j[e];\n            if (h.x < d) {\n                d = h.x\n            } else {\n                if (h.x > b) {\n                    b = h.x\n                }\n            }\n            if (h.y < c) {\n                c = h.y\n            } else {\n                if (h.y > a) {\n                    a = h.y\n                }\n            }\n        }\n        var f = {\n            x: d,\n            y: c,\n            w: b - d,\n            h: a - c\n        };\n        return f\n    },\n    getShapeBox: function (a) {\n        var b = a.props;\n        var c = a.props.angle;\n        return this.getRotatedBox(b, c)\n    },\n    getRotatedBox: function (g, e, b) {\n        if (e == 0) {\n            return g\n        } else {\n            if (!b) {\n                b = {\n                    x: g.x + g.w / 2,\n                    y: g.y + g.h / 2\n                }\n            }\n            var k = this.getRotated(b, {\n                x: g.x,\n                y: g.y\n            }, e);\n            var j = this.getRotated(b, {\n                x: g.x + g.w,\n                y: g.y\n            }, e);\n            var i = this.getRotated(b, {\n                x: g.x + g.w,\n                y: g.y + g.h\n            }, e);\n            var h = this.getRotated(b, {\n                x: g.x,\n                y: g.y + g.h\n            }, e);\n            var f = Math.min(k.x, j.x, i.x, h.x);\n            var c = Math.max(k.x, j.x, i.x, h.x);\n            var d = Math.min(k.y, j.y, i.y, h.y);\n            var a = Math.max(k.y, j.y, i.y, h.y);\n            return {\n                x: f,\n                y: d,\n                w: c - f,\n                h: a - d\n            }\n        }\n    },\n    getRotated: function (c, b, g) {\n        var f = this.measureDistance(c, b);\n        if (f == 0 || g == 0) {\n            return b\n        }\n        var d = Math.atan(Math.abs(b.x - c.x) / Math.abs(c.y - b.y));\n        if (b.x >= c.x && b.y >= c.y) {\n            d = Math.PI - d\n        } else {\n            if (b.x <= c.x && b.y >= c.y) {\n                d = Math.PI + d\n            } else {\n                if (b.x <= c.x && b.y <= c.y) {\n                    d = Math.PI * 2 - d\n                }\n            }\n        }\n        d = d % (Math.PI * 2);\n        var e = (d + g) % (Math.PI * 2);\n        var a = {\n            x: c.x + Math.sin(e) * f,\n            y: c.y - Math.cos(e) * f\n        };\n        return a\n    },\n    getShapeAnchorInLinker: function (c) {\n        var k = c.getAnchors();\n        var d = [];\n        var r = {\n            x: c.props.x + c.props.w / 2,\n            y: c.props.y + c.props.h / 2\n        };\n        for (var p = 0; p < k.length; p++) {\n            var m = k[p];\n            var n = {\n                x: m.x + c.props.x,\n                y: m.y + c.props.y\n            };\n            var f = this.getRotated(r, n, c.props.angle);\n            d.push(f)\n        }\n        var h = [];\n        var e = 2;\n        for (var o = Model.orderList.length - 1; o >= 0; o--) {\n            var l = Model.orderList[o].id;\n            var s = Model.getShapeById(l);\n            if (s.name != \"linker\" || (s.attribute && s.attribute.collapseBy)) {\n                continue\n            }\n            var j = s;\n            var q = null;\n            e = 3;\n            for (var p = 0; p < d.length; p++) {\n                var a = d[p];\n                var b = {\n                    x: a.x - e,\n                    y: a.y - e,\n                    w: e * 2,\n                    h: e * 2\n                };\n                if (j.from.id == null && this.pointInRect(j.from.x, j.from.y, b)) {\n                    q = {\n                        linker: j,\n                        anchors: [a],\n                        type: \"from\"\n                    };\n                    break\n                }\n                if (j.to.id == null && this.pointInRect(j.to.x, j.to.y, b)) {\n                    q = {\n                        linker: j,\n                        anchors: [a],\n                        type: \"to\"\n                    };\n                    break\n                }\n            }\n            e = 2;\n            if (q == null) {\n                for (var p = 0; p < d.length; p++) {\n                    var a = d[p];\n                    var g = Utils.pointInLinker(a, j, e);\n                    if (g > -1) {\n                        if (q == null) {\n                            q = {\n                                linker: j,\n                                anchors: [],\n                                type: \"line\"\n                            }\n                        }\n                        q.anchors.push(a)\n                    }\n                }\n            }\n            if (q != null) {\n                h.push(q)\n            }\n        }\n        return h\n    },\n    getEndpointAngle: function (d, f) {\n        var a;\n        if (f == \"from\") {\n            a = d.from\n        } else {\n            a = d.to\n        }\n        var c;\n        if (d.linkerType == \"normal\") {\n            if (f == \"from\") {\n                c = d.to\n            } else {\n                c = d.from\n            }\n        } else {\n            if (d.linkerType == \"broken\") {\n                if (f == \"from\") {\n                    c = d.points[0]\n                } else {\n                    c = d.points[d.points.length - 1]\n                }\n            } else {\n                var e = 12;\n                var b;\n                var g = Utils.measureDistance(d.from, d.to);\n                if (f == \"from\") {\n                    b = e / g\n                } else {\n                    b = 1 - e / g\n                }\n                c = {\n                    x: (1 - b) * (1 - b) * (1 - b) * d.from.x + 3 * (1 - b) * (1 - b) * b * d.points[0].x + 3 * (1 - b) * b * b * d.points[1].x + b * b * b * d.to.x,\n                    y: (1 - b) * (1 - b) * (1 - b) * d.from.y + 3 * (1 - b) * (1 - b) * b * d.points[0].y + 3 * (1 - b) * b * b * d.points[1].y + b * b * b * d.to.y\n                }\n            }\n        }\n        return this.getAngle(c, a)\n    },\n    getAngle: function (c, a) {\n        var b = Math.atan(Math.abs(c.y - a.y) / Math.abs(c.x - a.x));\n        if (a.x <= c.x && a.y > c.y) {\n            b = Math.PI - b\n        } else {\n            if (a.x < c.x && a.y <= c.y) {\n                b = Math.PI + b\n            } else {\n                if (a.x >= c.x && a.y < c.y) {\n                    b = Math.PI * 2 - b\n                }\n            }\n        }\n        return b\n    },\n    getDarkerColor: function (c, h) {\n        if (!h) {\n            h = 13\n        }\n        var f = c.split(\",\");\n        var a = parseInt(f[0]);\n        var e = parseInt(f[1]);\n        var i = parseInt(f[2]);\n        var d = Math.round(a - a / 255 * h);\n        if (d < 0) {\n            d = 0\n        }\n        var j = Math.round(e - e / 255 * h);\n        if (j < 0) {\n            j = 0\n        }\n        var k = Math.round(i - i / 255 * h);\n        if (k < 0) {\n            k = 0\n        }\n        return d + \",\" + j + \",\" + k\n    },\n    getDarkestColor: function (a) {\n        return this.getDarkerColor(a, 26)\n    },\n    toScale: function (c) {\n        var a = {};\n        for (var b in c) {\n            a[b] = c[b];\n            if (typeof c[b] == \"number\") {\n                a[b] = a[b].toScale()\n            }\n        }\n        return a\n    },\n    restoreScale: function (c) {\n        var a = {};\n        for (var b in c) {\n            a[b] = c[b];\n            if (typeof c[b] == \"number\") {\n                a[b] = a[b].restoreScale()\n            }\n        }\n        return a\n    },\n    getOutlinkers: function (c) {\n        var a = [];\n        for (var e = 0; e < c.length; e++) {\n            var g = c[e];\n            a.push(g.id)\n        }\n        var h = [];\n        var d = [];\n        for (var e = 0; e < c.length; e++) {\n            var g = c[e];\n            if (g.name != \"linker\") {\n                var j = Model.getShapeLinkers(g.id);\n                if (j && j.length > 0) {\n                    for (var f = 0; f < j.length; f++) {\n                        var b = j[f];\n                        if (!this.isSelected(b) && d.indexOf(b) < 0 && a.indexOf(b) < 0) {\n                            h.push(Model.getShapeById(b));\n                            d.push(b)\n                        }\n                    }\n                }\n            }\n        }\n        return h\n    },\n    getFamilyShapes: function (a) {\n        var g = [];\n        for (var d = 0; d < a.length; d++) {\n            var b = a[d];\n            if (b.name != \"linker\") {\n                if (b.parent) {\n                    var f = Model.getShapeById(b.parent);\n                    if (!Utils.isSelected(b.parent)) {\n                        g.push(f)\n                    }\n                    var e = this.getChildrenShapes(f);\n                    g = g.concat(e)\n                }\n                var c = this.getChildrenShapes(b);\n                g = g.concat(c)\n            }\n        }\n        return g\n    },\n    getChildrenShapes: function (a) {\n        var c = [];\n        if (a.children && a.children.length > 0) {\n            for (var b = 0; b < a.children.length; b++) {\n                var d = a.children[b];\n                if (!Utils.isSelected(d)) {\n                    c.push(Model.getShapeById(d))\n                }\n            }\n        }\n        return c\n    },\n    isFamilyShape: function (b, a) {\n        if (b.parent == a.id) {\n            return true\n        } else {\n            if (b.id == a.parent) {\n                return true\n            } else {\n                if (b.parent && b.parent == a.parent) {\n                    return true\n                }\n            }\n        }\n        return false\n    },\n    getContainedShapes: function (c) {\n        var b = [];\n        var e = [];\n        for (var f = 0; f < c.length; f++) {\n            var d = c[f];\n            if (d.name != \"linker\" && d.attribute && d.attribute.container) {\n                var g = a(d);\n                b = b.concat(g)\n            }\n        }\n\n        function a(h) {\n            var l = [];\n            for (var k = Model.orderList.length - 1; k >= 0; k--) {\n                var n = Model.orderList[k].id;\n                if (h.id != n && !Utils.isSelected(n) && e.indexOf(n) < 0) {\n                    var j = Model.getShapeById(n);\n                    if (!j.attribute || typeof j.attribute.container == \"undefined\" || j.attribute.container == false) {\n                        if (!Utils.isFamilyShape(j, h)) {\n                            var m = Utils.getShapeBox(j);\n                            if (Utils.rectInRect(m, h.props) && j.container == h.id) {\n                                l.push(j);\n                                e.push(n)\n                            }\n                        }\n                    }\n                }\n            }\n            return l\n        }\n        return b\n    },\n    getAttachedShapes: function (c) {\n        var a = [];\n        for (var f = 0; f < c.length; f++) {\n            a.push(c[f].id)\n        }\n        var g = [];\n        for (var f = 0; f < c.length; f++) {\n            var h = c[f];\n            if (h.groupName == \"task\" || h.groupName == \"callActivity\" || h.groupName == \"subProcess\") {\n                var b = [];\n                for (var d = Model.orderList.length - 1; d >= 0; d--) {\n                    var k = Model.orderList[d].id;\n                    var e = Model.getShapeById(k);\n                    if (e.attachTo == h.id && !Utils.isSelected(k) && a.indexOf(k) < 0) {\n                        b.push(e)\n                    }\n                }\n                g = g.concat(b)\n            }\n        }\n        return g\n    },\n    copy: function (a) {\n        return $.extend(true, {}, a)\n    },\n    rangeChildren: function (j) {\n        var e = [];\n        if (j.children && j.children.length > 0) {\n            if (j.name == \"verticalPool\") {\n                var o = [];\n                var b = [];\n                for (var f = 0; f < j.children.length; f++) {\n                    var d = j.children[f];\n                    var c = Model.getShapeById(d);\n                    if (c.name == \"horizontalSeparator\") {\n                        b.push(c)\n                    } else {\n                        o.push(c)\n                    }\n                }\n                o.sort(function (i, h) {\n                    return i.props.x - h.props.x\n                });\n                var l = j.props.x;\n                for (var f = 0; f < o.length; f++) {\n                    var c = o[f];\n                    c.props.x = l;\n                    Designer.painter.renderShape(c);\n                    e.push(c);\n                    l += c.props.w\n                }\n                b.sort(function (i, h) {\n                    return i.props.y - h.props.y\n                });\n                var k = j.props.y + 40;\n                for (var f = 0; f < b.length; f++) {\n                    var c = b[f];\n                    var a = c.props.y + c.props.h;\n                    c.props.w = j.props.w;\n                    c.props.y = k;\n                    var g = a - k;\n                    c.props.h = g;\n                    Designer.painter.renderShape(c);\n                    e.push(c);\n                    k += g\n                }\n            } else {\n                if (j.name == \"horizontalPool\") {\n                    var o = [];\n                    var b = [];\n                    for (var f = 0; f < j.children.length; f++) {\n                        var d = j.children[f];\n                        var c = Model.getShapeById(d);\n                        if (c.name == \"verticalSeparator\") {\n                            b.push(c)\n                        } else {\n                            o.push(c)\n                        }\n                    }\n                    o.sort(function (i, h) {\n                        return i.props.y - h.props.y\n                    });\n                    var k = j.props.y;\n                    for (var f = 0; f < o.length; f++) {\n                        var c = o[f];\n                        c.props.y = k;\n                        Designer.painter.renderShape(c);\n                        e.push(c);\n                        k += c.props.h\n                    }\n                    b.sort(function (i, h) {\n                        return i.props.x - h.props.x\n                    });\n                    var l = j.props.x + 40;\n                    for (var f = 0; f < b.length; f++) {\n                        var c = b[f];\n                        var n = c.props.x + c.props.w;\n                        c.props.h = j.props.h;\n                        c.props.x = l;\n                        var m = n - l;\n                        c.props.w = m;\n                        Designer.painter.renderShape(c);\n                        e.push(c);\n                        l += m\n                    }\n                }\n            }\n        }\n        return e\n    },\n    getRelativePos: function (c, b, d) {\n        var a = d.offset();\n        if (a == null) {\n            a = {\n                left: 0,\n                top: 0\n            }\n        }\n        return {\n            x: c - a.left + d.scrollLeft(),\n            y: b - a.top + d.scrollTop()\n        }\n    },\n    getCollapsedShapes: function (b) {\n        var k = [];\n        var a = [];\n        for (var e = 0; e < b.length; e++) {\n            var f = b[e];\n            if (f.attribute && f.attribute.collapsed) {\n                var h = [];\n                for (var c = Model.orderList.length - 1; c >= 0; c--) {\n                    var g = Model.orderList[c].id;\n                    var d = Model.getShapeById(g);\n                    if (d.attribute && d.attribute.collapseBy == f.id && a.indexOf(g) < 0) {\n                        h.push(d)\n                    }\n                }\n                k = k.concat(h)\n            }\n        }\n        return k\n    },\n    getCollapsedShapesById: function (e) {\n        var a = [];\n        for (var c = Model.orderList.length - 1; c >= 0; c--) {\n            var d = Model.orderList[c].id;\n            var b = Model.getShapeById(d);\n            if (b.attribute && b.attribute.collapseBy == e) {\n                a.push(b)\n            }\n        }\n        return a\n    },\n    getShapeLineStyle: function (a, b) {\n        if (b == false || !Model.define.theme || !Model.define.theme.shape) {\n            return $.extend({}, Schema.shapeDefaults.lineStyle, a)\n        } else {\n            return $.extend({}, Schema.shapeDefaults.lineStyle, Model.define.theme.shape.lineStyle, a)\n        }\n    },\n    getLinkerLineStyle: function (a, b) {\n        if (b == false || !Model.define.theme || !Model.define.theme.linker) {\n            return $.extend({}, Schema.linkerDefaults.lineStyle, a)\n        } else {\n            return $.extend({}, Schema.linkerDefaults.lineStyle, Model.define.theme.linker.lineStyle, a)\n        }\n    },\n    getShapeFontStyle: function (b, a) {\n        if (a == false || !Model.define.theme || !Model.define.theme.shape) {\n            return $.extend({}, Schema.shapeDefaults.fontStyle, b)\n        } else {\n            return $.extend({}, Schema.shapeDefaults.fontStyle, Model.define.theme.shape.fontStyle, b)\n        }\n    },\n    getLinkerFontStyle: function (b, a) {\n        if (a == false || !Model.define.theme || !Model.define.theme.linker) {\n            return $.extend({}, Schema.linkerDefaults.fontStyle, b)\n        } else {\n            return $.extend({}, Schema.linkerDefaults.fontStyle, Model.define.theme.linker.fontStyle, b)\n        }\n    },\n    getShapeFillStyle: function (a, b) {\n        if (b == false || !Model.define.theme || !Model.define.theme.shape) {\n            return $.extend({}, Schema.shapeDefaults.fillStyle, a)\n        } else {\n            return $.extend({}, Schema.shapeDefaults.fillStyle, Model.define.theme.shape.fillStyle, a)\n        }\n    },\n    containsChinese: function (a) {\n        if (escape(a).indexOf(\"%u\") >= 0) {\n            return true\n        } else {\n            return false\n        }\n    },\n    filterXss: function (a) {\n        a = a.toString();\n        a = a.replace(/</g, \"&lt;\");\n        a = a.replace(/%3C/g, \"&lt;\");\n        a = a.replace(/>/g, \"&gt;\");\n        a = a.replace(/%3E/g, \"&gt;\");\n        a = a.replace(/'/g, \"&#39;\");\n        a = a.replace(/\"/g, \"&quot;\");\n        return a\n    },\n    showError: function () {\n        var a = $(\"#canvas-error\");\n        if (a.length) {\n            a = $(\"<div id='canvas-error'><span>保存出现了异常，为了防止内容丢失，请及时刷新页面或者反馈问题</span></div>\").appendTo(\"body\");\n            a.show()\n        }\n    }\n};\nvar GradientHelper = {\n    createLinearGradient: function (f, i, h) {\n        var b = f.props;\n        var c;\n        var e;\n        var d;\n        if (b.w > b.h) {\n            c = {\n                x: 0,\n                y: b.h / 2\n            };\n            e = {\n                x: b.w,\n                y: b.h / 2\n            };\n            d = (h.angle + Math.PI / 2) % (Math.PI * 2)\n        } else {\n            c = {\n                x: b.w / 2,\n                y: 0\n            };\n            e = {\n                x: b.w / 2,\n                y: b.h\n            };\n            d = h.angle\n        }\n        if (d != 0) {\n            var a = {\n                x: b.w / 2,\n                y: b.h / 2\n            };\n            c = Utils.getRotated(a, c, d);\n            e = Utils.getRotated(a, e, d);\n            if (c.x < 0) {\n                c.x = 0\n            }\n            if (c.x > f.props.w) {\n                c.x = f.props.w\n            }\n            if (c.y < 0) {\n                c.y = 0\n            }\n            if (c.y > f.props.h) {\n                c.y = f.props.h\n            }\n            if (e.x < 0) {\n                e.x = 0\n            }\n            if (e.x > f.props.w) {\n                e.x = f.props.w\n            }\n            if (e.y < 0) {\n                e.y = 0\n            }\n            if (e.y > f.props.h) {\n                e.y = f.props.h\n            }\n        }\n        var g = i.createLinearGradient(c.x, c.y, e.x, e.y);\n        g.addColorStop(0, \"rgb(\" + h.beginColor + \")\");\n        g.addColorStop(1, \"rgb(\" + h.endColor + \")\");\n        return g\n    },\n    createRadialGradient: function (c, a, b) {\n        var f = c.props;\n        var d = f.h;\n        if (f.w < f.h) {\n            d = f.w\n        }\n        var e = a.createRadialGradient(f.w / 2, f.h / 2, 10, f.w / 2, f.h / 2, d * b.radius);\n        e.addColorStop(0, \"rgb(\" + b.beginColor + \")\");\n        e.addColorStop(1, \"rgb(\" + b.endColor + \")\");\n        return e\n    },\n    getLighterColor: function (c) {\n        var h = 60;\n        var f = c.split(\",\");\n        var a = parseInt(f[0]);\n        var e = parseInt(f[1]);\n        var i = parseInt(f[2]);\n        var d = Math.round(a + (255 - a) / 255 * h);\n        if (d > 255) {\n            d = 255\n        }\n        var j = Math.round(e + (255 - e) / 255 * h);\n        if (j > 255) {\n            j = 255\n        }\n        var k = Math.round(i + (255 - i) / 255 * h);\n        if (k > 255) {\n            k = 255\n        }\n        return d + \",\" + j + \",\" + k\n    },\n    getDarkerColor: function (c) {\n        var h = 60;\n        var f = c.split(\",\");\n        var a = parseInt(f[0]);\n        var e = parseInt(f[1]);\n        var i = parseInt(f[2]);\n        var d = Math.round(a - a / 255 * h);\n        if (d < 0) {\n            d = 0\n        }\n        var j = Math.round(e - e / 255 * h);\n        if (j < 0) {\n            j = 0\n        }\n        var k = Math.round(i - i / 255 * h);\n        if (k < 0) {\n            k = 0\n        }\n        return d + \",\" + j + \",\" + k\n    }\n};\nvar MessageSource = {\n    batchSize: 0,\n    messages: [],\n    withUndo: true,\n    withMessage: true,\n    withDock: true,\n    undoStack: {\n        stack: [],\n        push: function (b, a) {\n            this.stack.push(b);\n            if (typeof a == \"undefined\") {\n                a = true\n            }\n            if (a) {\n                MessageSource.redoStack.stack = []\n            }\n            Designer.events.push(\"undoStackChanged\", this.stack.length)\n        },\n        pop: function () {\n            var b = this.stack.length;\n            if (b == 0) {\n                return null\n            }\n            var a = this.stack[b - 1];\n            this.stack.splice(b - 1, 1);\n            MessageSource.redoStack.push(a);\n            Designer.events.push(\"undoStackChanged\", this.stack.length);\n            return a\n        }\n    },\n    redoStack: {\n        stack: [],\n        push: function (a) {\n            this.stack.push(a);\n            Designer.events.push(\"redoStackChanged\", this.stack.length)\n        },\n        pop: function () {\n            var b = this.stack.length;\n            if (b == 0) {\n                return null\n            }\n            var a = this.stack[b - 1];\n            this.stack.splice(b - 1, 1);\n            MessageSource.undoStack.push(a, false);\n            Designer.events.push(\"redoStackChanged\", this.stack.length);\n            return a\n        }\n    },\n    beginBatch: function () {\n        this.batchSize++\n    },\n    commit: function () {\n        this.batchSize--;\n        this.submit()\n    },\n    submit: function () {\n        if (this.batchSize == 0 && this.messages.length != 0) {\n            if (this.withDock) {\n                Dock.update(true)\n            }\n            if (this.withMessage == false) {\n                this.messages = [];\n                return\n            }\n            if (this.withUndo) {\n                this.undoStack.push(this.messages)\n            }\n            if (chartId != \"\") {\n                var a = {\n                    action: \"command\",\n                    messages: this.messages,\n                    name: userName\n                };\n                CLB.send(a)\n            }\n            this.messages = []\n        }\n    },\n    send: function (b, a) {\n        this.messages.push({\n            action: b,\n            content: a\n        });\n        this.submit()\n    },\n    receive: function (a) {\n        this.doWithoutMessage(function () {\n            MessageSource.executeMessages(a, true);\n            Utils.showLinkerControls();\n            Utils.showLinkerCursor()\n        })\n    },\n    undo: function () {\n        var a = this.undoStack.pop();\n        if (a == null) {\n            return\n        }\n        this.doWithoutUndo(function () {\n            MessageSource.beginBatch();\n            for (var d = 0; d < a.length; d++) {\n                var g = a[d];\n                if (g.action == \"create\") {\n                    Utils.unselect();\n                    Model.remove(g.content, false)\n                } else {\n                    if (g.action == \"update\") {\n                        var b = g.content.shapes;\n                        Model.updateMulti(b);\n                        for (var c = 0; c < b.length; c++) {\n                            var f = b[c];\n                            Designer.painter.renderShape(f)\n                        }\n                        var e = Utils.getSelectedIds();\n                        Utils.unselect();\n                        Utils.selectShape(e, false)\n                    } else {\n                        if (g.action == \"remove\") {\n                            var b = g.content;\n                            Model.addMulti(b);\n                            for (var c = 0; c < b.length; c++) {\n                                var f = b[c];\n                                Designer.painter.renderShape(f)\n                            }\n                        } else {\n                            if (g.action == \"updatePage\") {\n                                Model.updatePage(g.content.page)\n                            } else {\n                                if (g.action == \"setTheme\") {\n                                    Model.setTheme(g.content.theme)\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            MessageSource.commit()\n        })\n    },\n    redo: function () {\n        var a = this.redoStack.pop();\n        if (a == null) {\n            return\n        }\n        this.doWithoutUndo(function () {\n            MessageSource.executeMessages(a, false)\n        })\n    },\n    executeMessages: function (e, j) {\n        MessageSource.beginBatch();\n        for (var f = 0; f < e.length; f++) {\n            var c = e[f];\n            if (c.action == \"create\") {\n                var b = c.content;\n                if (j) {\n                    for (var h = 0; h < b.length; h++) {\n                        var g = b[h];\n                        if (g.name != \"linker\") {\n                            Schema.initShapeFunctions(g)\n                        }\n                    }\n                }\n                Model.addMulti(b);\n                for (var h = 0; h < b.length; h++) {\n                    var g = b[h];\n                    Designer.painter.renderShape(g)\n                }\n                Model.build()\n            } else {\n                if (c.action == \"update\") {\n                    var k = c.content.updates;\n                    for (var h = 0; h < k.length; h++) {\n                        var d = k[h];\n                        if (j && d.name != \"linker\") {\n                            Schema.initShapeFunctions(d)\n                        }\n                        Designer.painter.renderShape(d)\n                    }\n                    Model.updateMulti(k);\n                    var a = Utils.getSelectedIds();\n                    Utils.unselect();\n                    Utils.selectShape(a)\n                } else {\n                    if (c.action == \"remove\") {\n                        Utils.unselect();\n                        Model.remove(c.content)\n                    } else {\n                        if (c.action == \"updatePage\") {\n                            Model.updatePage(c.content.update)\n                        } else {\n                            if (c.action == \"setTheme\") {\n                                Model.setTheme(c.content.update)\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        MessageSource.commit()\n    },\n    doWithoutUndo: function (a) {\n        this.withUndo = false;\n        a();\n        this.withUndo = true\n    },\n    doWithoutMessage: function (a) {\n        this.withMessage = false;\n        a();\n        this.withMessage = true\n    },\n    doWithoutUpdateDock: function (a) {\n        this.withDock = false;\n        a();\n        this.withDock = true\n    }\n};\nNumber.prototype.toScale = function () {\n    return this * Designer.config.scale\n};\nNumber.prototype.restoreScale = function () {\n    return this / Designer.config.scale\n};\nDate.prototype.format = function (b) {\n    var c = {\n        \"M+\": this.getMonth() + 1,\n        \"d+\": this.getDate(),\n        \"h+\": this.getHours(),\n        \"m+\": this.getMinutes(),\n        \"s+\": this.getSeconds(),\n        \"q+\": Math.floor((this.getMonth() + 3) / 3),\n        S: this.getMilliseconds()\n    };\n    if (/(y+)/.test(b)) {\n        b = b.replace(RegExp.$1, (this.getFullYear() + \"\").substr(4 - RegExp.$1.length))\n    }\n    for (var a in c) {\n        if (new RegExp(\"(\" + a + \")\").test(b)) {\n            b = b.replace(RegExp.$1, RegExp.$1.length == 1 ? c[a] : (\"00\" + c[a]).substr((\"\" + c[a]).length))\n        }\n    }\n    return b\n};"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/designer.css",
    "content": "@CHARSET \"UTF-8\";\n\n.clear {\n  clear: both;\n}\n\n#designer {\n  width: 100%;\n  position: relative;\n}\n\n#shape_panel {\n  width: 162px;\n  overflow: hidden;\n  overflow-y: auto;\n  position: absolute;\n  background: #FFF;\n  border-right: 1px solid #eee;\n}\n\n.search_container {\n  background-color: #F3F3F3;\n  padding: 5px 10px;\n  border-bottom: #cccccc solid 1px;\n  cursor: default;\n  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, .1);\n  -moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, .1);\n  -ms-box-shadow: 0px 1px 1px rgba(0, 0, 0, .1);\n}\n\n.panel_title.search {\n  padding: 5px 10px;\n  height: 23px;\n  line-height: 23px;\n}\n\n.panel_title.search input {\n  margin: 0px;\n  width: 97%;\n  border: 1px solid #B8B8B8;\n  line-height: 18px;\n  background: #fff url(./images/search_ico.png) center right no-repeat;\n  border-radius: 2px;\n  padding-left: 2px;\n}\n\n.panel_container {\n  border-top: 1px solid #F4F4F4;\n}\n\n.panel_container:first-child {\n  border-top: 0;\n}\n\n.panel_container:last-child {\n  border-bottom: 1px solid #F4F4F4;\n}\n\n.panel_title {\n  position: relative;\n  margin: 0px;\n  background-color: #FFF;\n  height: 30px;\n  line-height: 30px;\n  font-size: 12px;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  padding: 0 2px 0 19px;\n  border-bottom: #F4F4F4 solid 1px;\n  cursor: default;\n  /*-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\t-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\t-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\tbox-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\ttext-shadow: 0 1px 0 rgba(255, 255, 255, 0.33);*/\n}\n\n.panel_title .ico_accordion {\n  position: absolute;\n  left: 5px;\n  top: 11px;\n}\n\n.panel_container .content {\n  margin: 0px;\n  width: 100%;\n  padding: 5px 0px;\n}\n\n.panel_container .my_content {\n  border: 1px dashed #ccc;\n  margin: 6px;\n  padding: 15px 10px;\n  text-align: center;\n}\n\n.panel_container .my_content:hover {\n  border: 1px dashed #888;\n}\n\n.panel_collapsed .panel_title {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  -ms-box-shadow: none;\n  box-shadow: none;\n  text-shadow: none;\n  border-bottom: 0px;\n}\n\n.panel_collapsed .content {\n  display: none;\n}\n\n.panel_collapsed .ico_accordion {\n  background-position: -51px -46px;\n}\n\n.panel_box {\n  display: inline-block;\n  border: 0px solid transparent;\n  position: relative;\n  width: 100%;\n  cursor: move;\n}\n\n.panel_box a {\n  line-height: 28px;\n  padding: 10px 30px 10px 25px;\n  font-size: 12px;\n  width: 100%;\n  cursor: move;\n}\n\n.panel_box:hover a,\n.panel_box:hover i {\n  /*background-color: skyblue;*/\n  color: #BF0017;\n}\n\n.panel_box.selected {\n  border-color: #6EB1EB;\n}\n\n#shape_thumb {\n  position: absolute;\n  left: 5px;\n  top: 0px;\n  padding: 5px;\n  display: none;\n}\n\n#shape_thumb div {\n  padding: 0px 0px 10px;\n  text-align: center;\n  width: 180px;\n}\n\n.group_icon {\n  position: absolute;\n  display: block;\n  bottom: 0px;\n  right: 0px;\n  background: url(./images/sprite.png?9) no-repeat;\n  height: 10px;\n  width: 10px;\n  background-position: -43px -64px;\n  opacity: 0.8;\n}\n\n.group_icon:hover {\n  opacity: 1;\n}\n\n.change_shape_icon {\n  right: -10px;\n  bottom: -10px;\n}\n\n.group_dashboard {\n  padding: 4px;\n  width: 136px;\n  cursor: default;\n}\n\n.panel_item {\n  margin: 0px auto;\n  display: none;\n}\n\n#creating_shape_container {\n  overflow: hidden;\n  position: absolute;\n  display: none;\n}\n\n#creating_shape_canvas {\n  position: absolute;\n}\n\n#designer_viewport {\n  position: relative;\n  margin-left: 163px;\n  /* margin-top: -32px; */\n}\n\n#demo_signup {\n  background: #b2b2b2;\n  padding: 10px 20px 10px 140px;\n  border-bottom: 1px solid #a0a0a0;\n  height: 39px;\n  position: relative;\n}\n\n#demo_signup span {\n  line-height: 19px;\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.11);\n}\n\n#demo_signup a {\n  position: absolute;\n  left: 20px;\n  line-height: 38px;\n  height: 38px;\n  width: 80px;\n  font-size: 16px;\n}\n\n#designer_layout {\n  overflow: hidden;\n  position: relative;\n  z-index: 0;\n}\n\n#designer_canvas {\n  position: relative;\n  background: #F2F2F2;\n  overflow: visible;\n  /*box-shadow: 3px 3px 6px #888;*/\n  z-index: 0;\n}\n\n#shape_img_container {\n  height: 0px;\n  overflow: hidden;\n}\n\n.shape_box {\n  position: absolute;\n  display: none !important;\n}\n\n.shape_box .shape_link {\n  position: absolute;\n  bottom: 10px;\n  right: -12px;\n  width: 20px;\n  height: 15px;\n  background-image: url(./images/sprite.png);\n  background-position: -20px -422px;\n  cursor: pointer;\n}\n\n.shape_box .shape_link .ico {}\n\n.link_point_canvas {\n  position: absolute;\n}\n\n.shape_box_creating {\n  position: absolute;\n}\n\n/**锚点、控制点样式*/\n.shape_anchor {\n  position: absolute;\n  border-style: solid;\n  border-width: 1px;\n  background: white;\n}\n\n/**形状锁定提醒样式*/\n.shape_locker {\n  position: absolute;\n}\n\n.shape_controller {\n  position: absolute;\n  border-style: solid;\n  border-width: 1px;\n  background: white;\n}\n\n.shape_controller.n.w {\n  cursor: nw-resize;\n}\n\n.shape_controller.n.e {\n  cursor: ne-resize;\n}\n\n.shape_controller.s.e {\n  cursor: se-resize;\n}\n\n.shape_controller.s.w {\n  cursor: sw-resize;\n}\n\n.shape_controller.n,\n.shape_controller.s {\n  cursor: n-resize;\n}\n\n.shape_controller.e,\n.shape_controller.w {\n  cursor: e-resize;\n}\n\n.shape_rotater {\n  position: absolute;\n  display: none;\n}\n\n.shape_rotater.rotate_enable {\n  /*cursor: url(./images/rotate.gif) 16 16, auto;*/\n}\n\n/**图形选择后的控件容器*/\n#shape_controls {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  display: none !important;\n}\n\n#shape_controls #controls_bounding {\n  position: absolute;\n  left: -10px;\n  top: -10px;\n  display: none;\n}\n\n/**图形的矩形轮廓容器*/\n.shape_contour {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 0px;\n  height: 0px;\n  display: none !important;\n}\n\n/**图形选择框*/\n#selecting_box {\n  position: absolute;\n  border: 1px solid #6EB1EB;\n  background: rgba(22, 145, 232, 0.1);\n}\n\n/**创建文本的位置选择框*/\n#texting_box {\n  position: absolute;\n  border: 2px solid #6EB1EB;\n}\n\n/* 文本编辑 */\n#shape_edit_menu {\n  padding: 15px 20px;\n  position: absolute;\n}\n\n#shape_edit_menu textarea {\n  display: block;\n  width: 280px;\n  margin-bottom: 5px;\n  overflow: hidden;\n}\n\n#shape_text_edit {\n  position: absolute;\n  overflow: hidden;\n  background: rgba(255, 255, 255, .01);\n  border: 2px solid #f7ddaa;\n  border-radius: 2px;\n  padding: 0px;\n  cursor: text;\n}\n\n#shape_text_ruler {\n  position: absolute;\n  padding: 0px;\n  border: none;\n  background: transparent;\n  opacity: 0;\n  height: 0px;\n  overflow: hidden;\n  width: 0px;\n}\n\n/** 连接线文本编辑 */\n#linker_text_edit {\n  position: absolute;\n  overflow: hidden;\n  background: white;\n  border: 2px solid #f7ddaa;\n  border-radius: 2px;\n  padding: 0px;\n}\n\n.text_canvas {\n  position: absolute;\n  padding: 0px;\n  border: none;\n  background: transparent;\n  cursor: inherit;\n  overflow: hidden;\n  -moz-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  -khtml-user-select: none;\n  user-select: none;\n  resize: none;\n\n  word-break: break-all;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n\n.text_canvas.linker_text {\n  white-space: nowrap;\n  background: #fff;\n}\n\n.attr_canvas {\n  position: absolute;\n}\n\n#link_spot {\n  position: absolute;\n  width: 100px;\n  height: 100px;\n  display: block;\n}\n\n/** 设计器操作气泡提示 */\n#designer_op_tip {\n  position: absolute;\n  border: 1px solid #D1D1D1;\n  background: #f2f2f2;\n  padding: 5px 10px;\n  border-radius: 3px;\n  display: none;\n  color: #444;\n  text-align: center;\n  white-space: nowrap;\n}\n\n/**对齐线*/\n#designer_op_snapline_h {\n  background: #6EB1EB;\n  position: absolute;\n  height: 1px;\n  width: 100%;\n}\n\n#designer_op_snapline_v {\n  background: #6EB1EB;\n  position: absolute;\n  width: 1px;\n}\n\n#designer_op_snapline_attach {\n  position: absolute;\n  border: 2px solid #6EB1EB;\n}\n\n/**菜单*/\n.menu {\n  position: absolute;\n  background: #FFF;\n  border-radius: 4px;\n  border: 1px solid rgb(180, 180, 180);\n  /*-webkit-box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.3);\n\t-moz-box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.3);\n\tbox-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.3);*/\n}\n\n.menu:before {\n  display: none;\n}\n\n.menu:after {\n  display: none;\n}\n\n.menu.list {\n  padding: 4px 0px;\n}\n\n.menu li {\n  padding: 0px 20px;\n  line-height: 26px;\n  cursor: default;\n  position: relative;\n}\n\n.menu_ico li {\n  padding: 0px 30px;\n}\n\n.menu li:hover {\n  background-color: #eee;\n}\n\n.menu li.disabled {\n  /* \tcolor: #999; */\n  color: #ccc;\n}\n\n.menu li.disabled:hover {\n  /* \tcolor: #999; */\n  color: #ccc;\n  background-color: transparent;\n  background-image: none;\n  filter: none;\n  text-shadow: none;\n}\n\n.menu li .ico_selected {\n  position: absolute;\n  top: 3px;\n  left: 5px;\n}\n\n.menu .devider {\n  height: 0px;\n  border-top: #ccc solid 1px;\n  margin: 4px 0;\n}\n\n.menu .menu_text {\n  color: #888;\n}\n\n.menu .menu_text:hover {\n  background: transparent;\n}\n\n.menu li .share_to_a,\n.share-menu .share_to_a {\n  position: relative;\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  margin: 0px 2px;\n  margin-bottom: 3px;\n  vertical-align: middle;\n}\n\n.share-menu {\n  margin-top: 20px;\n}\n\n.menu li .share_to_a.weibo,\n.share-menu .share_to_a.weibo {\n  background: url(../images/designer/share_to_weibo.png) center center no-repeat;\n}\n\n.menu li .share_to_a.weixin,\n.share-menu .share_to_a.weixin {\n  background: url(../images/designer/share_to_weixin.png) center center no-repeat;\n}\n\n.menu li .share_to_a.qzone,\n.share-menu .share_to_a.qzone {\n  background: url(../images/designer/share_to_qq.png) center center no-repeat;\n}\n\n.menu li .share_to_a.qqweibo,\n.share-menu .share_to_a.qqweibo {\n  background: url(../images/designer/share_to_qq_weibo.png) center center no-repeat;\n}\n\n.menu li .share_to_a.douban,\n.share-menu .share_to_a.douban {\n  background: url(../images/designer/share_to_douban.png) center center no-repeat;\n}\n\n.menu li .share_to_a.facebook,\n.share-menu .share_to_a.facebook {\n  background: url(../images/designer/share_to_facebook.png) center center no-repeat;\n}\n\n.menu li .share_to_a.google,\n.share-menu .share_to_a.google {\n  background: url(../images/designer/share_to_google.png) center center no-repeat;\n}\n\n.menu li .share_to_a.linkedin,\n.share-menu .share_to_a.linkedin {\n  background: url(../images/designer/share_to_linkedin.png) center center no-repeat;\n}\n\n.menu li .share_to_a.mingdao,\n.share-menu .share_to_a.mingdao {\n  background: url(../images/designer/share_to_mingdao.ico) center center no-repeat;\n}\n\n/**************************8分享菜单****************************************/\n\n/**************************8分享菜单******************************end**********/\n\n/**图形画板*/\n.shape_dashboard {\n  padding: 4px;\n  width: 136px;\n  cursor: default;\n}\n\n.dashboard_box {\n  display: inline-block;\n  padding: 1px;\n  border: 1px solid transparent;\n  position: relative;\n  width: 30px;\n  height: 30px;\n}\n\n.dashboard_box:hover {\n  border-color: #D1D1D1;\n  background: #f2f2f2;\n}\n\n/**操作帮助*/\n#designer_op_help {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  font-size: 24px;\n  font-weight: bold;\n  color: #A7A7A7;\n  color: rgba(0, 0, 0, .3);\n  padding: 5px;\n}\n\n/**鹰眼视图*/\n.navigation_bounding {\n  padding: 10px 0px;\n  overflow: hidden;\n}\n\n.navigation_view_container {\n  margin: 0px auto;\n  position: relative;\n  width: 120px;\n}\n\n#navigation_canvas {\n  background: white;\n  border: 1px solid #888;\n}\n\n#navigation_eye {\n  position: absolute;\n  border: 2px solid #6EB1EB;\n  top: 0px;\n  left: 0px;\n  width: 100px;\n  height: 80px;\n}\n\n.linker_cursor {\n  background: #db5e5e;\n  width: 8px;\n  height: 8px;\n  border-radius: 4px;\n  position: absolute;\n  z-index: 1000;\n}\n\n.linker_control_line {\n  position: absolute;\n  width: 1px;\n  opacity: 0.5;\n  background: #833;\n}\n\n.linker_control_point {\n  position: absolute;\n  width: 6px;\n  height: 6px;\n  border: 1px solid #833;\n  background: white;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n  cursor: default;\n}\n\n.linker_control_point:hover,\n.linker_control_point.moving {\n  background: #db5e5e;\n}\n\n.navigation_view_bar {\n  padding: 10px;\n}\n\n.navigation_view_bar .toolbar_button,\n.navigation_view_bar .spinner {\n  display: inline-block;\n}\n\n.navigation_view_bar .spinner {\n  width: 55px;\n}\n\n.navigation_view_bar .toolbar_button {\n  float: right;\n  margin-left: 5px;\n}\n\n/*Full Screen Styles*/\n#shape_panel.readonly {\n  display: none;\n}\n\n#designer_viewport.readonly {\n  margin-left: 0px;\n}\n\n#fullscreen_tip {\n  position: absolute;\n  bottom: -70px;\n  right: 0px;\n  display: none;\n  white-space: nowrap;\n}\n\n#fullscreen_tip .dlg_close {\n  position: absolute;\n  top: 1px;\n  right: 2px;\n}\n\n.full_suggest {\n  margin-top: 5px;\n  line-height: 20px;\n  height: 20px;\n}\n\n.full_suggest span {\n  display: inline-block;\n  float: left;\n}\n\n.full_suggest .ico {\n  margin-right: 5px;\n}\n\n.search_panel_loading {\n  color: #888;\n  line-height: 20px;\n  padding: 3px 0px;\n  margin: 5px;\n}\n\n.search_panel_title {\n  border-bottom: 1px solid #CBCCCC;\n  padding: 3px 5px 5px;\n  font-weight: bold;\n  margin-bottom: 3px;\n}\n\n.search_panel_btn {\n  height: 22px;\n  line-height: 22px;\n  margin: 5px;\n}\n\n.new_tip {\n  width: 29px;\n  height: 12px;\n  /*background: url(./images/new_tip.png) no-repeat;*/\n  position: absolute;\n  top: 3px;\n  left: 0px;\n  -webkit-transform: rotate(-25deg);\n  -ms-transform: rotate(-25deg);\n  -moz-transform: rotate(-25deg);\n  transform: rotate(-25deg);\n}\n\n#pubpo_win {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.pubpo-content {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  width: 100%;\n  min-height: 330px;\n  padding-right: 20px;\n}\n\n.pub-explain {\n  font-size: 14px;\n  margin-bottom: 20px;\n  line-height: 25px;\n  color: #888;\n  letter-spacing: 0.5px;\n}\n\n.label-exp {\n  display: inline-block;\n  vertical-align: middle;\n  float: right;\n  font-size: 12px;\n  color: #888;\n  margin-right: -12px;\n}\n\n.pubpo-tab .form .content label[for] {\n  color: #333;\n  margin-left: 5px;\n}\n\n.pubpo-tab .form .textarea,\n.form .feedTags,\n.form .content {\n  width: 81% !important;\n}\n\n.clone-price {\n  display: none;\n}\n\n.content .setprice-btn {\n  width: 50% !important;\n}\n\n.bot-line {\n  padding: 30px 16px 16px 95px;\n}\n\n.bot-line>div {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.agreement-group {\n  margin-top: 12px;\n  margin-right: 20px;\n}\n\n.pub-btn.pro-btn {\n  width: 90px;\n  text-align: center;\n  padding: 11px 0;\n  margin-top: -10px;\n}\n\n#tag_input {\n  min-width: 80%;\n}\n\n.agreement-detail {\n  color: #008cff;\n  display: inline-block;\n  vertical-align: middle;\n  margin-left: 5px;\n  cursor: pointer;\n}\n"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/designer.events.js",
    "content": "Designer.events.addEventListener(\"initialized\", function () {\n    if (localRuntime) {\n        Designer.open(definition)\n    } else {\n        // var a = CLB.findLocal(); //取消iframe的自动加载，控制权在react里面，此处做了兼容性处理\n        if (a == false) {\n            Designer.open(definition)\n        }\n    }\n});\nDesigner.events.addEventListener(\"create\", function (a) { });\nvar createdTip = false;\nDesigner.events.addEventListener(\"created\", function (a) {\n    if (createdTip) {\n        UI.showStartStep(\"created\", $(\"#\" + a.id));\n        createdTip = false\n    }\n});\nDesigner.events.addEventListener(\"linkerCreating\", function (a) { });\nDesigner.events.addEventListener(\"linkerCreated\", function (a) { });\nDesigner.events.addEventListener(\"selectChanged\", function () {\n    UI.update();\n    Dock.update();\n    UI.showShapeOptions()\n});\nDesigner.events.addEventListener(\"clipboardChanged\", function (a) {\n    if (a > 0) {\n        $(\"#bar_list_edit\").children(\"li[ac=paste]\").menuitem(\"enable\")\n    } else {\n        $(\"#bar_list_edit\").children(\"li[ac=paste]\").menuitem(\"disable\")\n    }\n});\nDesigner.events.addEventListener(\"undoStackChanged\", function (a) {\n    if (a == 0) {\n        $(\"#bar_list_edit\").children(\"li[ac=undo]\").menuitem(\"disable\");\n        $(\"#bar_undo\").button(\"disable\")\n    } else {\n        $(\"#bar_list_edit\").children(\"li[ac=undo]\").menuitem(\"enable\");\n        $(\"#bar_undo\").button(\"enable\")\n    }\n});\nDesigner.events.addEventListener(\"redoStackChanged\", function (a) {\n    if (a == 0) {\n        $(\"#bar_list_edit\").children(\"li[ac=redo]\").menuitem(\"disable\");\n        $(\"#bar_redo\").button(\"disable\")\n    } else {\n        $(\"#bar_list_edit\").children(\"li[ac=redo]\").menuitem(\"enable\");\n        $(\"#bar_redo\").button(\"enable\")\n    }\n});\nDesigner.events.addEventListener(\"beforeResize\", function (a) {\n    var c = a.shapes;\n    var b = a.minSize;\n    var f = a.dir;\n    if (c.length == 1) {\n        var l = c[0];\n        if (l.name == \"verticalPool\") {\n            if (f == \"b\") {\n                var n = 0;\n                for (var j = 0; j < l.children.length; j++) {\n                    var h = l.children[j];\n                    var d = Model.getShapeById(h);\n                    if (d.name == \"horizontalSeparator\") {\n                        n += d.props.h\n                    }\n                }\n                if (n == 0) {\n                    n = 90\n                } else {\n                    n += 40\n                }\n                b.h = n\n            } else {\n                if (f == \"l\" || f == \"r\") {\n                    var g = 20;\n                    var e = null;\n                    var m = 0;\n                    for (var j = 0; j < l.children.length; j++) {\n                        var h = l.children[j];\n                        var d = Model.getShapeById(h);\n                        if (d.name == \"horizontalSeparator\") {\n                            m++\n                        } else {\n                            if (d.name == \"verticalLane\") {\n                                if (e == null || (d.props.x < e.props.x && f == \"l\") || (d.props.x > e.props.x && f == \"r\")) {\n                                    e = d\n                                }\n                                g += d.props.w\n                            }\n                        }\n                    }\n                    if (e != null) {\n                        g -= e.props.w\n                    }\n                    if (m > 0) {\n                        g += 20\n                    }\n                    b.w = g\n                }\n            }\n        } else {\n            if (l.name == \"verticalLane\" && f == \"b\") {\n                var n = 0;\n                var e = l;\n                var k = Model.getShapeById(e.parent);\n                for (var j = 0; j < k.children.length; j++) {\n                    var h = k.children[j];\n                    var d = Model.getShapeById(h);\n                    if (d.name == \"horizontalSeparator\") {\n                        n += d.props.h\n                    }\n                }\n                if (n == 0) {\n                    n = 50\n                }\n                b.h = n\n            } else {\n                if (l.name == \"horizontalPool\") {\n                    if (f == \"r\") {\n                        var g = 0;\n                        for (var j = 0; j < l.children.length; j++) {\n                            var h = l.children[j];\n                            var d = Model.getShapeById(h);\n                            if (d.name == \"verticalSeparator\") {\n                                g += d.props.w\n                            }\n                        }\n                        if (g == 0) {\n                            g = 90\n                        } else {\n                            g += 40\n                        }\n                        b.w = g\n                    } else {\n                        if (f == \"t\" || f == \"b\") {\n                            var n = 20;\n                            var e = null;\n                            var m = 0;\n                            for (var j = 0; j < l.children.length; j++) {\n                                var h = l.children[j];\n                                var d = Model.getShapeById(h);\n                                if (d.name == \"verticalSeparator\") {\n                                    m++\n                                } else {\n                                    if (d.name == \"horizontalLane\") {\n                                        if (e == null || (d.props.y < e.props.y && f == \"t\") || (d.props.y > e.props.y && f == \"b\")) {\n                                            e = d\n                                        }\n                                        n += d.props.h\n                                    }\n                                }\n                            }\n                            if (e != null) {\n                                n -= e.props.h\n                            }\n                            if (m > 0) {\n                                n += 20\n                            }\n                            b.h = n\n                        }\n                    }\n                } else {\n                    if (l.name == \"horizontalLane\" && f == \"r\") {\n                        var g = 0;\n                        var e = l;\n                        var k = Model.getShapeById(e.parent);\n                        for (var j = 0; j < k.children.length; j++) {\n                            var h = k.children[j];\n                            var d = Model.getShapeById(h);\n                            if (d.name == \"verticalSeparator\") {\n                                g += d.props.w\n                            }\n                        }\n                        if (g == 0) {\n                            g = 50\n                        }\n                        b.w = g\n                    } else {\n                        if (l.name == \"cls\" || l.name == \"interface\" || l.name == \"package\" || l.name == \"combinedFragment\") {\n                            b.h = 50\n                        }\n                    }\n                }\n            }\n        }\n    }\n});\nDesigner.events.addEventListener(\"resizing\", function (b) {\n    var n = b.shape;\n    var e = b.dir;\n    var g = b.offset;\n    var h = [];\n    if (n.name == \"verticalPool\") {\n        if (e == \"b\") {\n            for (var j = 0; j < n.children.length; j++) {\n                var f = n.children[j];\n                var c = Model.getShapeById(f);\n                if (c.name == \"verticalLane\" || c.name == \"verticalSeparatorBar\") {\n                    c.props.h = n.props.h - 40;\n                    Designer.painter.renderShape(c);\n                    h.push(c)\n                }\n            }\n        } else {\n            if (e == \"r\") {\n                if (n.children && n.children.length > 0) {\n                    var d = null;\n                    for (var j = 0; j < n.children.length; j++) {\n                        var f = n.children[j];\n                        var c = Model.getShapeById(f);\n                        if (c.name == \"horizontalSeparator\") {\n                            c.props.w = n.props.w;\n                            Designer.painter.renderShape(c);\n                            h.push(c)\n                        }\n                        if (c.name == \"verticalLane\" && (d == null || c.props.x > d.props.x)) {\n                            d = c\n                        }\n                    }\n                    if (d != null) {\n                        d.props.w += g.w;\n                        Designer.painter.renderShape(d);\n                        h.push(d)\n                    }\n                }\n            } else {\n                if (e == \"l\") {\n                    if (n.children && n.children.length > 0) {\n                        var d = null;\n                        for (var j = 0; j < n.children.length; j++) {\n                            var f = n.children[j];\n                            var c = Model.getShapeById(f);\n                            if (c.name == \"horizontalSeparator\") {\n                                c.props.x += g.x;\n                                c.props.w += g.w;\n                                Designer.painter.renderShape(c);\n                                h.push(c)\n                            } else {\n                                if (c.name == \"verticalSeparatorBar\") {\n                                    c.props.x += g.x;\n                                    Designer.painter.renderShape(c);\n                                    h.push(c)\n                                }\n                            }\n                            if (c.name == \"verticalLane\" && (d == null || c.props.x < d.props.x)) {\n                                d = c\n                            }\n                        }\n                        if (d != null) {\n                            d.props.w += g.w;\n                            d.props.x += g.x;\n                            Designer.painter.renderShape(d);\n                            h.push(d)\n                        }\n                    }\n                }\n            }\n        }\n    } else {\n        if (n.name == \"verticalLane\") {\n            var m = Model.getShapeById(n.parent);\n            h = [m];\n            m.props.w += g.w;\n            m.props.h = n.props.h + 40;\n            m.props.x += g.x;\n            Designer.painter.renderShape(m);\n            if (e == \"r\") {\n                var o = [];\n                var k = Model.getPersistenceById(n.id);\n                for (var j = 0; j < m.children.length; j++) {\n                    var f = m.children[j];\n                    if (f != n.id) {\n                        var a = Model.getPersistenceById(f);\n                        var c = Model.getShapeById(f);\n                        if (c.name == \"horizontalSeparator\") {\n                            c.props.w += g.w;\n                            Designer.painter.renderShape(c);\n                            h.push(c)\n                        } else {\n                            if (a.props.x > k.props.x && a.name == \"verticalLane\") {\n                                o.push(c)\n                            }\n                        }\n                    }\n                }\n                if (o.length > 0) {\n                    var l = Utils.getContainedShapes(o);\n                    var p = Utils.getOutlinkers(l);\n                    l = l.concat(p);\n                    o = o.concat(l);\n                    Designer.op.moveShape(o, {\n                        x: g.w,\n                        y: 0\n                    });\n                    h = h.concat(o)\n                }\n            } else {\n                if (e == \"b\") {\n                    for (var j = 0; j < m.children.length; j++) {\n                        var f = m.children[j];\n                        if (f != n.id) {\n                            var c = Model.getShapeById(f);\n                            if (c.name == \"verticalLane\" || c.name == \"verticalSeparatorBar\") {\n                                c.props.h = n.props.h;\n                                Designer.painter.renderShape(c);\n                                h.push(c)\n                            }\n                        }\n                    }\n                } else {\n                    if (e == \"l\") {\n                        var o = [];\n                        var k = Model.getPersistenceById(n.id);\n                        for (var j = 0; j < m.children.length; j++) {\n                            var f = m.children[j];\n                            if (f != n.id) {\n                                var a = Model.getPersistenceById(f);\n                                var c = Model.getShapeById(f);\n                                if (c.name == \"horizontalSeparator\") {\n                                    c.props.x += g.x;\n                                    c.props.w += g.w;\n                                    Designer.painter.renderShape(c);\n                                    h.push(c)\n                                } else {\n                                    if (c.name == \"verticalSeparatorBar\") {\n                                        c.props.x += g.x;\n                                        Designer.painter.renderShape(c);\n                                        h.push(c)\n                                    } else {\n                                        if (a.props.x < k.props.x && a.name == \"verticalLane\") {\n                                            o.push(c)\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                        if (o.length > 0) {\n                            var l = Utils.getContainedShapes(o);\n                            var p = Utils.getOutlinkers(l);\n                            l = l.concat(p);\n                            o = o.concat(l);\n                            Designer.op.moveShape(o, {\n                                x: g.x,\n                                y: 0\n                            });\n                            h = h.concat(o)\n                        }\n                    }\n                }\n            }\n        } else {\n            if (n.name == \"horizontalSeparator\") {\n                var m = Model.getShapeById(n.parent);\n                h = [m];\n                m.props.h += g.h;\n                Designer.painter.renderShape(m);\n                for (var j = 0; j < m.children.length; j++) {\n                    var f = m.children[j];\n                    var c = Model.getShapeById(f);\n                    if (f == n.id) {\n                        continue\n                    }\n                    if (c.name != \"horizontalSeparator\") {\n                        c.props.h += g.h;\n                        Designer.painter.renderShape(c);\n                        h.push(c)\n                    } else {\n                        if (c.props.y > n.props.y) {\n                            c.props.y += g.h;\n                            Designer.painter.renderShape(c);\n                            h.push(c)\n                        }\n                    }\n                }\n            } else {\n                if (n.name == \"horizontalPool\") {\n                    if (e == \"r\") {\n                        for (var j = 0; j < n.children.length; j++) {\n                            var f = n.children[j];\n                            var c = Model.getShapeById(f);\n                            if (c.name == \"horizontalLane\" || c.name == \"horizontalSeparatorBar\") {\n                                c.props.w = n.props.w - 40;\n                                Designer.painter.renderShape(c);\n                                h.push(c)\n                            }\n                        }\n                    } else {\n                        if (e == \"b\") {\n                            if (n.children && n.children.length > 0) {\n                                var d = null;\n                                for (var j = 0; j < n.children.length; j++) {\n                                    var f = n.children[j];\n                                    var c = Model.getShapeById(f);\n                                    if (c.name == \"verticalSeparator\") {\n                                        c.props.h = n.props.h;\n                                        Designer.painter.renderShape(c);\n                                        h.push(c)\n                                    }\n                                    if (c.name == \"horizontalLane\" && (d == null || c.props.y > d.props.y)) {\n                                        d = c\n                                    }\n                                }\n                                if (d != null) {\n                                    d.props.h += g.h;\n                                    Designer.painter.renderShape(d);\n                                    h.push(d)\n                                }\n                            }\n                        } else {\n                            if (e == \"t\") {\n                                if (n.children && n.children.length > 0) {\n                                    var d = null;\n                                    for (var j = 0; j < n.children.length; j++) {\n                                        var f = n.children[j];\n                                        var c = Model.getShapeById(f);\n                                        if (c.name == \"verticalSeparator\") {\n                                            c.props.y += g.y;\n                                            c.props.h += g.h;\n                                            Designer.painter.renderShape(c);\n                                            h.push(c)\n                                        } else {\n                                            if (c.name == \"horizontalSeparatorBar\") {\n                                                c.props.y += g.y;\n                                                Designer.painter.renderShape(c);\n                                                h.push(c)\n                                            }\n                                        }\n                                        if (c.name == \"horizontalLane\" && (d == null || c.props.y < d.props.y)) {\n                                            d = c\n                                        }\n                                    }\n                                    if (d != null) {\n                                        d.props.h += g.h;\n                                        d.props.y += g.y;\n                                        Designer.painter.renderShape(d);\n                                        h.push(d)\n                                    }\n                                }\n                            }\n                        }\n                    }\n                } else {\n                    if (n.name == \"horizontalLane\") {\n                        var m = Model.getShapeById(n.parent);\n                        h = [m];\n                        m.props.h += g.h;\n                        m.props.w += g.w;\n                        m.props.y += g.y;\n                        Designer.painter.renderShape(m);\n                        if (e == \"r\") {\n                            for (var j = 0; j < m.children.length; j++) {\n                                var f = m.children[j];\n                                if (f != n.id) {\n                                    var c = Model.getShapeById(f);\n                                    if (c.name == \"horizontalLane\" || c.name == \"horizontalSeparatorBar\") {\n                                        c.props.w = n.props.w;\n                                        Designer.painter.renderShape(c);\n                                        h.push(c)\n                                    }\n                                }\n                            }\n                        } else {\n                            if (e == \"b\") {\n                                var o = [];\n                                var k = Model.getPersistenceById(n.id);\n                                for (var j = 0; j < m.children.length; j++) {\n                                    var f = m.children[j];\n                                    if (f != n.id) {\n                                        var a = Model.getPersistenceById(f);\n                                        var c = Model.getShapeById(f);\n                                        if (c.name == \"verticalSeparator\") {\n                                            c.props.h += g.h;\n                                            Designer.painter.renderShape(c);\n                                            h.push(c)\n                                        } else {\n                                            if (a.props.y > k.props.y && a.name == \"horizontalLane\") {\n                                                o.push(c)\n                                            }\n                                        }\n                                    }\n                                }\n                                if (o.length > 0) {\n                                    var l = Utils.getContainedShapes(o);\n                                    var p = Utils.getOutlinkers(l);\n                                    l = l.concat(p);\n                                    o = o.concat(l);\n                                    Designer.op.moveShape(o, {\n                                        x: 0,\n                                        y: g.h\n                                    });\n                                    h = h.concat(o)\n                                }\n                            } else {\n                                if (e == \"t\") {\n                                    var o = [];\n                                    var k = Model.getPersistenceById(n.id);\n                                    for (var j = 0; j < m.children.length; j++) {\n                                        var f = m.children[j];\n                                        if (f != n.id) {\n                                            var a = Model.getPersistenceById(f);\n                                            var c = Model.getShapeById(f);\n                                            if (c.name == \"verticalSeparator\") {\n                                                c.props.y += g.y;\n                                                c.props.h += g.h;\n                                                Designer.painter.renderShape(c);\n                                                h.push(c)\n                                            } else {\n                                                if (c.name == \"horizontalSeparatorBar\") {\n                                                    c.props.y += g.y;\n                                                    Designer.painter.renderShape(c);\n                                                    h.push(c)\n                                                } else {\n                                                    if (a.props.y < k.props.y && a.name == \"horizontalLane\") {\n                                                        o.push(c)\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    }\n                                    if (o.length > 0) {\n                                        var l = Utils.getContainedShapes(o);\n                                        var p = Utils.getOutlinkers(l);\n                                        l = l.concat(p);\n                                        o = o.concat(l);\n                                        Designer.op.moveShape(o, {\n                                            x: 0,\n                                            y: g.y\n                                        });\n                                        h = h.concat(o)\n                                    }\n                                }\n                            }\n                        }\n                    } else {\n                        if (n.name == \"verticalSeparator\") {\n                            var m = Model.getShapeById(n.parent);\n                            h = [m];\n                            m.props.w += g.w;\n                            Designer.painter.renderShape(m);\n                            for (var j = 0; j < m.children.length; j++) {\n                                var f = m.children[j];\n                                var c = Model.getShapeById(f);\n                                if (f == n.id) {\n                                    continue\n                                }\n                                if (c.name != \"verticalSeparator\") {\n                                    c.props.w += g.w;\n                                    Designer.painter.renderShape(c);\n                                    h.push(c)\n                                } else {\n                                    if (c.props.x > n.props.x) {\n                                        c.props.x += g.w;\n                                        Designer.painter.renderShape(c);\n                                        h.push(c)\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n    return h\n});\nDesigner.events.addEventListener(\"beforeRemove\", function (c) {\n    var n = {};\n    for (var g = 0; g < c.length; g++) {\n        var k = c[g];\n        n[k.id] = k\n    }\n    var a = [];\n    for (var g = 0; g < c.length; g++) {\n        var k = c[g];\n        if (k.name == \"verticalSeparatorBar\" && !n[k.parent] && a.indexOf(k.id) < 0) {\n            delete n[k.id]\n        } else {\n            if (k.name == \"horizontalSeparatorBar\" && !n[k.parent] && a.indexOf(k.id) < 0) {\n                delete n[k.id]\n            } else {\n                if (k.name == \"horizontalSeparator\") {\n                    var m = Model.getShapeById(k.parent);\n                    var h = null;\n                    var l = 0;\n                    for (var f = 0; f < m.children.length; f++) {\n                        var e = m.children[f];\n                        var d = Model.getShapeById(e);\n                        if (d.name == \"horizontalSeparator\" && !n[e]) {\n                            l += 1\n                        } else {\n                            if (d.name == \"verticalSeparatorBar\") {\n                                h = d\n                            }\n                        }\n                    }\n                    if (l == 0 && h != null) {\n                        n[h.id] = h;\n                        if (a.indexOf(h.id) < 0) {\n                            a.push(h.id)\n                        }\n                    }\n                } else {\n                    if (k.name == \"verticalSeparator\") {\n                        var m = Model.getShapeById(k.parent);\n                        var h = null;\n                        var l = 0;\n                        for (var f = 0; f < m.children.length; f++) {\n                            var e = m.children[f];\n                            var d = Model.getShapeById(e);\n                            if (d.name == \"verticalSeparator\" && !n[e]) {\n                                l += 1\n                            } else {\n                                if (d.name == \"horizontalSeparatorBar\") {\n                                    h = d\n                                }\n                            }\n                        }\n                        if (l == 0 && h != null) {\n                            n[h.id] = h;\n                            if (a.indexOf(h.id) < 0) {\n                                a.push(h.id)\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n    c = [];\n    for (var b in n) {\n        c.push(n[b])\n    }\n    return c\n});\nDesigner.events.addEventListener(\"removed\", function (b) {\n    var c = b.shapes;\n    var m = b.range;\n    var s = b.changedIds;\n    var g = [];\n    var r = [];\n    for (var j = 0; j < c.length; j++) {\n        var o = c[j];\n        if (o.name == \"verticalLane\" && m.indexOf(o.parent) < 0 && r.indexOf(o.parent) < 0) {\n            r.push(o.parent)\n        } else {\n            if (o.name == \"horizontalLane\" && m.indexOf(o.parent) < 0 && r.indexOf(o.parent) < 0) {\n                r.push(o.parent)\n            } else {\n                if (o.name == \"verticalSeparatorBar\" && m.indexOf(o.parent) < 0) {\n                    var q = Model.getShapeById(o.parent);\n                    q.props.w -= o.props.w;\n                    q.props.x += o.props.w;\n                    Designer.painter.renderShape(q);\n                    if (s.indexOf(o.parent) < 0) {\n                        s.push(o.parent);\n                        g.push(q)\n                    }\n                } else {\n                    if (o.name == \"horizontalSeparatorBar\" && m.indexOf(o.parent) < 0) {\n                        var q = Model.getShapeById(o.parent);\n                        q.props.y += o.props.h;\n                        q.props.h -= o.props.h;\n                        Designer.painter.renderShape(q);\n                        if (s.indexOf(o.parent) < 0) {\n                            s.push(o.parent);\n                            g.push(q)\n                        }\n                    } else {\n                        if (o.name == \"horizontalSeparator\" && m.indexOf(o.parent) < 0 && r.indexOf(o.parent) < 0) {\n                            r.push(o.parent)\n                        } else {\n                            if (o.name == \"verticalSeparator\" && m.indexOf(o.parent) < 0 && r.indexOf(o.parent) < 0) {\n                                r.push(o.parent)\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n    for (var n = 0; n < r.length; n++) {\n        var l = r[n];\n        var q = Model.getShapeById(l);\n        if (q.name == \"verticalPool\") {\n            var p = 0;\n            var e = 0;\n            for (var j = 0; j < q.children.length; j++) {\n                var f = q.children[j];\n                var d = Model.getShapeById(f);\n                if (d.name == \"verticalLane\") {\n                    e++;\n                    p += d.props.w\n                } else {\n                    if (d.name == \"verticalSeparatorBar\") {\n                        p += d.props.w\n                    }\n                }\n            }\n            if (e > 0) {\n                q.props.w = p;\n                Designer.painter.renderShape(q);\n                if (s.indexOf(l) < 0) {\n                    s.push(l);\n                    g.push(q)\n                }\n                var a = Utils.rangeChildren(q);\n                g = g.concat(a)\n            }\n        } else {\n            if (q.name == \"horizontalPool\") {\n                var k = 0;\n                var e = 0;\n                for (var j = 0; j < q.children.length; j++) {\n                    var f = q.children[j];\n                    var d = Model.getShapeById(f);\n                    if (d.name == \"horizontalLane\") {\n                        e++;\n                        k += d.props.h\n                    } else {\n                        if (d.name == \"horizontalSeparatorBar\") {\n                            k += d.props.h\n                        }\n                    }\n                }\n                if (e > 0) {\n                    q.props.h = k;\n                    Designer.painter.renderShape(q);\n                    if (s.indexOf(l) < 0) {\n                        s.push(l);\n                        g.push(q)\n                    }\n                    var a = Utils.rangeChildren(q);\n                    g = g.concat(a)\n                }\n            }\n        }\n    }\n    return g\n});\nDesigner.events.addEventListener(\"shapeChanged\", function (a) { });"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/designer.methods.js",
    "content": "Designer.addFunction(\"open\", function (definition) {\n    if (definition == \"\") {\n        return\n    }\n    if (typeof definition == \"string\") {\n        eval(\"definition = \" + definition)\n    }\n    $(\".shape_box\").remove();\n    Model.define.elements = {};\n    Model.persistence.elements = {};\n    Model.define.page = definition.page;\n    Model.persistence.page = Utils.copy(definition.page);\n    Model.comments = definition.comments;\n    if (definition.theme) {\n        Model.define.theme = definition.theme;\n        Model.persistence.theme = Utils.copy(definition.theme)\n    }\n    if (localRuntime == false) {\n        Designer.initialize.initCanvas()\n    }\n    var shapes = definition.elements;\n    var shapeCount = 0;\n    for (var shapeId in shapes) {\n        var shape = shapes[shapeId];\n        if (shape.name != \"linker\") {\n            Schema.initShapeFunctions(shape);\n            Designer.painter.renderShape(shape);\n            Model.add(shape, false)\n        }\n        shapeCount++\n    }\n    for (var shapeId in shapes) {\n        var shape = shapes[shapeId];\n        if (shape.name == \"linker\") {\n            Designer.painter.renderLinker(shape);\n            Model.add(shape, false)\n        }\n    }\n    if (shapeCount == 0) {\n        Model.build()\n    }\n    if (localRuntime == false) {\n        if (typeof isView == \"undefined\") {\n            Navigator.draw()\n        }\n    }\n});\nDesigner.addFunction(\"selectAll\", function () {\n    var a = Model.define.elements;\n    var b = [];\n    for (var c in a) {\n        b.push(c)\n    }\n    Utils.selectShape(b)\n});\nDesigner.addFunction(\"setFontStyle\", function (d) {\n    var c = Utils.getSelected();\n    if (c.length == 0) {\n        return\n    }\n    for (var b = 0; b < c.length; b++) {\n        var a = c[b];\n        a.fontStyle = Utils.copy(a.fontStyle);\n        if (typeof d.fontFamily != \"undefined\") {\n            a.fontStyle.fontFamily = d.fontFamily\n        }\n        if (typeof d.size != \"undefined\") {\n            a.fontStyle.size = d.size\n        }\n        if (typeof d.color != \"undefined\") {\n            a.fontStyle.color = d.color\n        }\n        if (typeof d.bold != \"undefined\") {\n            a.fontStyle.bold = d.bold\n        }\n        if (typeof d.italic != \"undefined\") {\n            a.fontStyle.italic = d.italic\n        }\n        if (typeof d.underline != \"undefined\") {\n            a.fontStyle.underline = d.underline\n        }\n        if (typeof d.textAlign != \"undefined\") {\n            a.fontStyle.textAlign = d.textAlign\n        }\n        if (a.name == \"linker\") {\n            Designer.painter.renderLinker(a)\n        } else {\n            if (typeof d.vAlign != \"undefined\") {\n                a.fontStyle.vAlign = d.vAlign\n            }\n            Designer.painter.renderShape(a)\n        }\n    }\n    Model.updateMulti(c)\n});\nDesigner.addFunction(\"setShapeStyle\", function (d) {\n    var c = Utils.getSelected();\n    if (c.length == 0) {\n        return\n    }\n    var e = [];\n    for (var b = 0; b < c.length; b++) {\n        var a = c[b];\n        if (a.name != \"linker\") {\n            a.shapeStyle = Utils.copy(a.shapeStyle);\n            if (typeof d.alpha != \"undefined\") {\n                a.shapeStyle.alpha = d.alpha\n            }\n            Designer.painter.renderShape(a);\n            e.push(a)\n        }\n    }\n    Model.updateMulti(e)\n});\nDesigner.addFunction(\"setLineStyle\", function (f) {\n    var e = Utils.getSelected();\n    if (e.length == 0) {\n        return\n    }\n    var d = Utils.getFamilyShapes(e);\n    e = e.concat(d);\n    for (var c = 0; c < e.length; c++) {\n        var a = e[c];\n        a.lineStyle = Utils.copy(a.lineStyle);\n        if (typeof f.lineWidth != \"undefined\") {\n            a.lineStyle.lineWidth = f.lineWidth\n        }\n        if (typeof f.lineColor != \"undefined\") {\n            a.lineStyle.lineColor = f.lineColor\n        }\n        if (typeof f.lineStyle != \"undefined\") {\n            a.lineStyle.lineStyle = f.lineStyle\n        }\n        if (a.name == \"linker\") {\n            if (typeof f.beginArrowStyle != \"undefined\") {\n                a.lineStyle.beginArrowStyle = f.beginArrowStyle;\n                Designer.defaults.linkerBeginArrowStyle = f.beginArrowStyle\n            }\n            if (typeof f.endArrowStyle != \"undefined\") {\n                a.lineStyle.endArrowStyle = f.endArrowStyle;\n                Designer.defaults.linkerEndArrowStyle = f.endArrowStyle\n            }\n            if (a.lineStyle.lineWidth == 0) {\n                a.lineStyle.lineWidth = 1\n            }\n        }\n    }\n    Model.updateMulti(e);\n    for (var c = 0; c < e.length; c++) {\n        var a = e[c];\n        Designer.painter.renderShape(a);\n        if (a.name != \"linker\") {\n            var g = Model.getShapeLinkers(a.id);\n            if (!g) {\n                continue\n            }\n            for (var b = 0; b < g.length; b++) {\n                if (!Utils.isSelected(g[b])) {\n                    var h = Model.getShapeById(g[b]);\n                    Designer.painter.renderShape(h)\n                }\n            }\n        }\n    }\n});\nDesigner.addFunction(\"setFillStyle\", function (f) {\n    var e = Utils.getSelected();\n    if (e.length == 0) {\n        return\n    }\n    if (e.length == 0) {\n        return\n    }\n    var g = [];\n    for (var c = 0; c < e.length; c++) {\n        var a = e[c];\n        if (a.name != \"linker\") {\n            a.fillStyle = Utils.copy(a.fillStyle);\n            var d = a.fillStyle.type;\n            if (typeof f.type != \"undefined\") {\n                b(a, f.type);\n                d = f.type\n            }\n            if (typeof f.color != \"undefined\") {\n                if (d == \"solid\") {\n                    a.fillStyle.color = f.color\n                } else {\n                    if (d == \"gradient\") {\n                        a.fillStyle.beginColor = GradientHelper.getLighterColor(f.color);\n                        a.fillStyle.endColor = GradientHelper.getDarkerColor(f.color)\n                    }\n                }\n            }\n            if (d == \"gradient\") {\n                if (typeof f.beginColor != \"undefined\") {\n                    a.fillStyle.beginColor = f.beginColor\n                }\n                if (typeof f.endColor != \"undefined\") {\n                    a.fillStyle.endColor = f.endColor\n                }\n                if (typeof f.gradientType != \"undefined\") {\n                    a.fillStyle.gradientType = f.gradientType;\n                    if (f.gradientType == \"linear\") {\n                        delete a.fillStyle.radius;\n                        a.fillStyle.angle = 0\n                    } else {\n                        delete a.fillStyle.angle;\n                        a.fillStyle.radius = 0.75\n                    }\n                }\n                if (typeof f.radius != \"undefined\") {\n                    a.fillStyle.radius = f.radius\n                }\n                if (typeof f.angle != \"undefined\") {\n                    a.fillStyle.angle = f.angle\n                }\n            }\n            if (d == \"image\") {\n                if (typeof f.display != \"undefined\") {\n                    a.fillStyle.display = f.display\n                }\n                if (typeof f.fileId != \"undefined\") {\n                    a.fillStyle.fileId = f.fileId\n                }\n                if (typeof f.imageW != \"undefined\") {\n                    a.fillStyle.imageW = f.imageW\n                }\n                if (typeof f.imageH != \"undefined\") {\n                    a.fillStyle.imageH = f.imageH\n                }\n            }\n            Designer.painter.renderShape(a);\n            g.push(a)\n        }\n    }\n    Model.updateMulti(g);\n\n    function b(i, k) {\n        var h = i.fillStyle;\n        if (h.type != k) {\n            var l = {\n                type: k\n            };\n            if (k == \"solid\") {\n                if (h.type == \"gradient\") {\n                    var j = GradientHelper.getDarkerColor(h.beginColor);\n                    l.color = j\n                } else {\n                    l.color = \"255,255,255\"\n                }\n            } else {\n                if (k == \"gradient\") {\n                    var m = h.color;\n                    if (h.type != \"solid\") {\n                        m = \"255,255,255\"\n                    }\n                    l.gradientType = \"linear\";\n                    l.angle = 0;\n                    l.beginColor = GradientHelper.getLighterColor(m);\n                    l.endColor = GradientHelper.getDarkerColor(m)\n                } else {\n                    if (k == \"image\") {\n                        l.fileId = \"\";\n                        l.display = \"fill\";\n                        l.imageW = 10;\n                        l.imageH = 10\n                    }\n                }\n            }\n            i.fillStyle = l\n        }\n    }\n});\nDesigner.addFunction(\"setLinkerType\", function (e) {\n    var d = Utils.getSelected();\n    if (d.length == 0) {\n        return\n    }\n    var f = [];\n    for (var c = 0; c < d.length; c++) {\n        var b = d[c];\n        if (b.name == \"linker\") {\n            b.linkerType = e;\n            Designer.painter.renderLinker(b, true);\n            f.push(b)\n        }\n    }\n    Schema.linkerDefaults.linkerType = e;\n    var a = Utils.getSelectedIds();\n    if (a.length > 1) {\n        Designer.painter.drawControls(a)\n    }\n    Model.updateMulti(f);\n    Utils.showLinkerControls()\n});\nDesigner.addFunction(\"matchSize\", function (l) {\n    var c = Utils.getSelected();\n    if (c.length == 0 || !l) {\n        return\n    }\n    var b = null;\n    var h = null;\n    var k = [];\n    for (var e = 0; e < c.length; e++) {\n        var g = c[e];\n        if (g.name != \"linker\") {\n            if (b == null || g.props.w > b) {\n                b = g.props.w\n            }\n            if (h == null || g.props.h > h) {\n                h = g.props.h\n            }\n        }\n    }\n    if (l.w == \"auto\") {\n        l.w = b\n    }\n    if (l.h == \"auto\") {\n        l.h = h\n    }\n    Utils.removeAnchors();\n    var d = [];\n    for (var e = 0; e < c.length; e++) {\n        var g = c[e];\n        if (g.name != \"linker\") {\n            var j = Designer.op.changeShapeProps(g, l);\n            Utils.showAnchors(g);\n            Utils.mergeArray(k, j);\n            d.push(g)\n        }\n    }\n    for (var e = 0; e < k.length; e++) {\n        var a = k[e];\n        var f = Model.getShapeById(a);\n        Designer.painter.renderLinker(f, true);\n        d.push(f)\n    }\n    Designer.painter.drawControls(Utils.getSelectedIds());\n    Model.updateMulti(d)\n});\nDesigner.addFunction(\"alignShapes\", function (c) {\n    var k = Utils.getSelected();\n    if (k.length == 0 || !c) {\n        return\n    }\n    var d = Utils.getSelectedIds();\n    var g = Utils.getControlBox(d);\n    var b = [];\n    Utils.removeAnchors();\n    var e = [];\n    for (var m = 0; m < k.length; m++) {\n        var a = k[m];\n        if (a.name != \"linker\") {\n            e.push(a)\n        }\n        if (c == \"left\") {\n            if (a.name != \"linker\") {\n                var q = Utils.getShapeBox(a);\n                var r = {\n                    x: g.x - (q.x - a.props.x)\n                };\n                var l = Designer.op.changeShapeProps(a, r);\n                Utils.showAnchors(a);\n                Utils.mergeArray(b, l)\n            } else {\n                if (a.from.id == null && a.to.id == null) {\n                    var o = Utils.getLinkerBox(a);\n                    a.from.x -= (o.x - g.x);\n                    a.to.x -= (o.x - g.x);\n                    b.push(a.id)\n                }\n            }\n        } else {\n            if (c == \"center\") {\n                var p = g.x + g.w / 2;\n                if (a.name != \"linker\") {\n                    var r = {\n                        x: Math.round(p - a.props.w / 2)\n                    };\n                    var l = Designer.op.changeShapeProps(a, r);\n                    Utils.showAnchors(a);\n                    Utils.mergeArray(b, l)\n                } else {\n                    if (a.from.id == null && a.to.id == null) {\n                        var o = Utils.getLinkerBox(a);\n                        a.from.x += Math.round(p - o.w / 2 - o.x);\n                        a.to.x += Math.round(p - o.w / 2 - o.x);\n                        b.push(a.id)\n                    }\n                }\n            } else {\n                if (c == \"right\") {\n                    var n = g.x + g.w;\n                    if (a.name != \"linker\") {\n                        var q = Utils.getShapeBox(a);\n                        var r = {\n                            x: n - a.props.w - (a.props.x - q.x)\n                        };\n                        var l = Designer.op.changeShapeProps(a, r);\n                        Utils.showAnchors(a);\n                        Utils.mergeArray(b, l)\n                    } else {\n                        if (a.from.id == null && a.to.id == null) {\n                            var o = Utils.getLinkerBox(a);\n                            a.from.x += (n - o.x - o.w);\n                            a.to.x += (n - o.x - o.w);\n                            b.push(a.id)\n                        }\n                    }\n                } else {\n                    if (c == \"top\") {\n                        if (a.name != \"linker\") {\n                            var q = Utils.getShapeBox(a);\n                            var r = {\n                                y: g.y - (q.y - a.props.y)\n                            };\n                            var l = Designer.op.changeShapeProps(a, r);\n                            Utils.showAnchors(a);\n                            Utils.mergeArray(b, l)\n                        } else {\n                            if (a.from.id == null && a.to.id == null) {\n                                var o = Utils.getLinkerBox(a);\n                                a.from.y -= (o.y - g.y);\n                                a.to.y -= (o.y - g.y);\n                                b.push(a.id)\n                            }\n                        }\n                    } else {\n                        if (c == \"middle\") {\n                            var s = g.y + g.h / 2;\n                            if (a.name != \"linker\") {\n                                var r = {\n                                    y: Math.round(s - a.props.h / 2)\n                                };\n                                var l = Designer.op.changeShapeProps(a, r);\n                                Utils.showAnchors(a);\n                                Utils.mergeArray(b, l)\n                            } else {\n                                if (a.from.id == null && a.to.id == null) {\n                                    var o = Utils.getLinkerBox(a);\n                                    a.from.y += Math.round(s - o.h / 2 - o.y);\n                                    a.to.y += Math.round(s - o.h / 2 - o.y);\n                                    b.push(a.id)\n                                }\n                            }\n                        } else {\n                            if (c == \"bottom\") {\n                                var f = g.y + g.h;\n                                if (a.name != \"linker\") {\n                                    var q = Utils.getShapeBox(a);\n                                    var r = {\n                                        y: f - a.props.h - (a.props.y - q.y)\n                                    };\n                                    var l = Designer.op.changeShapeProps(a, r);\n                                    Utils.showAnchors(a);\n                                    Utils.mergeArray(b, l)\n                                } else {\n                                    if (a.from.id == null && a.to.id == null) {\n                                        var o = Utils.getLinkerBox(a);\n                                        a.from.y += (f - o.y - o.h);\n                                        a.to.y += (f - o.y - o.h);\n                                        b.push(a.id)\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n    for (var m = 0; m < b.length; m++) {\n        var j = b[m];\n        var h = Model.getShapeById(j);\n        Designer.painter.renderLinker(h, true);\n        e.push(h)\n    }\n    Designer.painter.drawControls(d);\n    Model.updateMulti(e)\n});\nDesigner.addFunction(\"distributeShapes\", function (o) {\n    var f = Utils.getSelected();\n    if (f.length == 0 || !o) {\n        return\n    }\n    var m = Utils.getSelectedIds();\n    var l = Utils.getControlBox(m);\n    var s = [];\n    Utils.removeAnchors();\n    var e = [];\n    for (var g = 0; g < f.length; g++) {\n        var n = f[g];\n        if (n.name != \"linker\") {\n            e.push(n)\n        }\n    }\n    if (o == \"h\") {\n        e.sort(function d(i, h) {\n            return i.props.x - h.props.x\n        });\n        var p = l.w;\n        for (var g = 0; g < e.length; g++) {\n            var n = e[g];\n            p -= n.props.w\n        }\n        var a = p / (e.length - 1);\n        var c = l.x;\n        for (var g = 0; g < e.length; g++) {\n            var n = e[g];\n            var r = {\n                x: c\n            };\n            var q = Designer.op.changeShapeProps(n, r);\n            Utils.showAnchors(n);\n            Utils.mergeArray(s, q);\n            c += (n.props.w + a)\n        }\n    } else {\n        e.sort(function d(i, h) {\n            return i.props.y - h.props.y\n        });\n        var k = l.h;\n        for (var g = 0; g < e.length; g++) {\n            var n = e[g];\n            k -= n.props.h\n        }\n        var a = k / (e.length - 1);\n        var c = l.y;\n        for (var g = 0; g < e.length; g++) {\n            var n = e[g];\n            var r = {\n                y: c\n            };\n            var q = Designer.op.changeShapeProps(n, r);\n            Utils.showAnchors(n);\n            Utils.mergeArray(s, q);\n            c += (n.props.h + a)\n        }\n    }\n    for (var g = 0; g < s.length; g++) {\n        var b = s[g];\n        var j = Model.getShapeById(b);\n        Designer.painter.renderLinker(j, true);\n        e.push(j)\n    }\n    Designer.painter.drawControls(m);\n    Model.updateMulti(e)\n});\nDesigner.addFunction(\"layerShapes\", function (m) {\n    var h = Utils.getSelected();\n    if (h.length == 0 || !m) {\n        return\n    }\n    h.sort(function c(r, i) {\n        return r.props.zindex - i.props.zindex\n    });\n    var b;\n    if (m == \"front\") {\n        b = Model.maxZIndex;\n        for (var j = 0; j < h.length; j++) {\n            var l = h[j];\n            b += 1;\n            l.props.zindex = b\n        }\n    } else {\n        if (m == \"forward\") {\n            var d = null;\n            var q = null;\n            for (var j = 0; j < h.length; j++) {\n                var l = h[j];\n                d = n(l);\n                if (d != null) {\n                    q = l.props.zindex;\n                    break\n                }\n            }\n            if (d == null) {\n                return\n            }\n            var k = d.props.zindex;\n            var f = n(d);\n            var p = k + 1;\n            if (f != null) {\n                p = k + (f.props.zindex - k) / 2\n            }\n            var g = p - q;\n            for (var j = 0; j < h.length; j++) {\n                var l = h[j];\n                l.props.zindex += g\n            }\n        } else {\n            if (m == \"back\") {\n                b = Model.orderList[0].zindex;\n                for (var j = h.length - 1; j >= 0; j--) {\n                    var l = h[j];\n                    b -= 1;\n                    l.props.zindex = b\n                }\n            } else {\n                if (m == \"backward\") {\n                    var a = null;\n                    var q = null;\n                    for (var j = 0; j < h.length; j++) {\n                        var l = h[j];\n                        a = e(l);\n                        if (a != null) {\n                            q = l.props.zindex;\n                            break\n                        }\n                    }\n                    if (a == null) {\n                        return\n                    }\n                    var k = a.props.zindex;\n                    var o = e(a);\n                    var p = k - 1;\n                    if (o != null) {\n                        p = k - (k - o.props.zindex) / 2\n                    }\n                    var g = p - q;\n                    for (var j = 0; j < h.length; j++) {\n                        var l = h[j];\n                        l.props.zindex += g\n                    }\n                }\n            }\n        }\n    }\n    Model.updateMulti(h);\n\n    function n(s) {\n        var v = Utils.getShapeBox(s);\n        for (var u = 0; u < Model.orderList.length; u++) {\n            var i = Model.orderList[u];\n            if (i.zindex <= s.props.zindex || Utils.isSelected(i.id)) {\n                continue\n            }\n            var t = Model.getShapeById(i.id);\n            var r = Utils.getShapeBox(t);\n            if (Utils.rectCross(v, r)) {\n                return t\n            }\n        }\n        return null\n    }\n\n    function e(s) {\n        var v = Utils.getShapeBox(s);\n        for (var u = Model.orderList.length - 1; u >= 0; u--) {\n            var i = Model.orderList[u];\n            if (i.zindex >= s.props.zindex || Utils.isSelected(i.id)) {\n                continue\n            }\n            var t = Model.getShapeById(i.id);\n            var r = Utils.getShapeBox(t);\n            if (Utils.rectCross(v, r)) {\n                return t\n            }\n        }\n        return null\n    }\n});\nDesigner.addFunction(\"group\", function () {\n    var d = Utils.getSelected();\n    if (d.length < 2) {\n        return\n    }\n    var c = Utils.newId();\n    for (var b = 0; b < d.length; b++) {\n        var a = d[b];\n        a.group = c\n    }\n    Model.updateMulti(d)\n});\nDesigner.addFunction(\"ungroup\", function () {\n    var c = Utils.getSelected();\n    if (c.length == 0) {\n        return\n    }\n    for (var b = 0; b < c.length; b++) {\n        var a = c[b];\n        a.group = null\n    }\n    Model.updateMulti(c)\n});\nDesigner.addFunction(\"lockShapes\", function () {\n    var b = Utils.getSelectedIds();\n    if (b.length == 0) {\n        return\n    }\n    var d = [];\n    for (var c = 0; c < b.length; c++) {\n        var a = Model.getShapeById(b[c]);\n        a.locked = true;\n        d.push(a)\n    }\n    Utils.unselect();\n    Utils.selectShape(b);\n    Model.updateMulti(d)\n});\nDesigner.addFunction(\"unlockShapes\", function () {\n    var b = Utils.getSelectedLockedIds();\n    if (b.length == 0) {\n        return\n    }\n    var d = [];\n    for (var c = 0; c < b.length; c++) {\n        var a = Model.getShapeById(b[c]);\n        a.locked = false;\n        d.push(a)\n    }\n    var e = Utils.getSelectedIds();\n    Utils.unselect();\n    Utils.selectShape(e);\n    Model.updateMulti(d)\n});\nDesigner.addFunction(\"setPageStyle\", function (a) {\n    Model.updatePage(a)\n});\nDesigner.addFunction(\"setReadonly\", function (a) {\n    if (typeof a != \"boolean\") {\n        return\n    }\n    if (a) {\n        $(\".diagram_title\").addClass(\"readonly\");\n        $(\".menubar\").hide();\n        $(\".toolbar\").hide();\n        $(\"#shape_panel\").addClass(\"readonly\");\n        $(\"#designer_viewport\").addClass(\"readonly\");\n        Designer.hotkey.cancel();\n        Designer.op.cancel();\n        $(window).trigger(\"resize.designer\");\n        $(\"#dock\").hide();\n        $(\".dock_view\").hide();\n        Dock.currentView = \"\";\n        Designer.contextMenu.destroy()\n    }\n});\nDesigner.addFunction(\"zoomIn\", function () {\n    var a = Designer.config.scale;\n    var b = a + 0.1;\n    Designer.setZoomScale(b)\n});\nDesigner.addFunction(\"zoomOut\", function () {\n    var a = Designer.config.scale;\n    var b = a - 0.1;\n    Designer.setZoomScale(b)\n});\nDesigner.addFunction(\"setZoomScale\", function (e) {\n    if (e < 0.25) {\n        e = 0.25\n    }\n    if (e > 4) {\n        e = 4\n    }\n    Utils.hideLinkerCursor();\n    Designer.config.scale = e;\n    Designer.initialize.initCanvas();\n    for (var d in Model.define.elements) {\n        var b = Model.define.elements[d];\n        Designer.painter.renderShape(b)\n        if (b.name != 'linker') {\n            var top = $('#' + b.id).find('.text_canvas').css('top');\n            $.each($('#' + b.id).find('.fa'), function () {\n                // $(this).css({ top: top })\n                $(this).css({ top: ($('#' + b.id).height() / 2 - 7.5) })\n            });\n            $.each($('#' + b.id).find('img'), function () {\n                $(this).css({ top: ($('#' + b.id).height() / 2 - 7.5) })\n            });\n        }\n    }\n    var a = Utils.getSelectedIds();\n    var c = Utils.getSelectedLockedIds();\n    Utils.mergeArray(a, c);\n    Utils.unselect();\n    Utils.selectShape(a);\n    Utils.showLinkerCursor()\n});\nDesigner.addFunction(\"setShapeProps\", function (h, b) {\n    if (!b) {\n        b = Utils.getSelected()\n    }\n    if (b.length == 0 || !h) {\n        return\n    }\n    var c = [];\n    var k = [];\n    for (var d = 0; d < b.length; d++) {\n        var g = b[d];\n        if (g.name != \"linker\") {\n            var j = Designer.op.changeShapeProps(g, h);\n            c.push(g);\n            if (j && j.length) {\n                Utils.mergeArray(k, j)\n            }\n        }\n    }\n    for (var d = 0; d < k.length; d++) {\n        var a = k[d];\n        var e = Model.getShapeById(a);\n        Designer.painter.renderLinker(e, true);\n        c.push(e)\n    }\n    if (c.length > 0) {\n        Model.updateMulti(c)\n    }\n    var f = Utils.getSelectedIds();\n    Utils.unselect();\n    Utils.selectShape(f)\n});\nDesigner.addFunction(\"addDataAttribute\", function (a) {\n    var c = Utils.getSelectedIds();\n    var b = Model.getShapeById(c[0]);\n    if (!b.dataAttributes) {\n        b.dataAttributes = []\n    }\n    a.id = Utils.newId();\n    a.category = \"custom\";\n    b.dataAttributes.push(a);\n    MessageSource.doWithoutUpdateDock(function () {\n        Model.update(b)\n    })\n});\nDesigner.addFunction(\"updateDataAttribute\", function (f) {\n    var c = Utils.getSelectedIds();\n    var b = Model.getShapeById(c[0]);\n    if (!b.dataAttributes) {\n        b.dataAttributes = []\n    }\n    var e = false;\n    for (var d = 0; d < b.dataAttributes.length; d++) {\n        var a = b.dataAttributes[d];\n        if (a.id == f.id) {\n            b.dataAttributes[d] = f;\n            e = true\n        }\n    }\n    if (!e) {\n        return\n    }\n    MessageSource.doWithoutUpdateDock(function () {\n        Model.update(b)\n    });\n    Designer.painter.renderShape(b)\n});\nDesigner.addFunction(\"getDataAttrById\", function (e) {\n    var c = Utils.getSelectedIds();\n    var b = Model.getShapeById(c[0]);\n    if (!b.dataAttributes) {\n        b.dataAttributes = []\n    }\n    for (var d = 0; d < b.dataAttributes.length; d++) {\n        var a = b.dataAttributes[d];\n        if (a.id == e) {\n            return a\n        }\n    }\n    return null\n});\nDesigner.addFunction(\"getDefaultDataAttrByName\", function (d) {\n    var c = Utils.getSelectedIds();\n    var b = Model.getShapeById(c[0]);\n    if (!b.dataAttributes) {\n        b.dataAttributes = []\n    }\n    for (var e = 0; e < b.dataAttributes.length; e++) {\n        var a = b.dataAttributes[e];\n        if (a.category == \"default\" && a.name == d) {\n            return a\n        }\n    }\n    return null\n});\nDesigner.addFunction(\"deleteDataAttribute\", function (e) {\n    var c = Utils.getSelectedIds();\n    var b = Model.getShapeById(c[0]);\n    if (!b.dataAttributes) {\n        b.dataAttributes = []\n    }\n    var f = false;\n    for (var d = 0; d < b.dataAttributes.length; d++) {\n        var a = b.dataAttributes[d];\n        if (a.id == e) {\n            b.dataAttributes.splice(d, 1);\n            f = true\n        }\n    }\n    if (!f) {\n        return\n    }\n    MessageSource.doWithoutUpdateDock(function () {\n        Model.update(b)\n    });\n    Designer.painter.renderShape(b)\n});\nDesigner.addFunction(\"setSchema\", function (schemaCategories, callback) {\n    if (schemaCategories.length == 0) {\n        Schema.empty();\n        Schema.init(true);\n        Designer.initialize.initShapes();\n        if (callback) {\n            callback()\n        }\n        return\n    }\n    Util.ajax({\n        url: \"/diagraming/schema\",\n        data: {\n            categories: schemaCategories\n        },\n        type: \"get\",\n        success: function (data) {\n            Schema.empty();\n            eval(data);\n            Schema.init(true);\n            Designer.initialize.initShapes();\n            if (callback) {\n                callback()\n            }\n        }\n    })\n});"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/designer.ui.js",
    "content": "var UI={init:function(){$(\".diagram_title\").bind(\"click\",function(){if($(this).hasClass(\"readonly\")){return}var h=$.trim($(this).text());$(this).hide();$(\"#title_container\").append(\"<input type='text'/>\");$(\"#title_container\").children(\"input\").val(h).select();$(\"#title_container\").children(\"input\").bind(\"blur\",function(){var i=$.trim($(this).val());UI.changeTitle(i)}).bind(\"keydown\",function(i){if($.trim($(this).val()).length>60){$(this).val($.trim($(this).val()).substring(0,60))}if(i.keyCode==13){var j=$.trim($(this).val());UI.changeTitle(j)}})});$(\"#bar_theme\").button({onMousedown:function(){UI.showThemeSelect()}});$(\"#bar_undo\").button({onClick:function(){MessageSource.undo()}});$(\"#bar_redo\").button({onClick:function(){MessageSource.redo()}});$(\"#bar_brush\").button({onClick:function(){if($(\"#bar_brush\").button(\"isSelected\")){$(\"#bar_brush\").button(\"unselect\");$(\"#designer_op_help\").hide();$(document).unbind(\"keydown.cancelbrush\");Utils.selectCallback=null}else{Designer.clipboard.brush()}}});$(\"#bar_font_family\").button({onMousedown:function(){$(\"#font_list\").dropdown({target:$(\"#bar_font_family\"),onSelect:function(j){var i=j.text();Designer.setFontStyle({fontFamily:i});$(\"#bar_font_family\").button(\"setText\",i)}});var h=$(\"#bar_font_family\").text().trim();$(\"#font_list\").children().each(function(){if($(this).text()==h){$(\"#font_list\").dropdown(\"select\",$(this));return false}})}});$(\"#bar_font_size\").spinner({min:12,max:100,step:1,unit:\"px\",onChange:function(h){Designer.setFontStyle({size:h})}});$(\"#bar_font_size\").spinner(\"setValue\",\"13px\");$(\"#bar_font_bold\").button({onClick:function(){var h=!$(\"#bar_font_bold\").button(\"isSelected\");Designer.setFontStyle({bold:h});$(\"#bar_font_bold\").toggleClass(\"selected\")}});$(\"#bar_font_italic\").button({onClick:function(){var h=!$(\"#bar_font_italic\").button(\"isSelected\");Designer.setFontStyle({italic:h});$(\"#bar_font_italic\").toggleClass(\"selected\")}});$(\"#bar_font_underline\").button({onClick:function(){var h=!$(\"#bar_font_underline\").button(\"isSelected\");Designer.setFontStyle({underline:h});$(\"#bar_font_underline\").toggleClass(\"selected\")}});$(\"#bar_font_color\").button({onMousedown:function(){var h=$(\"#bar_font_color\").button(\"getColor\");$.colorpicker({target:$(\"#bar_font_color\"),onSelect:function(i){Designer.setFontStyle({color:i});$(\"#bar_font_color\").button(\"setColor\",i)},color:h,trans:false})}});$(\"#bar_font_align\").button({onMousedown:function(){$(\"#font_align_list\").dropdown({target:$(\"#bar_font_align\"),onSelect:function(h){var i={};i[h.attr(\"cate\")]=h.attr(\"al\");Designer.setFontStyle(i)}})}});$(\"#bar_fill\").button({onMousedown:function(){var h=$(\"#bar_fill\").button(\"getColor\");$.colorpicker({target:$(\"#bar_fill\"),onSelect:function(i){Designer.setFillStyle({type:\"solid\",color:i});$(\"#bar_fill\").button(\"setColor\",i)},color:h,extend:\"<div id='bar_fill_gradient' title='渐变' class='toolbar_button active'><div class='ico gradient'></div></div><div id='bar_fill_img' title='图片...' class='toolbar_button active'><div class='ico ico_img'></div></div><div id='bar_fill_more' class='toolbar_button active'>更多...</div>\"});$(\"#bar_fill_gradient\").unbind().bind(\"click\",function(){Designer.setFillStyle({type:\"gradient\"});$(\"#color_picker\").dropdown(\"close\")});$(\"#bar_fill_img\").unbind().bind(\"click\",function(){UI.showImageSelect(function(j,i,k){Designer.setFillStyle({type:\"image\",fileId:j,imageW:i,imageH:k})});$(\"#color_picker\").dropdown(\"close\")});$(\"#bar_fill_more\").unbind().bind(\"click\",function(){Dock.showView(\"graphic\",true);$(\"#color_picker\").dropdown(\"close\")})}});$(\"#bar_line_color\").button({onMousedown:function(){var h=$(\"#bar_line_color\").button(\"getColor\");$.colorpicker({target:$(\"#bar_line_color\"),onSelect:function(i){Designer.setLineStyle({lineColor:i});$(\"#bar_line_color\").button(\"setColor\",i)},color:h,trans:false})}});$(\"#bar_line_width\").button({onMousedown:function(){$(\"#line_width_list\").dropdown({target:$(\"#bar_line_width\"),onSelect:function(l){var k=parseInt(l.text());Designer.setLineStyle({lineWidth:k})}});var i=Utils.getSelected()[0];var h;if(i.name==\"linker\"){h=Utils.getLinkerLineStyle(i.lineStyle)}else{h=Utils.getShapeLineStyle(i.lineStyle)}var j=h.lineWidth;$(\"#line_width_list\").children().each(function(){if(parseInt($(this).text())==j){$(\"#line_width_list\").dropdown(\"select\",$(this))}})}});$(\"#bar_line_style\").button({onMousedown:function(){$(\"#line_style_list\").dropdown({target:$(\"#bar_line_style\"),onSelect:function(m){var l=m.attr(\"line\");Designer.setLineStyle({lineStyle:l})}});var i=Utils.getSelected()[0];var h;if(i.name==\"linker\"){h=Utils.getLinkerLineStyle(i.lineStyle)}else{h=Utils.getShapeLineStyle(i.lineStyle)}var j=h.lineStyle;var k=$(\"#line_style_list\").children(\"li[line=\"+j+\"]\");$(\"#line_style_list\").dropdown(\"select\",k)}});$(\"#bar_linkertype\").button({onMousedown:function(){$(\"#line_type_list\").dropdown({target:$(\"#bar_linkertype\"),onSelect:function(j){var i=j.attr(\"tp\");Designer.setLinkerType(i);var h=j.children(\"div\").attr(\"class\");$(\"#bar_linkertype\").children(\"div:eq(0)\").attr(\"class\",h)}})}});$(\"#bar_beginarrow\").button({onMousedown:function(){$(\"#beginarrow_list\").dropdown({target:$(\"#bar_beginarrow\"),onSelect:function(m){var n=m.attr(\"arrow\");Designer.setLineStyle({beginArrowStyle:n});var l=m.children(\".ico_arrow\").attr(\"class\");$(\"#bar_beginarrow\").children(\"div:eq(0)\").attr(\"class\",l)}});var i=Utils.getSelected()[0];var h;if(i.name==\"linker\"){h=Utils.getLinkerLineStyle(i.lineStyle)}else{h=Utils.getShapeLineStyle(i.lineStyle)}var j=h.beginArrowStyle;var k=$(\"#beginarrow_list\").children(\"li[arrow=\"+j+\"]\");$(\"#beginarrow_list\").dropdown(\"select\",k)}});$(\"#bar_endarrow\").button({onMousedown:function(){$(\"#endarrow_list\").dropdown({target:$(\"#bar_endarrow\"),onSelect:function(m){var n=m.attr(\"arrow\");Designer.setLineStyle({endArrowStyle:n});var l=m.children(\".ico_arrow\").attr(\"class\");$(\"#bar_endarrow\").children(\"div:eq(0)\").attr(\"class\",l)}});var i=Utils.getSelected()[0];var h;if(i.name==\"linker\"){h=Utils.getLinkerLineStyle(i.lineStyle)}else{h=Utils.getShapeLineStyle(i.lineStyle)}var j=h.endArrowStyle;var k=$(\"#endarrow_list\").children(\"li[arrow=\"+j+\"]\");$(\"#endarrow_list\").dropdown(\"select\",k)}});$(\"#bar_front\").button({onClick:function(){Designer.layerShapes(\"front\")}});$(\"#bar_back\").button({onClick:function(){Designer.layerShapes(\"back\")}});$(\"#bar_lock\").button({onClick:function(){Designer.lockShapes()}});$(\"#bar_unlock\").button({onClick:function(){Designer.unlockShapes()}});$(\"#bar_link\").button({onClick:function(){UI.showInsertLink()}});$(\"#bar_collapse\").button({onClick:function(){var h=UI.toogleTitleBar();CLB.setConfig(\"showToolbar\",h)}});$(\"#menu_bar\").children().bind(\"mousedown\",function(i){var h=$(this);b(h);i.stopPropagation()});$(\"#menu_bar\").children().bind(\"mouseenter\",function(){var h=$(this);if($(\"#ui_container\").find(\".options_menu:visible\").length>0){b(h)}});function b(i){var l=i.attr(\"menu\");if(i.hasClass(\"readonly\")){return}$(\"#\"+l).dropdown({target:i,onSelect:function(m){g(m)}});if(l==\"bar_list_page\"){var j=$(\"#bar_list_pagesize\").children(\"li[w=\"+Model.define.page.width+\"][h=\"+Model.define.page.height+\"]\");if(j.length>0){$(\"#bar_list_pagesize\").dropdown(\"select\",j)}else{$(\"#bar_list_pagesize\").dropdown(\"select\",$(\"#page_size_custom\"))}$(\"#page_size_w\").spinner(\"setValue\",Model.define.page.width+\"px\");$(\"#page_size_h\").spinner(\"setValue\",Model.define.page.height+\"px\");j=$(\"#bar_list_padding\").children(\"li[p=\"+Model.define.page.padding+\"]\");$(\"#bar_list_padding\").dropdown(\"select\",j);j=$(\"#bar_list_gridsize\").children(\"li[s=\"+Model.define.page.gridSize+\"]\");$(\"#bar_list_gridsize\").dropdown(\"select\",j);if(Model.define.page.showGrid){$(\"#bar_list_page\").dropdown(\"select\",$(\"#bar_list_page\").children(\"li[ac=set_page_showgrid]\"))}else{$(\"#bar_list_page\").dropdown(\"unselect\",$(\"#bar_list_page\").children(\"li[ac=set_page_showgrid]\"))}var h=\"portrait\";if(Model.define.page.orientation){h=Model.define.page.orientation}var k=$(\"#bar_list_orientation\").children(\"li[ori=\"+h+\"]\");$(\"#bar_list_orientation\").children().menuitem(\"unselect\");k.menuitem(\"select\")}else{if(l==\"bar_list_view\"){var j=$(\"#bar_list_view\").children(\".static[zoom='\"+Designer.config.scale+\"']\");if(j.length){$(\"#bar_list_page\").dropdown(\"select\",j)}}}}function g(t){var k=t.attr(\"ac\");if(k==\"rename\"){$(\".diagram_title\").trigger(\"click\")}else{if(k==\"close\"){window.location.href=\"/diagraming/back?id=\"+chartId}else{if(k==\"saveAs\"){UI.showSaveAs()}else{if(k==\"export\"){$(\"#export_dialog\").dlg();$(\"#export_png\").click()}else{if(k==\"undo\"){MessageSource.undo()}else{if(k==\"redo\"){MessageSource.redo()}else{if(k==\"cut\"){Designer.clipboard.cut()}else{if(k==\"copy\"){Designer.clipboard.copy()}else{if(k==\"paste\"){Designer.clipboard.paste()}else{if(k==\"duplicate\"){Designer.clipboard.duplicate()}else{if(k==\"brush\"){Designer.clipboard.brush()}else{if(k==\"selectall\"){Designer.selectAll()}else{if(k==\"delete\"){Designer.op.removeShape()}else{if(k==\"zoom\"){var u=t.attr(\"zoom\");if(u==\"in\"){Designer.zoomIn()}else{if(u==\"out\"){Designer.zoomOut()}else{var m=parseFloat(u);Designer.setZoomScale(m)}}}else{if(k==\"insert\"){var q=t.attr(\"in\");if(q==\"text\"){Designer.op.changeState(\"creating_free_text\")}else{if(q==\"image\"){UI.showImageSelect(function(s,p,x){UI.insertImage(s,p,x)})}else{if(q==\"line\"){Designer.op.changeState(\"creating_free_linker\")}}}}else{if(k==\"set_page_size\"){var r=parseInt(t.attr(\"w\"));var l=parseInt(t.attr(\"h\"));Designer.setPageStyle({width:r,height:l})}else{if(k==\"set_page_padding\"){var j=parseInt(t.attr(\"p\"));Designer.setPageStyle({padding:j})}else{if(k==\"set_page_orientation\"){var i=t.attr(\"ori\");Designer.setPageStyle({orientation:i})}else{if(k==\"set_page_showgrid\"){if(t.menuitem(\"isSelected\")){t.menuitem(\"unselect\");Designer.setPageStyle({showGrid:false})}else{t.menuitem(\"select\");Designer.setPageStyle({showGrid:true})}}else{if(k==\"set_page_gridsize\"){var v=parseInt(t.attr(\"s\"));Designer.setPageStyle({gridSize:v})}else{if(k==\"front\"){Designer.layerShapes(\"front\")}else{if(k==\"back\"){Designer.layerShapes(\"back\")}else{if(k==\"forward\"){Designer.layerShapes(\"forward\")}else{if(k==\"backward\"){Designer.layerShapes(\"backward\")}else{if(k==\"align_shape\"){var n=t.attr(\"al\");Designer.alignShapes(n)}else{if(k==\"distribute_shape\"){var o=t.attr(\"dis\");Designer.distributeShapes(o)}else{if(k==\"match_size\"){if(t.attr(\"custom\")){Dock.showView(\"metric\",true)}else{var o={};var r=t.attr(\"w\");var l=t.attr(\"h\");if(r){o.w=r}if(l){o.h=l}Designer.matchSize(o)}}else{if(k==\"lock\"){Designer.lockShapes()}else{if(k==\"unlock\"){Designer.unlockShapes()}else{if(k==\"group\"){Designer.group()}else{if(k==\"ungroup\"){Designer.ungroup()}else{if(k==\"hotkey\"){UI.showHotKey()}else{if(k==\"feedback\"){UI.showFeedBack()}else{if(k==\"getting_started\"){UI.gettingStart()}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}$(\"#page_size_w\").spinner({min:200,unit:\"px\",step:100,onChange:function(h){Designer.setPageStyle({width:h})}});$(\"#page_size_h\").spinner({min:200,unit:\"px\",step:100,onChange:function(h){Designer.setPageStyle({height:h})}});var a=$(\"#color_picker\").html();var c=$(\"<div class='menu color_picker extend_menu'>\"+a+\"</div>\").appendTo($(\"#bar_page_color\"));c.css(\"right\",\"-179px\");c.children(\".color_items\").children(\"div\").unbind().bind(\"click\",function(){var h=$(this).css(\"background-color\");h=h.replace(/\\s/g,\"\");h=h.substring(4,h.length-1);Designer.setPageStyle({backgroundColor:h});$(\"#bar_list_page\").dropdown(\"close\")});c.children(\".color_items\").children(\"div\").off(\"mouseenter\").on(\"mouseenter\",function(){var h=$(this).css(\"background-color\");h=h.replace(/\\s/g,\"\");h=UI.RGB2Hex(h);c.children(\".color_hex\").find(\"input\").val(h)});c.children(\".color_hex\").find(\"input\").off(\"keyup\").on(\"keyup\",function(){var i=$(this).val();if(i.length==3||i.length==6){var h=UI.hex2RGB(\"#\"+i);Designer.setPageStyle({backgroundColor:h})}});c.children(\".color_transparent\").bind(\"click\",function(){Designer.setPageStyle({backgroundColor:\"transparent\"});$(\"#bar_list_page\").dropdown(\"close\")});var e=Model.define.page;if(e.backgroundColor!=\"transparent\"){var f=e.backgroundColor;var d=UI.RGB2Hex(\"rgb(\"+f+\")\");c.children(\".color_hex\").find(\"input\").val(d)}Designer.events.push(\"selectChanged\",0);Designer.events.push(\"clipboardChanged\",0);Designer.events.push(\"undoStackChanged\",0);Designer.events.push(\"redoStackChanged\",0)},changeTitle:function(d){var b=$(\".diagram_title\").text();if(d&&d!=b&&chartId!=\"\"){var a={action:\"changeTitle\",title:d};CLB.send(a)}var c=d!=\"\"?d:b;$(\"title\").text(c+\" - ProcessOn\");$(\".diagram_title\").text(c).show();$(\"#title_container\").children(\"input\").remove()},update:function(){var h=Utils.getSelectedIds();var f=h.length;var n=Utils.getSelectedLinkerIds();var a=n.length;var e=Utils.getSelectedShapeIds();var m=e.length;var l=Utils.getSelectedLockedIds().length;var k=Utils.getSelectedGroups().length;var d=$(\"#bar_list_arrange\");if(f==0){$(\".toolbar\").find(\".selected\").removeClass(\"selected\");if($(\"#designer_op_help\").is(\":visible\")){$(\"#bar_brush\").button(\"enable\");$(\"#bar_brush\").button(\"select\")}else{$(\"#bar_brush\").button(\"disable\")}$(\"#bar_font_family\").button(\"disable\");$(\"#bar_font_size\").button(\"disable\");$(\"#bar_font_bold\").button(\"disable\");$(\"#bar_font_italic\").button(\"disable\");$(\"#bar_font_underline\").button(\"disable\");$(\"#bar_font_color\").button(\"disable\");$(\"#bar_font_align\").button(\"disable\");$(\"#bar_line_color\").button(\"disable\");$(\"#bar_line_width\").button(\"disable\");$(\"#bar_line_style\").button(\"disable\");$(\"#bar_front\").button(\"disable\");$(\"#bar_back\").button(\"disable\");$(\"#bar_lock\").button(\"disable\");var i=$(\"#bar_list_edit\");i.children(\"li[ac=cut]\").menuitem(\"disable\");i.children(\"li[ac=copy]\").menuitem(\"disable\");i.children(\"li[ac=duplicate]\").menuitem(\"disable\");i.children(\"li[ac=brush]\").menuitem(\"disable\");i.children(\"li[ac=delete]\").menuitem(\"disable\");d.children(\"li[ac=front]\").menuitem(\"disable\");d.children(\"li[ac=back]\").menuitem(\"disable\");d.children(\"li[ac=forward]\").menuitem(\"disable\");d.children(\"li[ac=backward]\").menuitem(\"disable\");d.children(\"li[ac=lock]\").menuitem(\"disable\")}else{$(\"#bar_brush\").button(\"enable\");if($(\"#designer_op_help\").is(\":visible\")){$(\"#bar_brush\").button(\"select\")}$(\"#bar_font_family\").button(\"enable\");$(\"#bar_font_size\").button(\"enable\");$(\"#bar_font_bold\").button(\"enable\");$(\"#bar_font_italic\").button(\"enable\");$(\"#bar_font_underline\").button(\"enable\");$(\"#bar_font_color\").button(\"enable\");$(\"#bar_font_align\").button(\"enable\");$(\"#bar_line_color\").button(\"enable\");$(\"#bar_line_width\").button(\"enable\");$(\"#bar_line_style\").button(\"enable\");$(\"#bar_front\").button(\"enable\");$(\"#bar_back\").button(\"enable\");$(\"#bar_lock\").button(\"enable\");var i=$(\"#bar_list_edit\");i.children(\"li[ac=cut]\").menuitem(\"enable\");i.children(\"li[ac=copy]\").menuitem(\"enable\");i.children(\"li[ac=duplicate]\").menuitem(\"enable\");i.children(\"li[ac=brush]\").menuitem(\"enable\");i.children(\"li[ac=delete]\").menuitem(\"enable\");d.children(\"li[ac=front]\").menuitem(\"enable\");d.children(\"li[ac=back]\").menuitem(\"enable\");d.children(\"li[ac=forward]\").menuitem(\"enable\");d.children(\"li[ac=backward]\").menuitem(\"enable\");d.children(\"li[ac=lock]\").menuitem(\"enable\");var g=Model.getShapeById(h[0]);var b;var c;if(g.name==\"linker\"){b=Utils.getLinkerFontStyle(g.fontStyle);c=Utils.getLinkerLineStyle(g.lineStyle)}else{b=Utils.getShapeFontStyle(g.fontStyle);c=Utils.getShapeLineStyle(g.lineStyle)}$(\"#bar_font_family\").button(\"setText\",b.fontFamily);$(\"#bar_font_size\").spinner(\"setValue\",b.size+\"px\");if(b.bold){$(\"#bar_font_bold\").button(\"select\")}else{$(\"#bar_font_bold\").button(\"unselect\")}if(b.italic){$(\"#bar_font_italic\").button(\"select\")}else{$(\"#bar_font_italic\").button(\"unselect\")}if(b.underline){$(\"#bar_font_underline\").button(\"select\")}else{$(\"#bar_font_underline\").button(\"unselect\")}$(\"#bar_font_color\").button(\"setColor\",b.color);$(\"#bar_line_color\").button(\"setColor\",c.lineColor)}if(m==0){$(\"#bar_fill\").button(\"disable\")}else{$(\"#bar_fill\").button(\"enable\");var g=Model.getShapeById(e[0]);var j=Utils.getShapeFillStyle(g.fillStyle);if(j.type==\"solid\"){$(\"#bar_fill\").button(\"setColor\",j.color)}else{if(j.type==\"gradient\"){$(\"#bar_fill\").button(\"setColor\",j.endColor)}}}if(m!=1){$(\"#bar_link\").button(\"disable\")}else{$(\"#bar_link\").button(\"enable\")}if(a==0){$(\"#bar_linkertype\").button(\"disable\");$(\"#bar_beginarrow\").button(\"disable\");$(\"#bar_endarrow\").button(\"disable\")}else{$(\"#bar_linkertype\").button(\"enable\");$(\"#bar_beginarrow\").button(\"enable\");$(\"#bar_endarrow\").button(\"enable\");var g=Model.getShapeById(n[0]);var c=Utils.getLinkerLineStyle(g.lineStyle);$(\"#bar_linkertype\").children(\"div:eq(0)\").attr(\"class\",\"ico linkertype_\"+g.linkerType.toLowerCase());$(\"#bar_beginarrow\").children(\"div:eq(0)\").attr(\"class\",\"ico ico_arrow larrow_\"+c.beginArrowStyle.toLowerCase());$(\"#bar_endarrow\").children(\"div:eq(0)\").attr(\"class\",\"ico ico_arrow rarrow_\"+c.endArrowStyle.toLowerCase())}if(l==0){$(\"#bar_unlock\").button(\"disable\");d.children(\"li[ac=unlock]\").menuitem(\"disable\")}else{$(\"#bar_unlock\").button(\"enable\");d.children(\"li[ac=unlock]\").menuitem(\"enable\")}if(f<2){d.children(\"li[ac=group]\").menuitem(\"disable\");$(\"#bar_arrange_align\").menuitem(\"disable\")}else{d.children(\"li[ac=group]\").menuitem(\"enable\");$(\"#bar_arrange_align\").menuitem(\"enable\")}if(m<2){$(\"#bar_arrange_match\").menuitem(\"disable\")}else{$(\"#bar_arrange_match\").menuitem(\"enable\")}if(f<3){$(\"#bar_arrange_dist\").menuitem(\"disable\")}else{$(\"#bar_arrange_dist\").menuitem(\"enable\")}if(k==0){d.children(\"li[ac=ungroup]\").menuitem(\"disable\")}else{d.children(\"li[ac=ungroup]\").menuitem(\"enable\")}},showInsertLink:function(){$(\"#link_dialog\").dlg();var a=Utils.getSelected()[0].link;if(!a){a=\"\"}$(\"#linkto_addr\").val(a).select();$(\"#linkto_addr\").unbind().bind(\"keydown\",function(b){if(b.keyCode==13){UI.setLink()}})},setLink:function(){var b=$(\"#linkto_addr\").val();var a=Utils.getSelected()[0];a.link=b;Model.update(a);$(\"#link_dialog\").dlg(\"close\")},imageSelectedCallback:null,showImageSelect:function(d){if(d){this.imageSelectedCallback=d}else{this.imageSelectedCallback=null}this.fetchingRequest=null;var a=$(window).height()-200;if(a>550){a=550}else{if(a<200){a=200}}$(\".image_list\").height(a);$(\"#image_dialog\").dlg({onClose:function(){if(UI.fetchingRequest){UI.fetchingRequest.abort()}}});if($(\"#image_select_upload\").is(\":visible\")){UI.loadUserImages()}$(\".image_sources\").children().unbind(\"click\").bind(\"click\",function(){UI.showImageSelectContent($(this).attr(\"ty\"))});$(\"#upload_img_res\").empty();$(\"#input_upload_image\").unbind().bind(\"change\",function(){$(\"#upload_img_res\").html(\"<span style='color: #666'>上传中...</span>\");$(\"#frm_upload_image\").submitForm({success:function(e){if(e.result==\"type_wrong\"){$(\"#upload_img_res\").html(\"此文件不是图片，请重新选择\")}else{if(e.result==\"size_wrong\"){$(\"#upload_img_res\").html(\"文件大小超出要求，最大2M\")}else{if(e.result==\"exception\"){$(\"#upload_img_res\").html(\"无法使用此图片，请选择其他图片\")}else{var f=e.image;UI.setShapeImage(f.fileId,f.imageW,f.imageH)}}}}})});$(\"#input_img_url\").val(\"\");$(\"#img_url_area\").empty();var c=\"\";function b(){var e=$(\"#input_img_url\").val().trim();if(e!=c){c=e;if(e!=\"\"){if(e.indexOf(\"http\")<0){e=\"http://\"+e}$(\"#img_url_area\").html(\"<span class='img_url_loading_tip'>正在加载预览...</span>\");var f=$(\"<img class='img_url_loading' src='\"+e+\"'/>\").appendTo(\"#img_url_area\");f.unbind().bind(\"load\",function(){f.show().addClass(\"img_url_loaded\");$(\".img_url_loading_tip\").remove()}).bind(\"error\",function(){$(\"#img_url_area\").html(\"<div class='img_url_error'>无法在此地址下加载图片。<ul><li>请检查图片地址是否输入正确。</li><li>确保图片地址是公开的。</li><ul></div>\")})}}}$(\"#input_img_url\").unbind().bind(\"paste\",function(){b()}).bind(\"keyup\",function(){b()});$(\"#input_img_search\").unbind().bind(\"keydown\",function(f){if(f.keyCode==13){UI.searchImage()}});$(\"#btn_img_search\").unbind().bind(\"click\",function(){UI.searchImage()});$(\"#set_image_submit\").button(\"enable\");$(\"#set_image_submit\").button({onClick:function(){var e=$(\".image_sources\").children(\".active\").attr(\"ty\");if(e==\"upload\"){var n=$(\"#user_image_items\").children(\".image_item_selected\");if(n.length>0){var g=n.attr(\"fileId\");var m=n.attr(\"w\");var j=n.attr(\"h\");UI.setShapeImage(g,m,j)}else{$(\"#image_dialog\").dlg(\"close\")}}else{if(e==\"url\"){var k=$(\".img_url_loaded\");if(k.length>0){var f=k.attr(\"src\");UI.setShapeImage(f,k.width(),k.height())}else{$(\"#image_dialog\").dlg(\"close\")}}else{var n=$(\"#google_image_items\").children(\".image_item_selected\");if(n.length>0){var f=n.attr(\"u\");var l=parseInt(n.attr(\"w\"));var i=parseInt(n.attr(\"h\"));UI.setShapeImage(f,l,i)}else{$(\"#image_dialog\").dlg(\"close\")}}}}});$(\"#set_image_cancel\").button({onClick:function(){$(\"#image_dialog\").dlg(\"close\")}});$(\"#set_image_text\").empty()},showImageSelectContent:function(a){$(\".image_list\").hide();$(\"#image_select_\"+a).show().find(\"input[type=text]\").select();$(\".image_sources\").children().removeClass(\"active\");$(\".image_sources\").children(\"li[ty=\"+a+\"]\").addClass(\"active\")},loadUserImages:function(a){$(\"#user_image_items\").empty();$.ajax({url:\"/user_image/list\",success:function(d){if(d.images){for(var c=0;c<d.images.length;c++){var b=d.images[c];UI.appendUserImage(b)}$(\"#user_image_items\").append(\"<div style='clear: both'></div>\")}}});$(\"#user_image_items\").attr(\"loaded\",\"true\")},searchIndex:0,searchKeywords:\"\",searchImage:function(){var a=$(\"#input_img_search\").val();if(a.trim()!=\"\"){$(\"#google_image_items\").empty();this.searchKeywords=encodeURI(a);this.searchIndex=0;UI.loadSearchImg()}else{$(\"#input_img_search\").focus()}},loadSearchImg:function(){$.getJSON(\"https://api.iconfinder.com/v2/icons/search?query=\"+this.searchKeywords+\"&offset=\"+this.searchIndex+\"&count=24&minimum_size=128&vector=false&premium=false\",function(c){if(c.total_count==0){$(\"#google_image_items\").html(\"<div class='img_gg_loading_tip'>没有搜索结果，建议使用常见英文单词进行搜索。</div>\")}else{var j=c.icons;for(var d=0;d<j.length;d++){var h=j[d];var k=h.raster_sizes;k.sort(function(m,i){return m.size-i.size});for(var e=0;e<k.length;e++){var l=k[e];if(l.size==128||e==k.length-1){var a=l.formats[0].preview_url;var f=$(\"<div class='image_item' u='\"+a+\"' w='\"+l.size_width+\"' h='\"+l.size_height+\"'></div>\").appendTo($(\"#google_image_items\"));f.unbind().bind(\"click\",function(){$(\".image_item_selected\").removeClass(\"image_item_selected\");$(this).addClass(\"image_item_selected\")});var g=$(\"<div class='image_box'><img src='\"+a+\"'/></div>\").appendTo(f);var b=$(\"<div class='drop_size'><span>\"+l.size_width+\"x\"+l.size_height+\"</span></div>\").appendTo(f);b.data(\"sizes\",k);if(k.length>1){b.append(\"<div class='ico ico_accordion'></div>\");b.bind(\"click\",function(){UI.dropImageSizes($(this))})}else{b.css({\"padding-left\":\"9px\",cursor:\"default\"})}break}}}$(\"#google_image_items\").append(\"<div style='clear: both'></div>\");$(\".img_gg_loading_tip\").remove();$(\".gg_img_more\").remove();if(UI.searchIndex+24<c.total_count){$(\"#google_image_items\").append(\"<div onclick='UI.loadSearchImg()' class='gg_img_more toolbar_button active'>显示更多结果...</div>\")}}});$(\".gg_img_more\").remove();$(\"#google_image_items\").append(\"<div class='img_gg_loading_tip'>正在加载图片...</div>\");this.searchIndex+=24},dropImageSizes:function(e){var d=e.data(\"sizes\");d.sort(function(h,g){return h.size-g.size});var f=$(\"#img_size_menu\");if(f.length==0){f=$(\"<ul id='img_size_menu' class='menu list' style='z-index:1'></ul>\").appendTo(\"#ui_container\")}f.empty();for(var c=0;c<d.length;c++){var b=d[c];var a=b.formats[0].preview_url;f.append(\"<li u='\"+a+\"' w='\"+b.size_width+\"' h='\"+b.size_height+\"'>\"+b.size_width+\"x\"+b.size_height+\"</li>\")}f.dropdown({target:e,onSelect:function(h){var g=e.parent();g.attr(\"u\",h.attr(\"u\"));g.attr(\"w\",h.attr(\"w\"));g.attr(\"h\",h.attr(\"h\"));e.children(\"span\").text(h.text());g.find(\"img\").attr(\"src\",h.attr(\"u\"))}})},appendUserImage:function(b){var c=$(\"<div class='image_item' id='\"+b.imageId+\"' fileId='\"+b.fileId+\"' w='\"+b.imageW+\"' h='\"+b.imageH+\"'></div>\").appendTo($(\"#user_image_items\"));c.unbind().bind(\"click\",function(){$(\".image_item_selected\").removeClass(\"image_item_selected\");$(this).addClass(\"image_item_selected\")}).bind(\"mouseenter\",function(){var f=$(this);var e=$(\"<div class='ico ico_remove_red'></div>\").appendTo(f);var g=f.attr(\"id\");e.bind(\"click\",function(){f.fadeOut();$.ajax({url:\"/user_image/remove\",data:{imageId:g}})})}).bind(\"mouseleave\",function(){$(this).find(\".ico_remove_red\").remove()});var a=\"/file/id/\"+b.fileId+\"/diagram_user_image\";var d=$(\"<div class='image_box'><img src='\"+a+\"'/></div>\").appendTo(c)},setShapeImage:function(b,a,c){if(this.imageSelectedCallback){this.imageSelectedCallback(b,a,c)}$(\"#image_dialog\").dlg(\"close\")},insertImage:function(b,a,d){a=parseInt(a);d=parseInt(d);var e=$(\"#designer_layout\");var g=e.width()/2+e.offset().left;var f=e.height()/2+e.offset().top;var i=Utils.getRelativePos(g,f,$(\"#designer_canvas\"));var c=Model.create(\"standardImage\",i.x.restoreScale()-a/2,i.y.restoreScale()-d/2);c.props.w=a;c.props.h=d;c.fillStyle={type:\"image\",fileId:b,display:\"fill\",imageW:a,imageH:d};Model.add(c);Designer.painter.renderShape(c);Utils.unselect();Utils.selectShape(c.id)},doExport:function(){$(\"#export_dialog\").dlg(\"close\");$.simpleAlert(\"准备下载...\",\"info\",\"no\");var a=JSON.stringify(Model.define);$(\"#export_definition\").val(a);$(\"#export_title\").val($(\".diagram_title\").text()||\"未命名文件\");var b=$(\"#export_form input[name='type']:checked\").val();$.simpleAlert(\"close\");$(\"#export_form\").submit();$(\"#export_ok\").disable();setTimeout(function(){$(\"#export_ok\").enable()},2000)},exportSVG:function(f){var u=Model.define,q=u.elements,j=[],k,b,c,h,d;$(\"#svg_dialog\").empty();var n=SVG(\"svg_dialog\");n.attr(\"id\",\"drawing\");var v=\"<script><![CDATA[(function(){var zooms=[25,33,50,67,75,100,120,150,200,250,300,400,500];var i=5;var draw=document.getElementById('drawing');var w=parseInt(draw.getAttribute('width').replace('px',''));var h=parseInt(draw.getAttribute('height').replace('px',''));draw.onmousewheel=function(e){e=e||window.e;event(this,e);};if(draw.addEventListener)return;function event(ele,e){if(!e.ctrlKey)return;e.returnValue=false;var d=e.wheelDelta;if(d==null&&e.detail&&e.axis==e.HORIZONTAL_AXIS)d=e.detail;d>0?i=i-(-1):i--;if(i>=zooms.length){i--;return;}if(i<0){i=0;return;}draw.setAttribute('width',w*(zooms[i]/100));draw.setAttribute('height',h*(zooms[i]/100));}})();]]><\\/script>\";var t=Export.flow;for(var p in q){b=$.extend({},q[p]);if(b.from&&b.from.x==b.to.x&&b.from.y==b.to.y){continue}c={lineColor:\"50,50,50\",lineStyle:\"solid\",lineWidth:2,beginArrowStyle:\"none\",endArrowStyle:\"solidArrow\"},h={type:\"solid\",color:\"255,255,255\",alpha:1},d={bold:false,color:\"0,0,0\",underline:false,textAlign:\"center\",italic:false,size:13},k={},k.parent=b.parent,k.id=b.id,k.index=b.props.zindex,k.x=b.props.x,k.y=b.props.y,k.w=b.props.w,k.h=b.props.h,k.angle=b.props.angle;k.font=b.fontStyle=$.extend(d,b.fontStyle);k.font.color=Export.getColor(b.fontStyle.color);k.font.bold=!!k.font.bold?\"bold\":\"normal\",k.font.underline=!!k.font.underline?\"underline\":\"blink\",k.font.italic=!!k.font.italic?\"italic\":\"normal\",k.font.family=k.font.fontFamily||\"微软雅黑,黑体,Arial\";k.line=b.lineStyle=$.extend(c,b.lineStyle);k.line.lineColor=Export.getColor(k.line.lineColor);if(b.fillStyle){k.fill=b.fillStyle=$.extend(h,b.fillStyle);if(k.fill.alpha!=1){if(k.fill.color){k.fill.color+=\",\"+k.fill.alpha}if(k.fill.beginColor){k.fill.beginColor+=\",\"+k.fill.alpha}if(k.fill.endColor){k.fill.endColor+=\",\"+k.fill.alpha}}if(k.fill.color){k.fill.color=Export.getColor(k.fill.color)}if(k.fill.beginColor){k.fill.beginColor=Export.getColor(k.fill.beginColor)}if(k.fill.endColor){k.fill.endColor=Export.getColor(k.fill.endColor)}}if(b.shapeStyle){k.shape=b.shapeStyle}if(b.path){k.path=t.json2path(b.props,b.path,k.line,k.fill)}if(b.linkerType){var l=t.line2path(b);k.path=l[0],k.points=l[1],k.linker=b.linkerType}if(b.textBlock&&b.textBlock.length>0){k.strs=t.textSplit(b.props,b.textBlock,k.font)}if(b.attribute&&b.attribute.markers&&b.attribute.markers.length){k.markers=t.marker2svg(b.attribute,b.props,b)}if(b.dataAttributes&&b.dataAttributes.length){k.attrs=t.attr2svg(b.props,b.dataAttributes,k.angle)}j.push(k)}j.sort(function(i,g){if(i.index==g.index&&i.parent==g.id){return 1}return i.index-g.index});var s=n.group();var e=s.path().fill(Export.getColor(u.page.backgroundColor));var m=s.group();for(var r=0;r<j.length;r++){if(typeof j[r].x==\"number\"){t.shape2svg(j[r],m.group(),f)}else{t.flowline2svg(j[r],s,m.group())}}var a=t.getRect(m);n.viewbox(a.left-20,a.top-20,a.width+40,a.height+40);n.size(a.width+40,a.height+40);var o=[[\"M\",a.left-20,a.top-20],[\"h\",a.width+40],[\"v\",a.height+40],[\"h\",-a.width-40],[\"v\",-a.height-40],[\"z\"]];e.plot(o);setTimeout(function(){var g=$(\"#svg_dialog\").html();g=encodeURIComponent(g);$.simpleAlert(\"close\");$(\"#svg_dialog\").empty();$(\"svg\").remove();$(\"#export_title\").after(\"<input id='export_definition' type='hidden' name='definition'/>\");$(\"#export_definition\").val(g);$(\"#export_form\").submit();$(\"#export_definition\").remove()},3000)},showHotKey:function(){var a=$(window).height()-175;if(a>500){a=500+\"px\"}$(\"#hotkey_list\").dlg();$(\"#hotkey_list\").css({top:\"28px\"});$(\"#hotkey_list .dialog_content\").css({height:a})},showFeedBack:function(){$(\"#send_feedback\").css({width:\"auto\",height:\"auto\"});var a=$(\"#send_feedback\");a.dlg();$(\"#feedback_email\").focus();$(\"#feedback_message\").val(\"\");$(\".feedback_error_email_format\").hide();$(\".feedback_error_msg\").hide()},sendFeedBack:function(c){$(\".feedback_error_email_format\").hide();$(\".feedback_error_msg\").hide();var a=$.trim($(\"#feedback_email\").val());if(!a.isEmail()){$(\"#feedback_email\").focus();$(\".feedback_error_email_format\").show();return}var b=$.trim($(\"#feedback_message\").val());if(b==\"\"){$(\"#feedback_message\").val(\"\").focus();$(\".feedback_error_msg\").show();return}Util.ajax({url:\"/support/save_ask\",data:{content:b,username:$(\"#feedback_name\").val(),email:a,url:location.href},success:function(d){$(\".dlg_mask\").remove();$(\"#send_feedback\").animate({left:$(window).width(),top:$(window).height(),width:0,height:0,opacty:0.2})}})},gettingStart:function(a){this.showStartStep(1)},showStartStep:function(b,e){$(\".mark_content\").hide();var a=$(\".mark\"+b+\"_content\");a.show();var d;var c;if(b==1){d=$(\"#shape_panel\").offset().top+70;c=$(\"#shape_panel\").offset().left+$(\"#shape_panel\").width()+10}else{if(b==2){d=$(\".row2\").offset().top+30;c=$(\"#menu_bar_insert\").offset().left+$(\"#menu_bar_insert\").width()-a.outerWidth()/2}else{if(b==3){d=$(\".toolbar\").offset().top+40;c=270}else{if(b==4){d=$(\"#dock\").offset().top+10;c=$(\"#dock\").offset().left-a.outerWidth()-10}else{if(b==\"created\"){d=e.offset().top+e.height()/2-a.outerHeight()/2;if(d<=0){d=0}if(d+a.outerHeight()>$(window).height()){d=$(window).height()-a.outerHeight()}c=e.offset().left+e.width()+10}}}}}a.css({top:d,left:c})},closeGettingStart:function(a){$(\".mark_content\").hide()},showAddColla:function(){$(\"#colla_add\").dialog();collaboration.init();$(\"#colla_add .colla-suggest-box\").empty();$(\"#add_step2\").hide();$(\"#add_step1\").show()},showMoreContacter:function(b,d){var c={};var a=+($(d).attr(\"all\"));if(b==\"contacters\"){var e=$(d).parent().find(\"li[joinType='user']\").length;c.source=b;c.split=e}else{if(b==\"team\"){var e=$(d).parent().find(\"li[joinType='user']\").length;c.source=b;c.teamId=$(d).parent().attr(\"target\");c.split=e}}Util.ajax({url:\"/collaboration/get_add_more\",data:c,success:function(j){var l=j.users;var h=\"\";var g=\"\",i,k,f;$.each(l,function(n){var m=l[n];h=\"/images/default/default/profile-full-male.png\";i=m.userId;if(m.photoFileName!=null&&m.photoFileName!=\"\"){h=\"/file/\"+m.photoFileName+\"/photo\"}k=m.fullName;f=m.email;g+='<li joinType=\"user\" target=\"'+i+'\" username=\"'+k+'\" email=\"'+f+'\"><img src=\"'+h+'\"/>'+k+\"</li>\"});$(d).before(g);if($(d).parent().find(\"li[joinType='user']\").length==a){$(d).hide()}else{$(d).show()}$(d).parent().scrollTop(9999)}})},getCollaTeamMembers:function(){Util.ajax({url:\"/collaboration/get_contacter_team_members\",data:{source:\"designer\"},success:function(a){$(\"#colla_suggest_box\").find(\".suggest_colla_box\").removeClass(\"colla_loading\").html(a);$(\".colla_suggest\").find(\"li\").on(\"click\",function(){if($(this).attr(\"joinType\")==\"team\"){var b=$(this).attr(\"target\");if(!$(this).hasClass(\"active\")){$(this).addClass(\"active\");$(\".team_member[target='\"+b+\"']\").show();Util.ajax({url:\"/collaboration/show_team_member\",data:{teamId:b},success:function(i){var o=+(i.teamMemberCount);var n=+(i.firstSize);var g=i.users;var j=\"\";var k,l=\"\",m,h;$.each(g,function(q){l=\"/images/default/default/profile-full-male.png\";var p=g[q];k=p.userId;if(p.photoFileName!=null&&p.photoFileName!=\"\"){l=\"/file/\"+p.photoFileName+\"/photo\"}m=p.fullName;h=p.email;j+='<li joinType=\"user\" target=\"'+k+'\" username=\"'+m+'\" email=\"'+h+'\"><img src=\"'+l+'\"/>'+m+\"</li>\"});if(n<o){j+='<div class=\"slider\" all=\"'+o+'\" onclick=\"UI.showMoreContacter(\\'team\\', this)\"><span></span></div>'}$(\".team_member[target='\"+b+\"']\").css({background:\"none\"});$(\".team_member[target='\"+b+\"']\").append(j);$(\".colla_suggest.team_member\").find(\"li\").on(\"click\",function(){$(\"#add_prompt4\").hide();$(\"#add_prompt3\").hide();$(\"#add_prompt2\").show();$(\"#add_prompt1\").hide();var r=$.trim($(\"#input_add_colla\").val());$(\".colla_suggest\").find(\"li\").removeClass(\"seled\");$(this).addClass(\"seled\");var p=$(this).attr(\"joinType\");var s=$(this).attr(\"target\");if(p==\"user\"){var q=$(this).attr(\"username\");$(\"#input_add_colla\").val(q);$(\"#add_userid\").val(s)}else{$(\"#input_add_colla\").val(s);$(\"#add_userid\").val(s)}$(\"#add_type\").val(p)})}})}else{$(this).removeClass(\"active\");$(\".team_member[target='\"+b+\"']\").hide();$(\".team_member[target='\"+b+\"']\").html(\"\");$(\".team_member[target='\"+b+\"']\").css({background:\"url(/images/default/view_loading.gif) center center no-repeat\"})}}if($(this).attr(\"joinType\")==\"user\"||$(this).attr(\"joinType\")==\"email\"){$(\"#add_prompt4\").hide();$(\"#add_prompt3\").hide();$(\"#add_prompt2\").show();$(\"#add_prompt1\").hide();var e=$.trim($(\"#input_add_colla\").val());$(\".colla_suggest\").find(\"li\").removeClass(\"seled\");$(this).addClass(\"seled\");var c=$(this).attr(\"joinType\");var f=$(this).attr(\"target\");if(c==\"user\"){var d=$(this).attr(\"username\");$(\"#input_add_colla\").val(d);$(\"#add_userid\").val(f)}else{$(\"#input_add_colla\").val(f);$(\"#add_userid\").val(f)}$(\"#add_type\").val(c)}})}})},doAddCollaboration:function(){if($(\".colla_suggest\").length>0){if($(\".colla_suggest\").find(\".seled\").length==0){$(\"#add_prompt1\").hide();$(\"#add_prompt2\").show();$(\"#add_prompt3\").hide();$(\"#add_prompt4\").hide();var h=($(window).outerHeight()-104)*0.5+100;var a=($(window).outerWidth()-272)*0.5;$(\"#confirm_dlg\").removeClass(\"newSize\").css({top:h+\"px\",left:a+\"px\"});$(\"#confirm_dlg\").addClass(\"newSize\").css({top:($(window).outerHeight()-$(\"#confirm_dlg\").height())*0.5+\"px\",left:($(window).outerWidth()-$(\"#confirm_dlg\").width())*0.5+\"px\",display:\"block\"})}else{var i=$(\".colla_suggest\").find(\".seled\").find(\"img\").attr(\"src\");var d=$(\"#input_add_colla\").val();if(d.length>30){d=d.substr(0,30)+\"...\"}var f=$(\"#add_userid\").val();var c=$(\"#invit_role\").val();var g=$(\"#add_type\").val();$(\".add_new_button\").find(\".designer_button\").text(\"发送中...\");var e=null;if(g==\"email\"){$(\".role_list\").find(\".role_item\").each(function(){if($(this).attr(\"type\")==g&&$(this).attr(\"target\")==f){e=$(this);$(this).find(\".inviting_\").text(\"再次邀请\")}})}var b={targetTypes:g,targets:f,role:c,chartId:chartId};Util.ajax({url:\"/collaboration/add\",data:b,success:function(k){var j=k.result;if(j==\"exists\"){$(\"#add_prompt2\").hide();$(\"#add_prompt1\").hide();$(\"#add_prompt4\").hide();$(\"#add_prompt3\").show()}else{Util.ajax({url:\"/collaboration/get_colla_role_list\",data:{chartId:chartId},success:function(l){$(\".role_list\").html(l).scrollTop(999)}})}$(\".add_new_button\").find(\".designer_button\").text(\"发送邀请\");$(\"#colla_dialog\").addClass(\"_update\").css({top:($(window).height()-$(\"#colla_dialog\").outerHeight())*0.5+\"px\"});if(j!=\"exists\"){setTimeout(function(){$(\"#add_prompt3\").hide();$(\"#add_prompt2\").hide();$(\"#add_prompt1\").hide();$(\"#add_prompt4\").show()},400)}setTimeout(function(){$(\"#add_prompt3\").hide();$(\"#add_prompt2\").hide();$(\"#add_prompt4\").hide();$(\"#add_prompt1\").show();$(\"#input_add_colla\").val(\"\");if(!$(\"#colla_suggest_box\").hasClass(\"colla\")){var l='<span class=\"left\"><strong>常用联系人</strong>：</span><span class=\"right\"><strong>我的小组成员</strong>：</span>';$(\".suggest_bot_tip\").html(l);$(\"#colla_suggest_box\").addClass(\"colla\").html('<div class=\"suggest_colla_box colla_loading\"></div>');UI.getCollaTeamMembers()}},1000)}})}}},deleteCollaRole:function(c){var a=$(c).parent(\".role_item\");var b=a.attr(\"collaborationId\");Util.ajax({url:\"/collaboration/delete\",data:{collaborationId:b},success:function(d){if(d.result==\"success\"){a.remove()}}});$(\"#colla_dialog\").addClass(\"_update\").css({top:($(window).height()-$(\"#colla_dialog\").outerHeight())*0.5+\"px\"})},changeCollaRole:function(b,a){Util.ajax({url:\"/collaboration/set_role\",data:{collaborationId:b,role:$(a).val()},success:function(c){if(c.result==\"success\"){$(a).parent(\".given_role\").find(\".change_success\").stop().animate({left:\"-38px\"},200).delay(400).animate({left:\"0px\"},200)}}})},showShapesManage:function(){$(\"#shapes_dialog\").dlg();$(\"#shape_manage_list\").children(\"li\").unbind().bind(\"click\",function(){var b=$(this).find(\"input\");var c=!b.is(\":checked\");b.attr(\"checked\",c);a(b)});$(\"#shape_manage_list\").find(\"input\").unbind().bind(\"click\",function(b){b.stopPropagation();a($(this))}).each(function(){var c=$(this).val();var b=c.split(\",\");var f=true;for(var d=0;d<b.length;d++){var e=b[d];if((CategoryMapping.network&&e==\"network\")||(CategoryMapping.ali_app_service&&e==\"network_aliyun\")||(CategoryMapping.aws_analytics&&e==\"network_aws\")||(CategoryMapping.cisco_bulidings&&e==\"network_cisco\")||(CategoryMapping.azure&&e==\"network_azure\")){f=true;break}if(!CategoryMapping[e]){f=false;break}}$(this).attr(\"checked\",f)});function a(c){var d=c.val();var b=d.split(\",\");var e=c.is(\":checked\");if(b.length>1){$(\"#shape_manage_list\").find(\"input\").each(function(){var f=$(this).val();if(b.indexOf(f)>=0){$(this).attr(\"checked\",e)}})}else{$(\"#shape_manage_list\").find(\".cate_parent\").each(function(){var g=$(this).val().split(\",\");var f=true;for(var h=0;h<g.length;h++){var j=g[h];if(!$(\"#shape_manage_list\").find(\"input[value=\"+j+\"]\").is(\":checked\")){f=false;break}}$(this).attr(\"checked\",f)})}}},saveShapesManage:function(){var d=$(\"#shape_manage_list\").find(\"input:checked:not(.cate_parent)\").map(function(){return $(this).val()}).get();var b=\"\";var c={action:\"changeSchema\",categories:d.join(\",\")};CLB.send(c);Designer.setSchema(d,function(){$(\"#shapes_dialog\").dlg(\"close\")})},showUserMenu:function(a){a.stopPropagation();$(\"#user_menu\").dropdown({target:$(\".user\"),position:\"right\",onSelect:function(b){var c=b.attr(\"ac\");if(c==\"dia\"){location.href=\"/diagrams\"}else{if(c==\"net\"){location.href=\"/network\"}else{if(c==\"out\"){location.href=\"/login/out\"}}}}})},showDownload:function(){if($(\"#export_dialog\").attr(\"key\")){$(\"#export_pdfHD\").click();$(\"#export_ok\").click();return}$(\"#export_dialog\").dlg();$(\"#export_png\").click()},showShareMenu:function(f){var a=$(\"#share_win\");a.dialog();var d=a.find(\".dialog-win-left\"),b=a.find(\".dialog-win-right\"),c=a.outerWidth();d.find(\"li\").off(\"click\").on(\"click\",function(){var e=$(this).attr(\"tit\");$(this).addClass(\"active\").siblings().removeClass(\"active\");b.empty();b.html(ProShare[e].source);ProShare[e].execute(chartId)});d.find(\"li:eq(0)\").trigger(\"click\")},showEmbed:function(){if(chartId!=\"\"){$(\"#embed_designer_chart\").dlg();$(\"#iframe_html\").val(\"\");$(\".embed_preview\").html(\"\");var a,b;a=$(\"#embed_width\").val();b=$(\"#embed_height\").val();UI.changeEmbedWH(a,b);$(\"#iframe_html\").select();$(\".embed_size\").find(\"input\").keyup(function(){var c=$.trim($(\"#embed_width\").val())==\"\"?340:$.trim($(\"#embed_width\").val());var d=$.trim($(\"#embed_height\").val())==\"\"?160:$.trim($(\"#embed_height\").val());c=parseInt(c);d=parseInt(d);$(\".embed_preview\").find(\"div:first\").css({width:c+\"px\",height:d+\"px\"});$(\".embed_preview\").find(\"iframe\").css({width:c+\"px\",height:d+\"px\"});UI.changeEmbedWH(c,d)});$(\"#iframe_html\").unbind().bind(\"click\",function(){$(this).select()});$(\".embed_preview\").keydown(function(){$(\".embed_size\").find(\"input\").blur()})}},changeEmbedWH:function(a,d){var b='<iframe id=\"embed_dom\" name=\"embed_dom\" frameborder=\"0\" style=\"border:1px solid #000;display:block;width:'+a+\"px; height:\"+d+'px;\" src=\"https://www.processon.com/embed/'+chartId+'\"></iframe>';$(\"#iframe_html\").val(b);$(\".embed_preview_wrap\").css({\"margin-top\":(-d/2)+\"px\",\"margin-left\":(-a/2)+\"px\"});$(\".embed_preview\").html(\"\").html(b);var c=document.getElementById(\"embed_dom\");c.onload=c.onreadystatechange=function(){if(!c.readyState||c.readyState==\"complete\"){setTimeout(function(){$(\".embed_preview .preview_dis\").remove();setTimeout(function(){$(\".embed_obj\").fadeIn()},100)},400)}}},showViewLink:function(){if(chartId==\"\"){return}var b=null;var a=\"\";Util.get(\"/view/getlink\",{chartId:chartId},function(e){b=e.chart;a=e.viewLinkId;$(\"#share_link_win\").dlg();if(a==\"\"||a==null){UI.showCreateViewLink()}else{var d=\"off\";var c=null;if(b.viewPassword!=null||b.viewPassword!=\"\"){d=\"on\";c=b.viewPassword}UI.showShareViewLink(d,c);$(\"#_view_link_input\").val(a).select()}})},showCreateViewLink:function(){$(\"#share_link_win\").find(\".txt\").css({width:\"390px\"}).removeAttr(\"readonly\",\"readonly\");if($(\"#_locale\").val()===\"zh\"){$(\"#share_link_win\").find(\".txt\").css({width:\"410px\"})}$(\"#_view_link_input\").val(\"\");var a=\"<p>希望分享给别人，又不想完全公开？您可以在此创建一个浏览链接，分享给别人后，可以通过此链接来安全地浏览您的文件。 </p><p>当然，您也可以给浏览链接添加密码，以便您享有更多的控制权限。 </p>\";$(\".create_dis\").html(a);setTimeout(function(){$(\".create.designer_button\").show()},200)},showShareViewLink:function(d,b){var e=\"-1px\";var c=\"#fff;color:#323232;text-shadow:0px 1px 0px rgba(255,255,255,0.3)\";if(d==\"on\"&&b!=\"\"&&b!=null){e=\"33px\";c=\"#5da206;color:#fff;text-shadow:0px 1px 0px rgba(0,0,0,0.3)\"}$(\".create.designer_button\").hide();$(\"#share_link_win\").find(\".txt\").css({width:\"98%\"}).attr(\"readonly\",\"readonly\");var a='<p>密码保护</p><p><a href=\"javascript:;\" onclick=\"UI.deleteViewLink()\">删除链接</a>&nbsp;撤销访问权</p><div class=\"edit_pw_protect\" style=\"background:'+c+';\" onclick=\"UI.changePWState(this)\"><span class=\"pw_protect_on\">开</span><span class=\"pw_protect_off\">关</span><div class=\"pw_protect_watch\" style=\"left: '+e+';\"></div></div><div class=\"password_input_w\"><input type=\"text\" class=\"_pw txt\" value=\"\" placeholder=\\'密码\\' /><span class=\"button add_pw_btn\" onclick=\"UI.addViewLinkPassword(this)\">添加 </span><div style=\"clear:both;\"></div></div>';$(\".create_dis\").html(a);if(d==\"on\"&&b!=\"\"&&b!=null){$(\".button.add_pw_btn\").text(\"更改\");$(\".password_input_w\").show().find(\"._pw\").val(b)}},createViewLink:function(a){Util.ajax({url:\"/view/addlink\",data:{chartId:chartId},success:function(d){UI.showShareViewLink(\"off\");var b=d.viewLinkId;var c=b;$(\"#_view_link_input\").val(c).select()}})},deleteViewLink:function(){Util.ajax({url:\"/view/dellink\",data:{chartId:chartId},success:function(a){UI.showCreateViewLink()}})},changePWState:function(a){var c=$(a).find(\".pw_protect_watch\")[0];var b=c.offsetLeft;if(b==-1){$(c).css({left:\"33px\"});$(\".button.add_pw_btn\").text(\"添加\");$(\".password_input_w\").show().find(\"._pw\").val(\"\").focus()}else{Util.ajax({url:\"/view/removepassword\",data:{chartId:chartId},success:function(d){$(c).css({left:\"-1px\"});$(\".edit_pw_protect\").css({background:\"#fff\",color:\"#323232\",\"text-shadow\":\"0px 1px 0px rgba(255,255,255,0.3)\"});$(\".password_input_w\").find(\"._pw\").val(\"\");$(\".password_input_w\").hide()}})}},addViewLinkPassword:function(b){var a=$.trim($(b).parent().find(\"._pw\").val());if(a==\"\"){$(\"._pw\").focus();return false}Util.ajax({url:\"/view/addpassword\",data:{viewPassword:a,chartId:chartId},success:function(c){$(\".edit_pw_protect\").css({background:\"#5da206\",color:\"#fff\",\"text-shadow\":\"0px 1px 0px rgba(0,0,0,0.3)\"});$(\".button.add_pw_btn\").text(\"更改\")}})},showPublish:function(c){var a=$(\"#pubpo_win\"),b=$(\".pubpo-content\");b.html(ProShare.publish.source);ProShare.publish.execute(chartId);setTimeout(function(){a.dialog()},50)},savePublish:function(){var b=$(\"#publish_category\").val();var e=$(\"#publish_language\").val();var d=$(\"#publish_description\").val();var a=$(\"#publish_tags\").val();if($.trim(a)==\"\"){$(\"#publish_tags\").focus();return}else{if($.trim(d)==\"\"){$(\"#publish_description\").focus();return}}var c=a.replace(\"，\",\",\").split(\",\");Utils.removeFromArray(c,\"\");if(c.length==0){$(\"#publish_tags\").focus();return}$(\"#publish_dialog_savebtn\").disable();$.ajax({url:\"/folder/publish\",data:{id:chartId,status:\"public\",language:e,industry:b,description:d,tags:c,_public_edit:$(\"#public_edit\").is(\":checked\"),_public_clone:$(\"#public_clone\").is(\":checked\")},traditional:true,success:function(f){$(\"#publish_dialog_savebtn\").enable()}});cstatus=\"public\";$(\"#publish_dialog\").dlg(\"close\")},cancelPublish:function(){$.ajax({url:\"/folder/publish\",data:{id:chartId,status:\"private\"},success:function(a){if(a.result==\"overed\"){UI.showTip(\"私有存储空间已经不足，只能创建公开文件，您可以 <a target='_blank' href='/support/privatefile'>扩容</a>\")}else{cstatus=\"private\"}}});$(\"#unpublish_dialog\").dlg(\"close\")},showSaveAs:function(){$(\"#saveas_dialog\").dlg();$(\"#saveas_title\").val($(\".diagram_title\").text()).select()},doSaveAs:function(){if($(\"#saveas_title\").val().trim()==\"\"){$(\"#saveas_title\").focus();return}$(\"#hid_saveas_id\").val(chartId);Util.ajax({url:\"/diagraming/saveas\",type:\"GET\",data:{id:$(\"#hid_saveas_id\").val(),ajaxCheck:\"ajaxCheck\"},success:function(a){if(a.result==\"success\"){$(\"#saveas_form\").submit();$(\"#btn_dosaveas\").removeAttr(\"onclick\")}else{if(a.result==\"overd\"){Util.globalTopTip(\"您的文件数量不足，无法另存为文件, 您可以<a target='_blank' href='/upgrade'>去升级账号</a>\",\"top_error\",5000,$(\"#designer_header\"),true)}}}})},showShapeOptions:function(){var f=Utils.getSelectedShapeIds();UI.hideShapeOptions();if(f.length==1){var g=Model.getShapeById(f[0]);if(g.name==\"uiTab\"){var a=0;for(var e=0;e<g.path.length-1;e++){var k=g.path[e];if(typeof k.fillStyle==\"undefined\"){a=e+1;break}}h(g,[{label:\"Tab数：\",type:\"spinner\",value:g.path.length-1,onChange:function(n){var l=0;for(var o=0;o<g.path.length-1;o++){var q=g.path[o];if(typeof q.fillStyle==\"undefined\"){l=o;break}}var p=g.path[g.path.length-1];if(n!=g.path.length-1){if(l>n-1){l=n-1;$(\"#change_uitab_index\").spinner(\"setValue\",n)}g.path=[];var s=[];for(var o=0;o<n;o++){var m={actions:[{action:\"move\",x:\"w/\"+n+\"*\"+o,y:\"h\"},{action:\"line\",x:\"w/\"+n+\"*\"+o,y:7},{action:\"quadraticCurve\",x1:\"w/\"+n+\"*\"+o,y1:0,x:\"w/\"+n+\"*\"+o+\"+7\",y:0},{action:\"line\",x:\"w/\"+n+\"*\"+(o+1)+\"-7\",y:0},{action:\"quadraticCurve\",x1:\"w/\"+n+\"*\"+(o+1),y1:0,x:\"w/\"+n+\"*\"+(o+1),y:7},{action:\"line\",x:\"w/\"+n+\"*\"+(o+1),y:\"h\"}]};if(o!=l){m.fillStyle={color:\"r-20,g-20,b-20\"};m.actions.push({action:\"close\"})}g.path.push(m);if(o<g.textBlock.length){var r=g.textBlock[o];r.position.x=\"w/\"+n+\"*\"+o+\"+5\";r.position.w=\"w/\"+n+\"-10\";s.push(r)}else{s.push({position:{x:\"w/\"+n+\"*\"+o+\"+5\",y:5,w:\"w/\"+n+\"-10\",h:\"h-10\"},text:\"Tab \"+(o+1)})}}g.textBlock=s;g.path.push(p);Schema.initShapeFunctions(g);Model.update(g);Designer.painter.renderShape(g);$(\"#change_uitab_index\").spinner(\"setOptions\",{max:n})}}},{id:\"change_uitab_index\",label:\"选中：\",type:\"spinner\",value:a,max:g.path.length-1,onChange:function(o){var l=0;for(var m=0;m<g.path.length-1;m++){var n=g.path[m];if(typeof n.fillStyle==\"undefined\"){l=m;break}}if(l!=o-1){g.path[l].fillStyle={color:\"r-20,g-20,b-20\"};g.path[l].actions.push({action:\"close\"});delete g.path[o-1].fillStyle;g.path[o-1].actions.splice(6,1);Schema.initShapeFunctions(g);Model.update(g);Designer.painter.renderShape(g)}}}])}else{if(g.attribute.collapsable){h(g,[{type:\"button\",value:g.attribute.collapsed?\"展开\":\"收缩\",onClick:function(l){MessageSource.beginBatch();var s=[];if(!g.attribute.markers){g.attribute.markers=[]}if(g.attribute.collapsed){var m=Utils.getCollapsedShapesById(g.id);for(var n=0;n<m.length;n++){var i=m[n];delete i.attribute.collapseBy;s.push(i);Designer.painter.renderShape(i)}var r=Utils.getOutlinkers(m);for(var n=0;n<r.length;n++){var p=r[n];delete p.attribute;s.push(p);Designer.painter.renderLinker(p)}Utils.removeFromArray(g.attribute.markers,\"expand\");g.attribute.container=true;g.attribute.collapsed=false;var t=g.attribute.collapseW?g.attribute.collapseW:400;var o=g.attribute.collapseH?g.attribute.collapseH:300;Designer.setShapeProps({w:t,h:o},[g]);l.text(\"收缩\")}else{var q=Utils.getContainedShapes([g]);for(var n=0;n<q.length;n++){var i=q[n];if(typeof i.attribute==\"undefined\"){i.attribute={}}i.attribute.collapseBy=g.id;s.push(i);Designer.painter.renderShape(i)}var r=Utils.getOutlinkers(q);for(var n=0;n<r.length;n++){var p=r[n];p.attribute={collapseBy:g.id};s.push(p);Designer.painter.renderLinker(p)}g.attribute.markers.push(\"expand\");g.attribute.container=false;g.attribute.collapsed=true;g.attribute.collapseW=g.props.w;g.attribute.collapseH=g.props.h;Designer.setShapeProps({w:120,h:80},[g]);l.text(\"展开\")}if(s.length>0){Model.updateMulti(s)}Utils.selectShape(g.id);MessageSource.commit()}}])}else{if(g.name==\"uiGrid\"){var j=1;var c=1;var d=g.path[2];for(var e=0;e<d.actions.length-1;e++){var b=d.actions[e];if(b.action==\"move\"&&b.x==0){j++}else{if(b.action==\"move\"&&b.y==0){c++}}}h(g,[{id:\"change_uigrid_row\",label:\"行：\",type:\"spinner\",value:j,onChange:function(s){var m=g.path[1].actions;m[2].y=\"h/\"+s+\"+0.5\";m[3].y=\"h/\"+s+\"+0.5\";var p=[];for(var u=1;u<s;u++){var r=\"Math.round(h*\"+u+\"/\"+s+\")+0.5\";p.push({action:\"move\",x:0,y:r});p.push({action:\"line\",x:\"w\",y:r})}for(var u=0;u<g.path[2].actions.length;u++){var o=g.path[2].actions[u];if(o.y==0||o.y==\"h\"){p.push(o)}}g.path[2].actions=p;var t=0;var v=0;if(s>j){for(var l=0;l<g.textBlock.length;l++){var n=g.textBlock[l];n.position.y=\"h/\"+s+\"*\"+v;n.position.h=\"h/\"+s;t++;if(t==c){t=0;v++}}t=0;while(v<s){while(t<c){var q={x:\"w/\"+c+\"*\"+t+\"+5\",y:\"h/\"+s+\"*\"+v,w:\"w/\"+c+\"-10\",h:\"h/\"+s};g.textBlock.push({position:q});t++}t=0;v++}}else{if(s<j){var i=[];while(v<s){while(t<c){var l=v*c+t;var n=g.textBlock[l];n.position.y=\"h/\"+s+\"*\"+v;n.position.h=\"h/\"+s;i.push(n);t++}t=0;v++}g.textBlock=i}}Schema.initShapeFunctions(g);Model.update(g);Designer.painter.renderShape(g);j=s}},{id:\"change_uigrid_column\",label:\"列：\",type:\"spinner\",value:c,onChange:function(r){var p=[];for(var u=0;u<g.path[2].actions.length;u++){var o=g.path[2].actions[u];if(o.x==0||o.x==\"w\"){p.push(o)}else{break}}for(var u=1;u<r;u++){var l=\"Math.round(w*\"+u+\"/\"+r+\")+0.5\";p.push({action:\"move\",x:l,y:0});p.push({action:\"line\",x:l,y:\"h\"})}var s=0;var v=0;if(r>c){var i=[];for(var m=0;m<g.textBlock.length;m++){var n=g.textBlock[m];n.position.x=\"w/\"+r+\"*\"+s+\"+5\";n.position.w=\"w/\"+r+\"-10\";i.push(n);s++;if(s==c){while(s<r){var q={x:\"w/\"+r+\"*\"+s+\"+5\",y:\"h/\"+j+\"*\"+v,w:\"w/\"+r+\"-10\",h:\"h/\"+j};var t={position:q};if(v==0){t.text=\"标题 \"+(s+1)}i.push(t);s++}s=0;v++}}g.textBlock=i}else{if(r<c){var i=[];while(v<j){while(s<r){var m=v*c+s;var n=g.textBlock[m];n.position.x=\"w/\"+r+\"*\"+s+\"+5\";n.position.w=\"w/\"+r+\"-10\";i.push(n);s++}s=0;v++}g.textBlock=i}}g.path[2].actions=p;Schema.initShapeFunctions(g);Model.update(g);Designer.painter.renderShape(g);c=r}}])}}}}function h(q,w){var p=$(\"#shape_opt_box\");if(p.length==0){p=$(\"<div id='shape_opt_box'><div class='shape_opts'></div><div class='ico dlg_close'></div></div>\").appendTo(\"#designer_canvas\");p.bind(\"mousedown\",function(i){i.stopPropagation()}).bind(\"mousemove\",function(i){i.stopPropagation()});p.children(\".dlg_close\").bind(\"click\",function(i){p.hide()})}p.show();var s=Utils.getShapeBox(q);p.css({left:s.x+s.w+10,top:s.y,\"z-index\":Model.orderList.length+1});var r=p.children(\".shape_opts\");r.empty();for(var n=0;n<w.length;n++){var l=w[n];var v=$(\"<div class='opt'></div>\").appendTo(r);if(l.type==\"spinner\"){v.append(\"<label>\"+l.label+\"</label>\");var t=$(\"<div class='field'></div>\").appendTo(v);var u=$(\"<div class='spinner active' style='width: 55px;'></div>\").appendTo(t);if(l.id){u.attr(\"id\",l.id)}u.spinner({min:1,max:typeof l.max!=\"undefined\"?l.max:20,step:1,onChange:l.onChange});u.spinner(\"setValue\",l.value)}else{if(l.type==\"button\"){var m=$(\"<div class='button_box'></div>\").appendTo(v);var o=$(\"<div class='toolbar_button active'>\"+l.value+\"</div>\").appendTo(m);o.bind(\"click\",function(){l.onClick($(this))})}}}}},hideShapeOptions:function(){$(\"#shape_opt_box\").hide()},toogleTitleBar:function(){var a=$(\"#bar_collapse\").children(\"div\");if(a.hasClass(\"collapse\")){a.attr(\"class\",\"ico expand\");$(\".titlebar\").slideUp(200);$(\".layout\").animate({height:$(window).height()-73},200);$(\"#bar_return\").show();return false}else{a.attr(\"class\",\"ico collapse\");$(\".titlebar\").slideDown(200);$(\".layout\").animate({height:$(window).height()-143},200);$(\"#bar_return\").hide();return true}},showThemeSelect:function(){$(\"#themes\").dropdown({target:$(\"#bar_theme\")});if($(\"#themes\").children(\".theme_box\").length==0){for(var d in Schema.themes){var f=Schema.themes[d];var e=$(\"<div theme='\"+d+\"' class='theme_box'><canvas width='130' height='130'></canvas></div>\").appendTo($(\"#themes\"));e.bind(\"click\",function(){var g=$(this).attr(\"theme\");UI.setTheme(g)});var c=e.children(\"canvas\");var a=c[0].getContext(\"2d\");a.save();a.fillStyle=\"rgb(\"+f.shape.fillStyle.color+\")\";a.lineWidth=f.shape.lineStyle.lineWidth;a.strokeStyle=\"rgb(\"+f.shape.lineStyle.lineColor+\")\";a.beginPath();a.moveTo(10,14);a.quadraticCurveTo(10,10,14,10);a.lineTo(81,10);a.quadraticCurveTo(85,10,85,14);a.lineTo(85,51);a.quadraticCurveTo(85,55,81,55);a.lineTo(14,55);a.quadraticCurveTo(10,55,10,51);a.closePath();a.closePath();a.fill();a.stroke();a.beginPath();a.moveTo(140,70);a.lineTo(100,100);a.lineTo(140,130);a.closePath();a.fill();a.stroke();a.restore();a.fillStyle=\"rgb(\"+f.linker.lineStyle.lineColor+\")\";a.lineWidth=f.linker.lineStyle.lineWidth;a.strokeStyle=\"rgb(\"+f.linker.lineStyle.lineColor+\")\";a.beginPath();a.moveTo(47,56);a.lineTo(47,100);a.lineTo(90,100);a.stroke();a.beginPath();a.moveTo(83,96);a.lineTo(95,100);a.lineTo(83,104);a.closePath();a.fill();a.stroke();a.textAlign=\"center\";a.textBaseline=\"middle\";var b=\"\";if(f.shape.fontStyle.italic){b+=\" italic\"}if(f.shape.fontStyle.bold){b+=\" bold\"}b+=\" \"+f.shape.fontStyle.size+\"px \"+f.shape.fontStyle.fontFamily;a.font=b;a.fillStyle=\"rgb(\"+f.shape.fontStyle.color+\")\";a.fillText(\"流程节点\",47,32);b=\"\";if(f.linker.fontStyle.italic){b+=\" italic\"}if(f.linker.fontStyle.bold){b+=\" bold\"}b+=\" \"+f.linker.fontStyle.size+\"px \"+f.linker.fontStyle.fontFamily;a.font=b;a.fillStyle=\"rgb(\"+f.linker.fontStyle.color+\")\";a.clearRect(30,71,30,18);a.fillText(\"是\",47,80)}}$(\"#themes\").append(\"<div style='clear:both'></div>\")},setTheme:function(a){var b=Schema.themes[a];Model.setTheme(b);$(\"#themes\").dropdown(\"close\")},showTip:function(a,d,c){if(!d){d=\"center\"}var b=$(\"#designer_ui_tip\");if(b.length==0){b=$(\"<div id='designer_ui_tip'><div class='ui_tip_text'></div></div>\").appendTo(\"#designer_viewport\");b.append(\"<div class='ico ui_tip_close'></div>\");b.children(\".ui_tip_close\").bind(\"click\",function(){UI.hideTip()})}if(c){b.children(\".ui_tip_close\").bind(\"click.callback\",function(){c()})}else{b.children(\".ui_tip_close\").unbind(\"click.callback\")}b.children(\".ui_tip_text\").html(a);if(d==\"center\"){b.css(\"left\",($(\"#designer_viewport\").width()-b.outerWidth())/2)}else{b.css(\"left\",\"20px\")}b.fadeIn(\"fast\")},hideTip:function(){$(\"#designer_ui_tip\").hide()},RGB2Hex:function(b){if(b.charAt(0)==\"#\"){return b}var c=b.split(/\\D+/);var a=Number(c[1])*65536+Number(c[2])*256+Number(c[3]);return\"\"+UI.toHex(a,6)},toHex:function(a,c){var b=a.toString(16);while(b.length<c){b=\"0\"+b}return b},hex2RGB:function(d){var c=/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;if(d&&c.test(d)){if(d.length===4){var e=\"#\";for(var b=1;b<4;b+=1){e+=d.slice(b,b+1).concat(d.slice(b,b+1))}d=e}var a=[];for(var b=1;b<7;b+=2){a.push(parseInt(\"0x\"+d.slice(b,b+2)))}return a.join(\",\")}else{return d}}};var Dock={init:function(){var a=$(\"#designer_layout\").width();var d=$(\"#layout_block\").width();var c=a-d;$(\"#dock\").css(\"right\",c);var e=c+$(\"#dock\").outerWidth()-1;$(\".dock_view\").css(\"right\",e);if($(\"#demo_signup\").length){var b=$(\"#demo_signup\").outerHeight();$(\"#dock\").css(\"top\",b);$(\".dock_view\").css(\"top\",b+10)}$(\".ico_dock_collapse\").bind(\"click\",function(){$(\".dock_view\").hide();$(\".dock_buttons\").children().removeClass(\"selected\");if(Dock.currentView==\"history\"){Dock.closeHistory()}Dock.currentView=\"\";CLB.setConfig(\"dock\",\"none\")});$(window).bind(\"resize.dock\",function(){if(Dock.currentView==\"attribute\"){Dock.fitAttrList()}});$(\"#dock_zoom\").spinner({min:50,max:200,unit:\"%\",step:10,onChange:function(f){Designer.setZoomScale(f/100)}});$(\"#dock_line_color\").colorButton({onSelect:function(f){Designer.setLineStyle({lineColor:f})}});$(\"#dock_line_style\").button({onMousedown:function(){$(\"#line_style_list\").dropdown({target:$(\"#dock_line_style\"),onSelect:function(l){var j=l.attr(\"line\");Designer.setLineStyle({lineStyle:j});var k=l.children(\"div\").attr(\"class\");$(\"#dock_line_style\").children(\".linestyle\").attr(\"class\",k)}});var g=Utils.getSelected()[0];var f;if(g.name==\"linker\"){f=Utils.getLinkerLineStyle(g.lineStyle)}else{f=Utils.getShapeLineStyle(g.lineStyle)}var h=f.lineStyle;var i=$(\"#line_style_list\").children(\"li[line=\"+h+\"]\");$(\"#line_style_list\").dropdown(\"select\",i)}});$(\"#dock_line_width\").spinner({min:0,max:10,unit:\"px\",step:1,onChange:function(f){Designer.setLineStyle({lineWidth:f})}});$(\"#dock_fill_type\").button({onMousedown:function(){$(\"#dock_fill_list\").dropdown({target:$(\"#dock_fill_type\"),onSelect:function(j){var i=j.attr(\"ty\");$(\"#dock_fill_type\").button(\"setText\",j.text());if(i==\"image\"){UI.showImageSelect(function(m,l,n){Designer.setFillStyle({type:\"image\",fileId:m,imageW:l,imageH:n})})}else{Designer.setFillStyle({type:i});var k=Utils.getSelectedShapeIds();var h=Model.getShapeById(k[0]);var g=Utils.getShapeFillStyle(h.fillStyle);Dock.setFillStyle(g)}}});var f=$(\"#dock_fill_type\").text();$(\"#dock_fill_list\").children().each(function(){if($(this).text()==f){$(\"#dock_fill_list\").dropdown(\"select\",$(this));return false}})}});$(\"#fill_solid_btn\").colorButton({onSelect:function(f){Designer.setFillStyle({type:\"solid\",color:f})}});$(\"#fill_gradient_begin\").colorButton({onSelect:function(f){Designer.setFillStyle({beginColor:f});$(\"#fill_gradient_begin\").attr(\"c\",f)}});$(\"#fill_gradient_end\").colorButton({onSelect:function(f){Designer.setFillStyle({endColor:f});$(\"#fill_gradient_end\").attr(\"c\",f)}});$(\"#gradient_swap\").button({onClick:function(){var g=$(\"#fill_gradient_begin\").attr(\"c\");var f=$(\"#fill_gradient_end\").attr(\"c\");$(\"#fill_gradient_begin\").attr(\"c\",f).colorButton(\"setColor\",f);$(\"#fill_gradient_end\").attr(\"c\",g).colorButton(\"setColor\",g);Designer.setFillStyle({beginColor:f,endColor:g})}});$(\"#gradient_type\").button({onMousedown:function(){$(\"#gradient_type_list\").dropdown({target:$(\"#gradient_type\"),onSelect:function(j){var i=j.attr(\"ty\");$(\"#gradient_type\").button(\"setText\",j.text());Designer.setFillStyle({gradientType:i});$(\".gradient_details\").hide();$(\"#gradient_type_\"+i).show();var k=Utils.getSelectedShapeIds();var h=Model.getShapeById(k[0]);var g=Utils.getShapeFillStyle(h.fillStyle);if(i==\"linear\"){$(\"#gradient_angle\").spinner(\"setValue\",Math.round(g.angle/Math.PI*180)+\"°\")}else{$(\"#gradient_radius\").spinner(\"setValue\",Math.round(g.radius*100)+\"%\")}}});var f=$(\"#gradient_type\").text().trim();$(\"#gradient_type_list\").children().each(function(){if($(this).text()==f){$(\"#gradient_type_list\").dropdown(\"select\",$(this));return false}})}});$(\"#gradient_angle\").spinner({min:0,max:360,unit:\"°\",step:15,onChange:function(g){var f=g/180*Math.PI;Designer.setFillStyle({angle:f})}});$(\"#gradient_radius\").spinner({min:0,max:100,unit:\"%\",step:5,onChange:function(f){Designer.setFillStyle({radius:f/100})}});$(\"#fill_change_img\").button({onClick:function(){UI.showImageSelect(function(g,f,i){Designer.setFillStyle({type:\"image\",fileId:g,imageW:f,imageH:i})})}});$(\"#fill_img_display\").button({onMousedown:function(){$(\"#img_display_list\").dropdown({target:$(\"#fill_img_display\"),onSelect:function(g){var f=g.attr(\"ty\");$(\"#fill_img_display\").button(\"setText\",g.text());Designer.setFillStyle({display:f})}})}});$(\"#spinner_opacity\").spinner({min:0,max:100,unit:\"%\",step:5,onChange:function(f){Designer.setShapeStyle({alpha:f/100})}});$(\"#dock_metric_x\").spinner({min:-800,unit:\"px\",step:5,onChange:function(f){Designer.setShapeProps({x:f})}});$(\"#dock_metric_x\").spinner(\"setValue\",\"0px\");$(\"#dock_metric_w\").spinner({min:20,unit:\"px\",step:5,onChange:function(f){Designer.setShapeProps({w:f})}});$(\"#dock_metric_y\").spinner({min:-800,unit:\"px\",step:5,onChange:function(f){Designer.setShapeProps({y:f})}});$(\"#dock_metric_y\").spinner(\"setValue\",\"0px\");$(\"#dock_metric_h\").spinner({min:20,unit:\"px\",step:5,onChange:function(f){Designer.setShapeProps({h:f})}});$(\"#dock_metric_angle\").spinner({min:0,max:360,unit:\"°\",step:15,onChange:function(g){var f=g/180*Math.PI;Designer.setShapeProps({angle:f})}});$(\"#dock_page_size\").button({onMousedown:function(){$(\"#page_size_list\").dropdown({target:$(\"#dock_page_size\"),onSelect:function(j){var g=parseInt(j.attr(\"w\"));var i=parseInt(j.attr(\"h\"));Designer.setPageStyle({width:g,height:i});$(\"#dock_page_size\").button(\"setText\",j.text())}});var f=$(\"#page_size_list\").children(\"li[w=\"+Model.define.page.width+\"][h=\"+Model.define.page.height+\"]\");if(f.length>0){$(\"#page_size_list\").dropdown(\"select\",f)}else{$(\"#page_size_list\").dropdown(\"select\",$(\"#dock_size_custom\"))}$(\"#dock_size_w\").spinner(\"setValue\",Model.define.page.width+\"px\");$(\"#dock_size_h\").spinner(\"setValue\",Model.define.page.height+\"px\")}});$(\"#dock_size_w\").spinner({min:200,unit:\"px\",step:100,onChange:function(f){Designer.setPageStyle({width:f})}});$(\"#dock_size_h\").spinner({min:200,unit:\"px\",step:100,onChange:function(f){Designer.setPageStyle({height:f})}});$(\"#dock_page_padding\").button({onMousedown:function(){$(\"#page_padding_list\").dropdown({target:$(\"#dock_page_padding\"),onSelect:function(g){var h=parseInt(g.attr(\"p\"));Designer.setPageStyle({padding:h});$(\"#dock_page_padding\").button(\"setText\",g.text())}});var f=$(\"#page_padding_list\").children(\"li[p=\"+Model.define.page.padding+\"]\");$(\"#page_padding_list\").dropdown(\"select\",f)}});$(\"#dock_page_color\").colorButton({position:\"center\",onSelect:function(f){Designer.setPageStyle({backgroundColor:f})}});$(\".dock_page_ori_list\").children(\"input\").unbind().bind(\"click\",function(){var f=$(this).val();Designer.setPageStyle({orientation:f})});$(\"#dock_page_showgrid\").bind(\"change\",function(){var f=$(this).is(\":checked\");Designer.setPageStyle({showGrid:f});if(f){$(\"#dock_gridsize_box\").show()}else{$(\"#dock_gridsize_box\").hide()}});$(\"#dock_page_gridsize\").button({onMousedown:function(){$(\"#page_gridsize_list\").dropdown({target:$(\"#dock_page_gridsize\"),onSelect:function(h){var g=parseInt(h.attr(\"s\"));Designer.setPageStyle({gridSize:g});$(\"#dock_page_gridsize\").button(\"setText\",h.text())}});var f=$(\"#page_gridsize_list\").children(\"li[s=\"+Model.define.page.gridSize+\"]\");$(\"#page_gridsize_list\").dropdown(\"select\",f)}});$(\"#btn_history_add\").button({onClick:function(){Dock.toggleAddHistory()}});$(\"#btn_history_restore\").button({onClick:function(){Dock.restoreVersion()}});$(\"#txt_sub_comment\").bind(\"keyup\",function(j){if(j.keyCode==13){var f=$(this);var i=f.val().replace(/\\n/g,\"\");if(i.trim()==\"\"){return}var l=\"\";var h=Utils.getSelectedShapeIds();if(h.length==1){l=h[0]}var k={action:\"comment\",userId:userId,id:Utils.newId(),name:userName,content:i,shapeId:l,replyId:\"\"};CLB.send(k);Dock.appendComment(k);Dock.bindComment();$(\"#comment_container\").scrollTop(9999);f.val(\"\");if(!Model.comments){Model.comments=[]}Model.comments.push(k);if(l!=\"\"){var g=Model.getShapeById(l);Designer.painter.renderShape(g)}}});$(\"#show_comment_ico\").bind(\"click\",function(h){var f=$(\"#show_comment_ico\").is(\":checked\");CLB.setConfig(\"showCommentIco\",f);showCommentIco=f;for(var i in Model.define.elements){var g=Model.getShapeById(i);if(g.name!=\"linker\"){Designer.painter.renderShape(g)}}});if(dock!=\"none\"){if(dock==\"\"){dock=\"navigator\"}this.showView(dock)}},currentView:\"\",showView:function(a,b){if($(\"#dock_btn_\"+a).button(\"isDisabled\")){return}$(\".dock_view\").hide();$(\".dock_view_\"+a).show();$(\".dock_buttons\").children().removeClass(\"selected\");$(\"#dock_btn_\"+a).addClass(\"selected\");if(Dock.currentView==\"history\"&&a!=\"history\"){Dock.closeHistory()}this.currentView=a;this.update(true);if(b){CLB.setConfig(\"dock\",a)}},setFillStyle:function(a){$(\"#dock_fill_type\").button(\"setText\",$(\"#dock_fill_list\").children(\"li[ty=\"+a.type+\"]\").text());$(\".fill_detail\").hide();if(a.type==\"solid\"){$(\".fill_detail_solid\").show();$(\"#fill_solid_btn\").colorButton(\"setColor\",a.color)}else{if(a.type==\"gradient\"){$(\".fill_detail_gradient\").show();$(\"#fill_gradient_begin\").attr(\"c\",a.beginColor).colorButton(\"setColor\",a.beginColor);$(\"#fill_gradient_end\").attr(\"c\",a.endColor).colorButton(\"setColor\",a.endColor);$(\"#gradient_type\").button(\"setText\",$(\"#gradient_type_list\").children(\"li[ty=\"+a.gradientType+\"]\").text());$(\".gradient_details\").hide();if(a.gradientType==\"linear\"){$(\"#gradient_type_linear\").show();$(\"#gradient_angle\").spinner(\"setValue\",Math.round(a.angle/Math.PI*180)+\"°\")}else{$(\"#gradient_type_radial\").show();$(\"#gradient_radius\").spinner(\"setValue\",Math.round(a.radius*100)+\"%\")}}else{if(a.type==\"image\"){$(\".fill_detail_image\").show();var b=\"fill\";if(a.display){b=a.display}$(\"#fill_img_display\").button(\"setText\",$(\"#img_display_list\").children(\"li[ty=\"+b+\"]\").text())}}}},update:function(o){if(this.currentView==\"navigator\"){if(o){Navigator.draw()}$(\"#dock_zoom\").spinner(\"setValue\",Math.round(Designer.config.scale*100)+\"%\")}else{if(this.currentView==\"graphic\"){var l=Utils.getSelectedIds();var k=l.length;var i=Utils.getSelectedShapeIds();var r=i.length;if(k==0){$(\"#dock_line_color\").button(\"disable\");$(\"#dock_line_style\").button(\"disable\");$(\"#dock_line_width\").button(\"disable\")}else{$(\"#dock_line_color\").button(\"enable\");$(\"#dock_line_style\").button(\"enable\");$(\"#dock_line_width\").button(\"enable\");var m=Model.getShapeById(l[0]);var j;if(m.name==\"linker\"){j=Utils.getLinkerLineStyle(m.lineStyle)}else{j=Utils.getShapeLineStyle(m.lineStyle)}$(\"#dock_line_color\").colorButton(\"setColor\",j.lineColor);var f=$(\"#line_style_list\").children(\"li[line=\"+j.lineStyle+\"]\").children().attr(\"class\");$(\"#dock_line_style\").children(\".linestyle\").attr(\"class\",f);$(\"#dock_line_width\").spinner(\"setValue\",j.lineWidth+\"px\")}if(r==0){$(\"#dock_fill_type\").button(\"disable\");$(\"#spinner_opacity\").button(\"disable\");Dock.setFillStyle({type:\"none\"})}else{$(\"#dock_fill_type\").button(\"enable\");$(\"#spinner_opacity\").button(\"enable\");var m=Model.getShapeById(i[0]);var q=Utils.getShapeFillStyle(m.fillStyle);Dock.setFillStyle(q);$(\"#spinner_opacity\").spinner(\"setValue\",Math.round(m.shapeStyle.alpha/1*100)+\"%\")}}else{if(this.currentView==\"metric\"){var i=Utils.getSelectedShapeIds();var r=i.length;if(r==0){$(\"#dock_metric_x\").button(\"disable\");$(\"#dock_metric_w\").button(\"disable\");$(\"#dock_metric_y\").button(\"disable\");$(\"#dock_metric_h\").button(\"disable\");$(\"#dock_metric_angle\").button(\"disable\")}else{var m=Model.getShapeById(i[0]);$(\"#dock_metric_x\").button(\"enable\").spinner(\"setValue\",Math.round(m.props.x)+\"px\");$(\"#dock_metric_w\").button(\"enable\").spinner(\"setValue\",Math.round(m.props.w)+\"px\");$(\"#dock_metric_y\").button(\"enable\").spinner(\"setValue\",Math.round(m.props.y)+\"px\");$(\"#dock_metric_h\").button(\"enable\").spinner(\"setValue\",Math.round(m.props.h)+\"px\");$(\"#dock_metric_angle\").button(\"enable\").spinner(\"setValue\",Math.round(m.props.angle/Math.PI*180)+\"°\")}}else{if(this.currentView==\"page\"){var n=Model.define.page;var p=n.width;var g=n.height;var e=$(\"#page_size_list\").children(\"li[w=\"+p+\"][h=\"+g+\"]\");var d=\"\";if(e.length>0){d=e.text()}else{d=$(\"#dock_size_custom\").text()}$(\"#dock_page_size\").button(\"setText\",d);$(\"#dock_page_padding\").button(\"setText\",n.padding+\"px\");$(\"#dock_page_color\").colorButton(\"setColor\",n.backgroundColor);$(\"#dock_page_showgrid\").attr(\"checked\",n.showGrid);if(n.showGrid){$(\"#dock_gridsize_box\").show()}else{$(\"#dock_gridsize_box\").hide()}var b=\"\";var c=$(\"#page_gridsize_list\").children(\"li[s=\"+n.gridSize+\"]\");if(c.length>0){var b=c.text()}$(\"#dock_page_gridsize\").button(\"setText\",b);var a=\"portrait\";if(Model.define.page.orientation){a=Model.define.page.orientation}$(\".dock_page_ori_list\").children(\"input[value=\"+a+\"]\").attr(\"checked\",true)}else{if(this.currentView==\"attribute\"){var l=Utils.getSelectedIds();var k=l.length;if(k!=1){$(\".attr_list\").html(\"<li class='attr_none'>选择一个图形后，在这里查看数据属性</li>\");$(\".attr_add\").hide();this.fitAttrList()}else{this.setAttributeList();$(\".attr_add\").show();this.cancelAttrAdd()}}else{if(this.currentView==\"history\"){if(o&&Dock.historyVersions==null){this.loadHistorys()}}else{if(this.currentView==\"comment\"){this.loadComments();if(showCommentIco){$(\"#show_comment_ico\").attr(\"checked\",true)}else{$(\"#show_comment_ico\").attr(\"checked\",false)}}}}}}}}},historyVersions:null,loadHistorys:function(){if(chartId==\"\"){$(\"#history_container\").html(\"<div style='padding: 20px 10px;'>您正在试用状态，无法浏览历史版本</div>\");return}$.ajax({url:\"/diagraming/history\",data:{chartId:chartId},success:function(a){Dock.historyVersions=\"loaded\";$(\"#history_container\").html(a);Dock.resetVersions();Dock.initRemoveHistory()}})},resetVersions:function(){if($(\"#history_versions\").length==0){return}$(\"#history_versions\").children(\"li\").unbind().bind(\"click\",function(){if($(this).hasClass(\"selected\")){Dock.closeHistory()}else{$(\"#history_versions\").children(\".selected\").removeClass(\"selected\");$(this).addClass(\"selected\");var d=$(this).attr(\"def\");Dock.showHistoryVersion(d)}var e=$(\"#history_versions\").children(\".selected\");if(e.length!=0&&e.attr(\"ind\")!=\"0\"){$(\"#btn_history_restore\").button(\"enable\")}else{$(\"#btn_history_restore\").button(\"disable\")}});$(\"#history_versions\").height(\"auto\");var c=$(\"#history_versions\").offset().top;var b=c+$(\"#history_versions\").height()+75;if(b>$(window).height()){var a=$(window).height()-c-75;if(a<140){a=140}$(\"#history_versions\").height(a)}else{$(\"#history_versions\").height(\"auto\")}$(\"#history_versions\").scrollTop(0)},toggleAddHistory:function(){$(\".area_history\").toggle();if($(\"#area_history_add\").is(\":visible\")){$(\"#history_remark\").focus()}},addHistory:function(){if(chartId!=\"\"){var b=$(\"#history_remark\").val();var a={action:\"addHistory\",remark:b};CLB.sendDirectly(a,function(){Dock.loadHistorys();$(\"#history_remark\").val(\"\");Dock.toggleAddHistory()})}},initRemoveHistory:function(){function a(){$(\".dock_history_remove_div\").find(\"span:first\").off().on(\"click\",function(c){var b=$(this).parents(\"li\").attr(\"vid\");if(chartId!=\"\"){var d={action:\"removeHistory\",vid:b};CLB.sendDirectly(d,function(){Dock.loadHistorys()})}c.stopPropagation()});$(\".dock_history_remove_div\").find(\"span:last\").off().on(\"click\",function(b){$(\".dock_history_remove_con\").remove();b.stopPropagation()})}$(\".dock_history_remove\").off().on(\"click\",function(f){$(\".dock_history_remove_con\").remove();var c=$(this).parent().parent();var b=c.attr(\"vid\");var d=$(\"<div class='dock_history_remove_con'><div class='dock_history_remove_div'>确认删除此历史版本？<div style='margin-top:8px;'><span class='toolbar_button active'>确定</span>&nbsp;&nbsp;<span class='toolbar_button active'>取消</span></div></div></div>\");d.appendTo(c);a();f.stopPropagation()})},showHistoryVersion:function(a){$(\"#btn_history_restore\").button(\"disable\");$.ajax({url:\"/diagraming/getdefinition\",data:{definitionId:a},success:function(b){Dock.openHistory(b.definition);$(\"#btn_history_restore\").button(\"enable\");UI.showTip(\"您在正浏览一个历史版本<a href='javascript:' style='margin-left: 10px;color:#0080FF' onclick='Dock.closeHistory()'>点击退出</a>\")}})},currentDefinition:null,openHistory:function(a){if(this.currentDefinition==null){this.currentDefinition=$.extend(true,{},Model.define)}Utils.unselect();Designer.open(a);Designer.hotkey.cancel();Designer.op.cancel();$(\"#menu_bar\").children().addClass(\"readonly\");$(\".diagram_title\").addClass(\"readonly\");$(\".dock_buttons\").children().addClass(\"disabled\");$(\"#dock_btn_history\").removeClass(\"disabled\");$(\".panel_box\").addClass(\"readonly\");CLB.stopListen()},closeHistory:function(){if(this.currentDefinition!=null){Designer.open(this.currentDefinition);this.currentDefinition=null;this.activeOperation();UI.hideTip()}},activeOperation:function(){Designer.hotkey.init();Designer.op.init();$(\"#menu_bar\").children().removeClass(\"readonly\");$(\".diagram_title\").removeClass(\"readonly\");$(\".dock_buttons\").children().removeClass(\"disabled\");$(\"#dock_btn_history\").removeClass(\"disabled\");$(\".panel_box\").removeClass(\"readonly\");$(\"#history_versions\").children(\".selected\").removeClass(\"selected\");$(\"#btn_history_restore\").button(\"disable\");CLB.startListen()},restoreVersion:function(){var d=$(\"#history_versions\").children(\".selected\");if(d.length){MessageSource.beginBatch();var e=Dock.currentDefinition.elements;var f=[];if(e){for(var h in e){f.push(e[h])}}MessageSource.send(\"remove\",f);var b={page:Utils.copy(Dock.currentDefinition.page),update:Utils.copy(Model.define.page)};MessageSource.send(\"updatePage\",b);var a=Model.define.elements;var c=[];if(a){for(var h in a){c.push(a[h])}}MessageSource.send(\"create\",c);var g={theme:Utils.copy(Dock.currentDefinition.theme),update:Utils.copy(Model.define.theme)};MessageSource.send(\"setTheme\",g);MessageSource.commit();Dock.activeOperation();UI.hideTip()}},currentCommentId:\"-1\",commentOperate:\"\",loadComments:function(){if(this.commentOperate==\"viewing_comment\"){return}var d=$(\"#comment_container\");var c=Utils.getSelectedShapeIds();var e;if(c.length==1){e=c[0]}else{e=\"\"}if(this.currentCommentId!=e){this.currentCommentId=e;if(!Model.comments||Model.comments.length==0){d.html(\"<div class='comment_none'>暂时没有评论</div>\")}else{d.empty();for(var b=0;b<Model.comments.length;b++){var a=Model.comments[b];if(a.shapeId==e||e==\"\"){Dock.appendComment(a)}}Dock.bindComment();Dock.fitComments()}}},bindComment:function(){var a=$(\"#comment_container\");a.find(\"input\").unbind(\"click\").bind(\"click\",function(b){b.stopPropagation()});a.find(\".input_comment_reply\").unbind(\"keydown\").bind(\"keydown\",function(d){if(d.keyCode==13){var c=$(this).val();if(c==\"\"){return}$(this).val(\"\");var b=$(this).parent().parent().parent().attr(\"id\");var f={action:\"comment\",userId:userId,id:Utils.newId(),name:userName,content:c,shapeId:\"\",replyId:b};CLB.send(f);Dock.appendComment(f);Dock.bindComment()}Dock.fitComments()});a.find(\".comment_remove\").unbind(\"click\").bind(\"click\",function(g){g.stopPropagation();$(this).parent().remove();var k=$(this).parent().attr(\"id\");var h={action:\"removeComment\",id:k};CLB.send(h);Dock.fitComments();var f=[];for(var d=0;d<Model.comments.length;d++){var c=Model.comments[d];if(c.id!=k&&c.replyId!=k){f.push(c)}}Model.comments=f;var j=$(this).parent().attr(\"shapeId\");var b=Model.getShapeById(j);if(b!=null&&b.name!=\"linker\"){Designer.painter.renderShape(b)}});a.children(\".comment_item_outer\").unbind().bind(\"click\",function(){if($(this).hasClass(\"selected\")){$(this).removeClass(\"selected\")}else{a.children(\".selected\").removeClass(\"selected\");$(this).addClass(\"selected\")}var c=$(this).attr(\"shapeId\");Dock.commentOperate=\"viewing_comment\";if(c){var b=Model.getShapeById(c);if(b!=null){Utils.selectShape(c)}}Dock.fitComments();Dock.commentOperate=\"\"})},fitComments:function(){var c=$(\"#comment_container\");var e=c.scrollTop();c.height(\"auto\");var d=c.offset().top;var b=d+c.height()+145;if(b>$(window).height()){var a=$(window).height()-d-145;if(a<120){a=120}c.height(a)}else{c.height(\"auto\")}c.scrollTop(e)},appendComment:function(a){$(\".comment_none\").remove();var b=$(\"<div class='comment_item' id='\"+a.id+\"'></div>\").appendTo(e);if(a.replyId){var e=$(\"#comment_container\").children(\"#\"+a.replyId+\".comment_item\").find(\".comment_reply_list\");b=$(\"<div class='comment_item comment_item_inner' id='\"+a.id+\"'></div>\").appendTo(e)}else{var e=$(\"#comment_container\");b=$(\"<div class='comment_item comment_item_outer' id='\"+a.id+\"'></div>\").appendTo(e)}if(role==\"owner\"||a.userId==userId){b.append(\"<div class='ico comment_remove' disableTitle='true' title='删除'></div>\")}if(a.shapeId){b.attr(\"shapeId\",a.shapeId)}b.append(\"<img src='/photo/\"+a.userId+\".png'/>\");var c=$(\"<div class='comment_content_box'></div>\").appendTo(b);c.append(\"<div class='comment_name'>\"+a.name+\"</div>\");c.append(\"<div class='comment_content'>\"+a.content+\"</div>\");var g=new Date();if(a.time){g.setTime(a.time)}var f=g.format(dateFormat);c.append(\"<div class='comment_date'>\"+f+\"</div>\");if(!a.replyId){c.append(\"<div class='comment_reply_list'></div>\");c.append(\"<div class='comment_reply'><input type='text' class='input_text input_comment_reply' placeholder='回复此评论...'/></div>\")}Dock.fitComments()},setAttributeList:function(){var c=Utils.getSelectedIds();var b=Model.getShapeById(c[0]);$(\".attr_list\").empty();if(b.dataAttributes){for(var d=0;d<b.dataAttributes.length;d++){var a=b.dataAttributes[d];var f=$(\"#attr_add_type\").children(\"option[value=\"+a.type+\"]\").text();var e=$(\"<li id='\"+a.id+\"' class='attr_item attr_item_\"+a.id+\"' onclick=\\\"Dock.editAttr('\"+a.id+\"')\\\"><div class='attr_name'>\"+a.name+\"</div><div class='attr_type'>\"+f+\"</div><div class='attr_value'>\"+a.value+\"</div><div style='clear: both'></div></li>\").appendTo($(\".attr_list\"));if(a.category!=\"default\"){e.append(\"<div class='ico ico_attr_delete' onclick=\\\"Dock.deleteAttr('\"+a.id+\"', event)\\\"></div>\")}}}this.fitAttrList()},fitAttrList:function(){var b=$(\".attr_list\").scrollTop();$(\".attr_list\").height(\"auto\");var d=$(\".attr_list\").offset().top;var c=d+$(\".attr_list\").height()+10;if(c>$(window).height()){var a=$(window).height()-d-10;if(a<140){a=140}$(\".attr_list\").height(a)}else{$(\".attr_list\").height(\"auto\")}$(\".attr_list\").scrollTop(b)},showAttrAdd:function(){$(\"#attr_add_btn\").hide();$(\".attr_add_items\").show();$(\"#attr_add_name\").val(\"\").focus();$(\"#attr_add_type\").val(\"string\");$(\"#attr_add_type\").unbind().bind(\"change\",function(){Dock.setAttrValueInput(null,$(this).val())});Dock.setAttrValueInput(null,\"string\");this.fitAttrList()},saveAttrAdd:function(){var a=$(\"#attr_add_name\").val();if(a==\"\"){$(\"#attr_add_name\").focus();return}var b=$(\"#attr_add_type\").val();var c=$(\"#attr_add_value_arera\").children().val();var d={name:a,type:b,value:c};Designer.addDataAttribute(d);this.setAttributeList();this.showAttrAdd()},cancelAttrAdd:function(){$(\"#attr_add_btn\").show();$(\".attr_add_items\").hide();this.fitAttrList()},editAttr:function(f){var m=$(\".attr_item_\"+f);if(m.hasClass(\"attr_editing\")){return}if($(\".attr_editing\").length>0){var c=$(\".attr_editing\").attr(\"id\");this.saveAttrEdit(c)}m=$(\".attr_item_\"+f);m.addClass(\"attr_editing\");var g=Designer.getDataAttrById(f);var j=this.setAttrValueInput(g,g.type);j.val(g.value).select();if(g.category!=\"default\"){var h=m.children(\".attr_name\");h.empty();var l=$(\"<input type='text' class='input_text' style='width: 88px'/>\").appendTo(h);l.val(g.name).select();var b=m.children(\".attr_type\");b.empty();var i=$(\"<select class='input_select' style='width: 60px'></select>\").appendTo(b);i.html($(\"#attr_add_type\").html()).val(g.type);i.bind(\"change\",function(){Dock.setAttrValueInput(g,$(this).val())})}var k=$(\"<div class='attr_edit_display'></div>\").appendTo(m);k.append(\"<div class='dock_label'>显示为：</div>\");k.append(\"<div id='attr_edit_showtype' class='toolbar_button active btn_inline' style='width: 75px;'><div class='text_content'></div><div class='ico ico_dropdown'></div></div>\");k.append(\"<div style='clear: both'></div>\");k.append(\"<div class='attr_display_options'></div>\");this.appendDisplayItems();var e=\"none\";if(g.showType){e=g.showType}this.setAttrDisplay(e);$(\"#attr_edit_showtype\").attr(\"ty\",e).button({onMousedown:function(){$(\"#attr_display_list\").dropdown({target:$(\"#attr_edit_showtype\"),onSelect:function(p){var o=p.attr(\"ty\");$(\"#attr_edit_showtype\").attr(\"ty\",o).button(\"setText\",p.text());Dock.setAttrDisplay(o)}});var n=$(\"#attr_edit_showtype\").text().trim();$(\"#attr_display_list\").children().each(function(){if($(this).text()==n){$(\"#attr_display_list\").dropdown(\"select\",$(this));return false}})}});$(\"#attr_edit_showtype\").attr(\"ty\",e).button(\"setText\",$(\"#attr_display_list\").children(\"li[ty=\"+e+\"]\").html());if(e!=\"none\"){$(\"#attr_display_name\").attr(\"checked\",g.showName);if(e==\"icon\"){this.setAttrIcon(g.icon)}}var a=\"mostright\";if(g.horizontal){a=g.horizontal}var d=\"mostbottom\";if(g.vertical){d=g.vertical}$(\"#attr_location_h\").button(\"setText\",$(\"#attr_location_h_list\").children(\"li[loc=\"+a+\"]\").html());$(\"#attr_location_h\").attr(\"loc\",a);$(\"#attr_location_v\").button(\"setText\",$(\"#attr_location_v_list\").children(\"li[loc=\"+d+\"]\").html());$(\"#attr_location_v\").attr(\"loc\",d);m.append(\"<div class='attr_edit_btns'><div id='save_edit_attr' class='toolbar_button active'>确定</div><div id='cancel_edit_attr' class='toolbar_button active' style='margin-left: 5px;'>取消</div></div>\");$(\"#save_edit_attr\").bind(\"click\",function(n){n.stopPropagation();Dock.saveAttrEdit(f)});$(\"#cancel_edit_attr\").bind(\"click\",function(n){n.stopPropagation();Dock.setAttributeList()})},setAttrValueInput:function(c,e){var b;if(c!=null){b=$(\".attr_editing\").children(\".attr_value\")}else{b=$(\"#attr_add_value_arera\")}b.empty();var a;if(e==\"boolean\"){a=$(\"<select class='input_select'><option value=''></option><option value='true'>true</option><option value='false'>false</option></select>\").appendTo(b)}else{if(e==\"list\"){a=$(\"<select class='input_select'></select>\").appendTo(b);if(c.listItems){for(var d=0;d<c.listItems.length;d++){var f=c.listItems[d];a.append(\"<option value='\"+f+\"'>\"+f+\"</option>\")}}}else{a=$(\"<input type='text' class='input_text'/>\").appendTo(b)}}if(c==null){b.children().css(\"width\",\"260px\")}else{b.children().css(\"width\",\"128px\")}return a},appendDisplayItems:function(){var e=$(\".attr_display_options\");var f=$(\"<div class='opt_area'></div>\").appendTo(e);f.append(\"<input id='attr_display_name' type='checkbox'/><label for='attr_display_name'>显示属性名</label>\");var d=$(\"<div id='attr_icon_area' style='padding-top:5px;'></div>\").appendTo(f);d.append(\"<div class='dock_label'>图标：</div>\");d.append(\"<div id='attr_display_icon' ico='' class='toolbar_button active btn_inline' style='width: 50px'><div class='text_content'></div><div class='ico ico_dropdown'></div></div>\");d.append(\"<div style='clear: both'></div>\");if($(\"#attr_icon_list\").children(\"li\").html()==\"\"){var b=\"\";var a=1;while(a<=49){if(a==30){b+=\"<div></div>\"}b+=\"<div onmousedown='Dock.setAttrIcon(\"+a+\")' class='attr_icon_item'></div>\";a++}$(\"#attr_icon_list\").children(\"li\").html(b)}var c=$(\"<div class='opt_area location_area'></div>\").appendTo(e);c.append(\"<div>显示位置：</div>\");c.append(\"<div class='dock_label'>水平：</div>\");c.append(\"<div id='attr_location_h' class='toolbar_button active btn_inline' loc='mostright'><div class='text_content location_content'><div><span style='left: 11px'></span></div>Most Right</div><div class='ico ico_dropdown'></div></div>\");c.append(\"<div style='clear: both'></div>\");c.append(\"<div class='dock_label'>垂直：</div>\");c.append(\"<div id='attr_location_v' class='toolbar_button active btn_inline' loc='mostbottom'><div class='text_content location_content'><div><span style='top: 11px'></span></div>Most Bottom</div><div class='ico ico_dropdown'></div></div>\");c.append(\"<div style='clear: both'></div>\");e.append(\"<div style='clear: both'></div>\");$(\"#attr_display_icon\").button({onMousedown:function(){$(\"#attr_icon_list\").dropdown({target:$(\"#attr_display_icon\")})}});$(\"#attr_location_h\").button({onMousedown:function(){$(\"#attr_location_h_list\").dropdown({target:$(\"#attr_location_h\"),onSelect:function(g){$(\"#attr_location_h\").button(\"setText\",g.html());$(\"#attr_location_h\").attr(\"loc\",g.attr(\"loc\"))}})}});$(\"#attr_location_v\").button({onMousedown:function(){$(\"#attr_location_v_list\").dropdown({target:$(\"#attr_location_v\"),onSelect:function(g){$(\"#attr_location_v\").button(\"setText\",g.html());$(\"#attr_location_v\").attr(\"loc\",g.attr(\"loc\"))}})}})},setAttrDisplay:function(a){if(a==\"none\"){$(\".attr_display_options\").hide()}else{$(\".attr_display_options\").show();if(a==\"icon\"){$(\"#attr_icon_area\").show()}else{$(\"#attr_icon_area\").hide()}}},setAttrIcon:function(a){$(\"#attr_display_icon\").attr(\"ico\",a).button(\"setText\",\"\");if(a){$(\"#attr_display_icon\").button(\"setText\",\"<img src='/images/data-attr/\"+a+\".png'/>\")}},saveAttrEdit:function(f){var j=$(\".attr_item_\"+f);if(!j.hasClass(\"attr_editing\")){return}var i=Designer.getDataAttrById(f);if(i.category!=\"default\"){var a=j.children(\".attr_name\").children(\"input\").val();if(a==\"\"){j.children(\".attr_name\").children(\"input\").focus();return}i.name=a;i.type=j.children(\".attr_type\").children(\"select\").val()}i.value=j.children(\".attr_value\").children().val();var d=$(\"#attr_edit_showtype\").attr(\"ty\");i.showType=d;if(d!=\"none\"){i.showName=$(\"#attr_display_name\").is(\":checked\");i.horizontal=$(\"#attr_location_h\").attr(\"loc\");i.vertical=$(\"#attr_location_v\").attr(\"loc\");if(d==\"icon\"){i.icon=$(\"#attr_display_icon\").attr(\"ico\")}}var g=Utils.getSelectedIds();var h=Model.getShapeById(g[0]);if(i.category==\"default\"&&h.category==\"bpmn\"){if(!h.attribute){h.attribute={}}if(!h.attribute.markers){h.attribute.markers=[]}var c=h.attribute.markers;if(i.name==\"loopCharacteristics\"||i.name==\"循环特征\"){Utils.removeFromArray(c,\"loop\");Utils.removeFromArray(c,\"sequential\");Utils.removeFromArray(c,\"parallel\");if(i.value==\"StandardLoopCharacteristics\"||i.value==\"标准\"){Utils.addToArray(c,\"loop\")}else{if(i.value==\"MultipleLoopCharacteristics\"||i.value==\"多例\"){var b=Designer.getDefaultDataAttrByName(\"isSequantial\");if(b==null){b=Designer.getDefaultDataAttrByName(\"是否为序列\")}if(b!=null){if(b.value==\"true\"){Utils.addToArray(c,\"sequential\")}else{Utils.addToArray(c,\"parallel\")}}}}}else{if(i.name==\"isSequantial\"||i.name==\"是否为序列\"){Utils.removeFromArray(c,\"sequential\");Utils.removeFromArray(c,\"parallel\");var e=Designer.getDefaultDataAttrByName(\"loopCharacteristics\");if(e==null){e=Designer.getDefaultDataAttrByName(\"循环特征\")}if(e!=null&&(e.value==\"MultipleLoopCharacteristics\"||e.value==\"多例\")){if(i.value==\"true\"){Utils.addToArray(c,\"sequential\")}else{Utils.addToArray(c,\"parallel\")}}}else{if(i.name==\"isForCompensation\"||i.name==\"是否为补偿\"){Utils.removeFromArray(c,\"compensation\");if(i.value==\"true\"){Utils.addToArray(c,\"compensation\")}}else{if(i.name==\"isCollection\"||i.name==\"participantMultiplicity\"||i.name==\"是否为集合\"||i.name==\"多重参与者\"){Utils.removeFromArray(c,\"parallel\");if(i.value==\"true\"){Utils.addToArray(c,\"parallel\")}}else{if(i.name==\"loopType\"||i.name==\"循环类型\"){Utils.removeFromArray(c,\"loop\");Utils.removeFromArray(c,\"sequential\");Utils.removeFromArray(c,\"parallel\");if(i.value==\"Standard\"||i.value==\"标准\"){Utils.addToArray(c,\"loop\")}else{if(i.value==\"MultiInstanceSequential\"||i.value==\"实例化多例序列\"){Utils.addToArray(c,\"sequential\")}else{if(i.value==\"MultiInstanceParallel\"||i.value==\"实例化多例并行\"){Utils.addToArray(c,\"parallel\")}}}}}}}}}Designer.updateDataAttribute(i);this.setAttributeList()},deleteAttr:function(c,b){b.stopPropagation();var a=$(\".attr_item_\"+c);a.remove();this.fitAttrList();Designer.deleteDataAttribute(c)},fullScreen:function(a,b){if(a.requestFullscreen){a.requestFullscreen()}else{if(a.mozRequestFullScreen){a.mozRequestFullScreen()}else{if(a.webkitRequestFullscreen){a.webkitRequestFullscreen()}else{if(b){$(\"#fullscreen_tip\").find(\".t\").text(\"由于您的浏览器限制，无法进入演示视图。\")}else{$(\"#fullscreen_tip\").find(\".t\").text(\"无法进入全屏视图，您可以按(F11)进入。\")}$(\"#fullscreen_tip\").fadeIn()}}}},enterPresentation:function(){$(\"#designer\").bind(\"webkitfullscreenchange\",function(a){Dock.manageFullScreen()});$(document).bind(\"mozfullscreenchange\",function(a){Dock.manageFullScreen()}).bind(\"fullscreenchange\",function(a){Dock.manageFullScreen()});this.fullScreen(Utils.getDomById(\"designer\"),true)},enterFullScreen:function(){this.fullScreen(document.documentElement)},manageFullScreen:function(){var a=Utils.getDomById(\"designer\");if(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement){$(\"#shape_panel\").addClass(\"readonly\");$(\"#designer_viewport\").addClass(\"readonly\");$(window).unbind(\"resize.designer\");$(\"#designer_layout\").height(window.screen.height);Designer.hotkey.cancel();Designer.op.cancel();$(\"#dock\").hide();$(\".dock_view\").hide();Designer.contextMenu.destroy();Designer.op.canvasFreeDraggable()}else{$(\"#shape_panel\").removeClass(\"readonly\");$(\"#designer_viewport\").removeClass(\"readonly\");Designer.initialize.initLayout();Designer.hotkey.init();Designer.op.init();$(\"#dock\").show();if(Dock.currentView!=\"\"){Dock.showView(Dock.currentView)}Designer.contextMenu.init();$(\"#designer\").unbind(\"webkitfullscreenchange\");$(\"#designer\").unbind(\"mozfullscreenchange\").unbind(\"fullscreenchange\")}}};var Navigator={init:function(){$(\"#designer_layout\").bind(\"scroll\",function(){Navigator.setView()});$(\"#navigation_eye\").bind(\"mousedown\",function(m){var f=$(this);var j=f.position();$(\"#designer_layout\").unbind(\"scroll\");var g=$(\"#designer_layout\");var k=g.scrollTop();var d=g.scrollLeft();var n=$(\"#designer_canvas\");var e=n.width();var a=n.height();var b=$(\"#navigation_canvas\");var i=b.width();var c=b.height();var l=e/i;var h=a/c;$(document).bind(\"mousemove.navigator\",function(q){var o=q.pageX-m.pageX;var s=q.pageY-m.pageY;var r=d+o*l;g.scrollLeft(r);var p=k+s*h;g.scrollTop(p);f.css({left:j.left+o,top:j.top+s})});$(document).bind(\"mouseup.navigator\",function(o){$(document).unbind(\"mousemove.navigator\");$(document).unbind(\"mouseup.navigator\");Navigator.setView();$(\"#designer_layout\").bind(\"scroll\",function(){Navigator.setView()})})});$(\"#navigation_canvas\").bind(\"click\",function(l){var m=Utils.getRelativePos(l.pageX,l.pageY,$(this));var o=$(\"#designer_canvas\");var h=o.width();var a=o.height();var b=$(\"#navigation_canvas\");var k=b.width();var c=b.height();var n=h/k;var j=a/c;var g=m.x*n;var f=m.y*j;var i=$(\"#designer_layout\");var d=Designer.config.pageMargin;i.scrollLeft(g+d-i.width()/2);i.scrollTop(f+d-i.height()/2)});this.setView()},draw:function(){if(this.drawNavigationTimeout){window.clearTimeout(this.drawNavigationTimeout)}this.drawNavigationTimeout=setTimeout(function(){var c=$(\"#navigation_canvas\");var r=c[0].getContext(\"2d\");r.save();r.clearRect(0,0,c.width(),c.height());r.scale(c.width()/Model.define.page.width,c.height()/Model.define.page.height);for(var g=0;g<Model.orderList.length;g++){var m=Model.orderList[g].id;var l=Model.getShapeById(m);r.save();if(l.name!=\"linker\"){var b=l.props;var a=Utils.getShapeLineStyle(l.lineStyle);r.translate(b.x,b.y);r.translate(b.w/2,b.h/2);r.rotate(b.angle);r.translate(-(b.w/2),-(b.h/2));r.globalAlpha=l.shapeStyle.alpha;Designer.painter.renderShapePath(r,l)}else{var h=l;var a=Utils.getLinkerLineStyle(h.lineStyle);var q=h.points;var o=h.from;var n=h.to;r.beginPath();r.moveTo(o.x,o.y);if(h.linkerType==\"curve\"){var f=q[0];var e=q[1];r.bezierCurveTo(f.x,f.y,e.x,e.y,n.x,n.y)}else{for(var d=0;d<q.length;d++){var k=q[d];r.lineTo(k.x,k.y)}r.lineTo(n.x,n.y)}r.lineWidth=a.lineWidth;r.strokeStyle=\"rgb(\"+a.lineColor+\")\";r.stroke()}r.restore()}r.restore();Navigator.setView();this.drawNavigationTimeout=null},100)},setView:function(){var a=$(\"#navigation_eye\");var r=$(\"#designer_layout\");var u=r.width();var d=r.height();var b=$(\"#navigation_canvas\");var g=b.width();var n=b.height();var o=$(\"#designer_canvas\");var f=o.width();var m=o.height();var l=Designer.config.pageMargin;var h=l-r.scrollLeft();var t=h+f;if(h<0){h=0}else{if(h>u){h=u}}if(t>u){t=u}else{if(t<0){t=0}}var j=l-r.scrollTop();var e=j+m;if(j<0){j=0}else{if(j>d){j=d}}if(e>d){e=d}else{if(e<0){e=0}}var i=t-h;var p=e-j;if(i==0||p==0){a.hide()}else{var k=r.scrollLeft()-l;if(k<0){k=0}k=k*(g/f);var q=r.scrollTop()-l;if(q<0){q=0}q=q*(n/m);var s=i*(g/f);var c=p*(n/m);a.css({left:k-1,top:q-1,width:s,height:c}).show()}}};var ProShare={publish:{source:'<div id=\"publish_toedit\" class=\"pubpo-tab dialog-win-con\"><div class=\"toedit-des\">当前文件已发布（公开）到ProcessOn，您可以：</div><div class=\"publish-content\"><div id=\"btn_submit_private\"><span class=\"icons\">&#xe62d;</span>取消发布</div><div class=\"item-seq\">或者</div><div id=\"to_publish_edit\"><span class=\"icons\">&#xe62e;</span>修改发布信息</div></div></div></div><div id=\"publish_verifying\" class=\"pubpo-tab dialog-win-con\"><div class=\"toedit-des\">当前文件正在进行发布审核，一般为1-3个工作日，请耐心等待</div><div class=\"publish-content\"><div id=\"btn_verifying\"><span class=\"icons\">&#xe676;</span>审核中…</div><div class=\"item-seq\">或者</div><div id=\"to_publish_edit\"><span class=\"icons\">&#xe62e;</span>修改发布信息</div></div></div><div id=\"publish_topublic\" class=\"pubpo-tab dialog-win-con\"><div class=\"pub-explain\">发布后，文件将公开到 ProcessOn，所有用户都可以看到，供大家学习交流；您也可以设置文件的克隆价格，分享知识的同时还可以获得收益。</div><ul class=\"form\"><li><div class=\"title\">文件描述：</div><textarea id=\"publish_description\" class=\"textarea txt\" placeholder=\"请您描述文件（必填）\"></textarea></li><li><div class=\"title\">文件标签：</div><div id=\"publish_addtags\" class=\"feedTags\"><div id=\"tag_items\"></div><input id=\"tag_input\" class=\"tag-txt\" type=\"text\" placeholder=\"输入内容按回车键添加标签(必填)\"></div></li><li><div class=\"title\">开放克隆</div><div class=\"content\"><div class=\"radio-btn-group\"><input type=\"radio\" name=\"public_clone\" id=\"no_clone\" class=\"clone-radio\"><label for=\"no_clone\">不允许克隆</label><span class=\"label-exp\">所有人只限于查看此文件，但是不能克隆</span></div><div class=\"radio-btn-group\"><input id=\"public_clone_free\" type=\"radio\" class=\"clone-radio\" name=\"public_clone\"><label for=\"public_clone_free\">免费克隆</label><span class=\"label-exp\">所有人都可以查看且免费克隆（另存为）此文件</span></div><div class=\"radio-btn-group\"><input id=\"public_clone_pay\" type=\"radio\" class=\"clone-radio \" name=\"public_clone\"><label for=\"public_clone_pay\">付费克隆</label><span class=\"label-exp\">用户可以查看文件，付费后，可以克隆您的文件</span></div></div></li><li class=\"clone-price\"><div class=\"title\">克隆价格</div><div class=\"content\"><input class=\"setprice-btn txt\" id=\"setprice\" type=\"text\" name=\"set_price\" placeholder=\"克隆价格为数字，最多1位小数\"><span style=\"margin-left:10px;\">元</span><a title=\"点我了解详情\" href=\"/support#user-template\" target=\"_blank\"><span class=\"icons\" style=\"color: #888;cursor: pointer;margin-left:10px;\">&#xe66f;</span></a></div></li></ul><div class=\"bot-line\"><div class=\"dlg-buttons fr\"><span id=\"btn_submit_publish\" class=\"pro-btn default pub-btn\">发布</span></div><div class=\"agreement-group\"><input id=\"agreement\" type=\"checkbox\" name=\"agreement\" checked /><label for=\"agreement\">点击发布表示您同意我们的<a href=\"/tos\" target=\"_blank\" class=\"agreement-detail\">服务条款</a></label></div></div></div>',execute:function(e){Util.get(\"/view/chart/\"+e,{},function(h){var g=h.chart;d(g.status);$(\"#tag_items\").children(\"span\").remove();$(\".clone-price\").hide();if(g.tags!=null&&g.tags.length>0){for(var f=0;f<g.tags.length;f++){a(g.tags[f])}}$(\"#publish_description\").val(Util.restoreXss(g.description));if(g.template==true){$(\"#public_clone_pay\").attr(\"checked\",true);$(\".clone-price\").show()}if(g.publicClone&&g.publicClonePrice>0){$(\"#public_clone_pay\").attr(\"checked\",true);$(\".clone-price\").show();$(\".setprice-btn\").val(g.publicClonePrice);$(\"#btn_submit_publish\").text(\"提交审核\")}else{if(g.publicClone){$(\"#public_clone_free\").attr(\"checked\",true)}else{$(\"#no_clone\").attr(\"checked\",true)}}});$(\"#pubpo_win\").on(\"click\",\"#to_publish_edit\",function(){$(\".pubpo-tab\").hide();$(\"#publish_topublic\").show()});$(\"#publish_addtags\").on(\"click\",function(f){$(\"#tag_input\").focus()});$(\"#tag_input\").off(\"keyup.input\").on(\"keyup.input\",function(g){if($.trim($(this).val()).length>30){$(this).val($.trim($(this).val()).substring(0,30))}var f=g.which;if(f==13){a($(\"#tag_input\").val());$(\"#tag_input\").val(\"\")}if(f==188){a($(\"#tag_input\").val().substr(0,$(\"#tag_input\").val().length-1));$(\"#tag_input\").val(\"\")}$(\"#publish_addtags\").scrollTop($(\".input_item_box\").height())}).off(\"keydown.delete\").on(\"keydown.delete\",function(f){if(f.which==8&&$(\"#tag_input\").val()==\"\"){$(\"#tag_items span:last-child\").remove()}}).suggest({url:\"/tags/suggest\",valueField:\"tagName\",format:function(f){return f.tagName},onEnter:function(){a();$(\".feedTags\").scrollTop($(\".input_item_box\").height())}});$(\"#tag_items\").find(\".close-tag\").die().live(\"click\",function(){$(this).parent().remove();if($(\"#tag_items\").children(\"span\").length<5){$(\"#tag_input\").val(\"\").focus()}});$(\".clone-radio\").off().on(\"change\",function(){var g=$(\"#public_clone_pay\").prop(\"checked\"),f=$(\"#btn_submit_publish\");if(g){$(\".clone-price\").show();f.text(\"提交审核\");return}$(\".clone-price\").hide();f.text(\"发布\")});$(\"#agreement\").on(\"change\",function(){var g=$(this).prop(\"checked\"),f=$(\"#btn_submit_publish\");if(!g){f.disable();return}f.enable()});$(\"#clone_price\").off().on(\"blur\",function(){var g=$(this);var f=g.val();if(isNaN(f*1)){g.inputTip({text:\"克隆价格只能输入数字\",pos:\"rightout\"})}else{if($.trim(f).length==0){g.val(0)}else{if(f*1<0.1){g.inputTip({text:\"您输入的克隆价格不在规定范围\",pos:\"rightout\"})}}}});$(\"#btn_submit_publish\").off().on(\"click\",function(){var g=\"verifying\";var f=$(\"#public_clone_free\").prop(\"checked\"),h=$(\"#no_clone\").prop(\"checked\");if(f||h){g=\"public\"}b(g)});$(\"#btn_submit_private\").off().on(\"click\",function(){var f=\"private\";b(f)});function b(l){var g=$(\"#publish_description\"),f=$(\".clone-radio:checked\");var m={};m.id=e;m.description=g.val();m.tags=c();m.status=l;m._public_clone=($(\"#no_clone\")[0].checked==true)?\"false\":\"true\";m._public_clone_price=$(\"#setprice\").val();m.ignore=\"description\";if(l!=\"private\"){if(m.description.length<15){Util.globalTopTip(\"请输入文件描述，至少15个字\",\"top_error\",3000,$(\"#pubpo_win\"),true);g.focus();return}if(m.tags.length==0){Util.globalTopTip(\"请输入文件标签\",\"top_error\",3000,$(\"#pubpo_win\"),true);$(\"#publish_addtags\").find(\"input\").focus();return}if(f.length<1){Util.globalTopTip(\"您需要选择是否开放克隆\",\"top_error\",3000,$(\"#pubpo_win\"),true);return}var j=$(\"#public_clone_pay\").prop(\"checked\");if(j){var k=$(\"#setprice\");var i=k.val().trim();if(i.length==0){Util.globalTopTip(\"请您输入克隆价格\",\"top_error\",3000,$(\"#pubpo_win\"),true);k.focus();return}else{if(!/^(\\d+\\.\\d{1,1}|\\d+)$/.test(i)){Util.globalTopTip(\"克隆价格需为数字，最多一位小数\",\"top_error\",3000,$(\"#pubpo_win\"),true);k.focus();return}else{if(i<0.1){Util.globalTopTip(\"您输入的克隆价格小于规定范围\",\"top_error\",3000,$(\"#pubpo_win\"),true);k.focus();return}}}}}$(\"#btn_submit_publish\").disable();var h=l==\"verifying\"?\"chart/verify\":\"publish\";Util.ajax({url:\"/folder/\"+h,data:m,success:function(n){$(\"#btn_submit_publish\").enable();if(n.result==\"clone\"){Util.globalTopTip(\"克隆的文件暂不允许发布\",\"top_error\",3000,$(\"#share_win\"),true);return}else{if(n.result==\"rename\"){Util.globalTopTip(\"未命名文件不允许发布，请修改文件标题后再发布\",\"top_error\",3000,$(\"#share_win\"),true);return}}if(l==\"public\"){Util.globalTopTip(\"文件已经发布成功\",null,3000,$(\"#pubpo_win\"),true)}else{if(l==\"verifying\"){Util.globalTopTip(\"文件已经提交审核\",null,3000,$(\"#pubpo_win\"),true)}else{Util.globalTopTip(\"文件已经取消发布，已处于私密状态\",null,3000,$(\"#pubpo_win\"),true)}}d(l)}})}function d(f){var g=$(\".pubpo-tab\");if(f==\"public\"){g.hide();$(\"#publish_toedit\").show()}else{if(f==\"verifying\"){g.hide();$(\"#publish_verifying\").show()}else{g.hide();$(\"#publish_topublic\").show();$(\"#publish_topublic\").find(\"textarea\").focus()}}}function a(g){if(typeof g==\"undefined\"){g=$(\"#tag_input\").val();$(\"#tag_input\").val(\"\")}if($(\"#tag_items\").children(\"span\").length>=5){$(\"#tag_input\").inputTip({text:\"最多添加五个标签\",pos:\"rightout\"});return}if(g!=\"\"){var f=$(\"#tag_items\").find(\".tagitem\").map(function(){return $(this).find(\"input\").val()}).get();if($.inArray(g,f)<0){$(\"#tag_items\").append(\"<span class='tagitem'><span class='close-tag icons'>&#xe637;</span><input type='hidden' name='tags' value='\"+g+\"'/>\"+g+\"</span>\");$(\"#tag_items\").show()}}}function c(){a();var f=$(\"#tag_items\").find(\".tagitem\").map(function(){return $(this).find(\"input\").val()}).get();return f}}},viewlink:{source:'<div class=\"dlg-content\"><h3><span class=\"tip1\">创建浏览链接，分享给别人后，可以通过此链接来安全地浏览您的文件</span></h3><div style=\"margin:15px 0;\"><input type=\"text\" id=\"view_link_input\" class=\"input txt\" style=\"width:90%;\" readonly placeholder=\"您还没有给文件创建分享链接\"></div><div><span class=\"pro-btn default create\">创建链接</span><div class=\"new-form-switch\"><span class=\"switchbutton fl gray\" val=\"false\"><span class=\"switch left\"><span class=\"icons\" style=\"color:#888;\">&#xe652;</span></span><span class=\"switch-left\">删除密码</span><span class=\"switch-right\">添加密码</span></span></div><input type=\"text\" class=\"txt input-pw\" style=\"margin-left:10px;display:none;height:10px;\" maxlength=\"8\" placeholder=\"密码\" /></div><div class=\"share-menu\">分享到<a class=\"share_to_a weixin\" style=\"display:inline-block;\" target=\"_blank\" rel=\"nofollow\" hrefs=\"http://api.qrserver.com/v1/create-qr-code/?data=$viewLinkId\"></a><a class=\"share_to_a weibo\" style=\"display:inline-block;\" target=\"_blank\" rel=\"nofollow\" hrefs=\"http://service.weibo.com/share/share.php?appkey=4181333602&title=$title&url=https://www.processon.com&ralateUid=2711044785\"></a><a class=\"share_to_a qzone\" style=\"display:inline-block;\" target=\"_blank\" rel=\"nofollow\" hrefs=\"http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?desc=$title&title=$title&url=https://www.processon.com&summary=$title\"></a><a class=\"share_to_a mingdao\" target=\"_blank\" rel=\"nofollow\" hrefs=\"http://www.mingdao.com/share?appkey=5967E9E0B4ADA1B9C23B1893ABAED0F&pic=http://www.processon.com/chart_image/thumb/$thumb.png&title=$title&url=https://www.processon.com\"></a><a class=\"share_to_a douban\" style=\"display:inline-block;\" target=\"_blank\" rel=\"nofollow\" hrefs=\"http://www.douban.com/share/service?name=$title&href=https://www.processon.com\"></a><a class=\"share_to_a facebook\" style=\"display:inline-block;\" target=\"_blank\" rel=\"nofollow\" hrefs=\"http://www.facebook.com/sharer.php?u=https://www.processon.com&t=ProcessOn\"></a><a class=\"share_to_a google\" style=\"display:inline-block;\" target=\"_blank\" rel=\"nofollow\" hrefs=\"http://www.google.com/bookmarks/mark?op=add&bkmk=https://www.processon.com&title=ProcessOn\"></a><a class=\"share_to_a linkedin\" style=\"display:inline-block;\" target=\"_blank\" rel=\"nofollow\" hrefs=\"http://www.linkedin.com/shareArticle?mini=true&url=https://www.processon.com&title=ProcessOn\"></a></div></div>',execute:function(j){var h=null;var e=\"\";Util.get(\"/view/getlink\",{chartId:j},function(m){h=m.chart;e=m.viewLinkId;if(e==\"\"||e==null){a()}else{var l=\"false\";var k=null;if(!!h.viewPassword){l=\"true\";k=h.viewPassword}$(\".switchbutton\").attr(\"val\",l);g(k);$(\"#view_link_input\").val(e).select()}if(locale==\"zh\"){$(\".share_to_a.weixin\").attr(\"hrefs\",$(\".share_to_a.weixin\").attr(\"hrefs\").replace(\"$viewLinkId\",e)).show();$(\".share_to_a.weibo\").attr(\"hrefs\",$(\".share_to_a.weibo\").attr(\"hrefs\").replace(\"$title\",h.title)).show();$(\".share_to_a.qzone\").attr(\"hrefs\",$(\".share_to_a.qzone\").attr(\"hrefs\").replace(\"$title\",h.title)).show();$(\".share_to_a.mingdao\").attr(\"hrefs\",$(\".share_to_a.mingdao\").attr(\"hrefs\").replace(\"$thumb\",h.thumb)).show();$(\".share_to_a.douban\").attr(\"hrefs\",$(\".share_to_a.douban\").attr(\"hrefs\").replace(\"$title\",h.title)).show();$(\".share_to_a.facebook\").hide();$(\".share_to_a.google\").hide();$(\".share_to_a.linkedin\").hide()}else{$(\".share_to_a.weixin\").attr(\"hrefs\",$(\".share_to_a.weixin\").attr(\"hrefs\").replace(\"$viewLinkId\",e)).hide();$(\".share_to_a.weibo\").attr(\"hrefs\",$(\".share_to_a.weibo\").attr(\"hrefs\").replace(\"$title\",h.title)).hide();$(\".share_to_a.qzone\").attr(\"hrefs\",$(\".share_to_a.qzone\").attr(\"hrefs\").replace(\"$title\",h.title)).hide();$(\".share_to_a.mingdao\").attr(\"hrefs\",$(\".share_to_a.mingdao\").attr(\"hrefs\").replace(\"$thumb\",h.thumb)).hide();$(\".share_to_a.douban\").attr(\"hrefs\",$(\".share_to_a.douban\").attr(\"hrefs\").replace(\"$title\",h.title)).hide();$(\".share_to_a.facebook\").show();$(\".share_to_a.google\").show();$(\".share_to_a.linkedin\").show()}});$(\".share_to_a\").off(\"mousedown\").on(\"mousedown\",function(l){l.stopPropagation();var k=$(this);Util.ajax({url:\"/view/getlink\",async:false,data:{chartId:j},success:function(p){if(p.viewLinkId!=\"\"){var n=k.attr(\"hrefs\");if(n.indexOf(\"/view/link/\")<0){k.attr(\"hrefs\",n.replace(\"=https://www.processon.com\",\"=\"+p.viewLinkId))}if(k.hasClass(\"weixin\")){var q=k.attr(\"hrefs\").replace(\"https://www.processon\",\"http://test.processon\");var m=$(\"<div></div>\").appendTo(\"body\");m.css({position:\"absolute\",width:200,height:216,left:\"50%\",top:\"40%\",marginLeft:-100,marginTop:-100,textAlign:\"center\",zIndex:9999999,border:\"1px solid #ccc\",background:\"#fff\",boxShadow:\"1px 1px 12px #bbb\"});var o=new QRCode(m[0],{width:180,height:180});m.find(\"img\").css({width:\"180px\",height:\"180px\",marginTop:10,marginLeft:10}).after(\"<div>微信扫一扫 分享</div>\");o.makeCode(p.viewLinkId);$(document).off(\"mousedown.weixin\").on(\"mousedown.weixin\",function(){m.remove()})}else{window.open(k.attr(\"hrefs\"))}}}})});$(\".switchbutton\").off().on(\"click\",function(){var k=$(this).attr(\"val\");if(k==\"true\"){$(this).attr(\"val\",false)}else{$(this).attr(\"val\",true)}c(this)});$(\"#view_link_input\").off().on(\"click\",function(){$(this).select();try{if(document.execCommand(\"copy\",false,null)){Util.globalTopTip(\"链接已复制到剪切板\",\"top_success\",3000,$(\"#mind-share-dlg\"),true)}else{}}catch(k){}});$(\".input-pw\").off().on(\"change\",function(l){var k=$(this).val().trim();if(k==\"\"){return}if(!/^[0-9a-zA-Z]+$/.test(k.trim())){Util.globalTopTip(\"只能为数字和字母的组合\",\"top_error\",3000,$(\"#share_win\"),true);return}i(k)});function a(){$(\".dlg-content .create\").text(\"创建链接\").off().on(\"click\",function(){d()}).next().hide().next().hide();$(\".share-menu\").hide();$(\"#view_link_input\").val(\"\").off()}function d(){Util.ajax({url:\"/view/addlink\",data:{chartId:j},success:function(l){$(\".switchbutton\").attr(\"val\",\"false\");g();var k=l.viewLinkId;$(\"#view_link_input\").val(k).select()}})}function g(k){$(\".dlg-content .create\").text(\"删除链接\").off().on(\"click\",function(){f()}).next().css(\"display\",\"inline-block\");$(\".share-menu\").show();b(k)}function b(k){var m=$(\".switchbutton\");var l=m.attr(\"val\");if(l==\"false\"){m.removeClass(\"green\").addClass(\"gray\");m.find(\".switch\").removeClass(\"right\").addClass(\"left\");m.find(\".switch .icons\").show();m.find(\".switch-left\").hide();m.find(\".switch-right\").show()}else{m.removeClass(\"gray\").addClass(\"green\");m.find(\".switch\").removeClass(\"left\").addClass(\"right\");m.find(\".switch .icons\").hide();m.find(\".switch-left\").show();m.find(\".switch-right\").hide();if(!!k){$(\".input-pw\").show().val(k)}}}function f(){Util.ajax({url:\"/view/dellink\",data:{chartId:j},success:function(k){a()}})}function c(m){var l=$(m).attr(\"val\");if(l==\"true\"){var k=Util.creatCode(4);$(\".input-pw\").show().val(k).select();i(k)}else{Util.ajax({url:\"/view/removepassword\",data:{chartId:j},success:function(n){$(\".input-pw\").val(\"\").hide();b($(\".input-pw\").val())}})}}function i(k){Util.ajax({url:\"/view/addpassword\",data:{viewPassword:k,chartId:j},success:function(l){b($(\".input-pw\").val());Util.globalTopTip(\"密码设置成功\",\"top_success\",3000,$(\"#share_win\"),true)}})}}},emb:{source:'<div class=\"embed-left\"><div class=\"embed-preview-wrap\"><div class=\"embed-preview\"></div></div></div><div class=\"embed_attributes form\"><div id=\"embed_show_tip\">您可以复制下面的代码，嵌入到第三方网站中</div><textarea id=\"iframe_html\" class=\"textarea txt\" readonly=\"readonly\" style=\"margin-top:10px;height:60px;width:98%;\"></textarea><div class=\"embed-size\"><label class=\"title\" for=\"embed_width\">宽度:</label><input type=\"text\" id=\"embed_width\" name=\"embed_width\" class=\"input txt\" value=\"525\"><label for=\"embed_width\">px</label>,<label class=\"title\" for=\"embed_height\">高度:</label><input type=\"text\" id=\"embed_height\" name=\"embed_height\" class=\"input txt\" value=\"245\"><label for=\"embed_height\">px</label></div></div>',execute:function(f){$(\"#iframe_html\").val(\"\");$(\".embed-preview\").html(\"\");var e=$(\"#\"+f).attr(\"cate\");var c=\"/embed/\";var a,b;a=$(\"#embed_width\").val();b=$(\"#embed_height\").val();d(a,b);$(\"#iframe_html\").select();function d(g,k){var i='<iframe id=\"embed_dom\" name=\"embed_dom\" frameborder=\"0\" style=\"display:block;width:'+g+\"px; height:\"+k+'px;\" src=\"'+(location.origin+c+f)+'\"></iframe>';$(\"#iframe_html\").val(i);$(\".embed-preview-wrap\").css({\"margin-top\":(-k/2)+\"px\",\"margin-left\":(-g/2)+\"px\"});$(\".embed-preview\").html(i);var j=document.getElementById(\"embed_dom\");j.onload=j.onreadystatechange=function(){if(!j.readyState||j.readyState==\"complete\"){setTimeout(function(){$(\".embed-preview .preview_dis\").remove();setTimeout(function(){$(\".embed_obj\").fadeIn()},100)},400)}}}$(\".embed-size\").find(\"input\").keyup(function(){var g=$.trim($(\"#embed_width\").val())==\"\"?340:$.trim($(\"#embed_width\").val());var i=$.trim($(\"#embed_height\").val())==\"\"?160:$.trim($(\"#embed_height\").val());g=parseInt(g);i=parseInt(i);$(\".embed-preview\").find(\"div:first\").css({width:g+\"px\",height:i+\"px\"});$(\".embed-preview\").find(\"iframe\").css({width:g+\"px\",height:i+\"px\"});d(g,i)});$(\"#iframe_html\").off().on(\"click\",function(){$(this).select();try{if(document.execCommand(\"copy\",false,null)){Util.globalTopTip(\"链接已复制到剪切板\",\"top_success\",3000,$(\"#mind-share-dlg\"),true)}else{}}catch(g){}});$(\".embed-preview\").keydown(function(){$(\".embed-size\").find(\"input\").blur()})}},image:{source:'<div class=\"dlg-content\"><h3><span class=\"tip1\">分享图片链接</span></h3><div><input type=\"text\" id=\"img_link_input\" class=\"input txt\" readonly style=\"width:98%;margin-top:10px;\"><div style=\"clear:both;\"></div></div></div>',execute:function(a){Util.ajax({url:\"/folder/on_line_pic/\"+a,success:function(c){$(\"#img_link_input\").show().prev().hide();var b=c.url.replace(\"www.processon.com\",\"on-img.com\");$(\"#img_link_input\").val(b).off().on(\"click\",function(){$(this).select();try{if(document.execCommand(\"copy\",false,null)){Util.globalTopTip(\"链接已复制到剪切板\",\"top_success\",3000,$(\"#mind-share-dlg\"),true)}else{}}catch(d){}}).select()}})}}};var collaboration={loadingcolla:false,followingPage:0,followerPage:0,init:function(c,b){var a=this;a.multiVal=[];a.multiType=[];a.getContacters();a.getRoleList();$(\".colla-tab\").off().on(\"click\",function(){var e=$(this).attr(\"tit\");if($(this).hasClass(\"active\")){return}$(this).addClass(\"active\").siblings().removeClass(\"active\");switch(e){case\"colla_users\":$(\"#colla_users\").show().siblings().hide();break;case\"colla_teams\":var d=$(\".colla-team-user\").length;if(d<1){a.getTeams()}$(\"#colla_teams\").show().siblings().hide();break;case\"colla_following\":var f=$(\"#colla_following\"),i=f.find(\".colla-follow-user\").length;if(i<1){f.empty();a.getCollaFollwinger(\"following\",0)}f.show().siblings().hide();break;case\"colla_follower\":var h=$(\"#colla_follower\"),g=h.find(\".colla-follow-user\").length;if(g<1){h.empty();a.getCollaFollwinger(\"follower\",0)}h.show().siblings().hide();break}});$(\".colla-context-con\").on(\"click\",\".colla-follow-more\",function(f){var d=$(this).parent().data(\"type\");a[d+\"Page\"]+=1;a.getCollaFollwinger(d,a[d+\"Page\"])});$(document).off(\"click\",\".colla-team\");$(document).on(\"click\",\".colla-team\",function(i){var h=$(this),g=h.attr(\"tid\"),f=h.find(\".icons\"),d=f.hasClass(\"active\");if(!d){if($(\".colla-team-user[tid=\"+g+\"]\").length>0){a.showTeamsMbs(null,g)}else{a.getTeamMembers(g)}f.addClass(\"active\")}else{f.removeClass(\"active\");a.hideTeamMbs(g)}});$(document).off(\"click\",\".colla-user, .colla-team-user > div\");$(document).on(\"click\",\".colla-user, .colla-team-user > div\",function(f){var d=$(this).attr(\"uid\"),g=$(this).text();if(!d||a.multiVal.indexOf(d)>=0){return}$(\"#multi-input-colla\").multiInput(\"setVal\",d,g);a.multiVal.push(d);a.multiType.push(\"user\")});$(\"#send-colla-invite\").off().on(\"click\",function(h){var g=$(\"#colla_add\"),d=$(\"#multi-input\");if(d.length>0&&d.val()!=\"\"){var h=$.Event(\"keyup\");h.keyCode=13;d.trigger(h)}var f=a.multiVal;if(f.length==0){return}$(\"#send-colla-invite\").hide();$(\"#send-colla-invite-loading\").show();Util.ajax({url:\"/collaboration/add\",data:{type:\"email\",targets:f.join(\",\"),targetTypes:a.multiType.join(\",\"),chartId:chartId,role:$(\"#role\").val()},success:function(i){a.multiVal=[];a.multiType=[];$(\"#send-colla-invite-loading\").hide();$(\"#send-colla-invite\").show();$(\".multi-input-vals\").empty();if(i.result==\"success\"){Util.globalTopTip(\"邀请协作发送成功\",\"top_success\",\"3000\",g,true);a.getRoleList();return false}if(i.result==\"exists\"){mindTip.globalTopTip(\"邀请人已加入协作\",\"top_error\",\"5000\",g,true)}}})});$(\"#multi-input-colla\").multiInput({setVal:function(d){if(a.multiVal.indexOf(d)>=0){return}a.multiVal.push(d);a.multiType.push(\"email\");return d},deleteVal:function(e){var d=a.multiVal.indexOf(e);a.multiVal.splice(d,1);a.multiType.splice(d,1)}})},multiType:[],multiVal:[],totalCount:0,showCount:0,showCollaList:function(d){var c=\"\";var e=d.users;for(var b=0;b<e.length;b++){var a=e[b];c+='<div><span class=\"pop-text\">'+a.fullName+'</span><span class=\"pop-text-i\"><'+a.email+\"></span></div>\"}return c},getContacters:function(){var a=this;Util.ajax({url:\"/collaboration/get_contacter\",success:function(b){a.showContacters(b)}})},getTeams:function(){var a=this;Util.ajax({url:\"/collaboration/get_teams\",success:function(b){a.showTeams(b)}})},getCollaFollwinger:function(a,c){Util.loadingball({con:$(\".colla-context-con\")});if(this.loadingcolla){return}this.loadingcolla=true;var b=this;Util.ajax({url:\"/u/colla/more\",data:{page:c,type:a},success:function(d){Util.loadingball({close:true});b.loadingcolla=false;b.showFollowinger(d,$(\"#colla_\"+a))}})},getTeamMembers:function(b,c){var a=this,c=c||1;Util.ajax({url:\"/collaboration/get_teams_mbs\",data:{teamId:b,pn:c},success:function(d){a.totalCount=d.total;a.showCount=d.skip;a.showTeamsMbs(d,b);$(\"#loadMore\").off().on(\"click\",function(f){a.getTeamMembers(b,c+1)})}})},showContacters:function(e){var d=\"\";if(e!=null&&e.contacters.length>0){for(var c=0,a=e.contacters.length;c<a;c++){var b=e.contacters[c];if(b==null){continue}d+='<div uid=\"'+b.userId+'\" class=\"colla-user\"><span>'+Util.loadAvatar(b.userId)+\"</span><span>\"+b.fullName+\"</span></div>\"}}else{d=\"<div class='colla-users-none'><span class='icons'>&#xe63e;</span><div>您还没有最近联系人</div></div>\"}$(\"#colla_users\").html(d)},showFollowinger:function(d,g){var f=\"\";var a=d.users.length;var j=g.find(\".colla-follow-more\");if(a==6){if(j.length<1){j=$(\"<div class='colla-follow-more'>更多</div>\");j.appendTo(g)}j.show()}else{if(a<6){if(j.length>0){j.hide()}}}if(d!=null&&a>0){for(var e=0,h=a;e<h;e++){var c=d.users[e];if(c==null){continue}var b='<div class=\"user-logo tmu-photo\">'+Util.loadAvatar(c.userId)+\"</div>\";f+='<div uid=\"'+c.userId+'\" class=\"colla-user colla-follow-user\"><span>'+b+\"</span><span>\"+c.fullName+\"</span></div>\"}}g.append(f);if(g.find(\".colla-user \").length<1){g.html(\"<div class='colla-users-none'><div>空空如也</div></div>\")}},showTeams:function(e){var d=\"\";if(e!=null&&e.teams.length>0){for(var c=0,a=e.teams.length;c<a;c++){var b=e.teams[c];if(b==null){continue}d+='<div tid=\"'+b.groupId+'\" class=\"colla-team\"><span>'+collaboration.getTeamLogo(b)+'</span><span class=\"title\">'+b.groupName+'</span><span class=\"icons\">&#xe618;</span></div>'}}else{d=\"<div class='colla-users-none'><span class='icons'>&#xe60e;</span><div>您还没有小组</div></div>\"}$(\"#colla_teams\").html(d)},showTeamsMbs:function(f,h){var e=\"\";if(f!=null&&f.users.length>0){for(var d=0,a=f.users.length;d<a;d++){var b=f.users[d];if(b==null){continue}var c=\"<span>\"+Util.loadAvatar(b.userId)+\"</span>\";e+='<div uid=\"'+b.userId+'\"><div class=\"colla-user\">'+c+\"<span>\"+b.fullName+\"</span></div></div>\"}var g=$(\".colla-team-user[tid=\"+h+\"]\");if(g.length==0){g=$(\"<div class='colla-team-user' tid='\"+h+\"' ></div>\");$(\".colla-team[tid=\"+h+\"]\").after(g)}if(this.showCount<this.totalCount){if($(\"#loadMore\").length>0){$(\"#loadMore\").before(e)}else{e+=\"<div id='loadMore' style='padding:0px;height: 12px;width: 50%;margin-left:25%;text-align: center;cursor: pointer;margin-top: 5px;border-radius: 6px;border: 1px solid #dcdcdc;'><span class='icons' style='width:10px;height:10px;margin-top:-3px;'>&#xe618;</span></div>\";g.append(e)}}else{g.append(e);$(\"#loadMore\").hide()}}else{$(\".colla-team-user[tid=\"+h+\"]\").show()}},getTeamLogo:function(b){var a=\"<span class='icons teamlogo'>&#xe668;</span>\";if(b!=null&&b.logoFileName!=null&&b.logoFileName!=\"\"){a=\"<img src='\"+this.getBaseUrl+\"/file/response/\"+b.logoFileName+\"/team_logo'/>\"}return a},hideTeamMbs:function(a){$(\".colla-team-user[tid=\"+a+\"]\").hide()},getRoleList:function(c,b){var a=this;var d=chartId;Util.ajax({url:\"/collaboration/list_users\",data:{chartId:d,pg:b||1},success:function(e){a.showRoleList(e)}})},showRoleList:function(e){$(\"#role_list\").empty();var d=\"\";if(e.owner!=null){d='<div class=\"role-item\"><span class=\"item-portrait\">'+Util.loadAvatar(e.owner.userId)+'</span><span class=\"item-user-fullname\">'+e.owner.fullName+'</span><span class=\"item-role-status\"></span><span class=\"role-sel-con\">创建者</span></div>'}if(e.collaborations!=null){for(var c=0;c<e.collaborations.length;c++){var a=e.collaborations[c].user,b=e.collaborations[c];d+='<div id=\"item_'+b.collborationId+'\" class=\"role-item\"><span onclick=\"collaboration.removeRoleUser(\\''+b.collborationId+\"','\"+b.user.userId+'\\')\" class=\"icons closeme\">&#xe637;</span><span class=\"item-portrait\">'+Util.loadAvatar(a.userId)+'</span><span class=\"item-user-fullname\">'+a.fullName+'</span><span class=\"item-role-status\" >'+b.email+'</span><span class=\"role-sel-con\" ><select onchange=\"collaboration.setRole(\\''+b.collborationId+'\\',this)\"><option value=\"editor\" '+(b.role==\"editor\"?'selected=\"selected\"':\"\")+' \">编辑者</option><option value=\"viewer\" '+(b.role==\"viewer\"?'selected=\"selected\"':\"\")+' \">浏览者</option></select></span></div>'}}$(\"#role_list\").html(d)},setRole:function(a,b){if(a!=\"\"){Util.ajax({url:\"/collaboration/set_role\",data:{role:b.value,collaborationId:a},success:function(c){Util.globalTopTip(\"修改成功\",null,2000,$(\"#colla_add\"),true)}})}},removeRoleUser:function(b,a){Util.ajax({url:\"/collaboration/delete\",data:{type:\"user\",collaborationId:b},success:function(c){$(\"#item_\"+b).remove()}})},renderExcludeInut:function(d){var b=\"\";for(var c=0,a=d.length;c<a;c++){b+='<span val=\"'+d[0]+'\" class=\"multi-input-value\"><span class=\"icons\" style=\"color:#f60;\">&#xe614;</span><span class=\"multi-text\" style=\"color:#f60;\">'+d[0]+'</span><span class=\"icons closeme\" style=\"color:#f20;\">&#xe637;</span></span>'}$(\".multi-input-vals\").append(b)}};(function(c){c.fn.button=function(e){if(typeof e==\"string\"){if(e==\"disable\"){c(this).addClass(\"disabled\");c(this).find(\"input\").attr(\"disabled\",true)}else{if(e==\"enable\"){c(this).removeClass(\"disabled\");c(this).find(\"input\").attr(\"disabled\",false)}else{if(e==\"isDisabled\"){return c(this).hasClass(\"disabled\")}else{if(e==\"isSelected\"){return c(this).hasClass(\"selected\")}else{if(e==\"unselect\"){c(this).removeClass(\"selected\")}else{if(e==\"select\"){c(this).addClass(\"selected\")}else{if(e==\"setText\"){c(this).children(\".text_content\").html(arguments[1])}else{if(e==\"setColor\"){c(this).children(\".btn_color\").css(\"background-color\",\"rgb(\"+arguments[1]+\")\")}else{if(e==\"getColor\"){var d=c(this).children(\".btn_color\").css(\"background-color\").replace(/\\s/g,\"\");return d.substring(4,d.length-1)}}}}}}}}}return c(this)}var f=c(this);f.unbind(\"click\");f.unbind(\"mousedown\");if(e.onClick){f.bind(\"click\",function(){if(f.button(\"isDisabled\")){return}e.onClick()})}if(e.onMousedown){f.bind(\"mousedown\",function(g){if(f.button(\"isDisabled\")){return}e.onMousedown();g.stopPropagation()})}};var b=null;c.fn.dropdown=function(e){var i=c(this);i.find(\".ico_selected\").remove();if(typeof e==\"string\"){if(e==\"close\"){i.hide();b.target.removeClass(\"selected\");c(document).unbind(\"mousedown.ui_dropdown\");b=null}else{if(e==\"select\"){arguments[1].prepend(\"<div class='ico ico_selected'></div>\")}}return}if(b!=null){b.menu.dropdown(\"close\")}var i=c(this);var d=e.target;b={target:d,menu:i};var h=d.offset();d.addClass(\"selected\");i.show();var g;if(e.position==\"center\"){g=h.left+d.outerWidth()/2-i.outerWidth()/2}else{if(e.position==\"right\"){g=h.left+d.outerWidth()-i.outerWidth()}else{g=h.left}}var f=h.top+d.outerHeight();if(f+i.outerHeight()>c(window).height()){f=c(window).height()-i.outerHeight()}i.css({top:f,left:g});if(typeof e.zindex!=\"undefined\"){i.css(\"z-index\",e.zindex)}i.unbind(\"mousedown\").bind(\"mousedown\",function(j){j.stopPropagation()});if(typeof e.bind==\"undefined\"||e.bind==true){i.find(\"li:not(.devider,.menu_text)\").unbind().bind(\"click\",function(){var j=c(this);if(!j.menuitem(\"isDisabled\")&&j.children(\".extend_menu\").length==0){if(e.onSelect){e.onSelect(j)}i.dropdown(\"close\")}})}c(document).bind(\"mousedown.ui_dropdown\",function(){i.dropdown(\"close\")})};c.colorpicker=function(f){var e=c(\"#color_picker\");e.find(\".selected\").removeClass(\"selected\");if(!e.attr(\"init\")){e.find(\"div\").each(function(){var h=c(this).css(\"background-color\");h=h.replace(/\\s/g,\"\");h=h.substring(4,h.length-1);c(this).attr(\"col\",h)});e.attr(\"init\",true)}var g=c.extend({},f,{bind:false});e.dropdown(g);e.children(\".color_items\").children(\"div\").unbind().bind(\"click\",function(){if(f.onSelect){var h=c(this).css(\"background-color\");h=h.replace(/\\s/g,\"\");h=h.substring(4,h.length-1);f.onSelect(h)}c(\"#color_picker\").dropdown(\"close\")});e.children(\".color_items\").children(\"div\").off(\"mouseenter\").on(\"mouseenter\",function(){var h=c(this).css(\"background-color\");h=h.replace(/\\s/g,\"\");h=UI.RGB2Hex(h);e.children(\".color_hex\").find(\"input\").val(h)});e.children(\".color_hex\").find(\"input\").off(\"keyup\").on(\"keyup\",function(){var i=c(this).val();if(i.length==3||i.length==6){var h=UI.hex2RGB(\"#\"+i);if(f.onSelect){f.onSelect(h)}}});if(f.color){e.find(\"div[col='\"+f.color+\"']\").addClass(\"selected\");var d=UI.RGB2Hex(\"rgb(\"+f.color+\")\");e.children(\".color_hex\").find(\"input\").val(d)}if(f.trans==true){e.find(\".color_transparent\").show()}else{e.find(\".color_transparent\").hide()}c(\"#color_picker\").children(\".color_extend\").remove();if(f.extend){c(\"#color_picker\").append(\"<div class='color_extend'>\"+f.extend+\"</div>\")}};c.fn.colorButton=function(e){var d=c(this);if(typeof e==\"string\"){if(e==\"setColor\"){d.children(\".picker_btn_holder\").css(\"background-color\",\"rgb(\"+arguments[1]+\")\")}return}d.html(\"<div class='picker_btn_holder'></div><div class='ico ico_colordrop'></div>\");d.bind(\"mousedown\",function(h){if(d.button(\"isDisabled\")){return}h.stopPropagation();var g=c.extend({},e);g.target=d;g.onSelect=function(i){d.colorButton(\"setColor\",i);if(e.onSelect){e.onSelect(i)}};var f=c(this).children(\".picker_btn_holder\").css(\"background-color\");f=f.replace(/\\s/g,\"\");f=f.substring(4,f.length-1);g.color=f;c.colorpicker(g)})};c.fn.spinner=function(g){var j=c(this);if(typeof g==\"string\"){if(g==\"getValue\"){var d=j.find(\"input\").val();d=parseInt(d);return d}else{if(g==\"setValue\"){j.find(\"input\").val(arguments[1]);j.attr(\"old\",arguments[1])}else{if(g==\"setOptions\"){var i=arguments[1];if(typeof i.min!=\"undefined\"){j.attr(\"min\",i.min)}if(typeof i.max!=\"undefined\"){j.attr(\"max\",i.max)}}}}return}j.html(\"<div class='spinner_input'><input/></div><div class='buttons'><div class='spinner_up'></div><div class='spinner_down'></div></div>\");var h={step:1,unit:\"\"};g=c.extend(h,g);if(typeof g.min!=\"undefined\"){j.attr(\"min\",g.min)}if(typeof g.max!=\"undefined\"){j.attr(\"max\",g.max)}var e=j.children(\".spinner_input\");var f=e.find(\"input\");j.spinner(\"setValue\",g.min+g.unit);j.find(\".spinner_up\").bind(\"click\",function(){if(j.button(\"isDisabled\")){return}var l=j.spinner(\"getValue\");var k=l+g.step;a(j,k,g)});j.find(\".spinner_down\").bind(\"click\",function(){if(j.button(\"isDisabled\")){return}var l=j.spinner(\"getValue\");var k=l-g.step;a(j,k,g)});f.bind(\"keydown\",function(l){if(l.keyCode==13){var k=parseInt(c(this).val());if(isNaN(k)){k=g.min}a(j,k,g)}}).bind(\"focus\",function(l){c(this).select();c(this).bind(\"mouseup\",function(m){m.preventDefault();c(this).unbind(\"mouseup\")});var k=c(this).parent().parent();if(!k.hasClass(\"active\")){k.addClass(\"active inset\")}}).bind(\"blur\",function(l){var k=c(this).parent().parent();if(k.hasClass(\"inset\")){k.removeClass(\"active inset\")}})};function a(j,h,g){if(j.attr(\"max\")){var d=parseInt(j.attr(\"max\"));if(h>d){h=d}}if(j.attr(\"min\")){var f=parseInt(j.attr(\"min\"));if(h<f){h=f}}var e=j.attr(\"old\");var i=h+g.unit;if(e!=i){if(g.onChange){g.onChange(h)}}j.spinner(\"setValue\",h+g.unit)}c.fn.menuitem=function(d){var e=c(this);if(typeof d==\"string\"){if(d==\"disable\"){e.addClass(\"disabled\")}else{if(d==\"enable\"){e.removeClass(\"disabled\")}else{if(d==\"isDisabled\"){return e.hasClass(\"disabled\")}else{if(d==\"isSelected\"){return e.children(\".ico_selected\").length>0}else{if(d==\"unselect\"){return e.children(\".ico_selected\").remove()}else{if(d==\"select\"){return e.prepend(\"<div class='ico ico_selected'></div>\")}}}}}}}};c.fn.dlg=function(d){var g=c(this);if(typeof d==\"string\"){if(d==\"close\"){g.children(\".dlg_close\").trigger(\"click\")}return}var e={closable:true};d=c.extend(e,d);var f=g.children(\".dlg_close\");if(f.length==0){f=c(\"<div class='ico dlg_close'></div>\").appendTo(g)}if(d.closable==false){f.hide()}else{f.show()}c(\".dlg_mask\").remove();c(\"body\").append(\"<div class='dlg_mask'></div>\");f.unbind().bind(\"click\",function(){g.hide();c(\".dlg_mask\").remove();if(d&&d.onClose){d.onClose()}c(document).unbind(\"keydown.closedlg\");g.find(\"input,textarea,select\").unbind(\"keydown.closedlg\")});g.css({left:(c(window).width()-g.outerWidth())/2,top:(c(window).height()-g.outerHeight())/2});g.show();if(d.closable){g.find(\"input,textarea,select\").unbind(\"keydown.closedlg\").bind(\"keydown.closedlg\",function(h){if(h.keyCode==27){g.children(\".dlg_close\").trigger(\"click\")}});c(document).unbind(\"keydown.closedlg\").bind(\"keydown.closedlg\",function(h){if(h.keyCode==27){g.children(\".dlg_close\").trigger(\"click\")}})}g.children(\".dialog_header\").unbind(\"mousedown.drag_dlg\").bind(\"mousedown.drag_dlg\",function(j){var i=c(this).parent();var m=j.pageX;var k=j.pageY;var l=i.offset().left;var h=i.offset().top;c(document).bind(\"mousemove.drag_dlg\",function(p){var o=p.pageX-m+l;var n=p.pageY-k+h;i.offset({left:o,top:n})});c(document).bind(\"mouseup.drag_dlg\",function(n){c(document).unbind(\"mousemove.drag_dlg\");c(document).unbind(\"mouseup.drag_dlg\")})})}})(jQuery);"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/export.js",
    "content": "var Export={getRect:function(c){var b=c[0]||c.node||c;if($(b).length<=0){return}var a=b.getBoundingClientRect();return{width:a.width,height:a.height,top:a.top,bottom:a.bottom,left:a.left,right:a.right}},getColor:function(a){if(typeof a!=\"string\"){return a}if(a==\"transparent\"){return{color:\"none\",opacity:0}}var c=\"#000\",b=1;a=a||\"#000\";a=a.replace(/\\s/g,\"\");if(/(\\d+),(\\d+),(\\d+),(\\d)/.test(a)){c=a.match(/(\\d+),(\\d+),(\\d+),(\\d(\\.\\d+)?)/)}else{if(/(\\d+),(\\d+),(\\d+)/.test(a)){c=a.match(/(\\d+),(\\d+),(\\d+)/)}else{return{color:a,opacity:b}}}function d(e){return(\"0\"+parseInt(e).toString(16)).slice(-2)}if(c[4]){b=c[4]}c=\"#\"+d(c[1])+d(c[2])+d(c[3]);return{color:c,opacity:b}},getRGB:function(a){if(/^rgb/.test(a)){return a}function b(e){return parseInt(\"0x\"+e)}var d=[];a=a.replace(\"#\",\"\");for(var c=0;c<a.length;c++){if(a.length==3){d.push(b(a[c]+a[c]))}if(a.length==6){d.push(b(a.slice(c,c+2)));c++}}return\"rgb(\"+d.join(\",\")+\")\"},getMarkerRect:{getTriRect:function(i,d,j,c){var b,f,e,g,a;b=Math.PI/2-i;outer_t=c/Math.tan(b/2),e=c/Math.sin(i);g=d+outer_t*2,a=j+c+e;return{x:-c,y:-outer_t,w:a,h:g,b:outer_t,r:e}},getArrowRect:function(i,d,j,c){var b,f,e,g,a;f=c*Math.sin(i),outer_t=c*Math.cos(i),e=c/Math.sin(i);g=d+outer_t*2,a=j+f+e;return{x:-f,y:-outer_t,w:a,h:g,b:outer_t,r:e}},getDiagRect:function(b,e,d){var i,g,a,c,f;i=b*b-e*e,i=Math.sqrt(i),a=d*i/b,g=d*e/b;outerH=e*2+a*2,c=i+g*2;return{x:-g,y:-a,w:c,h:outerH,b:a,r:g}}},getMarkerPoint:function(k,j,g,e,b){var c=g.w+g.x;if(e==\"broken\"){if(b){if(k.x==j.x){temp=k.y<j.y?k.y+c:k.y-c;temp=k.y<j.y?(temp>j.y?j.y-1:temp):(temp<j.y?j.y+1:temp);return{x:k.x,y:temp}}else{temp=k.x<j.x?k.x+c:k.x-c;temp=k.x<j.x?(temp>j.x?j.x-1:temp):(temp<j.x?j.x+1:temp);return{x:temp,y:k.y}}}else{if(k.x==j.x){temp=j.y<k.y?j.y+c:j.y-c;temp=j.y<k.y?(temp>k.y?k.y-1:temp):(temp<k.y?k.y+1:temp);return{x:k.x,y:temp}}else{temp=j.x<k.x?j.x+c:j.x-c;temp=j.x<k.x?(temp>k.x?k.x-1:temp):(temp<k.x?k.x+1:temp);return{x:temp,y:k.y}}}}else{if(e==\"normal\"){var i=j.x-k.x,f=j.y-k.y;var d=Math.sqrt(Math.pow(i,2)+Math.pow(f,2));var a=c*i/d,h=c*f/d;if(b){return{x:k.x+a,y:k.y+h}}else{return{x:j.x-a,y:j.y-h}}}else{var i=j.x-k.x,f=j.y-k.y;var d=Math.sqrt(Math.pow(i,2)+Math.pow(f,2));var a=c*i/d,h=c*f/d;if(b){return{x:k.x+a,y:k.y+h}}else{return{x:j.x-a,y:j.y-h}}}}},andriod_icons:{0:{width:32,height:32,path:\"M10.204 5v21h4.38V5H10.204z M22.617 11.054V26H27V11.054H22.617z M4 13.474V26h4.383V13.474H4z M16.416 20.741V26h4.375v-5.259H16.416z\",color:\"#000\"},1:{width:32,height:32,path:\"M15 7v8H7v2h8v8h2v-8h8v-2h-8V7H15z\",color:\"#000\"},2:{width:32,height:32,path:\"M16.001 10.485C16.589 7.035 26 6.241 26 14.293c0 7.475-9.411 8.98-9.999 10.707c-0.589-1.727-10-3.232-10-10.707C6 6.241 15.412 7.035 16.001 10.485z\",color:\"#000\"},3:{width:32,height:32,path:\"M10.848 5.008c-0.061 0.015-0.124 0.049-0.178 0.09c-0.215 0.161-0.271 0.474-0.111 0.691l1.07 1.406c-1.796 0.869-2.945 2.458-2.945 4.177h12.637c0-1.719-1.152-3.308-2.949-4.177l1.074-1.406c0.156-0.218 0.099-0.531-0.117-0.691c-0.215-0.16-0.508-0.104-0.664 0.112l-1.212 1.631C16.704 6.597 15.875 6.46 15 6.46c-0.873 0-1.703 0.137-2.455 0.381L11.34 5.21c-0.08-0.108-0.191-0.183-0.313-0.202C10.966 5,10.915 4.994 10.848 5.008L10.848 5.008z M12.525 8.446c0.509 0,0.938 0.407 0.938 0.915c0 0.509-0.429 0.918-0.938 0.918c-0.512 0-0.896-0.409-0.896-0.918C11.629 8.853 12.013 8.446 12.525 8.446z M17.478 8.446c0.509 0,0.895 0.407 0.895 0.915c0 0.509-0.386 0.918-0.895 0.918c-0.51 0-0.938-0.409-0.938-0.918C16.54 8.853 16.967 8.446 17.478 8.446z M6.451 11.529C5.68 11.541 4.986 12.195 5,12.911v5.851c-0.012 0.723 0.689 1.386 1.473 1.386c0.782 0,1.395-0.663 1.384-1.386v-5.851C7.872 12.175 7.244 11.51 6.451 11.529z M23.486 11.529c-0.778 0.012-1.356 0.666-1.345 1.382v5.851c-0.01 0.723 0.605 1.386 1.387 1.386s1.484-0.663 1.472-1.386v-5.851C25.013 12.175 24.274 11.51 23.486 11.529z M8.571 11.973v9.424c0 0.353 0.157 0.704 0.426 0.958c0.267 0.254 0.648 0.399 1.026 0.399h0.691v2.902c-0.009 0.691 0.874 1.316 1.606 1.316s1.617-0.625 1.608-1.316v-2.902l2.143-0.023v2.885c-0.008 0.686 0.898 1.357 1.607 1.357c0.712 0,1.615-0.672 1.611-1.357v-2.861h0.732c0.381 0.012 0.713-0.146 0.986-0.399c0.263-0.254 0.42-0.605 0.42-0.958v-9.424H8.571L8.571 11.973z\",color:\"#000\"},4:{width:32,height:32,path:\"M16 7c-0.682 0-1.28 0.48-1.656 1.219C11.273 8.961 10 11.695 10 15v3c0 1.35-1.334 3-2 3v1h2h12h2v-1c-0.667 0-2-1.65-2-3v-3c0-3.305-1.273-6.039-4.344-6.781C17.279 7.48 16.682 7,16 7z M13 23c0 1.657 1.343 3,3 3c1.656 0,3-1.343 3-3H13z\",color:\"#000\"},5:{width:32,height:32,path:\"M22.029 4.007c-1.054-0.069-2.167 0.359-3.079 1.278L5.453 18.847c-1.184 1.189-1.6 2.688-1.409 4.063c0.19 1.373 0.911 2.614 1.9 3.57c0.988 0.958 2.242 1.653 3.604 1.834c1.361 0.181 2.833-0.205 3.964-1.343l12.383-12.448l-1.344-1.343l-12.35 12.448c-0.729 0.733-1.518 0.935-2.391 0.819c-0.875-0.116-1.825-0.603-2.555-1.311c-0.731-0.707-1.224-1.631-1.343-2.489c-0.12-0.86 0.078-1.646 0.885-2.458L20.261 6.595c0.578-0.583 1.141-0.723 1.67-0.688c0.531 0.034 1.06 0.302 1.475 0.721c0.413 0.42 0.687 0.965 0.721 1.507c0.032 0.542-0.118 1.097-0.688 1.67c-3.623 3.646-7.255 7.296-10.876 10.942c-0.172 0.173-0.277 0.173-0.426 0.164c-0.15-0.012-0.351-0.098-0.491-0.229c-0.142-0.133-0.221-0.27-0.229-0.394c-0.011-0.125 0-0.263 0.229-0.491l8.616-8.681L18.95 9.805l-8.649 8.681c-0.549 0.552-0.802 1.267-0.753 1.933c0.048 0.667 0.377 1.224 0.819 1.638c0.44 0.416 0.993 0.714 1.638 0.754s1.372-0.222 1.9-0.754c3.623-3.646 7.252-7.295 10.875-10.941c0.907-0.914 1.277-2.058 1.212-3.112C25.926 6.948 25.454 6,24.747 5.285C24.042 4.569 23.084 4.075 22.029 4.007L22.029 4.007z\",color:\"#000\"},6:{width:32,height:32,path:\"M4 4v1v1v1v1v1v1v1h1h1h1h1h1h1h1v-1V9V8V7V6V5V4h-1H9H8H7H6H5H4z M12 4v1h1V4H12z M14 4v1v1v1v1h-1v1h1v1v1v1h1h1v-1h-1v-1h1V9h-1V8h1v1h1V8V7h-1h-1V6h1h1V5h1h1v1h1V5V4h-1h-1h-1h-1h-1H14z M17 6v1h1V6H17z M17 9v1h1v1h1v-1V9h-1H17z M19 9h1v1v1h1v-1V9V8V7h-1h-1v1V9z M18 11h-1v1v1h1v-1V11z M17 13h-1h-1v1v1h1h1h1v1h-1v1v1h1h1v-1v-1h1h1h1v1v1h1v1v1h-1v-1v-1h-1v1v1h-1h-1v1h1v1h-1h-1h-1v-1h1v-1v-1h-1v1h-1h-1v1h1v1v1h-1h-1v1h1h1h1v-1h1v1h-1v1v1h1h1v-1v-1h1v1v1h1v1v1h-1h-1v1h1h1h1h1v-1h-1v-1v-1v-1h1h1v1v1v1h1v1h1v-1v-1h-1v-1v-1h1h1v-1h-1v-1h1v-1h-1h-1v-1h1v-1h-1h-1v-1h1v-1h-1v-1h-1v-1v-1h-1h-1v-1v-1v-1h-1h-1v1h1v1v1h-1v-1h-1h-1V13z M23 15h1v-1v-1v-1h-1v1h-1v1h1V15z M25 18h1v-1v-1v-1v-1v-1h-1v1v1v1v1V18z M26 13h1v-1h-1V13z M27 13v1h1v1h-1v1h1h1v-1v-1v-1v-1h-1v1H27z M26 18v1h1v-1H26z M26 27h1h1h1v-1h-1h-1h-1V27z M14 23v-1v-1h-1h-1v1v1h1H14z M15 20v-1h-1v1H15z M15 19h1v-1h-1V19z M15 18v-1v-1v-1h-1v1h-1v-1v-1h-1v1h-1v1h1v1h1h1v1H15z M12 17h-1v1h1V17z M12 18v1v1h1v-1v-1H12z M11 18h-1v-1H9v1H8v-1v-1H7H6v1h1v1H6v1H5H4v1h1h1h1v-1h1h1v1h1v-1h1V18z M10 20v1h1v-1H10z M9 20H8H7v1h1h1V20z M6 18v-1H5H4v1h1H6z M6 16v-1H5H4v1h1H6z M10 17h1v-1h-1V17z M11 15v-1h-1v-1H9H8H7v1v1h1v-1h1v1h1H11z M7 13v-1H6v1H7z M10 13h1v1h1v-1v-1h-1h-1V13z M13 14h1v-1v-1h-1v1V14z M19 18v1h1v-1H19z M17 11v-1h-1v1H17z M13 9h-1v1v1h1v-1V9z M22 4v1v1v1v1v1v1v1h1h1h1h1h1h1h1v-1V9V8V7V6V5V4h-1h-1h-1h-1h-1h-1H22z M5 5h1h1h1h1h1v1v1v1v1v1H9H8H7H6H5V9V8V7V6V5z M23 5h1h1h1h1h1v1v1v1v1v1h-1h-1h-1h-1h-1V9V8V7V6V5z M6 6v1v1v1h1h1h1V8V7V6H8H7H6z M12 6v1h1V6H12z M24 6v1v1v1h1h1h1V8V7V6h-1h-1H24z M4 12v1h1v-1H4z M28 17v1v1h1v-1v-1H28z M21 21h1h1h1v1v1v1h-1h-1h-1v-1v-1V21z M4 22v1v1v1v1v1v1v1h1h1h1h1h1h1h1v-1v-1v-1v-1v-1v-1v-1h-1H9H8H7H6H5H4z M22 22v1h1v-1H22z M28 22v1h1v-1H28z M5 23h1h1h1h1h1v1v1v1v1v1H9H8H7H6H5v-1v-1v-1v-1V23z M6 24v1v1v1h1h1h1v-1v-1v-1H8H7H6z M13 25v1h-1v1h1h1v1h-1h-1v1h1h1h1h1h1h1v-1v-1h-1v1h-1h-1v-1h1v-1h-1h-1v-1H13z M28 28v1h1v-1H28z\",color:\"#000\"},7:{width:32,height:32,path:\"M24.766 6v21.421H29V6H24.766z M17.511 10.837v16.583h4.233V10.837H17.511z M10.255 16.365v11.056h4.234V16.365H10.255z M3 21.202v6.219h4.146v-6.219H3z\",color:\"#000\"},8:{width:32,height:32,path:\"M16 4C9.178 4 7 8.519 7 16.255c0 7.735 2.178 12.255 9 12.255c6.823 0 9-4.521 9-12.255C25 8.519 22.823 4 16 4z M14.947 5.34l6.958 6.511l-4.755 4.532l4.755 4.532l-6.958 6.511l0.032-9.287l-3.925 3.733l-1.021-0.957l4.755-4.532l-4.755-4.532l1.021-0.958l3.925 3.734L14.947 5.34z M16.606 9.042v5.649l2.968-2.84L16.606 9.042z M16.606 18.074v5.649l2.968-2.809L16.606 18.074z\",color:\"#000\"},9:{width:32,height:32,path:\"M4.893 8v14.484c6.467 0 7.853 0.809 10.126 2.016V10.016C13.882 8.809 11.997 8 4.893 8z M26.107 8c-7.104 0-8.988 0.809-10.125 2.016V24.5c2.272-1.207 3.659-2.016 10.125-2.016V8z M2 9.5V25h11.828c-1.902-0.951-3.286-1.516-8.936-1.516H3.929v-1V9.5H2z M27.071 9.5v12.984v1h-0.964c-5.649 0-7.032 0.564-8.935 1.516H29V9.5H27.071z\",color:\"#000\"},10:{width:32,height:32,path:\"M11 4v21l5-3.268L21 25V4H11z\",color:\"#000\"},11:{width:32,height:32,path:\"M12 7v2h-1.313L5 11.656V25h22V9h-7V7H12z M6 8v2.406l3-1.344V8H6z M16 11.438c3.222 0,5.828 2.605 5.828 5.828c0 3.222-2.606 5.828-5.828 5.828s-5.828-2.606-5.828-5.828C10.172 14.043 12.778 11.438 16 11.438z M16 13.047c-2.313 0-4.188 1.875-4.188 4.188c0 2.312 1.875 4.188 4.188 4.188s4.188-1.876 4.188-4.188C20.188 14.922 18.313 13.047 16 13.047z\",color:\"#000\"},12:{width:32,height:32,path:\"M11.537 6c-0.64 0-1.169 0.729-1.169 1.344V9h2.079V8h6.237v1h2.079V7.344c0-0.615-0.53-1.344-1.17-1.344H11.537z M4 10v8h23v-8H4zM5.169 19v8h20.792v-8h-9.356v2h-2.079v-2H5.169z\",color:\"#000\"},13:{width:32,height:32,path:\"M9 5v2H6.063H5v1.063V27h1.063H27v-1.063V8.063V7h-1.063H23V5h-3v2h-8V5H9z M6.563 8.563H9V10h3V8.563h8V10h3V8.563h2.438v16.875H6.563V8.563z M12.719 11.813v2.781h2.813v-2.781H12.719z M16.469 11.813v2.781h2.813v-2.781H16.469z M20.188 11.813v2.781H23v-2.781H20.188z M9 16v2.813h2.813V16H9z M12.719 16v2.813h2.813V16H12.719z M16.469 16v2.813h2.813V16H16.469z M20.188 16v2.813H23V16H20.188zM9 20.188V23h2.813v-2.813H9z M12.719 20.188V23h2.813v-2.813H12.719z M16.469 20.188V23h2.813v-2.813H16.469z\",color:\"#000\"},14:{width:32,height:32,path:\"M5 7.254L13.745 16L5 24.745L7.255 27L16 18.254L24.745 27L27 24.745L18.255 16L27 7.254L24.745 5L16 13.745L7.255 5L5 7.254z\",color:\"#000\"},15:{width:32,height:32,path:\"M3.5 5C2.668 5,2 5.669 2,6.5S2.668 8,3.5 8h1.906l3.406 14.188c-0.138 0.07-0.268 0.142-0.375 0.25C7.574 22.965 7,23.915 7,25c0 1.656 1.343 3,3 3c1.656 0,3-1.344 3-3h8c0 1.656 1.343 3,3 3c1.656 0,3-1.344 3-3c0-1.085-0.575-2.035-1.438-2.563C25.291 22.166 24.915 22 24.5 22H11.813c0-0.021 0.01-0.041 0-0.063L8.094 6.375C8.051 6.197 7.971 6.051 7.875 5.906C7.647 5.368 7.123 5,6.5 5H3.5L3.5 5zM11.375 8l2.156 10h13l3.938-10H11.375L11.375 8z\",color:\"#000\"},16:{width:32,height:32,path:\"M16 5C9.933 5,5 9.933 5,16s4.933 10.968 11 10.968S27 22.067 27 16S22.067 5,16 5z M16 7.271c4.814 0,8.729 3.915 8.729 8.729S20.814 24.729 16 24.729S7.271 20.814 7.271 16S11.186 7.271 16 7.271z M14.817 8.837L14.465 16l5.532 5.532l0.959-0.8l-4.508-5.404L16.16 8.837H14.817L14.817 8.837z\",color:\"#000\"},17:{width:32,height:32,path:\"M6 4v20h3v-2H8V6h12v1h2V4H6z M10 8v20h16V8H10z M12 10h12v16H12V10z M14 13v1h4.5v-1H14z M14 15v1h8v-1H14z M14 17v1h5.5v-1H14z M14 19v1h4.5v-1H14z M14 21v1h7.5v-1H14z\",color:\"#000\"},18:{width:32,height:32,path:\"M13.863 10c-3.337 0-6.044 2.641-6.171 5.947c-0.074-0.01-0.138-0.011-0.213-0.011C5.561 15.936 4,17.485 4,19.403s1.561 3.479 3.479 3.479H25.79c1.223 0,2.211-0.999 2.21-2.222c0-1.223-0.987-2.199-2.21-2.199c-0.122 0-0.231 0.014-0.348 0.033c0-0.021 0-0.048 0-0.067c0-2.321-1.887-4.197-4.208-4.197c-0.502 0-0.979 0.086-1.425 0.248C19.067 11.89 16.688 10 13.863 10L13.863 10z\",color:\"#000\"},19:{width:32,height:32,path:\"M14.938 7v10.313l-4.156-4.156l-1.531 1.5L16 21.375l6.75-6.719l-1.5-1.5l-4.188 4.156V7H14.938z M5 23.375v2h22v-2H5z\",color:\"#000\"},20:{width:32,height:32,path:\"M4 4v24h15v-6h-2v4H6V6h11v4h2V4H4z M23.656 9.25l-1.5 1.531l4.156 4.156H14v2.125h12.313l-4.156 4.156l1.5 1.5L30.375 16L23.656 9.25z\",color:\"#000\"},21:{width:32,height:32,path:\"M5.999 6v20h11.053v-8h-1.907v-2.526h1.907v-1.628c0-2.271 0.831-4.252 3.503-4.162h2.444v2.978h-1.604c-1.042 0-1.423 0.738-1.396 1.464v1.349h2.793L22.496 18h-2.497v8h6V6H5.999z\",color:\"#000\"},22:{width:32,height:32,path:\"M5.999 6v20h20V6H5.999z M8.104 8.105c8.721 0,15.79 7.069 15.79 15.789l0 0h-2.632c0-0.055 0-0.109 0-0.164c0-7.211-5.782-12.994-12.993-12.993c-0.056 0-0.11 0-0.165 0V8.105z M8.104 13.418c5.78-0.006 10.471 4.675 10.478 10.455c0 0.008 0 0.015 0 0.021h-2.583c0-0.043 0-0.088 0-0.131c0-4.313-3.45-7.764-7.763-7.764c-0.044 0-0.088 0-0.132 0V13.418z M10.292 19.553c1.196 0,2.154 0.959 2.154 2.154c0.001 1.196-0.958 2.188-2.154 2.188s-2.188-0.991-2.188-2.188C8.104 20.512 9.096 19.553 10.292 19.553z\",color:\"#000\"},23:{width:32,height:32,path:\"M9 5C8.447 5,8 5.224 8,5.5v21C8 26.776 8.447 27 9,27s1-0.224 1-0.5v-21C10 5.224 9.553 5,9 5z M14.25 6C12.268 6 11 7 11 7v10c0 0,1.36-1 3.25-1s4.425 2,6.5 2S24 17 24 17V7c0 0-1.453 1-3.25 1S16.232 6,14.25 6z\",color:\"#000\"},24:{width:32,height:32,path:\"M6 8v16h20V11H14.011l-1.946-3H6z\",color:\"#000\"},25:{width:32,height:32,path:\"M6 8v16h17.722L27 14H9.15l-2.016 5.985L8.485 13H24v-2h-9.989l-1.946-3H6z\",color:\"#000\"},26:{width:32,height:32,path:\"M9.813 6L4 24h4.219l1-3.5h5.687l1 3.5l2.094-6.531L14.312 6H9.813L9.813 6z M12.031 10.844h0.094l1.844 6.438h-3.813L12.031 10.844L12.031 10.844z M21.125 12L17.25 24h1.469h1.344h0.062l-0.031-0.094l0.656-2.25h3.781L25.187 24h2.813l-3.875-12H21.125L21.125 12z M22.594 15.219h0.062l1.25 4.313h-2.563L22.594 15.219L22.594 15.219z\",color:\"#000\"},27:{width:32,height:32,path:\"M14.953 5c-0.291 0-0.524 0.233-0.524 0.524v1.243c-0.582 0.1-1.146 0.242-1.686 0.442l-0.622-1.064c-0.146-0.251-0.469-0.342-0.721-0.196L9.6 6.997c-0.251 0.145-0.341 0.469-0.196 0.72l0.622 1.064c-0.45 0.373-0.87 0.776-1.244 1.228L7.718 9.403C7.466 9.258 7.143 9.348 6.997 9.6L5.949 11.4c-0.145 0.251-0.055 0.575 0.197 0.72l1.063 0.622c-0.202 0.544-0.344 1.101-0.442 1.687H5.523C5.233 14.429 5 14.662 5 14.952v2.096c0 0.29 0.233 0.523 0.523 0.523h1.244c0.1 0.582 0.242 1.146 0.442 1.686l-1.063 0.622c-0.252 0.146-0.342 0.47-0.197 0.721L6.997 22.4c0.146 0.251 0.469 0.341 0.721 0.196l1.063-0.622c0.374 0.45 0.794 0.87 1.244 1.244l-0.622 1.063c-0.145 0.252-0.055 0.575 0.196 0.721L11.4 26.05c0.252 0.146 0.575 0.056 0.721-0.196l0.622-1.063c0.54 0.2 1.104 0.344 1.686 0.441v1.244c0 0.29 0.233 0.523 0.524 0.523h2.095c0.29 0,0.523-0.233 0.523-0.523v-1.244c0.582-0.099 1.146-0.241 1.687-0.441l0.622 1.063c0.145 0.252 0.469 0.342 0.72 0.196l1.801-1.047c0.252-0.146 0.342-0.469 0.196-0.721l-0.622-1.063c0.451-0.374 0.871-0.794 1.244-1.244l1.064 0.622c0.251 0.145 0.575 0.055 0.72-0.196l1.048-1.801c0.146-0.251 0.055-0.575-0.196-0.721l-1.063-0.622c0.2-0.54 0.343-1.104 0.441-1.686h1.244c0.29 0,0.523-0.234 0.523-0.523v-2.096c0-0.29-0.233-0.523-0.523-0.523h-1.244c-0.099-0.586-0.24-1.143-0.441-1.687l1.063-0.622c0.251-0.145 0.342-0.469 0.196-0.72L25.003 9.6c-0.145-0.251-0.469-0.342-0.72-0.196l-1.064 0.605c-0.373-0.451-0.793-0.854-1.244-1.228l0.622-1.064c0.146-0.251 0.056-0.575-0.196-0.72L20.6 5.949c-0.251-0.146-0.574-0.055-0.72 0.196L19.258 7.21c-0.54-0.201-1.104-0.344-1.687-0.442V5.524C17.571 5.233 17.338 5,17.048 5H14.953z M15.968 12.334c2.027 0,3.666 1.639 3.666 3.666s-1.639 3.667-3.666 3.667s-3.684-1.64-3.684-3.667S13.94 12.334 15.968 12.334z\",color:\"#000\"},28:{width:32,height:32,path:\"M15.964 4.004c-0.721 0-1.443 0.275-1.991 0.823L4.82 13.979c-1.093 1.095-1.093 2.888 0,3.982l9.153 9.153c1.094 1.095 2.887 1.095 3.983 0l9.151-9.153c1.096-1.094 1.096-2.887 0-3.982l-0.042-0.042l-9.638 9.637c-0.416 0.412-0.961 0.642-1.548 0.642l-0.429-0.011l-0.09-0.057c-0.393-0.093-0.755-0.295-1.042-0.585l-6.339-6.352c-0.415-0.415-0.647-0.968-0.647-1.555c0-0.587 0.233-1.134 0.647-1.547l1.878-1.878c0.408-0.405 0.968-0.632 1.548-0.633c0.579 0,1.147 0.231 1.555 0.64l2.919 2.927l6.206-6.213l-4.129-4.129C17.408 4.276 16.686 4,15.964 4V4.004z M25.342 7.978c-0.212 0-0.412 0.084-0.563 0.232l-8.949 8.948l-3.918-3.924c-0.146-0.148-0.348-0.226-0.557-0.226c-0.206 0-0.407 0.08-0.555 0.226l-1.872 1.871c-0.308 0.309-0.315 0.813-0.007 1.119l6.346 6.354c0.127 0.127 0.289 0.205 0.465 0.225c0.029 0.01 0.061 0,0.091 0c0.003 0,0.005 0,0.007 0v0.01c0.211 0,0.413-0.084 0.562-0.232L27.77 11.197c0.308-0.308 0.308-0.805 0-1.112l-1.872-1.871c-0.15-0.15-0.345-0.234-0.556-0.233V7.978z\",color:\"#000\"},29:{width:32,height:32,path:\"M9 7v9.531c0 2.053 0.648 3.652 1.938 4.781S13.927 23 16.031 23c2.08 0,3.75-0.559 5.031-1.688C22.352 20.184 23 18.584 23 16.531V7h-3.938v9.531c0 1.113-0.285 1.941-0.813 2.469c-0.521 0.527-1.248 0.781-2.219 0.781c-0.979 0-1.746-0.254-2.281-0.781c-0.536-0.535-0.813-1.364-0.813-2.469V7H9z M7 25v2h18v-2H7z\",color:\"#000\"},30:{width:32,height:32,path:\"M976.164-2082.461l0.433-2.176h7.455l-0.433 2.176l-2.003 0.371l-2.584 12.918l1.854 0.371l-0.433 2.164H973l0.433-2.164l2.002-0.371l2.584-12.918L976.164-2082.461\",color:\"#000\"},31:{width:32,height:32,path:\"M9 7v0.384v18.422v0.384h0.384h7.228c2.304 0,4.139-0.481 5.437-1.471C23.351 23.727 24 22.22 24 20.337c0-1.029-0.271-1.953-0.832-2.751c-0.456-0.657-1.156-1.107-1.982-1.407c0.578-0.348 1.171-0.668 1.503-1.215c0.451-0.746 0.672-1.589 0.672-2.527c0-1.777-0.699-3.186-2.079-4.094C19.911 7.434 18.049 7,15.716 7H9.384H9z M13.286 10.262h0.384h2.047c1.058 0,1.872 0.202 2.462 0.64c0.598 0.434 0.895 1.151 0.896 2.015c-0.001 0.781-0.289 1.453-0.863 1.887c-0.577 0.426-1.383 0.622-2.398 0.64h-2.527V15.06v-4.414V10.262z M13.285 17.49h3.583c0.924 0,1.655 0.264 2.143 0.768c0.01 0.01 0.021-0.01 0.031 0c0.472 0.495 0.703 1.194 0.703 2.047c0 0.82-0.275 1.541-0.831 1.983c-0.553 0.43-1.343 0.607-2.303 0.607h-2.942h-0.384v-0.384v-4.638V17.49L13.285 17.49z\",color:\"#000\"},32:{width:32,height:32,path:\"M13.839 5L3 15.322l10.839 10.324v-7.211c12.455 0,13.081 4.797 14.74 7.053c0-8.361-3.451-13.746-14.74-13.746V5z\",color:\"#000\"},33:{width:32,height:32,path:\"M17.74 5l10.84 10.322L17.74 25.646v-7.211c-12.455 0-13.081 4.797-14.74 7.053c0-8.361 3.452-13.746 14.74-13.746V5z\",color:\"#000\"},34:{width:32,height:32,path:\"M8.222 8.222c-4.296 4.296-4.296 11.259 0,15.556c4.297 4.296 11.259 4.296 15.556 0c4.297-4.297 4.296-11.26 0-15.556C19.48 3.926 12.519 3.926 8.222 8.222z M9.254 11.319L20.68 22.745c-3.199 2.225-7.633 1.911-10.484-0.94C7.343 18.952 7.029 14.519 9.254 11.319L9.254 11.319z M11.319 9.254c3.199-2.225 7.633-1.911 10.485 0.941c2.852 2.852 3.165 7.285 0.94 10.484L11.319 9.254L11.319 9.254z\",color:\"#000\"},35:{width:32,height:32,path:\"M16 6C10.476 6,6 10.477 6,16c0 5.524 4.476 10 10 10s10-4.476 10-10C26 10.477 21.524 6,16 6z M16 7.813c4.514 0,8.188 3.674 8.188 8.188c0 4.515-3.674 8.188-8.188 8.188S7.813 20.515 7.813 16C7.813 11.486 11.486 7.813 16 7.813z M16.188 10.25c-1.076 0-1.942 0.289-2.625 0.844c-0.677 0.55-1.017 1.294-1 2.281l0.031 0.063h1.938c0-0.494 0.178-0.876 0.5-1.125c0.321-0.255 0.695-0.375 1.156-0.375c0.538 0 0.961 0.169 1.25 0.469c0.294 0.294 0.438 0.681 0.438 1.219c0 0.466-0.12 0.893-0.375 1.281c-0.256 0.383-0.599 0.797-1.031 1.219c-0.61 0.516-1.011 0.938-1.188 1.281c-0.178 0.338-0.276 0.926-0.281 1.719h2.031c0-0.482 0.047-0.845 0.125-1.094c0.083-0.25 0.277-0.535 0.594-0.813c0.621-0.499 1.126-1.026 1.531-1.625c0.41-0.604 0.625-1.265 0.625-1.969c0-1.054-0.346-1.876-1-2.469C18.257 10.563 17.352 10.25 16.188 10.25L16.188 10.25z M15 20.594v1.938h2.063v-1.938H15z\",color:\"#000\"},36:{width:32,height:32,path:\"M16 6L6 13.602l1.395 1.846L16 8.893l8.59 6.555L26 13.602L16 6z M16 10.113l-8 6.018v8.154h6v-7h4v7h6.006v-8.14L16 10.113z\",color:\"#000\"},37:{width:32,height:32,path:\"M14.947 6v11.053h2.104V6H14.947z M12.842 6.511C8.865 7.832 6,11.581 6,16c0 5.523 4.477 10 10 10c5.522 0,10-4.477 10-10c0-4.419-2.866-8.168-6.843-9.489v2.253c2.79 1.218 4.737 3.998 4.737 7.236c0 4.36-3.535 7.896-7.895 7.896c-4.36 0-7.895-3.535-7.895-7.896c0-3.238 1.946-6.019 4.736-7.236V6.511L12.842 6.511z\",color:\"#000\"},38:{width:32,height:32,path:\"M17.333 5.001c-0.701 0-1.026 0.41-1.026 0.41s0.069 2.683 0.069 3.303c0 0.619-3.049 5.574-3.799 6.211c-0.334 0.283-0.973 0.43-1.485 0.756v-0.143c0-0.568-0.378-0.966-0.944-0.966H3.03c-0.283 0-0.561 0.067-0.753 0.281C2.08 15.062 1.98 15.34 2.003 15.624l0.839 9.567c0.042 0.529 0.472 0.94 1.01 0.94h6.296c0.566 0,0.944-0.459 0.944-1.025v-1.128l0.801 0.22c0.515 0.141 1.192 0.374 1.917 0.374h9.394c2.245 0,3.016-2.411 0.77-2.411c2.246 0,3.032-2.857 0.787-2.857c2.245 0,2.999-2.874 0.753-2.874c2.246 0,3.015-2.857 0.77-2.857H18.72c0.275-1.089 0.787-4.568 0.787-4.568c-0.114-1.687-1.249-3.798-1.249-3.798C17.899 5.056 17.591 5,17.333 5.001L17.333 5.001zM3.696 16.133h5.835v8.44H4.415L3.696 16.133z\",color:\"#000\"},39:{width:32,height:32,path:\"M3.187 6v10.701L1 19.056l1.438 1.33l5.854-6.298l4.893 4.418l3.837-3.838l2.522 2.019l8.301-8.316l-1.376-1.392l-7.063 7.078l-2.522-2.018l-3.761 3.775L8.17 11.352l-1.983 2.201V6H3.187z M6.187 18.612l-3 3.149v3.807h23.481v-3H6.187V18.612z\",color:\"#000\"},40:{width:32,height:32,path:\"M19.346 4.017c-0.783 0.082-1.599 0.472-2.256 1.129l-2.607 2.587c-1.315 1.314-1.632 3.368-0.564 4.436l0.272 0.271l4.727-4.746c0.311-0.311 0.773-0.315 1.07-0.019l3.365 3.365c0.297 0.296 0.291 0.759-0.02 1.069l-4.746 4.728l0.272 0.272c1.067 1.066 3.12 0.75 4.436-0.564l2.587-2.606c1.314-1.315 1.534-3.251 0.467-4.319l-4.941-4.94C20.875 4.145 20.13 3.935 19.346 4.017L19.346 4.017z M17.712 11.195c-0.318 0-0.632 0.105-0.875 0.35l-5.291 5.291c-0.488 0.488-0.488 1.263 0,1.751l0.895 0.895c0.487 0.488 1.263 0.488 1.751 0l5.292-5.291c0.487-0.487 0.487-1.263 0-1.751l-0.895-0.895C18.344 11.301 18.03 11.195 17.712 11.195L17.712 11.195z M10.65 13.296c-0.977-0.052-2.096 0.364-2.918 1.187l-2.587 2.606c-1.314 1.314-1.534 3.251-0.467 4.318l4.941 4.941c1.067 1.067 3.004 0.848 4.318-0.467l2.606-2.587c1.315-1.314 1.631-3.367 0.565-4.436l-0.273-0.272l-4.728 4.747c-0.311 0.311-0.773 0.315-1.07 0.019l-3.365-3.365c-0.296-0.296-0.291-0.759 0.02-1.069l4.746-4.728l-0.272-0.272C11.767 13.518 11.236 13.327 10.65 13.296L10.65 13.296z\",color:\"#000\"},41:{width:32,height:32,path:\"M7 9v2h18V9H7z M7 13v2h18v-2H7z M7 17v2h18v-2H7z M7 21v2h13v-2H7z\",color:\"#000\"},42:{width:32,height:32,path:\"M15.035 3C11.146 3 8 6.146 8,10.035c0 2.492 0.836 3.955 1.882 5.303c1.046 1.349 2.325 2.544 3.064 4.37c0.821 2.028 1.18 4.038 1.456 5.523c0.139 0.742 0.27 1.362 0.399 1.759c0.063 0.198 0.127 0.346 0.178 0.412c0.052 0.066 0.051 0.054 0.056 0.054c0 0,0.01 0.015 0.055-0.054c0.051-0.066 0.113-0.213 0.179-0.412c0.13-0.397 0.26-1.017 0.398-1.759c0.276-1.485 0.636-3.495 1.456-5.523c0.739-1.826 2.019-3.021 3.064-4.37c1.046-1.348 1.882-2.811 1.882-5.303C22.069 6.146 18.924 3,15.035 3L15.035 3z M15.035 7.645c1.313 0,2.377 1.063 2.377 2.377c0 1.313-1.064 2.377-2.377 2.377c-1.313 0-2.377-1.064-2.377-2.377C12.658 8.708 13.722 7.645 15.035 7.645z\",color:\"#000\"},43:{width:32,height:32,path:\"M26.999 15.296l-2.843 0.006c-0.341-4.527-3.967-8.139-8.495-8.463l-0.005-2.844l-1.358 0.002l0.006 2.846c-4.526 0.342-8.138 3.967-8.46 8.494L3 15.343l0.002 1.356l2.843-0.006c0.343 4.527 3.969 8.137 8.496 8.461l0.005 2.848L15.703 28l-0.006-2.848c4.526-0.342 8.137-3.967 8.463-8.494l2.843-0.006L26.999 15.296z M15.015 23.832c-4.32 0.008-7.84-3.498-7.848-7.819c-0.01-4.32 3.498-7.842 7.817-7.851c4.321-0.008 7.843 3.5 7.851 7.821C22.845 20.303 19.334 23.824 15.015 23.832zM19.763 15.99c0.006 2.629-2.124 4.766-4.753 4.77c-2.63 0.006-4.768-2.123-4.772-4.751c-0.005-2.631 2.124-4.768 4.754-4.772C17.623 11.23 19.76 13.359 19.763 15.99z\",color:\"#000\"},44:{width:32,height:32,path:\"M16 5c-3.217 0-6 2.607-6 5.823v4.883H7v11h18v-11h-3v-4.883C22 7.607 19.217 5,16 5z M16 7.647c1.754 0,3 1.422 3,3.176v4.883h-6v-4.883C13 9.069 14.246 7.647 16 7.647z\",color:\"#000\"},45:{width:32,height:32,path:\"M16 4c-3.217 0-6 2.627-6 5.844v2.875h3V9.844c0-1.755 1.246-3.188 3-3.188s3 1.433 3,3.188v5.875h-4h-2h-3H8H7v11h18v-11h-3V9.844C22 6.627 19.217 4,16 4z\",color:\"#000\"},46:{width:32,height:32,path:\"M6 9v2.969l10 4.667l10-4.667V9H6z M6 13.205V23h20v-9.795l-10 4.667L6 13.205z\",color:\"#000\"},47:{width:32,height:32,path:\"M15.845 3c-2.153 0-3.878 1.616-3.878 3.63v10.306c0 2.014 1.725 3.631 3.878 3.631h1.31c2.153 0,3.879-1.617 3.879-3.631V6.63c0-2.014-1.726-3.63-3.879-3.63H15.845z M8 16.6c0 4.113 2.918 7.537 6.8 8.323V28.5h3.399v-3.577C22.081 24.137 25 20.713 25 16.6h-2.267v0.336c0 2.989-2.572 5.33-5.578 5.33h-1.311c-3.007 0-5.578-2.341-5.578-5.33V16.6H8L8 16.6z\",color:\"#000\"},48:{width:32,height:32,path:\"M10 9c-1.108 0-2 0.893-2 2v8c0 1.108 0.892 2,2 2h2l-1 4l6-4h5c1.107 0,2-0.892 2-2v-8c0-1.107-0.893-2-2-2H10z\",color:\"#000\"},49:{width:32,height:32,path:\"M5 6v18.094h22V6H5z M6.063 8.094H9v2H6.063V8.094z M23.063 8.094H26v2h-2.938V8.094z M6.063 12.094H9v2H6.063V12.094zM23.063 12.094H26v2h-2.938V12.094z M6.063 16.094H9v2H6.063V16.094z M23.063 16.094H26v2h-2.938V16.094z M6.063 20.094H9v2H6.063V20.094zM23.063 20.094H26v2h-2.938V20.094z\",color:\"#000\"},50:{width:32,height:32,path:\"M11.218 6.133v14.124c-0.608-0.138-1.824-0.444-2.543-0.337C6.094 20.307 4,22.284 4,24.322s2.094 3.372 4.675 2.985c2.438-0.365 4.311-2.137 4.526-4.05h0.017v-0.333V10.618l10-1.484v9.305c-0.608-0.138-1.956-0.425-2.675-0.317c-2.581 0.387-4.675 2.364-4.675 4.402s2.094 3.372 4.675 2.985c2.438-0.365 4.443-2.137 4.658-4.05h0.017L25.219 4L11.218 6.133z\",color:\"#000\"},51:{width:32,height:32,path:\"M10.088 20.537c2.011 1.998 8.608 6.991 11.999 5.852c1.683-0.565 3.59-2.585 4.546-4.842L20 17.671c-1.651 2.059-1.918 3.596-1.881 4.069c-1.779-0.665-3.616-1.731-5.559-3.69c-1.971-1.931-3.049-3.76-3.727-5.535c0.475 0.034 2.01-0.241 4.058-1.906L8.972 4C6.722 4.971 4.714 6.891 4.16 8.577C3.042 11.975 8.078 18.539 10.088 20.537L10.088 20.537z\",color:\"#000\"},52:{width:32,height:32,path:\"M15 8l13 8l-13 8v-7.304L4 24V8l11 7.304V8z\",color:\"#000\"},53:{width:32,height:32,path:\"M28 8v16h-2v-7.375L14 24v-7.313L3 24V8l11 7.313V8l12 7.375V8H28z\",color:\"#000\"},54:{width:32,height:32,path:\"M7 7v18h8V7H7z M17 7v18h8V7H17z\",color:\"#000\"},55:{width:32,height:32,path:\"M5 4l21 12L5 28V4z\",color:\"#000\"},56:{width:32,height:32,path:\"M4 8v16h2v-7.375L18 24v-7.313L29 24V8l-11 7.313V8L6 15.375V8H4z\",color:\"#000\"},57:{width:32,height:32,path:\"M22 5v4.063H10.719c-3.588 0-6.038 1.381-7.313 3.375S2 16.843 2,19.25l2.75-2.188c0.132-1.297 0.406-2.405 0.906-3.188c0.767-1.199 2.013-1.815 5.063-1.813H22v4.031l6.688-5.594L22 5z M29 12.875l-2.75 2.188c-0.132 1.297-0.406 2.405-0.906 3.188c-0.767 1.199-2.012 1.815-5.063 1.813H9v-4.031l-6.688 5.594L9 27.125v-4.063h11.281c3.588 0,6.038-1.381 7.313-3.375S29 15.282 29 12.875z\",color:\"#000\"},58:{width:32,height:32,path:\"M17 8L4 16l13 8v-7.304L28 24V8l-11 7.304V8z\",color:\"#000\"},59:{width:32,height:32,path:\"M7 7h18v18H7V7z\",color:\"#000\"},60:{width:32,height:32,path:\"M6 6v21h20V10.676L22.067 6h-2.262v8H9V6H6z M14 7v5h4V7H14z M9 17.232h14V25H9V17.232z M11 19v1h10v-1H11z M11 22v1h10v-1H11z\",color:\"#000\"},61:{width:32,height:32,path:\"M12.75 5C8.47 5,5 8.47 5,12.75s3.47 7.75 7.75 7.75c1.802 0,3.465-0.61 4.781-1.641l1.781 1.781c-0.392 0.392-0.392 1.03 0 1.422l4.391 4.391c0.392 0.392 1.015 0.392 1.406 0l1.422-1.422c0.392-0.392 0.392-1.015 0-1.406l-4.391-4.391c-0.392-0.393-1.03-0.393-1.422 0l-1.797-1.797c0.989-1.302 1.578-2.927 1.578-4.688C20.5 8.47 17.03 5,12.75 5L12.75 5z M12.75 6.625c3.379 0,6.125 2.746 6.125 6.125s-2.746 6.125-6.125 6.125s-6.125-2.746-6.125-6.125S9.371 6.625 12.75 6.625z\",color:\"#000\"},62:{width:32,height:32,path:\"M21.729 5c-1.775 0-3.226 1.451-3.226 3.227c0 0.187 0.026 0.364 0.057 0.542l-7.979 4.482c-0.587-0.639-1.434-1.042-2.369-1.042C6.437 12.209 5,13.646 5,15.421s1.437 3.212 3.212 3.212c0.95 0,1.81-0.415 2.397-1.071l7.895 4.64c-0.016 0.126-0.029 0.255-0.029 0.386c0 1.774 1.438 3.211 3.212 3.211c1.775 0,3.212-1.437 3.212-3.211c0-1.775-1.437-3.227-3.212-3.227c-0.983 0-1.865 0.445-2.455 1.142l-7.837-4.624c0.021-0.15 0.029-0.301 0.029-0.457c0-0.177-0.016-0.346-0.043-0.514l7.993-4.497c0.587 0.629 1.428 1.027 2.355 1.027c1.775 0 3.212-1.437 3.212-3.211C24.941 6.451 23.505 5,21.729 5L21.729 5z\",color:\"#000\"},63:{width:32,height:32,path:\"M8.375 9c-1.438 0-2.632 0.364-3.531 1.094c-0.892 0.729-1.302 1.588-1.25 2.531l0.031 0.063l2.563-0.031c0-0.464 0.201-0.838 0.563-1.125c0.361-0.295 0.826-0.438 1.438-0.438c0.692 0,1.232 0.178 1.594 0.531c0.368 0.354 0.563 0.843 0.563 1.469v1.063H8.25c-1.658 0-2.961 0.32-3.875 0.969C3.461 15.767 3,16.655 3,17.813c0 1.12 0.337 2.015 1 2.656c0.671 0.642 1.63 0.938 2.875 0.938c0.744 0 1.427-0.187 2.031-0.563c0.604-0.384 1.076-0.847 1.438-1.406c0.022 0.287 0.066 0.587 0.125 0.875c0.066 0.287 0.154 0.573 0.25 0.875h2.719c-0.147-0.435-0.246-0.862-0.313-1.313c-0.066-0.457-0.094-0.944-0.094-1.438v-5.313c0-1.327-0.427-2.354-1.281-3.063S9.768 9,8.375 9L8.375 9zM18.531 9.188v2.188h5.938l-6.031 8.063v1.75h9.688v-2.156H21.75l6.094-8.125V9.188H18.531z M14.563 14.25v1.969h2.969V14.25H14.563z M8.188 15.813h2.156v1.781c-0.177 0.435-0.549 0.817-1.094 1.156c-0.538 0.339-1.142 0.5-1.813 0.5c-0.56 0-0.979-0.109-1.281-0.375c-0.295-0.272-0.469-0.637-0.469-1.094c0-0.522 0.245-0.991 0.688-1.375C6.817 16.016 7.406 15.813 8.188 15.813z\",color:\"#000\"},64:{width:32,height:32,path:\"M15.896 4l-3.29 7.996L4 12.662l6.593 5.594l-2.04 8.398l7.356-4.539l7.371 4.524l-2.055-8.397l6.58-5.608l-8.62-0.638L15.896 4zM15.896 6.901l0.61 1.485l1.652 4.012v0.014l0.264 0.639l0.68 0.042h0.015l4.316 0.333l1.61 0.125l-1.235 1.041l-3.304 2.804l-0.527 0.444l0.166 0.666h0.015l1.026 4.192l0.375 1.568l-1.374-0.833l-3.692-2.262v-0.015l-0.583-0.36l-0.597 0.36l-3.679 2.276l-1.374 0.861l0.375-1.583l1.027-4.206l0.166-0.666l-0.527-0.444l-3.29-2.804l-1.235-1.055l1.61-0.111l4.303-0.319l0.694-0.055l0.236-0.625v-0.014l0.014-0.014l1.651-4.012L15.896 6.901L15.896 6.901z\",color:\"#000\"},65:{width:32,height:32,path:\"M15.896 4l-3.29 7.996L4 12.662l6.593 5.594l-2.04 8.398l7.356-4.539l7.371 4.524l-2.055-8.397l6.58-5.608l-8.62-0.638L15.896 4z\",color:\"#000\"},66:{width:32,height:32,path:\"M16.824 4L4 16.824v9.747h9.233l12.824-12.825L16.824 4z M16.279 9.643l1.042 1.026l-7.983 7.982l-1.041-1.042L16.279 9.643L16.279 9.643z M19.47 12.833l1.042 1.025l-7.983 7.983L11.486 20.8L19.47 12.833L19.47 12.833z M7.848 21.714c0.562 0,1.01 0.447 1.01 1.01c0 0.562-0.448 1.01-1.01 1.01c-0.563 0-1.01-0.448-1.01-1.01S7.285 21.714 7.848 21.714z\",color:\"#000\"},67:{width:32,height:32,path:\"M4 17.916l7.841 7.84L27.682 9.914L25.768 8L11.841 21.927l-5.926-5.926L4 17.916z\",color:\"#000\"},68:{width:32,height:32,path:\"M6 6v6h6V6H6z M13 6v6h6V6H13z M20 6v6h6V6H20z M6 13v6h6v-6H6z M13 13v6h6v-6H13z M20 13v6h6v-6H20z M6 20v6h6v-6H6zM13 20v6h6v-6H13z M20 20v6h6v-6H20z\",color:\"#000\"},69:{width:32,height:32,path:\"M7 7v8h8V7H7z M17 7v8h8V7H17z M7 17v8h8v-8H7z M17 17v8h8v-8H17z\",color:\"#000\"},70:{width:32,height:32,path:\"M9.941 5.004C8.979 5.031 8.06 5.173 7.371 5.831L2 11.095l4.697 3.764l1.393-1.285v12.669h13V13.574l1.338 1.285l4.698-3.764l-5.371-5.265c-0.917-0.876-2.228-0.826-3.534-0.826h-0.429c0.01 0.058 0.015 0.108 0.015 0.169c0 1.118-1.455 2.035-3.244 2.035c-1.788 0-3.244-0.917-3.244-2.035c0-0.06 0.01-0.111 0.016-0.169h-0.429C10.578 5.004 10.262 4.995 9.941 5.004L9.941 5.004z\",color:\"#000\"},71:{width:32,height:32,path:\"M17.563 4C11.444 4,6.469 8.977 6.469 15.094c0 0.287 0.039 0.563 0.063 0.844l-3.031-3l-1.5 1.5l5.75 5.719l5.75-5.719l-1.531-1.5l-3.25 3.125c-0.035-0.315-0.063-0.644-0.063-0.969c0-4.928 3.979-8.906 8.906-8.906c4.929 0,8.906 3.978 8.906 8.906S22.491 24 17.563 24c-2.408 0-4.586-0.953-6.188-2.5l-1.563 1.531c2.001 1.954 4.739 3.156 7.75 3.156c6.117 0,11.094-4.977 11.094-11.094S23.68 4,17.563 4L17.563 4z\",color:\"#000\"},72:{width:32,height:32,path:\"M10.719 5L5 10.75l5.719 5.75l1.5-1.531l-3.156-3.281h10.313c3.325 0,6 2.674 6,6s-2.675 6-6 6h-12v2h12c4.406 0,8-3.594 8-8s-3.594-8-8-8H9.063L12.219 6.5L10.719 5z\",color:\"#000\"},73:{width:32,height:32,path:\"M15.055 6c-3.688 0-6.676 2.989-6.676 6.676s2.988 6.676 6.676 6.676c3.687 0,6.675-2.989 6.675-6.676S18.741 6,15.055 6zM10.929 14.9h8.252c0 1.493-2.338 2.968-4.126 2.968C13.266 17.868 10.929 16.314 10.929 14.9z M10.883 19.676C8.28 20.764 6.403 22.835 6 25.285h18.11c-0.404-2.45-2.281-4.521-4.884-5.609c-1.222 0.729-2.646 1.159-4.172 1.159S12.104 20.405 10.883 19.676L10.883 19.676z\",color:\"#000\"},74:{width:32,height:32,path:\"M16.063 6c-3.688 0-6.688 3.001-6.688 6.688s3 6.656 6.688 6.656c3.687 0 6.688-2.97 6.688-6.656S19.749 6,16.063 6z M6.938 9.281c-2.011 0-3.625 1.615-3.625 3.625s1.614 3.656 3.625 3.656c0.81 0 1.551-0.271 2.156-0.719c-0.131-0.281-0.248-0.577-0.344-0.875c-0.458 0.44-1.195 0.781-1.813 0.781c-0.976 0-2.25-0.854-2.25-1.625h3.844c-0.092-0.469-0.156-0.942-0.156-1.438c0-0.989 0.22-1.942 0.563-2.813C8.362 9.494 7.679 9.281 6.938 9.281z M25.188 9.281c-0.741 0-1.425 0.213-2 0.594c0.343 0.87 0.531 1.824 0.531 2.813c0 0.495-0.033 0.969-0.125 1.438h3.844c0 0.771-1.275 1.625-2.25 1.625c-0.617 0-1.354-0.341-1.813-0.781c-0.097 0.298-0.214 0.594-0.344 0.875c0.604 0.448 1.346 0.719 2.156 0.719c2.01 0,3.625-1.646 3.625-3.656S27.197 9.281 25.188 9.281z M11.938 14.906h8.25c0 1.492-2.337 2.969-4.125 2.969C14.273 17.875 11.938 16.32 11.938 14.906z M4.656 16.719C3.237 17.312 2.22 18.445 2 19.781h7.625c0.57-0.389 1.186-0.723 1.844-1C10.804 18.277 10.226 17.684 9.75 17c-0.011 0,0.01-0.028 0-0.031c-0.164-0.09-0.354-0.176-0.531-0.25c-0.666 0.397-1.449 0.656-2.281 0.656s-1.584-0.259-2.25-0.656H4.656L4.656 16.719z M22.906 16.719c-0.178 0.074-0.367 0.159-0.531 0.25c-0.476 0.685-1.054 1.277-1.719 1.781c0.657 0.277 1.273 0.643 1.844 1.031h7.625c-0.221-1.336-1.238-2.47-2.656-3.063c-0.666 0.397-1.449 0.625-2.281 0.625S23.572 17.116 22.906 16.719z M11.875 19.688C9.272 20.775 7.403 22.831 7,25.281h18.125c-0.404-2.45-2.273-4.506-4.875-5.594c-1.222 0.729-2.661 1.156-4.188 1.156S13.097 20.417 11.875 19.688z\",color:\"#000\"},75:{width:32,height:32,path:\"M7.096 10C5.645 10 5,10.614 5,12v8c0 1.385 1.278 2,2.096 2H21V10H7.096z M25.429 11L22 13.5v5l3.429 2.5H27V11H25.429z\",color:\"#000\"},76:{width:32,height:32,path:\"M18.072 4.001c-2.494 0.201-4.601 5.052-6.906 7.5H8.135c-1.514 0-1.514 9,0 9h3.031c2.305 2.447 4.451 7.268 6.906 7.469c0.053 0.01 0.104 0.03 0.156 0.03c1.672 0,3.031-5.372 3.031-12c0-6.627-1.359-12-3.031-12C18.176 4,18.127 4,18.072 4.001L18.072 4.001zM17.76 6.626c1.057 0,1.938 4.19 1.938 9.375c0 5.184-0.881 9.375-1.938 9.375c-0.826 0-1.514-2.586-1.781-6.188c0.99-0.73 1.625-1.877 1.625-3.188c0-1.312-0.635-2.457-1.625-3.188C16.246 9.211 16.934 6.626 17.76 6.626z\",color:\"#000\"},77:{width:32,height:32,path:\"M16.514 6C11.787 6,7.43 7.659 4,10.423l2.377 2.928c2.772-2.224 6.296-3.558 10.137-3.558s7.363 1.334 10.136 3.558l2.361-2.928C25.582 7.664 21.235 6 16.514 6L16.514 6z M16.514 10.927c-3.559 0-6.831 1.247-9.413 3.321l2.361 2.943c1.927-1.544 4.371-2.472 7.052-2.472c2.666 0 5.118 0.911 7.051 2.44l2.361-2.912C23.344 12.174 20.071 10.927 16.514 10.927z M15.994 15.932c-2.172 0.111-4.163 0.924-5.762 2.204l2.361 2.912c1.072-0.849 2.431-1.354 3.919-1.354c1.484 0,2.833 0.51 3.903 1.354l2.361-2.928c-1.722-1.369-3.902-2.188-6.265-2.188C16.34 15.932 16.165 15.922 15.994 15.932L15.994 15.932z M16.514 21.079c-1.143 0-2.2 0.405-3.038 1.07l3.021 3.73l3.038-3.746C18.696 21.477 17.647 21.079 16.514 21.079z\",color:\"#000\"},78:{width:24,height:24,path:\"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\",color:\"#000\"},79:{width:24,height:24,path:\"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\",color:\"#000\"},80:{width:24,height:24,path:\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\",color:\"#000\"},81:{width:24,height:24,path:\"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\",color:\"#000\"},alert1:{width:24,height:24,path:\"M12 2c-5.52 0-10 4.48-10 10s4.48 10 10 10 10-4.48 10-10-4.48-10-10-10zm1 15h-2v-2h2v2zm0-4h-2v-6h2v6z\",color:\"#000\"},alert2:{width:24,height:24,path:\"M12 2C6.48 2,2 6.48 2,12c0 5.52 4.48 10 10 10c5.52 0 10-4.48 10-10C22 6.48 17.52 2 12 2z M13 17h-2v-2h2V17zM13 13h-2V7h2V13z\",color:\"#E51C23\"},alert3:{width:24,height:24,path:\"M1 21h22L12 2L1 21z M13 18h-2v-2h2V18z M13 14h-2v-4h2V14z\",color:\"#FFC107\"},alert4:{width:24,height:24,path:\"M1 21h22L12 2L1 21z M13 18h-2v-2h2V18z M13 14h-2v-4h2V14z\",color:\"#000\"}},ios_icons:{action:{width:20,height:28,path:\"M10 0L9.602 0.391L5.157 4.926c-0.22 0.223-0.22 0.592 0 0.813c0.22 0.228 0.579 0.228 0.797 0l3.491-3.559v15.619c-0.006 0.315 0.238 0.576 0.549 0.576c0.304 0.004 0.561-0.239 0.563-0.56c0 0 0-0.008 0-0.018V2.179l3.49 3.559c0.221 0.228 0.572 0.228 0.797 0c0.225-0.221 0.225-0.59 0-0.813L10.4 0.391L10 0z M0 8.734v0.566v18.139V28h0.555h18.889H20v-0.561V9.301V8.734h-0.557h-5c-0.31-0.008-0.56 0.244-0.566 0.558c0 0.312 0.246 0.567 0.548 0.575c0.009 0 0.019 0 0.019 0h4.447v17.001H1.109V9.867h4.445C5.863 9.87 6.115 9.621 6.117 9.309C6.122 8.994 5.876 8.734 5.57 8.734c-0.006 0-0.01 0-0.018 0h-5H0z\",color:\"#1279F8\"},add:{width:25,height:25,path:\"M12.5 1C6.155 1 1 6.155 1 12.5C1 18.841 6.155 24 12.5 24C18.841 24 24 18.841 24 12.5C24 6.155 18.841 1 12.5 1zM12.5 2.045c5.777 0 10.459 4.674 10.459 10.455c0 5.777-4.684 10.459-10.459 10.459c-5.781 0-10.455-4.684-10.455-10.459C2.045 6.719 6.719 2.045 12.5 2.045z M11.98 6.75v5.23H6.75v1.043h5.23v5.227h1.043v-5.229h5.227V11.98h-5.229V6.75H11.98z\",color:\"#1B7AF4\"},add_black:{width:25,height:25,path:\"M12.5 1C6.159 1 1 6.159 1 12.5S6.159 24 12.5 24S24 18.841 24 12.5S18.841 1 12.5 1z M18.25 13.021h-5.229v5.229h-1.045v-5.229H6.75v-1.045h5.227V6.75h1.045v5.227h5.229V13.021z\",color:\"#000\"},add_black_light:{width:25,height:25,path:\"M12.5 1C6.155 1 1 6.155 1 12.5C1 18.841 6.155 24 12.5 24C18.841 24 24 18.841 24 12.5C24 6.155 18.841 1 12.5 1zM12.5 2.045c5.777 0 10.459 4.674 10.459 10.455c0 5.777-4.684 10.459-10.459 10.459c-5.781 0-10.455-4.684-10.455-10.459C2.045 6.719 6.719 2.045 12.5 2.045z M11.98 6.75v5.23H6.75v1.043h5.23v5.227h1.043v-5.229h5.227V11.98h-5.229V6.75H11.98z\",color:\"#000\"},add_green:{width:25,height:25,path:\"M12.5 1C6.159 1 1 6.159 1 12.5S6.159 24 12.5 24S24 18.841 24 12.5S18.841 1 12.5 1z M18.25 13.021h-5.229v5.229h-1.045v-5.229H6.75v-1.045h5.227V6.75h1.045v5.227h5.229V13.021z\",color:\"#52D668\"},add_small:{width:19,height:19,path:\"M8.726 1v7.726H1v1.549h7.726V18h1.549v-7.725H18V8.726h-7.725V1H8.726z\",color:\"#1b7dfa\"},alert:{width:25,height:25,path:\"M12.5 0C5.604 0 0 5.604 0 12.5C0 19.393 5.604 25 12.5 25C19.393 25 25 19.393 25 12.5C25 5.604 19.393 0 12.5 0z M12.5 1.136c6.279 0 11.369 5.08 11.369 11.364c0 6.279-5.09 11.369-11.369 11.369c-6.284 0-11.364-5.09-11.364-11.369C1.136 6.216 6.216 1.136 12.5 1.136zM11.827 6.425c-0.171 0-0.231 0.104-0.231 0.216v7.669c0 0.17 0.115 0.234 0.231 0.234h1.292c0.169 0 0.234-0.117 0.234-0.234V6.641c0-0.17-0.119-0.216-0.234-0.216H11.827z M11.827 16.652c-0.171 0-0.231 0.1-0.231 0.217v1.49c0 0.17 0.115 0.216 0.231 0.216h1.351c0.172 0 0.229-0.099 0.229-0.216v-1.49c0-0.17-0.119-0.217-0.229-0.217H11.827z\",color:\"#000\"},battery:{width:28,height:14,path:\"M3 3h20v8H3V3z M23 9h2V5h-2V9z\",color:\"#000\"},bluetooth:{width:25,height:25,path:\"M18.979 7.948L12.031 1v9.104L8.438 6.51L7 7.948l4.552 4.552L7 17.053l1.438 1.438l3.594-3.594V24l6.947-6.947L14.426 12.5L18.979 7.948zM14.426 5.792l2.156 2.156l-2.156 2.156V5.792z M16.582 17.053l-2.156 2.156v-4.313L16.582 17.053z\",color:\"#000\"},bookmark:{width:30,height:26,path:\"M3.797 1C2.262 1 1 2.256 1 3.788v16.183c0 1.541 1.262 2.797 2.798 2.797h8.964c0.934 0 1.68 0.748 1.68 1.664C14.439 24.746 14.691 25 15 25c0.048 0 0.094-0.01 0.143-0.023c0.146-0.029 0.273-0.135 0.346-0.26c0.045-0.088 0.073-0.178 0.073-0.285c0-0.916 0.744-1.664 1.678-1.664h8.959c1.541 0 2.803-1.256 2.803-2.797V3.788C29 2.256 27.738 1 26.197 1h-8.959C16.326 1 15.506 1.452 15 2.134C14.486 1.452 13.673 1 12.761 1H3.797zM3.797 2.115h8.964c0.934 0 1.68 0.74 1.68 1.673v18.489c-0.473-0.373-1.034-0.627-1.68-0.627H3.797c-0.932 0-1.679-0.746-1.679-1.68V3.788C2.119 2.855 2.866 2.115 3.797 2.115z M17.238 2.115h8.959c0.932 0 1.684 0.74 1.684 1.673v16.183c0 0.934-0.752 1.68-1.684 1.68h-8.959c-0.639 0-1.209 0.254-1.678 0.627V3.788C15.561 2.855 16.301 2.115 17.238 2.115z\",color:\"#1B7AF4\"},camera:{width:25,height:25,path:\"M23.387 5.822h-4.436C17.77 5.822 17.084 3 15.727 3H9.274C8.08 3 7.182 5.822 6.048 5.822H1.613C0.722 5.822 0 6.544 0 7.434v12.501c0 0.891 0.722 1.611 1.613 1.611h21.774c0.891 0 1.613-0.722 1.613-1.611V7.434C25 6.544 24.277 5.822 23.387 5.822L23.387 5.822zM12.5 19.129c-3.118 0-5.645-2.527-5.645-5.645c0-3.118 2.527-5.646 5.645-5.646s5.645 2.527 5.645 5.646C18.145 16.602 15.618 19.129 12.5 19.129L12.5 19.129z M19.557 9.048c-0.334 0-0.604-0.271-0.604-0.605s0.271-0.604 0.604-0.604s0.605 0.271 0.605 0.604C20.162 8.778 19.891 9.048 19.557 9.048L19.557 9.048z M5.242 3.806H2.823v1.209h2.419V3.806L5.242 3.806z M12.5 9.048c-2.449 0-4.436 1.985-4.436 4.437c0 2.447 1.986 4.434 4.436 4.434s4.436-1.984 4.436-4.434C16.936 11.034 14.949 9.048 12.5 9.048L12.5 9.048z\",color:\"#000\"},check1:{width:25,height:25,path:\"M12.5 1C6.155 1 1 6.155 1 12.5C1 18.846 6.155 24 12.5 24C18.846 24 24 18.846 24 12.5C24 6.155 18.846 1 12.5 1z M12.5 2.046c5.781 0 10.455 4.674 10.455 10.454c0 5.781-4.674 10.455-10.455 10.455c-5.779 0-10.454-4.674-10.454-10.455C2.046 6.721 6.721 2.046 12.5 2.046zM17.236 6.996l-5.717 8.884l-3.838-3.462l-0.702 0.784l4.279 3.87l0.458 0.408l0.327-0.521l6.076-9.407L17.236 6.996z\",color:\"#000\"},check2:{width:25,height:25,path:\"M12.5 1C6.159 1 1 6.159 1 12.5S6.159 24 12.5 24S24 18.841 24 12.5S18.841 1 12.5 1z M11.718 17.48l-4.743-4.279l0.7-0.776l3.83 3.458l5.731-8.895l0.879 0.566L11.718 17.48z\",color:\"#1B7DFA\"},check3:{width:25,height:25,path:\"M12.5 1C6.159 1 1 6.159 1 12.5S6.159 24 12.5 24S24 18.841 24 12.5S18.841 1 12.5 1z M11.717 17.481l-4.742-4.28l0.7-0.775l3.83 3.457l5.731-8.893l0.879 0.566L11.717 17.481z\",color:\"#000\"},check4:{width:14,height:16,path:\"M12.343 2.001c-0.211 0.008-0.4 0.131-0.512 0.323L5.915 12.27L2.082 8.629C1.841 8.355 1.442 8.348 1.19 8.613C0.943 8.88 0.935 9.316 1.177 9.592c0.024 0.026 0.048 0.055 0.077 0.077l4.382 4.168c0.267 0.247 0.664 0.21 0.888-0.084c0.017-0.021 0.033-0.043 0.047-0.067l6.32-10.606c0.195-0.315 0.12-0.743-0.168-0.959C12.612 2.036 12.481 1.993 12.343 2.001z\",color:\"#1B7DFA\"},check5:{width:14,height:16,path:\"M12.339 2.001c-0.209 0.009-0.402 0.13-0.511 0.324L5.913 12.27L2.081 8.631C1.84 8.357 1.442 8.349 1.19 8.614C0.943 8.881 0.935 9.316 1.177 9.592c0.024 0.027 0.05 0.053 0.077 0.076l4.383 4.169c0.265 0.247 0.662 0.21 0.886-0.083c0.018-0.021 0.033-0.043 0.047-0.067L12.89 3.08c0.197-0.315 0.123-0.744-0.165-0.959C12.61 2.036 12.476 1.993 12.339 2.001z\",color:\"#000\"},clock:{width:24,height:24,path:\"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12s12-5.373 12-12S18.627 0 12 0L12 0z M12 23C5.935 23 1 18.064 1 12C1 5.935 5.935 1 12 1c6.064 0 11 4.935 11 11C23 18.064 18.064 23 12 23L12 23z M12 13H6v1h7V4.041h-1V13L12 13z\",color:\"#000\"},close1:{width:20,height:20,path:\"M14.723 14.723c-0.371 0.37-0.979 0.37-1.348 0L10 11.351l-3.373 3.372c-0.371 0.37-0.979 0.37-1.35 0c-0.371-0.371-0.371-0.979 0-1.351L8.652 10L5.279 6.628c-0.371-0.369-0.371-0.979 0-1.35c0.371-0.371 0.979-0.371 1.35 0L10 8.65l3.375-3.371c0.369-0.371 0.977-0.371 1.348 0c0.369 0.371 0.369 0.979-0.002 1.35L11.353 10l3.368 3.373C15.092 13.742 15.094 14.352 14.723 14.723z\",color:\"#000\"},close2:{width:26,height:22,path:\"M14.5 0C7.434 0 0 11 0 11s7.467 11 14.5 11C26 22 26 11 26 11S26 0 14.5 0z M19.693 16.063c-0.407 0.392-1.076 0.392-1.483 0l-3.711-3.549l-3.709 3.547c-0.408 0.392-1.076 0.392-1.484 0c-0.408-0.388-0.408-1.026 0-1.418l3.71-3.547l-3.71-3.549c-0.408-0.388-0.408-1.027 0-1.417c0.408-0.39 1.076-0.39 1.484 0l3.709 3.549L18.21 6.13c0.407-0.39 1.076-0.39 1.483 0C20.1 6.519 20.1 7.158 19.691 7.546l-3.709 3.548l3.709 3.549C20.102 15.033 20.104 15.673 19.693 16.063z\",color:\"#1B7DFA\"},close3:{width:26,height:23,path:\"M14.5 0C7.434 0 0 11.5 0 11.5S7.467 23 14.5 23C26 23 26 11.5 26 11.5S26 0 14.5 0z M19.693 16.793c-0.407 0.408-1.076 0.408-1.483 0l-3.711-3.711l-3.708 3.709c-0.408 0.408-1.076 0.408-1.484 0c-0.408-0.406-0.408-1.074 0-1.482l3.71-3.709l-3.71-3.71c-0.408-0.406-0.408-1.074 0-1.482c0.408-0.408 1.076-0.408 1.484 0l3.708 3.71l3.711-3.71c0.407-0.408 1.076-0.408 1.483 0C20.1 6.815 20.1 7.483 19.691 7.889l-3.709 3.71l3.709 3.709C20.102 15.717 20.104 16.385 19.693 16.793z\",color:\"#000\"},close4:{width:26,height:23,path:\"M14.5 0C7.434 0 0 11.5 0 11.5S7.467 23 14.5 23C26 23 26 11.5 26 11.5S26 0 14.5 0z M14.37 22C7.948 22 1 11.5 1 11.5S7.918 1 14.37 1C24.869 1 25 11.5 25 11.5S24.869 22 14.37 22z M15.984 11.5l3.709-3.711c0.408-0.406 0.408-1.074 0.002-1.482c-0.408-0.408-1.077-0.408-1.484 0l-3.711 3.71l-3.709-3.71c-0.408-0.408-1.076-0.408-1.484 0c-0.408 0.408-0.408 1.076 0 1.482l3.711 3.711l-3.711 3.709c-0.408 0.408-0.408 1.076 0 1.482c0.408 0.408 1.076 0.408 1.484 0l3.709-3.709l3.711 3.709c0.407 0.408 1.076 0.408 1.484 0c0.408-0.406 0.406-1.074-0.002-1.482L15.984 11.5z\",color:\"#000\"},copy:{width:28,height:28,path:\"M2 26h18.24V7.76H2V26z M2.96 8.72h16.319v16.32H2.96V8.72z M6.8 2v1.92h17.28v15.359H21.2V21.2H26V2H6.8z\",color:\"#1B7DFA\"},download:{width:23,height:27,path:\"M11.437 0.006c-0.023 0.002-0.055 0.008-0.078 0.016c-0.295 0.055-0.506 0.285-0.498 0.548v16.828l-4.016-3.464C6.69 13.8 6.463 13.743 6.247 13.778c-0.35 0.061-0.579 0.348-0.518 0.641c0.025 0.121 0.095 0.229 0.197 0.31l5.111 4.405l0.461 0.375l0.46-0.375l5.11-4.405c0.256-0.215 0.256-0.572 0-0.794c-0.258-0.211-0.662-0.211-0.918 0l0 0L12.14 17.4V0.57c0.01-0.305-0.269-0.559-0.617-0.57C11.493 0 11.467 0 11.437 0.006z M0 8.28v0.551v17.615V27h0.636h21.723H23v-0.557V8.831V8.28h-0.642h-5.75c-0.354-0.006-0.642 0.238-0.648 0.541c-0.001 0.304 0.281 0.553 0.63 0.561c0.009 0 0.019 0 0.021 0h5.113v16.517H1.274V9.381h5.111c0.355 0 0.646-0.24 0.648-0.544C7.04 8.53 6.757 8.282 6.405 8.28c-0.006 0-0.012 0-0.02 0h-5.75H0z\",color:\"#000\"},face:{width:29,height:17,path:\"M18 0H2C0.896 0 0 0.896 0 2v13c0 1.104 0.896 2 2 2h16c1.104 0 2-0.896 2-2V2C20 0.896 19.104 0 18 0z M19 14.234C19 15.21 18.193 16 17.199 16H2.8C1.806 16 1 15.21 1 14.234V2.766C1 1.791 1.806 1 2.8 1h14.399C18.193 1 19 1.791 19 2.766V14.234z M21 6v5l7 4V2L21 6z M27 13l-5-3V7l5-3V13z\",color:\"#060001\"},favourite:{width:18,height:18,path:\"M10 2L9.504 3.352L7.902 7.778l-4.544 0.26L2 8.125l1.056 0.903l3.488 3.001l-1.122 4.598L5.073 18l1.14-0.764L10 14.654l3.784 2.582L14.924 18l-0.346-1.373l-1.125-4.598l3.486-3.001L18 8.125l-1.355-0.087l-4.547-0.26l-1.603-4.426L10 2z\",color:\"#1B7DFA\"},favourite1:{width:24,height:24,path:\"M12 1l-0.742 1.859L8.851 8.946L2.038 9.303L0 9.422l1.583 1.244l5.234 4.126l-1.685 6.319L4.608 23l1.71-1.051L12 18.4l5.675 3.547L19.385 23l-0.518-1.889l-1.688-6.32l5.229-4.126L24 9.422l-2.035-0.12l-6.82-0.356L12.745 2.86L12 1z M12 5.272l1.879 4.698l0.182 0.451l0.521 0.029l5.274 0.281l-4.061 3.177l-0.396 0.307l0.119 0.485l1.313 4.883l-4.41-2.748L12 16.578l-0.421 0.26l-4.416 2.748l1.319-4.884l0.122-0.485L8.205 13.91l-4.066-3.176l5.282-0.282l0.519-0.028l0.175-0.451L12 5.272z\",color:\"#000\"},heart:{width:24,height:24,path:\"M17.398 1C15.311 1 13.309 1.971 12 3.505C10.691 1.971 8.687 1 6.6 1C2.904 1 0 3.901 0 7.594c0 4.532 4.08 8.224 10.261 13.835L12 23l1.738-1.584C19.92 15.818 24 12.126 24 7.594C24 3.901 21.096 1 17.398 1z M12.12 19.645L12 19.764l-0.12-0.119C6.167 14.477 2.4 11.059 2.4 7.594c0-2.397 1.799-4.197 4.199-4.197c1.849 0 3.647 1.188 4.285 2.83h2.243c0.626-1.643 2.428-2.83 4.271-2.83c2.401 0 4.203 1.799 4.203 4.197C21.602 11.059 17.832 14.477 12.12 19.645z\",color:\"#000\"},help:{width:25,height:25,path:\"M12.5 0C5.596 0 0 5.596 0 12.5C0 19.405 5.596 25 12.5 25S25 19.405 25 12.5C25 5.596 19.404 0 12.5 0L12.5 0z M12.5 24C6.149 24 1 18.852 1 12.5c0-6.351 5.149-11.5 11.5-11.5S24 6.149 24 12.5C24 18.852 18.851 24 12.5 24L12.5 24z M11.719 18.75h1.562v-1.563h-1.562V18.75z M15.516 7.332c-0.316-0.323-0.719-0.582-1.211-0.782c-0.498-0.201-1.082-0.299-1.771-0.299c-0.584 0-1.117 0.099-1.601 0.299c-0.486 0.2-0.903 0.477-1.255 0.836C9.33 7.742 9.06 8.094 8.872 8.595c-0.185 0.501-0.279 0.78-0.279 1.562h1.595c0-0.781 0.205-1.372 0.63-1.881c0.42-0.51 0.99-0.723 1.714-0.723c0.705 0 1.232 0.19 1.57 0.534c0.334 0.343 0.506 0.834 0.506 1.455c0 0.482-0.158 0.916-0.475 1.294c-0.311 0.378-0.651 0.745-1.017 1.095c-0.371 0.349-0.667 0.719-0.975 1.104c-0.307 0.387-0.425 0.834-0.425 1.343v1.247h1.563v-0.671c0-0.401 0.059-0.747 0.215-1.05c0.15-0.304 0.34-0.58 0.576-0.824c0.232-0.25 0.48-0.489 0.756-0.725c0.27-0.234 0.527-0.482 0.76-0.741c0.234-0.262 0.432-0.554 0.582-0.878c0.158-0.324 0.234-0.703 0.234-1.147c0-0.385-0.068-0.775-0.213-1.174c-0.143-0.401-0.371-0.761-0.68-1.085l0 0L15.516 7.332z\",color:\"#000\"},info1:{width:25,height:25,path:\"M12.5 0C5.604 0 0 5.604 0 12.5S5.604 25 12.5 25S25 19.396 25 12.5S19.396 0 12.5 0z M12.5 1C18.857 1 24 6.143 24 12.5S18.857 24 12.5 24S1 18.857 1 12.5S6.143 1 12.5 1z M11.891 6.453c-0.106 0-0.172 0.064-0.172 0.172v1.313c0 0.107 0.064 0.188 0.172 0.188h1.219c0.107 0 0.173-0.08 0.173-0.188V6.625c0-0.107-0.063-0.172-0.173-0.172H11.891z M11.859 10.063c-0.065 0.025-0.109 0.092-0.109 0.172v8.234c0 0.107 0.064 0.172 0.172 0.172h1.156c0.107 0 0.172-0.063 0.172-0.172v-8.234c0-0.106-0.064-0.172-0.172-0.172h-1.156C11.895 10.063 11.881 10.055 11.859 10.063z\",color:\"#1B7DFA\"},info2:{width:25,height:25,path:\"M12.5 0C5.604 0 0 5.604 0 12.5S5.604 25 12.5 25S25 19.396 25 12.5S19.396 0 12.5 0z M12.5 1C18.857 1 24 6.143 24 12.5S18.857 24 12.5 24S1 18.857 1 12.5S6.143 1 12.5 1z M11.891 6.453c-0.106 0-0.172 0.064-0.172 0.172v1.313c0 0.107 0.064 0.188 0.172 0.188h1.219c0.107 0 0.173-0.08 0.173-0.188V6.625c0-0.107-0.063-0.172-0.173-0.172H11.891z M11.859 10.063c-0.065 0.025-0.109 0.092-0.109 0.172v8.234c0 0.107 0.064 0.172 0.172 0.172h1.156c0.107 0 0.172-0.063 0.172-0.172v-8.234c0-0.106-0.064-0.172-0.172-0.172h-1.156C11.895 10.063 11.881 10.055 11.859 10.063z\",color:\"#000\"},info3:{width:25,height:25,path:\"M12.5 0C5.607 0 0 5.607 0 12.5S5.607 25 12.5 25S25 19.393 25 12.5S19.393 0 12.5 0z M13.253 18.468c0 0.107-0.071 0.179-0.181 0.179h-1.146c-0.107 0-0.179-0.07-0.179-0.179v-8.231c0-0.106 0.071-0.18 0.179-0.18h1.146c0.109 0 0.181 0.072 0.181 0.18V18.468z M13.289 7.941c0 0.107-0.072 0.18-0.18 0.18h-1.221c-0.106 0-0.178-0.072-0.178-0.18v-1.31c0-0.106 0.071-0.18 0.178-0.18h1.221c0.106 0 0.18 0.071 0.18 0.18V7.941z\",color:\"#000\"},list:{width:24,height:15,path:\"M0 5.999h2v2H0V5.999z M0 13h2v2H0V13z M0 0h2v2H0V0z M6 6h18v2H6V6z M6 13h18v2H6V13z M6 0h18v2H6V0z\",color:\"#000\"},locate:{width:18,height:18,path:\"M18 0L0 8h10v10L18 0z M6 7l9-4l-4 9V7H6z\",color:\"#000\"},lock:{width:26,height:24,path:\"M11.438 21.82c-5.16 0-9.358-4.404-9.357-9.819C2.08 6.587 6.279 2.183 11.438 2.183c4.988 0 9.063 4.118 9.333 9.278h-3.149l4.188 7.625L26 11.456h-3.157C22.579 5.096 17.572 0 11.438 0C5.131 0 0 5.383 0 12c0 6.618 5.131 12 11.438 12V21.82z M7 18.893V11.2h1.333V8.848C8.333 6.71 9.856 5 11.761 5h0.479c1.903 0 3.428 1.71 3.428 3.848v2.456H17V19H7V18.893z M14.333 9.062c0-1.497-1.048-2.673-2.379-2.673c-1.335 0-2.38 1.176-2.38 2.673V11.2h4.76L14.333 9.062L14.333 9.062z\",color:\"#000\"},mail:{width:24,height:24,path:\"M0 4v17h24V4H0z M23.39 20.39H0.61V5.22l11.39 8l11.39-8V20.39z M12 12.61l-11.39-8h22.78L12 12.61z\",color:\"#000\"},message:{width:24,height:24,path:\"M12.022 1C5.398 1 0 5.511 0 11.133c0 2.764 1.334 5.244 3.471 7.082c-0.321 0.949-1.043 1.693-1.772 2.27c-0.394 0.311-0.77 0.572-1.066 0.826c-0.15 0.129-0.284 0.26-0.39 0.416c-0.11 0.158-0.206 0.382-0.137 0.627l0.06 0.188l0.166 0.1c0.62 0.336 1.392 0.398 2.225 0.34c0.833-0.053 1.737-0.234 2.629-0.469c1.729-0.453 3.35-1.1 4.208-1.456c0.847 0.167 1.695 0.271 2.586 0.271C18.604 21.326 24 16.813 24 11.193C24 5.572 18.65 1 12.022 1z M11.978 20.412c-0.882 0-1.709-0.082-2.541-0.259l-0.165-0.038l-0.134 0.072c-0.805 0.334-2.504 0.99-4.208 1.443c-0.853 0.221-1.704 0.391-2.435 0.436c-0.491 0.035-0.794-0.076-1.126-0.154c0.237-0.191 0.564-0.427 0.944-0.727c0.839-0.662 1.845-1.578 2.196-2.939l0.074-0.287l-0.239-0.172c-2.119-1.709-3.382-4.055-3.382-6.654c0-5.065 4.895-9.219 11.061-9.219c6.165 0 11.016 4.209 11.016 9.28C23.038 16.256 18.144 20.412 11.978 20.412z\",color:\"#000\"},pause1:{width:25,height:25,path:\"M12.5 0C5.601 0 0 5.601 0 12.5C0 19.4 5.601 25 12.5 25C19.4 25 25 19.4 25 12.5C25 5.601 19.4 0 12.5 0z M11.251 17.501h-2.5V7.499h2.5V17.501z M16.252 17.501h-2.503V7.499h2.503V17.501z\",color:\"#000\"},pause2:{width:25,height:25,path:\"M12.5 0C5.601 0 0 5.601 0 12.5C0 19.4 5.601 25 12.5 25C19.4 25 25 19.4 25 12.5C25 5.601 19.4 0 12.5 0z M12.5 23.501c-6.065 0-10.999-4.937-10.999-11.001c0-6.065 4.934-10.999 10.999-10.999c6.064 0 11.001 4.934 11.001 10.999C23.501 18.564 18.564 23.501 12.5 23.501zM8.75 7.499h2.5v10.002h-2.5V7.499z M13.749 7.499h2.503v10.002h-2.503V7.499z\",color:\"#000\"},phone:{width:24,height:24,path:\"M3.234 0.569c0.287-0.236 0.613-0.439 0.979-0.521c0.443-0.105 0.951-0.039 1.314 0.246c0.201 0.156 0.33 0.389 0.477 0.598c1.012 1.506 2.01 3.021 3.006 4.543C9.15 5.67 9.197 5.958 9.189 6.229C9.15 6.665 8.986 7.079 8.775 7.456C8.4 8.127 8.025 8.807 7.639 9.475c1.184 1.635 2.604 3.08 4.045 4.476c0.902 0.855 1.828 1.688 2.836 2.404c0.588-0.34 1.188-0.668 1.781-0.998c0.354-0.205 0.727-0.418 1.145-0.496c0.379-0.088 0.811-0.07 1.152 0.148c1.629 1.072 3.258 2.143 4.875 3.234c0.504 0.367 0.633 1.074 0.445 1.646c-0.143 0.514-0.533 0.895-0.846 1.314c-0.531 0.66-1.102 1.295-1.73 1.871c-0.463 0.398-0.949 0.85-1.586 0.922h-0.146c-0.988-0.033-1.957-0.287-2.883-0.648c-1.684-0.668-3.219-1.652-4.668-2.73c-1.711-1.289-3.299-2.73-4.805-4.252c-2.203-2.24-4.289-4.64-5.814-7.4C0.686 7.549 0.057 6.012 0 4.387V4.245c0.068-0.65 0.535-1.146 0.941-1.617C1.641 1.872 2.414 1.19 3.234 0.569z M3.9 1.27C3.096 1.879 2.33 2.54 1.645 3.278C1.41 3.567 1.137 3.834 0.994 4.176C0.953 4.262 0.965 4.36 0.967 4.45C1.014 5.547 1.379 6.602 1.828 7.59C2.1 8.188 2.422 8.764 2.754 9.331c1.779 2.873 4.102 5.357 6.537 7.681c1.199 1.127 2.461 2.213 3.799 3.174c1.24 0.893 2.555 1.699 3.977 2.264c0.852 0.326 1.744 0.592 2.666 0.58c0.389-0.121 0.67-0.43 0.979-0.676c0.793-0.734 1.494-1.553 2.129-2.416c0.152-0.221 0.256-0.504 0.164-0.77c-0.049-0.156-0.211-0.217-0.33-0.309c-1.492-1-2.984-1.984-4.48-2.965c-0.299-0.244-0.701-0.07-1.002 0.07c-0.914 0.492-1.805 1.008-2.703 1.514c-1.592-1.021-2.969-2.342-4.313-3.662C8.85 12.473 7.535 11.1 6.514 9.508c0.459-0.797 0.904-1.594 1.35-2.395c0.176-0.301 0.352-0.621 0.371-0.975C8.24 5.967 8.121 5.836 8.029 5.698C7.076 4.233 6.111 2.78 5.145 1.327c-0.094-0.123-0.162-0.293-0.32-0.336C4.486 0.887 4.152 1.059 3.9 1.27z\",color:\"#000\"},play1:{width:25,height:25,path:\"M12.5 0C5.601 0 0 5.601 0 12.5C0 19.4 5.601 25 12.5 25C19.4 25 25 19.4 25 12.5C25 5.601 19.4 0 12.5 0z M10 18.123V6.875l7.501 5.625L10 18.123z\",color:\"#000\"},play2:{width:25,height:25,path:\"M12.5 0C5.601 0 0 5.601 0 12.5C0 19.4 5.601 25 12.5 25C19.4 25 25 19.4 25 12.5C25 5.601 19.4 0 12.5 0z M12.5 24C6.153 24 1 18.85 1 12.5C1 6.152 6.153 1 12.5 1C18.85 1 24 6.152 24 12.5C24 18.85 18.85 24 12.5 24z M10 18.123l7.501-5.623L10 6.875V18.123z\",color:\"#000\"},profile:{width:28,height:28,path:\"M14 1C6.821 1 1 6.821 1 14c0 7.18 5.821 13 13 13c7.18 0 13-5.82 13-13C27 6.821 21.18 1 14 1zM22.059 22.971c-0.166 0.148-0.33 0.297-0.502 0.437c-0.145 0.116-0.297 0.225-0.447 0.333c-0.164 0.12-0.324 0.24-0.491 0.35c-0.164 0.107-0.334 0.206-0.506 0.308c-0.163 0.097-0.327 0.195-0.494 0.282c-0.175 0.094-0.356 0.175-0.536 0.26c-0.174 0.08-0.346 0.163-0.521 0.234c-0.181 0.072-0.367 0.137-0.553 0.202c-0.181 0.063-0.363 0.132-0.545 0.187c-0.191 0.057-0.387 0.102-0.581 0.148c-0.183 0.045-0.366 0.095-0.55 0.132c-0.225 0.043-0.455 0.072-0.684 0.104c-0.156 0.021-0.313 0.051-0.468 0.065c-0.388 0.037-0.782 0.061-1.181 0.061c-0.399 0-0.792-0.023-1.179-0.061c-0.158-0.015-0.314-0.043-0.472-0.065c-0.228-0.03-0.456-0.06-0.679-0.103c-0.187-0.037-0.37-0.088-0.555-0.133c-0.193-0.047-0.386-0.092-0.575-0.147c-0.185-0.056-0.368-0.125-0.552-0.188c-0.185-0.063-0.368-0.127-0.547-0.2c-0.176-0.071-0.35-0.155-0.524-0.237c-0.178-0.083-0.357-0.164-0.533-0.256c-0.168-0.088-0.333-0.188-0.498-0.285c-0.169-0.101-0.34-0.199-0.504-0.305c-0.168-0.11-0.331-0.231-0.494-0.352c-0.149-0.108-0.3-0.217-0.445-0.333c-0.171-0.138-0.336-0.288-0.502-0.437c-0.099-0.09-0.2-0.176-0.297-0.271c0.249-4.634 5.439-3.965 6.209-6.372c0.062-0.826 0.039-1.397 0.039-2.157c-0.319-0.189-0.917-1.444-1.013-2.5c-0.252-0.02-0.653-0.307-0.768-1.439c-0.067-0.609 0.187-0.949 0.334-1.057c-0.844-3.793-0.386-7.108 3.437-7.239c0.031 0 0.06-0.004 0.093-0.004c0.965 0.002 1.709 0.307 1.995 0.902c2.845 0.456 1.987 4.905 1.577 6.34c0.152 0.109 0.408 0.45 0.344 1.058c-0.115 1.132-0.519 1.42-0.766 1.439c-0.096 1.057-0.674 2.311-0.996 2.5c0 0.759-0.021 1.332 0.04 2.157c0.772 2.407 5.941 1.738 6.187 6.372C22.26 22.793 22.158 22.879 22.059 22.971z\",color:\"#147cfa\"},refresh:{width:15,height:17,path:\"M13.76 10.719c-0.561 2.91-3.221 5.018-6.26 5.018c-3.439 0-6.24-2.791-6.24-6.262c0-3.473 2.82-6.264 6.24-6.283v1.967l4.42-2.588L7.5 0v1.906c0 0.041 0 0.041 0 0.041C3.381 1.947 0 5.299 0 9.473S3.381 17 7.5 17c3.74 0 6.939-2.672 7.5-6.283h-1.24V10.719z\",color:\"#000\"},remove_black:{width:25,height:25,path:\"M12.5 0C5.607 0 0 5.607 0 12.5S5.607 25 12.5 25S25 19.393 25 12.5S19.393 0 12.5 0z M18.75 13.068H6.25v-1.137h12.5V13.068z\",color:\"#000\"},remove_black_light:{width:25,height:25,path:\"M12.5 0C5.604 0 0 5.604 0 12.5C0 19.393 5.604 25 12.5 25C19.393 25 25 19.393 25 12.5C25 5.604 19.393 0 12.5 0zM12.5 1.136c6.279 0 11.369 5.08 11.369 11.364c0 6.279-5.09 11.369-11.369 11.369c-6.284 0-11.364-5.09-11.364-11.369C1.136 6.216 6.216 1.136 12.5 1.136z M6.25 11.935v1.131h12.5v-1.131H6.25z\",color:\"#000\"},remove_red:{width:25,height:25,path:\"M12.5 0C5.607 0 0 5.607 0 12.5C0 19.393 5.607 25 12.5 25C19.393 25 25 19.393 25 12.5C25 5.607 19.393 0 12.5 0zM18.75 13.068H6.25v-1.137h12.5V13.068z\",color:\"#FB3D38\"},search:{width:16,height:16,path:\"M7.186 2C4.318 2 2 4.265 2 7.067c0 2.8 2.318 5.067 5.186 5.067c1.022 0 1.971-0.295 2.772-0.794L13.705 15L15 13.734l-3.695-3.604c0.662-0.853 1.066-1.909 1.066-3.064C12.371 4.265 10.051 2 7.186 2z M7.186 3.192c2.197 0 3.966 1.728 3.966 3.875c0 2.146-1.77 3.875-3.966 3.875c-2.197 0-3.966-1.729-3.966-3.875C3.22 4.92 4.988 3.192 7.186 3.192z\",color:\"#AEAEAE\"},search_big:{width:24,height:24,path:\"M9.925 2C5.553 2 2 5.471 2 9.746c0 4.271 3.553 7.746 7.925 7.746c1.729 0 3.33-0.549 4.63-1.471L20.688 22L22 20.717l-6.063-5.933c1.188-1.354 1.912-3.117 1.912-5.039C17.85 5.471 14.295 2 9.925 2z M9.925 2.912c3.867 0 6.987 3.054 6.987 6.834c0 3.779-3.12 6.832-6.987 6.832c-3.866 0-6.991-3.053-6.991-6.832C2.934 5.966 6.059 2.912 9.925 2.912z\",color:\"#000\"},sound:{width:24,height:24,path:\"M20.922 22c-0.057 0-0.082 0-0.139 0l-0.439-0.188c0 0 0 0 0-0.027c-0.139-0.025-0.221-0.08-0.275-0.16c-0.027-0.08-0.027-0.188 0.027-0.32c0.027-0.027 0.605-1.07 1.184-2.705c0.549-1.553 1.209-3.936 1.209-6.533c0-2.623-0.66-4.979-1.209-6.506c-0.578-1.633-1.154-2.678-1.184-2.73c-0.109-0.295-0.055-0.4 0.221-0.563l0.467-0.213C20.84 2.027 20.922 2 20.977 2c0.191 0 0.33 0.135 0.467 0.428c0.027 0.055 0.055 0.107 0.111 0.215c0.273 0.508 0.879 1.686 1.428 3.346C23.672 8.076 24 10.166 24 12.199c0 2.518-0.658 4.873-1.209 6.428c-0.604 1.686-1.209 2.783-1.236 2.783l-0.027 0.055C21.389 21.76 21.279 22 20.922 22L20.922 22L20.922 22z M5.141 15.359H5.113H0V8.721h5.113h0.027l6.816-4.633v15.93L5.141 15.359L5.141 15.359z M18.172 18.68c-0.055 0-0.109 0-0.164 0l-0.439-0.215l0 0c-0.139-0.025-0.221-0.08-0.248-0.16c-0.055-0.08-0.055-0.188 0-0.322c0.027-0.025 0.439-0.695 0.824-1.713c0.385-0.99 0.824-2.518 0.824-4.203c0-1.74-0.439-3.24-0.824-4.205c-0.385-1.016-0.797-1.66-0.824-1.686c-0.109-0.295-0.055-0.402 0.248-0.563l0.412-0.215c0.082-0.027 0.137-0.053 0.219-0.053c0.166 0 0.33 0.133 0.469 0.428c0.027 0.08 0.082 0.16 0.137 0.295c0.469 0.83 1.678 3.078 1.678 6.131c0 1.688-0.439 3.213-0.824 4.176c-0.439 1.045-0.854 1.715-0.854 1.715l0 0l-0.027 0.053C18.611 18.439 18.502 18.68 18.172 18.68L18.172 18.68L18.172 18.68z M15.863 15.279c-0.055 0-0.109 0-0.166 0l-0.412-0.188c0-0.027 0-0.027 0-0.027c-0.137-0.025-0.219-0.08-0.246-0.16c-0.057-0.08-0.057-0.188 0-0.32c0 0 0.551-1.152 0.551-2.518c0-1.418-0.551-2.436-0.578-2.49c-0.109-0.295-0.057-0.428 0.248-0.563l0.412-0.213c0.082-0.027 0.137-0.055 0.219-0.055c0.166 0 0.33 0.135 0.469 0.428c0.027 0.082 0.082 0.162 0.109 0.242c0.273 0.508 0.633 1.203 0.633 2.783c0 0.883-0.578 2.436-0.605 2.49l-0.025 0.053C16.303 15.039 16.193 15.279 15.863 15.279L15.863 15.279L15.863 15.279z\",color:\"#000\"},stop1:{width:25,height:25,path:\"M12.5 0C5.601 0 0 5.601 0 12.5C0 19.4 5.601 25 12.5 25C19.4 25 25 19.4 25 12.5C25 5.601 19.4 0 12.5 0zM12.5 23.501c-6.065 0-10.999-4.937-10.999-11.001c0-6.065 4.934-10.999 10.999-10.999c6.064 0 11.001 4.934 11.001 10.999C23.501 18.564 18.564 23.501 12.5 23.501z M8.75 7.499h2.5v10.002h-2.5V7.499z M13.749 7.499h2.503v10.002h-2.503V7.499z\",color:\"#1B7DFA\"},stop2:{width:25,height:25,path:\"M12.5 0C5.596 0 0 5.596 0 12.5C0 19.404 5.596 25 12.5 25C19.404 25 25 19.404 25 12.5C25 5.596 19.404 0 12.5 0zM12.5 24C6.148 24 1 18.852 1 12.5C1 6.148 6.148 1 12.5 1C18.852 1 24 6.148 24 12.5C24 18.852 18.852 24 12.5 24z M7.813 7.813h9.375v9.375H7.813V7.813z\",color:\"#000\"},stop3:{width:25,height:25,path:\"M12.5 0C5.596 0 0 5.596 0 12.5S5.596 25 12.5 25S25 19.404 25 12.5S19.404 0 12.5 0z M17.188 17.188H7.813V7.813h9.375V17.188z\",color:\"#000\"},trash:{width:24,height:24,path:\"M18.716 3.369l-0.945 18.817c0 0.984-0.648 1.814-1.447 1.814H7.675c-0.796 0-1.447-0.83-1.447-1.852L5.283 3.367H4V2.369h1.324h3.099V1.854C8.423 0.832 9.074 0 9.871 0h4.257c0.799 0 1.447 0.832 1.447 1.854v0.516h3.102h1.322v0.998h-1.283V3.369z M14.876 1.855C14.876 1.385 14.538 1 14.128 1H9.871c-0.414 0-0.75 0.385-0.75 0.855v0.516h5.753V1.855H14.876z M15.573 3.369h-7.15H5.992l0.934 18.745c0 0.508 0.335 0.893 0.75 0.893h8.646c0.414 0 0.748-0.385 0.748-0.855l0.945-18.782H15.573L15.573 3.369z M14.003 20.303L14.788 5.96l0.701 0.078l-0.791 14.342L14.003 20.303z M11.65 5.998h0.699v14.375H11.65V5.998L11.65 5.998z M8.511 6.037l0.697-0.078l0.787 14.344L9.3 20.381L8.511 6.037z\",color:\"#000\"},wifi:{width:24,height:24,path:\"M0 8.977l2.182 2.186c5.422-5.433 14.214-5.433 19.636 0L24 8.977C17.377 2.342 6.633 2.342 0 8.977z M8.728 17.721L12 21l3.273-3.279C13.473 15.906 10.538 15.906 8.728 17.721z M4.363 13.35l2.183 2.186c3.01-3.018 7.897-3.018 10.909 0l2.182-2.186C15.426 9.129 8.586 9.129 4.363 13.35z\",color:\"#000\"}},ico:{box:\"M3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15Z\",link:{path:\"M8.851 11.98c-0.213 0-0.426-0.081-0.588-0.244c-1.522-1.522-1.522-3.999 0-5.521l3.073-3.072 C12.073 2.406 13.054 2 14.096 2c1.043 0 2.024 0.406 2.762 1.144c1.522 1.521 1.522 3.999 0 5.521l-1.405 1.404 c-0.325 0.325-0.852 0.325-1.177 0c-0.325-0.325-0.325-0.852 0-1.177l1.405-1.404c0.874-0.873 0.874-2.294 0-3.167 c-0.424-0.424-0.986-0.656-1.584-0.656c-0.599 0-1.161 0.232-1.584 0.656L9.44 7.392c-0.874 0.874-0.874 2.295 0 3.168 c0.325 0.325 0.325 0.852 0 1.177C9.277 11.898 9.064 11.979 8.851 11.98L8.851 11.98z M5.902 18c-1.042 0-2.023-0.406-2.761-1.144 c-1.522-1.522-1.522-3.999 0-5.521l1.404-1.404c0.325-0.325 0.852-0.325 1.177 0c0.325 0.324 0.325 0.852 0 1.177l-1.404 1.403 c-0.874 0.874-0.874 2.295 0 3.168c0.423 0.423 0.986 0.656 1.584 0.656c0.599 0 1.162-0.233 1.584-0.656l3.073-3.072 c0.874-0.873 0.874-2.294 0-3.167c-0.325-0.325-0.325-0.852 0-1.177c0.325-0.325 0.852-0.325 1.177 0 c1.522 1.522 1.522 3.999 0 5.521l-3.073 3.072C7.926 17.594 6.945 18 5.902 18L5.902 18z\",x:2,y:2,width:20,height:20,boxW:20,boxH:20,color:\"rgb(46, 181, 229)\"},note:{path:\"M14.247 8.857H5.753c-0.335 0-0.606-0.237-0.606-0.571c0-0.335 0.271-0.572 0.606-0.572h8.494 c0.336 0 0.606 0.237 0.606 0.572C14.854 8.62 14.583 8.857 14.247 8.857z M13.033 11.143h-7.28c-0.335 0-0.606-0.236-0.606-0.571 S5.418 10 5.753 10h7.28c0.336 0 0.606 0.236 0.606 0.571S13.369 11.143 13.033 11.143z M14.854 2H5.146C3.475 2 2 3.475 2 5.146 v9.707C2 16.525 3.475 18 5.146 18h8.745L18 13.892V5.146C18 3.475 16.525 2 14.854 2z M3.143 14.854V5.146 c0-1.004 1-2.004 2.004-2.004h9.707c1.004 0 2.004 1 2.004 2.004v8.219H12.8v3.492H5.146C4.143 16.857 3.143 15.857 3.143 14.854z\",x:2,y:2,width:20,height:20,boxW:20,boxH:20,color:\"#EAC44B\"},priority:{path:\"M3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15Z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#38628C\"},completion:{x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#1464D2\",path:[\"M15 4A11 11 0 0 0 4 15A11 11 0 1 0 15 4ZM3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15Z\",\"M15 15V4A11 11 0 0 1 22.78 7.22ZM15 4A11 11 0 0 0 4 15A11 11 0 1 0 15 4ZM3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15Z\",\"M15 15V4A11 11 0 0 1 26 15ZM15 4A11 11 0 0 0 4 15A11 11 0 1 0 15 4ZM3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15Z\",\"M15 15V4A11 11 0 0 1 22.78 22.78ZM15 4A11 11 0 0 0 4 15A11 11 0 1 0 15 4ZM3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15Z\",\"M15 15V4A11 11 0 0 1 15 26ZM15 4A11 11 0 0 0 4 15A11 11 0 1 0 15 4ZM3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15Z\",\"M15 15V4A11 11 0 1 1 7.22 22.78ZM15 4A11 11 0 0 0 4 15A11 11 0 1 0 15 4ZM3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15Z\",\"M15 15V4A11 11 0 1 1 4 15ZM15 4A11 11 0 0 0 4 15A11 11 0 1 0 15 4ZM3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15Z\",\"M15 15V4A11 11 0 1 1 7.22 7.22ZM15 4A11 11 0 0 0 4 15A11 11 0 1 0 15 4ZM3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15Z\",\"M3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15ZM8 15L6 17L12 23L24 11L22 9L12 19Z\"]},face:{x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#FFE201\",path:[\"M14.913 3C8.335 3 3 8.332 3 14.912s5.334 11.912 11.913 11.912 c6.58 0 11.914-5.332 11.914-11.912C26.826 8.332 21.492 3 14.913 3z M19.262 10.244c1.25 0 2.264 1.014 2.264 2.264 c0 1.249-1.014 2.262-2.264 2.262c-1.248 0-2.263-1.013-2.263-2.262C16.999 11.257 18.014 10.244 19.262 10.244z M10.518 10.244 c1.25 0 2.262 1.014 2.262 2.264c0 1.249-1.012 2.262-2.262 2.262s-2.263-1.013-2.263-2.262 C8.254 11.257 9.268 10.244 10.518 10.244z M21.339 19.055c-1.458 2.117-3.86 3.384-6.426 3.384c-2.567 0-4.972-1.267-6.429-3.386 c-0.327-0.475-0.207-1.123 0.27-1.45c0.475-0.327 1.123-0.206 1.45 0.269c1.067 1.554 2.829 2.48 4.71 2.48 c1.878 0 3.639-0.928 4.707-2.48c0.331-0.475 0.979-0.596 1.449-0.269C21.546 17.93 21.667 18.578 21.339 19.055z\",\"M15.035 3.102c1.665 0 3.224 0.314 4.676 0.945c1.454 0.633 2.725 1.486 3.813 2.566c1.088 1.078 1.947 2.35 2.579 3.813 c0.63 1.463 0.944 3.016 0.944 4.664c0 1.664-0.314 3.223-0.944 4.674c-0.632 1.455-1.491 2.725-2.579 3.814 c-1.089 1.088-2.358 1.945-3.813 2.578c-1.452 0.631-3.012 0.945-4.676 0.945c-1.646 0-3.2-0.314-4.664-0.945 c-1.462-0.633-2.732-1.49-3.811-2.578c-1.08-1.09-1.935-2.359-2.566-3.814c-0.63-1.451-0.944-3.01-0.944-4.674 c0-1.648 0.314-3.201 0.944-4.664c0.632-1.463 1.486-2.734 2.566-3.813c1.078-1.08 2.349-1.936 3.811-2.566 C11.835 3.418 13.39 3.102 15.035 3.102z M7.987 8.752c0.238 0.77 0.494 1.473 0.769 2.113c0.237 0.549 0.503 1.082 0.795 1.604 c0.293 0.521 0.595 0.854 0.906 1c0.311 0.166 0.639 0.178 0.986 0.043c0.348-0.137 0.667-0.324 0.96-0.563 c0.329-0.275 0.667-0.623 1.015-1.043L7.987 8.752z M21.865 18.518c0.019-0.037 0.027-0.102 0.027-0.191 c0-0.092-0.015-0.191-0.041-0.303c-0.027-0.109-0.082-0.211-0.164-0.301c-0.083-0.092-0.196-0.166-0.342-0.221 c-0.422 0.512-0.943 0.969-1.564 1.373c-0.531 0.346-1.202 0.66-2.017 0.943c-0.813 0.285-1.77 0.426-2.865 0.426 c-1.079 0-2.008-0.141-2.785-0.426c-0.776-0.283-1.431-0.6-1.961-0.943c-0.604-0.404-1.115-0.861-1.536-1.373 c-0.146 0.037-0.257 0.1-0.33 0.191c-0.074 0.092-0.127 0.191-0.164 0.301s-0.055 0.211-0.055 0.303s0.009 0.166 0.027 0.221 c0.019 0.02 0.027 0.045 0.027 0.082C8.286 19.092 8.579 19.555 9 19.984c0.421 0.432 0.933 0.805 1.535 1.125 c0.604 0.318 1.284 0.566 2.043 0.74c0.76 0.174 1.56 0.26 2.401 0.26c1.664 0 3.098-0.301 4.305-0.904 c1.208-0.604 2.029-1.398 2.47-2.387c0-0.037 0.01-0.072 0.026-0.107C21.8 18.672 21.827 18.607 21.865 18.518L21.865 18.518z M19.589 13.469c0.311-0.146 0.611-0.479 0.904-1s0.559-1.055 0.794-1.604c0.275-0.641 0.53-1.346 0.77-2.113l-5.432 3.156 c0.35 0.42 0.687 0.768 1.016 1.043c0.293 0.236 0.611 0.424 0.96 0.561C18.948 13.646 19.277 13.635 19.589 13.469z\",\"M15.014 3c1.666 0 3.223 0.314 4.676 0.945c1.455 0.633 2.721 1.486 3.801 2.564c1.078 1.082 1.932 2.352 2.564 3.813 C26.686 11.787 27 13.338 27 14.984c0 1.664-0.314 3.227-0.945 4.678c-0.633 1.453-1.486 2.727-2.564 3.813 c-1.08 1.088-2.346 1.947-3.801 2.578c-1.453 0.633-3.012 0.945-4.676 0.945s-3.225-0.313-4.678-0.945 c-1.453-0.631-2.725-1.49-3.813-2.578c-1.086-1.088-1.947-2.359-2.578-3.813C3.314 18.211 3 16.648 3 14.984 c0-1.646 0.314-3.197 0.945-4.662c0.631-1.463 1.49-2.73 2.578-3.813c1.088-1.078 2.359-1.934 3.813-2.564S13.35 3 15.014 3z M8.621 11.256c0 0.641 0.18 1.18 0.535 1.619c0.357 0.436 0.793 0.656 1.303 0.656c0.529 0 0.975-0.221 1.33-0.656 c0.357-0.439 0.535-0.98 0.535-1.619c0-0.621-0.178-1.152-0.535-1.592c-0.354-0.439-0.799-0.658-1.33-0.658 c-0.51 0-0.945 0.219-1.303 0.658C8.803 10.104 8.621 10.635 8.621 11.256L8.621 11.256z M18.389 20.141h-6.859v1.703h6.859V20.141z M19.348 13.477c0.527 0 0.98-0.221 1.355-0.656c0.375-0.439 0.564-0.971 0.564-1.592c0-0.641-0.189-1.18-0.564-1.619 c-0.375-0.438-0.828-0.658-1.355-0.658c-0.531 0-0.979 0.221-1.346 0.658c-0.363 0.439-0.549 0.979-0.549 1.619 c0 0.621 0.186 1.152 0.549 1.592C18.369 13.256 18.816 13.477 19.348 13.477z\",\"M15 3C8.373 3 3 8.373 3 15s5.373 12 12 12s12-5.373 12-12S21.627 3 15 3z M8.549 12.538l0.925-0.604l-0.922-0.605 c-0.483-0.319-0.62-0.97-0.3-1.456c0.32-0.483 0.973-0.619 1.457-0.301l2.255 1.484c0.296 0.193 0.475 0.525 0.475 0.879 c0 0.352-0.181 0.683-0.477 0.877l-2.26 1.481c-0.179 0.117-0.379 0.171-0.576 0.171c-0.343 0-0.677-0.164-0.881-0.473 C7.928 13.508 8.065 12.857 8.549 12.538z M21.205 21.344c-0.48 0.329-1.135 0.207-1.463-0.271c-1.075-1.566-2.85-2.5-4.742-2.5 s-3.665 0.934-4.743 2.5c-0.206 0.297-0.534 0.455-0.866 0.455c-0.208 0-0.415-0.06-0.597-0.186 c-0.479-0.328-0.598-0.982-0.27-1.461c1.469-2.135 3.891-3.41 6.475-3.41s5.007 1.275 6.476 3.41 C21.803 20.361 21.686 21.018 21.205 21.344z M21.447 12.539c0.484 0.32 0.619 0.97 0.301 1.456 c-0.201 0.308-0.538 0.472-0.878 0.472c-0.198 0-0.399-0.055-0.579-0.172l-2.253-1.48c-0.296-0.196-0.476-0.526-0.476-0.878 c0-0.354 0.179-0.687 0.476-0.878l2.261-1.485c0.485-0.317 1.137-0.18 1.456 0.302c0.317 0.487 0.183 1.138-0.303 1.457 l-0.923 0.606L21.447 12.539z\",\"M14.986 3c1.664 0 3.223 0.315 4.677 0.947c1.453 0.632 2.723 1.486 3.814 2.565c1.087 1.079 1.947 2.349 2.578 3.812 C26.688 11.787 27 13.339 27 14.986c0 1.664-0.312 3.223-0.944 4.677c-0.631 1.453-1.491 2.723-2.578 3.814 c-1.092 1.087-2.361 1.947-3.814 2.578C18.209 26.688 16.65 27 14.986 27c-1.647 0-3.2-0.312-4.663-0.944 c-1.463-0.631-2.732-1.491-3.812-2.578c-1.078-1.092-1.934-2.361-2.565-3.814C3.316 18.209 3 16.65 3 14.986 c0-1.647 0.316-3.2 0.947-4.663C4.579 8.86 5.434 7.586 6.513 6.512c1.079-1.078 2.349-1.933 3.812-2.565 C11.787 3.315 13.34 3 14.986 3z M19.238 8.074c-0.621 0-1.146 0.256-1.578 0.767c-0.43 0.513-0.645 1.134-0.645 1.868 c0 0.75 0.215 1.381 0.645 1.891c0.431 0.512 0.957 0.769 1.578 0.769c0.622 0 1.145-0.257 1.577-0.769 c0.43-0.51 0.644-1.142 0.644-1.891c0-0.733-0.214-1.354-0.644-1.868C20.387 8.331 19.86 8.074 19.238 8.074z M8.075 13.257h5.156 v-1.701H8.075V13.257z M21.788 18.414c0.02-0.036 0.029-0.099 0.029-0.191c0-0.094-0.013-0.191-0.041-0.303 c-0.027-0.108-0.083-0.21-0.165-0.303c-0.081-0.09-0.193-0.164-0.342-0.218c-0.421 0.51-0.94 0.968-1.562 1.372 c-0.532 0.345-1.204 0.66-2.021 0.942c-0.813 0.287-1.77 0.43-2.865 0.43c-1.099 0-2.03-0.141-2.799-0.424 c-0.766-0.286-1.417-0.599-1.947-0.946c-0.605-0.402-1.115-0.863-1.536-1.372c-0.148 0.036-0.257 0.099-0.329 0.192 c-0.076 0.092-0.129 0.193-0.165 0.302c-0.036 0.112-0.056 0.21-0.056 0.304c0 0.092 0.01 0.164 0.027 0.22 c0.02 0.017 0.023 0.029 0.013 0.039c-0.007 0.01-0.003 0.024 0.016 0.042c0.165 0.493 0.457 0.954 0.875 1.385 c0.421 0.427 0.934 0.804 1.539 1.125c0.603 0.318 1.283 0.566 2.043 0.74c0.76 0.174 1.559 0.26 2.4 0.26 c1.664 0 3.098-0.304 4.305-0.905c1.206-0.604 2.032-1.396 2.469-2.387c0-0.036 0.011-0.072 0.027-0.108 C21.725 18.573 21.751 18.506 21.788 18.414L21.788 18.414z\",\"M15 3C8.374 3 3 8.373 3 15c0 6.629 5.374 12 12 12c6.626 0 12-5.371 12-12C27 8.373 21.627 3 15 3z M19.43 11.003 c0.949 0 1.719 0.771 1.719 1.719c0 0.947-0.77 1.719-1.719 1.719s-1.719-0.77-1.719-1.719S18.48 11.003 19.43 11.003z  M10.573 11.003c0.949 0 1.719 0.771 1.719 1.719c0 0.947-0.77 1.719-1.719 1.719s-1.72-0.77-1.72-1.719S9.624 11.003 10.573 11.003 z M15 23.701c-3.483 0-6.308-1.412-6.308-3.152c0-1.742 2.824-3.154 6.308-3.154c3.482 0 6.306 1.412 6.306 3.154 C21.307 22.289 18.482 23.701 15 23.701z\",\"M15 3C8.373 3 3 8.373 3 15c0 6.628 5.373 12 12 12s12-5.372 12-12C27 8.373 21.627 3 15 3z M21.475 19.172 c-1.47 2.135-3.891 3.409-6.475 3.409c-2.585 0-5.006-1.274-6.475-3.409c-0.33-0.479-0.208-1.133 0.27-1.462 c0.479-0.33 1.132-0.208 1.461 0.271c1.077 1.564 2.849 2.498 4.744 2.498c1.893 0 3.665-0.934 4.742-2.498 c0.33-0.478 0.982-0.599 1.462-0.27S21.803 18.693 21.475 19.172z M19.797 15.467c-1.709 0-3.148-1.385-3.623-3.289h-2.35 c-0.472 1.903-1.915 3.289-3.621 3.289c-2.093 0-3.787-2.078-3.787-4.642h5.217h2.356h2.019h2.188h5.388 C23.583 13.389 21.889 15.467 19.797 15.467z\"]},flag:{path:\"M3 3.045h4.363v24H3V3.045zM22.092 15c2.113 0 3.949-0.402 4.908-1V3.654c-0.958 0.597-2.795 1-4.908 1c-2.115 0-3.953-0.403-4.911-1V14 C18.14 14.598 19.979 15 22.092 15zM17.182 3.658C16.076 3.255 14.454 3 12.65 3c-2.274 0-4.256 0.403-5.287 1v10.346c1.03-0.597 3.011-1 5.287-1 c1.804 0 3.426 0.256 4.532 0.657V3.658z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:[\"#3D72A7\",\"#488F55\",\"#EA9A4B\",\"#A7443B\",\"#804E67\",\"#EDA600\",\"#41BEFD\"]},arrow:{x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#5A9800\",path:[\"M15 3L3 14.613h7.2V27h9.6V14.613H27L15 3z\",\"M15 27l12-11.613h-7.2V3h-9.6v12.387H3L15 27z\",\"M3 15l11.614 12v-7.2H27v-9.6H14.614V3L3 15z\",\"M27 15L15.387 3v7.2H3v9.6h12.387V27L27 15z\",\"M3 15l5.807 12v-7.2H15v-9.6H8.807V3L3 15zM27 15L21.193 3v7.2H15v9.6h6.193V27L27 15z\",\"M15 3L3 8.807h7.2V15h9.6V8.807h7.202L15 3zM15 27l12-5.807h-7.199V15h-9.6v6.193H3L15 27z\"]},ico38:{path:\"M3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15ZM8 13L5 16L12 23L24 11L21 8L12 17L8 13Z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#189630\"},ico39:{path:\"M3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15ZM8.64 10.76L12.88 15L8.64 19.24L10.76 21.36L15 17.12L19.24 21.37L21.36 19.24L17.12 15L21.37 10.76L19.24 8.64L15 12.88L10.76 8.64Z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#BD1909\"},ico40:{path:\"M11 12h3.2v3H11V12z M15.8 12H19v3h-3.2V12z M20.6 12h3.2v3h-3.2V12z M6.2 21h3.2v3H6.2V21z M11 21h3.2v3H11V21z M15.8 21 H19v3h-3.2V21z M11 16.5h3.2v3H11V16.5z M15.8 16.5H19v3h-3.2V16.5z M20.6 16.5h3.2v3h-3.2V16.5z M6.2 16.5h3.2v3H6.2V16.5z M23.8 3 v1.5h-3.2V3H9.4v1.5H6.2V3H3v24h24V3H23.8z M25.4 25.5H4.6V9h20.8V25.5z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#BD1909\"},ico41:{path:\"M19.16 15.402c0 0.621-0.504 1.125-1.125 1.125h-3.016c-0.621 0-1.125-0.504-1.125-1.125v-5.101 c0-0.622 0.504-1.125 1.125-1.125c0.622 0 1.125 0.503 1.125 1.125v3.976h1.891C18.656 14.277 19.16 14.78 19.16 15.402z M27 15 c0 6.617-5.383 12-12 12C8.383 27 3 21.617 3 15C3 8.384 8.383 3 15 3C21.617 3 27 8.384 27 15z M24.671 16.188h-1.858 c-0.621 0-1.125-0.504-1.125-1.125c0-0.622 0.504-1.125 1.125-1.125h1.877c-0.49-4.508-4.066-8.097-8.564-8.618v1.93 c0 0.622-0.504 1.125-1.125 1.125s-1.125-0.503-1.125-1.125V5.32c-4.499 0.52-8.074 4.109-8.563 8.618h1.876 c0.621 0 1.125 0.503 1.125 1.125c0 0.621-0.504 1.125-1.125 1.125H5.329c0.545 4.447 4.088 7.977 8.546 8.492v-1.805 c0-0.622 0.504-1.125 1.125-1.125s1.125 0.503 1.125 1.125v1.805C20.582 24.166 24.127 20.635 24.671 16.188z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#00A9FF\"},ico42:{path:\"M26.512 22.418L17.409 4.805C16.817 3.658 15.937 3 14.995 3s-1.821 0.658-2.415 1.806L3.489 22.417 c-0.589 1.14-0.648 2.295-0.164 3.189C3.811 26.498 4.781 27 5.989 27h18.021c1.208 0 2.18-0.502 2.664-1.394 C27.16 24.712 27.1 23.558 26.512 22.418z M14.146 9.438c0-0.509 0.383-0.924 0.855-0.924c0.472 0 0.854 0.415 0.854 0.924v8.32 c0 0.51-0.383 0.924-0.854 0.924c-0.473 0-0.855-0.414-0.855-0.924V9.438z M15.001 24.231c-0.71 0-1.283-0.621-1.283-1.388 c0-0.765 0.573-1.386 1.283-1.386c0.709 0 1.282 0.621 1.282 1.386C16.283 23.61 15.71 24.231 15.001 24.231z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#FEBC0E\"},ico43:{path:\"M15 4A11 11 0 0 0 4 15A11 11 0 1 0 15 4ZM3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15ZM13.711 21.555v-8.898h2.542v8.898H13.711 L13.711 21.555z M13.513 9.79c0-0.4 0.133-0.72 0.413-0.973c0.28-0.247 0.634-0.374 1.067-0.374c0.447 0 0.807 0.126 1.08 0.387 c0.273 0.253 0.414 0.573 0.414 0.96c0 0.393-0.14 0.713-0.42 0.973c-0.28 0.26-0.641 0.394-1.074 0.394 c-0.426 0-0.78-0.133-1.06-0.394C13.654 10.496 13.513 10.177 13.513 9.79L13.513 9.79z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#00A9FF\"},ico44:{path:\"M15 4A11 11 0 0 0 4 15A11 11 0 1 0 15 4ZM3 15A12 12 0 0 1 15 3A12 12 0 1 1 3 15ZM15.669 18.877c-0.513 0-1.011 0-1.524 0 c0-0.305-0.016-0.604 0.003-0.898c0.04-0.6 0.178-1.174 0.491-1.694c0.244-0.406 0.553-0.757 0.898-1.078 c0.428-0.4 0.859-0.794 1.279-1.203c0.248-0.241 0.467-0.509 0.58-0.843c0.273-0.8 0.1-1.514-0.434-2.15 c-0.884-1.056-2.361-1.092-3.267-0.564c-0.57 0.333-0.913 0.843-1.112 1.457c-0.089 0.275-0.151 0.559-0.231 0.86 c-0.526-0.063-1.064-0.126-1.623-0.192c0.021-0.14 0.036-0.271 0.061-0.399c0.139-0.725 0.391-1.4 0.863-1.979 c0.576-0.706 1.327-1.117 2.21-1.286c0.923-0.177 1.845-0.158 2.742 0.133c1.149 0.373 2 1.102 2.386 2.263 c0.37 1.115 0.188 2.168-0.541 3.108c-0.464 0.597-1.039 1.082-1.581 1.601c-0.238 0.229-0.479 0.459-0.686 0.715 c-0.308 0.381-0.425 0.84-0.461 1.32C15.701 18.318 15.688 18.59 15.669 18.877z M14.046 22.1c0-0.602 0-1.197 0-1.804 c0.603 0 1.199 0 1.806 0c0 0.601 0 1.197 0 1.804C15.252 22.1 14.652 22.1 14.046 22.1z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#00A9FF\"},ico45:{path:\"M15 3L7.583 27L27 12.167L3 12.167L22.416 27\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#F18E03\"},ico46:{path:\"M15.088 7.365c-3.91 0-7.089 3.05-7.089 6.801c0 2.611 1.547 4.974 3.981 6.114v2.94c0 0.825 0.515 1.539 1.26 1.855v0.632 c0 0.714 0.602 1.292 1.346 1.292h1.031c0.745 0 1.346-0.577 1.346-1.292v-0.632c0.745-0.316 1.26-1.03 1.26-1.855v-2.94 c2.42-1.14 3.981-3.503 3.981-6.114C22.177 10.415 18.998 7.365 15.088 7.365z M15.604 26.038h-1.031 c-0.186 0-0.344-0.151-0.344-0.33v-0.454h1.719v0.454C15.948 25.887 15.79 26.038 15.604 26.038z M16.076 24.293H14.1 c-0.616 0-1.117-0.481-1.117-1.072v-1.154h4.224v1.154C17.193 23.812 16.692 24.293 16.076 24.293z M15.088 17.285l-1.074-1.882 h2.134L15.088 17.285z M17.494 19.525l-0.301 0.124v1.457h-1.604v-2.831c0.086-0.055 0.144-0.137 0.201-0.22l1.46-2.583 c0.129-0.206 0.115-0.467-0.014-0.673c-0.143-0.22-0.401-0.357-0.688-0.357h-2.936c-0.287 0-0.544 0.137-0.688 0.357 c-0.129 0.206-0.143 0.453-0.014 0.673l1.475 2.597c0.057 0.083 0.114 0.165 0.2 0.22v2.817h-1.604v-1.457l-0.3-0.124 c-2.234-0.921-3.667-3.037-3.667-5.359c0-3.215 2.735-5.839 6.086-5.839s6.086 2.624 6.086 5.839 C21.174 16.489 19.728 18.591 17.494 19.525z M3 12.807h2.659v0.985H3V12.807z M8.344 8.112l-1.88-1.804L7.19 5.611l1.88 1.804 L8.344 8.112z M20.958 7.415l1.88-1.804l0.726 0.697l-1.88 1.804L20.958 7.415z M24.342 12.807H27v0.985h-2.659V12.807z M14.487 3 h1.026v2.551h-1.026V3L14.487 3z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#F6B031\"},ico47:{path:\"M27.001 21.563c0 0-0.075-0.805-1.276-1.539c-0.582-0.359-1.48-1.276-2.76-1.593c0.327-0.479 0.557-1.234 0.811-2.126 c0.147-0.518 0.113-0.957 0.113-1.584c0-0.466 0.059-1.209-0.023-1.618c-0.285-1.381-0.998-1.763-1.835-1.763 c-0.833 0-1.549 0.383-1.83 1.766c-0.083 0.409-0.021 1.152-0.021 1.615c0 0.627-0.024 1.072 0.122 1.588 c0.21 0.734 0.498 1.371 0.743 1.84c1.416 1.172 1.635 2.477 1.635 2.891v0.004v0.01v1.875V23h4.322V21.563z M7.327 21.043v-0.004 c0-0.41 0.074-1.697 1.461-2.863c0.254-0.477 0.432-1.122 0.645-1.871c0.148-0.518 0.107-0.957 0.107-1.584 c0-0.466 0.057-1.209-0.026-1.618c-0.282-1.381-0.999-1.763-1.834-1.763c-0.837 0-1.552 0.383-1.833 1.766 c-0.083 0.408-0.02 1.151-0.02 1.614c0 0.628-0.025 1.071 0.124 1.589c0.255 0.898 0.499 1.65 0.825 2.129 c-1.268 0.32-2.059 1.229-2.637 1.586c-1.197 0.734-1.135 1.538-1.135 1.538v1.368h4.326v-1.877L7.327 21.043L7.327 21.043z M19.751 18.93c-0.8-0.484-1.951-1.748-3.709-2.18c0.45-0.662 0.807-1.698 1.156-2.925c0.204-0.71 0.179-1.314 0.179-2.18 c0-0.637 0.088-1.658-0.023-2.22C16.965 7.524 15.986 7 14.84 7c-1.148 0-2.128 0.527-2.515 2.429 c-0.114 0.56-0.026 1.583-0.026 2.216c0 0.867-0.034 1.475 0.169 2.187c0.353 1.233 0.688 2.266 1.136 2.926 c-1.745 0.438-2.873 1.69-3.667 2.178c-1.645 1.01-1.605 2.118-1.605 2.118v1.876h13.007v-1.876 C21.339 21.053 21.399 19.945 19.751 18.93z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#1BBFFF\"},ico48:{path:\"M17.531 5.965c4.755 0.897 8.324 5.094 8.324 10.044c0 5.64-4.588 10.225-10.225 10.225c-4.953 0-9.15-3.568-10.045-8.323 H16.39h1.142v-1.144V5.965 M16.387 4.671V16.77H4.291c0.392 5.924 5.316 10.609 11.341 10.609C21.911 27.379 27 22.291 27 16.01 C26.999 9.987 22.313 5.061 16.387 4.671L16.387 4.671z M15.126 3C8.429 3 3 8.428 3 15.125h12.126V3z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#F79A3D\"},ico49:{path:\"M22.215 11.572v-1.43C22.215 6.196 19.017 3 15.072 3C11.128 3 7.93 6.196 7.93 10.143v1.43H6.5V27h17.145V11.572H22.215z M15.787 19.293v3.074h-1.43v-3.074c-0.418-0.252-0.715-0.689-0.715-1.215c0-0.787 0.642-1.428 1.43-1.428 c0.785 0 1.428 0.641 1.428 1.428C16.5 18.604 16.204 19.041 15.787 19.293z M19.357 11.572h-8.572v-1.43 c0-2.367 1.919-4.286 4.287-4.286c2.364 0 4.284 1.918 4.284 4.286L19.357 11.572L19.357 11.572z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#FCA320\"},ico50:{path:\"M15.787 19.293v3.074h-1.43v-3.074c-0.418-0.252-0.715-0.689-0.715-1.215c0-0.787 0.642-1.428 1.43-1.428 c0.786 0 1.428 0.641 1.428 1.428C16.5 18.604 16.204 19.041 15.787 19.293z M22.215 8.571c0-3.947-3.197-7.143-7.143-7.143 S7.929 4.625 7.929 8.571v3h2.856v-3c0-2.367 1.918-4.286 4.287-4.286c2.363 0 4.283 1.918 4.283 4.286H22.215z M6.5 11.573V27 h17.145V11.571L6.5 11.573z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#FCA320\"},ico51:{path:\"M4.411 5.957h21.187c0.376 0 0.742 0.081 1.081 0.235L15.004 19.811L3.33 6.192C3.667 6.037 4.033 5.957 4.411 5.957z M3 22.92V7.033c0-0.055 0.002-0.11 0.006-0.165l7.766 9.058l-7.68 7.681C3.033 23.384 3 23.158 3 22.92z M25.598 24.041H4.411 c-0.233 0-0.463-0.03-0.684-0.091l7.536-7.536l3.741 4.368l3.741-4.366l7.535 7.537c-0.224 0.059-0.449 0.091-0.683 0.091V24.041z M27 22.92c0 0.236-0.032 0.464-0.091 0.687l-7.679-7.681l7.765-9.058C26.999 6.924 27 6.979 27 7.033V22.92L27 22.92z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#F18E03\"},ico52:{path:\"M19.354 10.665l-1.522-1.521l-7.613 7.611c-1.261 1.261-1.261 3.306 0 4.567c1.261 1.26 3.306 1.26 4.568 0l9.135-9.134 c2.103-2.101 2.103-5.509 0-7.61c-2.102-2.102-5.51-2.102-7.612 0l-9.591 9.59c-0.007 0.007-0.014 0.013-0.021 0.02 c-2.932 2.932-2.932 7.684 0 10.615c2.931 2.931 7.685 2.931 10.617 0c0.007-0.006 0.012-0.013 0.019-0.021l0.001 0l6.547-6.546 l-1.523-1.521l-6.546 6.545c-0.007 0.006-0.013 0.013-0.02 0.02c-2.088 2.087-5.484 2.087-7.572 0c-2.087-2.087-2.087-5.482 0-7.57 c0.007-0.007 0.015-0.014 0.021-0.02L8.24 15.688l9.592-9.59c1.259-1.26 3.309-1.26 4.567 0c1.259 1.259 1.259 3.309 0 4.566 l-9.135 9.133c-0.42 0.42-1.103 0.42-1.523 0c-0.419-0.419-0.419-1.102 0-1.521L19.354 10.665L19.354 10.665z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#444\"},ico53:{path:\"M15 19.207c-2.32 0-4.208-1.887-4.208-4.207c0-2.32 1.888-4.207 4.208-4.207c2.32 0 4.207 1.887 4.207 4.207 C19.207 17.32 17.32 19.207 15 19.207z M15 11.971c-1.67 0-3.029 1.359-3.029 3.029S13.33 18.029 15 18.029S18.028 16.67 18.028 15 S16.67 11.971 15 11.971z M24.185 18.094h-0.507l-0.059 0.158l-0.003 0.006c-0.006 0.011-0.011 0.022-0.016 0.035L23.6 18.295 c-0.072 0.189-0.14 0.352-0.206 0.498l-0.07 0.154l0.358 0.359c0.532 0.531 0.825 1.238 0.825 1.99s-0.293 1.46-0.825 1.992 l-0.394 0.393c-0.531 0.532-1.238 0.825-1.991 0.825c-0.752 0-1.459-0.293-1.99-0.825l-0.358-0.357l-0.155 0.069 c-0.158 0.071-0.335 0.144-0.54 0.222l-0.159 0.06v0.509c0 1.553-1.263 2.816-2.815 2.816h-0.557c-1.553 0-2.816-1.264-2.816-2.816 v-0.509l-0.159-0.06c-0.205-0.078-0.381-0.15-0.54-0.222l-0.155-0.069l-0.359 0.357c-0.532 0.532-1.239 0.825-1.991 0.825 s-1.459-0.293-1.991-0.825l-0.394-0.393c-0.532-0.532-0.825-1.24-0.825-1.992s0.293-1.459 0.825-1.99l0.358-0.359l-0.07-0.154 C6.54 18.646 6.474 18.487 6.4 18.294c-0.005-0.013-0.011-0.025-0.016-0.038l-0.003-0.005l-0.059-0.157H5.816 C4.263 18.094 3 16.831 3 15.278v-0.557c0-1.553 1.263-2.816 2.816-2.816h0.506l0.059-0.157l0.002-0.005 c0.006-0.012 0.011-0.024 0.017-0.039c0.073-0.188 0.14-0.352 0.206-0.498l0.07-0.155l-0.359-0.359 c-0.532-0.532-0.825-1.239-0.825-1.991c0-0.752 0.293-1.459 0.825-1.991l0.394-0.394c0.532-0.532 1.239-0.825 1.991-0.825 c0.752 0 1.459 0.293 1.991 0.825l0.359 0.359l0.155-0.07c0.159-0.072 0.336-0.144 0.54-0.221l0.159-0.06v-0.51 C11.906 4.263 13.169 3 14.722 3h0.557c1.553 0 2.815 1.263 2.815 2.816v0.51l0.16 0.06c0.204 0.077 0.381 0.149 0.539 0.221 l0.155 0.07l0.358-0.359c0.531-0.532 1.238-0.825 1.99-0.825c0.753 0 1.46 0.293 1.991 0.825l0.394 0.394 c0.532 0.532 0.825 1.239 0.825 1.991s-0.293 1.459-0.825 1.991l-0.358 0.358l0.07 0.155c0.066 0.147 0.134 0.31 0.206 0.499 c0.006 0.013 0.011 0.025 0.017 0.037l0.003 0.005l0.059 0.157h0.507c1.553 0 2.815 1.263 2.815 2.816v0.557 C27 16.831 25.736 18.094 24.185 18.094z M25.821 14.722c0-0.106-0.011-0.214-0.032-0.318c-0.008-0.041-0.02-0.076-0.028-0.104 c-0.003-0.009-0.006-0.017-0.009-0.026l-0.007-0.026c-0.012-0.043-0.025-0.091-0.046-0.143c-0.021-0.052-0.047-0.099-0.07-0.139 l-0.014-0.025c-0.004-0.007-0.008-0.015-0.011-0.022c-0.012-0.022-0.025-0.05-0.045-0.079c-0.045-0.069-0.096-0.13-0.139-0.181 l-0.002-0.002c-0.002-0.002-0.004-0.004-0.005-0.007c-0.009-0.01-0.02-0.024-0.034-0.04c-0.056-0.061-0.12-0.118-0.195-0.177 c-0.007-0.005-0.014-0.011-0.021-0.016c-0.24-0.181-0.528-0.292-0.833-0.319c-0.011-0.001-0.022-0.002-0.033-0.004 c-0.031-0.004-0.069-0.01-0.113-0.01h-1.384c-0.189-0.764-0.507-1.513-0.944-2.232l0.992-0.992c0.25-0.25 0.408-0.572 0.459-0.931 c0.001-0.008 0.001-0.016 0.002-0.024c0.012-0.096 0.017-0.182 0.014-0.262c-0.001-0.021-0.003-0.04-0.005-0.054 c0-0.004-0.001-0.008-0.001-0.011c-0.006-0.067-0.013-0.146-0.03-0.226c-0.007-0.032-0.016-0.06-0.023-0.083 c-0.002-0.009-0.005-0.018-0.008-0.027c0 0-0.007-0.022-0.01-0.033c-0.013-0.043-0.026-0.092-0.049-0.144 c-0.021-0.049-0.045-0.092-0.066-0.13c-0.005-0.008-0.01-0.017-0.016-0.027c-0.005-0.009-0.01-0.019-0.014-0.028 c-0.013-0.025-0.028-0.055-0.05-0.087c-0.061-0.091-0.129-0.175-0.203-0.249l-0.394-0.394c-0.074-0.073-0.157-0.142-0.248-0.203 l-0.003-0.001c-0.031-0.021-0.061-0.036-0.085-0.048c-0.01-0.005-0.02-0.01-0.028-0.015l-0.022-0.013 c-0.039-0.022-0.084-0.048-0.134-0.069c-0.051-0.021-0.099-0.035-0.141-0.048c-0.012-0.003-0.022-0.006-0.033-0.01l-0.006-0.001 c-0.009-0.002-0.018-0.005-0.025-0.008c-0.022-0.007-0.05-0.016-0.082-0.023c-0.081-0.018-0.159-0.025-0.226-0.03h-0.003 c-0.004 0-0.008-0.001-0.012-0.001c-0.013-0.001-0.029-0.003-0.049-0.004c-0.019 0-0.037-0.001-0.055-0.001 c-0.064 0-0.133 0.004-0.21 0.014h-0.002c-0.008 0-0.015 0.001-0.022 0.002c-0.357 0.05-0.68 0.208-0.93 0.458l-0.991 0.991 c-0.719-0.439-1.469-0.756-2.232-0.946v-1.38c0-0.043-0.006-0.082-0.01-0.112c-0.002-0.011-0.004-0.022-0.004-0.034 c-0.028-0.305-0.138-0.593-0.318-0.833c-0.004-0.005-0.008-0.01-0.012-0.016l-0.004-0.004c-0.06-0.077-0.117-0.141-0.178-0.197 c-0.016-0.016-0.031-0.027-0.041-0.035c-0.003-0.002-0.006-0.003-0.008-0.006c-0.055-0.047-0.113-0.096-0.182-0.14 c-0.027-0.018-0.054-0.031-0.075-0.042c-0.008-0.004-0.017-0.008-0.024-0.013l-0.018-0.01C16 4.352 15.951 4.325 15.897 4.302 L15.894 4.3c-0.05-0.021-0.098-0.034-0.14-0.045l-0.028-0.007c-0.01-0.003-0.021-0.006-0.03-0.01 c-0.025-0.009-0.059-0.02-0.098-0.027c-0.106-0.021-0.214-0.032-0.319-0.032h-0.557c-0.105 0-0.213 0.011-0.32 0.032 c-0.038 0.007-0.071 0.018-0.097 0.027c-0.01 0.003-0.02 0.006-0.031 0.01l-0.028 0.007c-0.042 0.012-0.09 0.025-0.14 0.045 l-0.003 0.001C14.048 4.325 14 4.352 13.957 4.375l-0.018 0.01c-0.008 0.004-0.016 0.008-0.024 0.013 c-0.021 0.011-0.048 0.024-0.074 0.042c-0.072 0.046-0.132 0.096-0.182 0.14c-0.002 0.002-0.005 0.004-0.008 0.006 c-0.011 0.009-0.026 0.02-0.042 0.036c-0.06 0.056-0.118 0.121-0.177 0.197L13.43 4.819c-0.003 0.004-0.009 0.011-0.015 0.02 c-0.18 0.24-0.29 0.527-0.317 0.831c-0.001 0.011-0.003 0.022-0.004 0.034c-0.004 0.031-0.009 0.069-0.009 0.113v1.38 c-0.765 0.189-1.515 0.507-2.233 0.946L9.86 7.151c-0.25-0.25-0.572-0.408-0.929-0.458C8.923 6.692 8.916 6.691 8.908 6.69H8.906 c-0.077-0.01-0.146-0.014-0.21-0.014c-0.018 0-0.037 0-0.055 0.001C8.622 6.678 8.605 6.68 8.592 6.681 c-0.004 0-0.007 0.001-0.011 0.001H8.578c-0.066 0.005-0.145 0.013-0.226 0.03C8.321 6.72 8.293 6.729 8.271 6.735 C8.262 6.738 8.254 6.741 8.245 6.744L8.239 6.745c-0.012 0.004-0.023 0.007-0.034 0.01c-0.042 0.012-0.09 0.026-0.138 0.046 C8.016 6.823 7.972 6.849 7.933 6.871L7.909 6.884C7.899 6.889 7.89 6.894 7.88 6.899C7.856 6.911 7.827 6.926 7.793 6.948 C7.703 7.009 7.619 7.077 7.545 7.151L7.151 7.545C7.077 7.62 7.008 7.704 6.948 7.794C6.927 7.826 6.911 7.856 6.899 7.881 C6.894 7.89 6.889 7.899 6.883 7.91L6.87 7.935C6.848 7.973 6.823 8.017 6.802 8.067C6.78 8.118 6.766 8.167 6.753 8.21 c-0.003 0.01-0.01 0.034-0.01 0.034C6.741 8.253 6.738 8.262 6.735 8.271c-0.007 0.022-0.016 0.05-0.022 0.08 C6.695 8.43 6.688 8.507 6.683 8.578c0 0.004-0.001 0.008-0.001 0.012C6.68 8.604 6.678 8.621 6.677 8.642 C6.674 8.722 6.678 8.808 6.69 8.903c0 0.009 0.001 0.019 0.003 0.029C6.743 9.29 6.902 9.611 7.151 9.86l0.992 0.992 c-0.438 0.719-0.755 1.468-0.944 2.232H5.816c-0.044 0-0.083 0.005-0.113 0.01c-0.011 0.001-0.022 0.003-0.033 0.004 c-0.305 0.028-0.594 0.138-0.833 0.319c-0.006 0.004-0.013 0.009-0.019 0.015c-0.075 0.058-0.14 0.116-0.197 0.177 c-0.015 0.016-0.026 0.03-0.033 0.04c-0.001 0.002-0.003 0.004-0.004 0.005l-0.003 0.003c-0.044 0.051-0.094 0.112-0.139 0.181 c-0.019 0.028-0.033 0.055-0.044 0.077c-0.004 0.008-0.008 0.016-0.012 0.024l-0.014 0.024c-0.022 0.041-0.048 0.087-0.07 0.141 c-0.021 0.051-0.034 0.1-0.046 0.143l-0.007 0.026c-0.002 0.009-0.005 0.018-0.008 0.026c-0.009 0.028-0.021 0.063-0.028 0.102 c-0.021 0.106-0.032 0.214-0.032 0.32v0.556c0 0.106 0.011 0.214 0.032 0.319c0.008 0.04 0.02 0.075 0.029 0.104 c0.003 0.008 0.006 0.018 0.008 0.026c0.003 0.009 0.005 0.019 0.008 0.028c0.012 0.041 0.025 0.089 0.045 0.14 c0.021 0.053 0.047 0.099 0.07 0.14l0.014 0.025c0.004 0.008 0.008 0.016 0.012 0.022c0.011 0.022 0.025 0.05 0.043 0.078 c0.044 0.067 0.092 0.126 0.138 0.18l0.003 0.004c0.001 0.003 0.003 0.005 0.005 0.007c0.007 0.01 0.019 0.023 0.034 0.04 c0.057 0.062 0.122 0.12 0.197 0.177c0.006 0.006 0.012 0.011 0.019 0.016c0.24 0.181 0.528 0.291 0.833 0.318 c0.011 0.001 0.023 0.002 0.034 0.004c0.03 0.004 0.068 0.01 0.112 0.01h1.383c0.189 0.764 0.506 1.514 0.944 2.232l-0.992 0.992 c-0.25 0.249-0.408 0.57-0.458 0.928c-0.001 0.01-0.002 0.02-0.003 0.029c-0.012 0.096-0.016 0.181-0.013 0.261 c0 0.021 0.002 0.038 0.004 0.052c0 0.004 0.001 0.008 0.001 0.012c0.005 0.072 0.013 0.148 0.03 0.227 c0.007 0.031 0.016 0.059 0.023 0.082c0.002 0.009 0.005 0.018 0.008 0.026c0 0 0.006 0.023 0.009 0.033 c0.013 0.044 0.027 0.093 0.048 0.144s0.047 0.096 0.069 0.135l0.014 0.023c0.005 0.01 0.01 0.019 0.015 0.027 c0.012 0.025 0.028 0.056 0.049 0.088c0.061 0.09 0.129 0.174 0.204 0.248l0.394 0.395c0.074 0.072 0.157 0.141 0.248 0.203 l0.002 0.001c0.031 0.021 0.061 0.035 0.085 0.048c0.009 0.004 0.019 0.01 0.029 0.016l0.024 0.014 c0.039 0.021 0.083 0.047 0.131 0.066c0.051 0.021 0.099 0.036 0.142 0.049c0.011 0.002 0.022 0.006 0.033 0.01l0.005 0.001 c0.009 0.003 0.018 0.005 0.026 0.008c0.022 0.007 0.05 0.017 0.082 0.022c0.082 0.019 0.162 0.025 0.224 0.029 c0.003 0.001 0.006 0.002 0.01 0.002c0.015 0.002 0.034 0.004 0.056 0.005c0.017 0.001 0.034 0.001 0.051 0.001 c0.066 0 0.134-0.004 0.207-0.014c0.007 0 0.019-0.002 0.032-0.004c0.357-0.05 0.678-0.208 0.929-0.457l0.991-0.991 c0.719 0.438 1.468 0.757 2.233 0.946v1.38c0 0.044 0.005 0.082 0.009 0.113c0.002 0.011 0.003 0.022 0.004 0.032 c0.027 0.305 0.137 0.593 0.317 0.832c0.004 0.007 0.009 0.013 0.015 0.02l0.001 0.002c0.06 0.076 0.118 0.141 0.177 0.196 c0.017 0.016 0.031 0.026 0.042 0.036c0.002 0.002 0.005 0.004 0.006 0.004c0.055 0.048 0.115 0.098 0.182 0.141 c0.028 0.018 0.054 0.031 0.076 0.042c0.008 0.004 0.016 0.009 0.024 0.013l0.015 0.008c0.044 0.025 0.094 0.053 0.151 0.076 c0.051 0.021 0.1 0.034 0.143 0.047l0.026 0.007c0.01 0.003 0.02 0.006 0.03 0.009c0.026 0.01 0.06 0.02 0.098 0.027 c0.106 0.021 0.214 0.032 0.32 0.032h0.557c0.105 0 0.213-0.011 0.319-0.032c0.039-0.008 0.072-0.018 0.1-0.027 c0.01-0.003 0.02-0.006 0.029-0.009l0.026-0.007c0.043-0.013 0.092-0.025 0.142-0.047c0.057-0.023 0.105-0.051 0.148-0.074 l0.018-0.01c0.008-0.004 0.017-0.009 0.024-0.013c0.021-0.011 0.048-0.024 0.073-0.042c0.07-0.043 0.13-0.094 0.184-0.139 c0.002-0.002 0.004-0.004 0.007-0.007c0.011-0.009 0.026-0.02 0.042-0.034c0.06-0.057 0.118-0.121 0.178-0.197l0.002-0.004 c0.006-0.005 0.01-0.011 0.014-0.018c0.181-0.239 0.291-0.527 0.318-0.832c0-0.011 0.002-0.021 0.004-0.033 c0.004-0.031 0.01-0.068 0.01-0.112v-1.38c0.764-0.189 1.514-0.508 2.233-0.946l0.99 0.991c0.25 0.249 0.571 0.408 0.929 0.457 c0.014 0.002 0.024 0.004 0.031 0.004c0.074 0.01 0.143 0.014 0.208 0.014c0.017 0 0.034 0 0.05-0.001 c0.022-0.001 0.042-0.003 0.057-0.005c0.003 0 0.007-0.001 0.01-0.002c0.062-0.004 0.142-0.011 0.224-0.029 c0.032-0.006 0.06-0.016 0.082-0.022c0.009-0.003 0.018-0.006 0.026-0.009c0 0 0.025-0.007 0.036-0.01 c0.043-0.013 0.091-0.026 0.141-0.048c0.051-0.021 0.095-0.046 0.134-0.068l0.024-0.013c0.009-0.006 0.02-0.011 0.028-0.016 c0.024-0.012 0.054-0.027 0.085-0.047l0.003-0.002c0.091-0.063 0.174-0.131 0.248-0.203l0.394-0.395 c0.074-0.074 0.143-0.157 0.203-0.248c0.021-0.032 0.037-0.063 0.049-0.086c0.005-0.01 0.01-0.02 0.015-0.028l0.016-0.027 c0.021-0.038 0.046-0.083 0.066-0.13c0.022-0.053 0.036-0.102 0.049-0.146c0.003-0.011 0.01-0.033 0.01-0.033 c0.003-0.009 0.006-0.018 0.009-0.026c0.007-0.023 0.016-0.051 0.022-0.081c0.018-0.081 0.024-0.159 0.03-0.228 c0-0.004 0-0.008 0.001-0.011c0.002-0.014 0.004-0.032 0.005-0.052c0.003-0.08-0.001-0.167-0.014-0.264 c0-0.008-0.001-0.016-0.002-0.025c-0.051-0.358-0.209-0.68-0.459-0.931l-0.992-0.991c0.438-0.719 0.755-1.469 0.944-2.232h1.384 c0.043 0 0.081-0.006 0.112-0.01c0.011-0.002 0.022-0.003 0.033-0.004c0.306-0.027 0.594-0.138 0.834-0.318 c0.007-0.005 0.013-0.01 0.02-0.016c0.075-0.059 0.14-0.116 0.196-0.178c0.015-0.016 0.026-0.029 0.034-0.039 c0.001-0.003 0.003-0.005 0.004-0.006l0.004-0.004c0.046-0.055 0.094-0.113 0.138-0.18c0.02-0.029 0.033-0.059 0.045-0.08 c0.004-0.008 0.008-0.016 0.011-0.021l0.013-0.022c0.023-0.042 0.049-0.089 0.071-0.144c0.021-0.05 0.033-0.097 0.045-0.139 c0.003-0.01 0.005-0.019 0.008-0.028c0.003-0.009 0.006-0.017 0.009-0.026c0.009-0.027 0.021-0.063 0.028-0.103 c0.021-0.106 0.032-0.214 0.032-0.32V14.722L25.821 14.722z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#ddd\"},ico54:{path:\"M7.378 21.645c0.784-0.545 3.57-1.697 4.718-2.004c0.613-0.291 0.517-1.632 0.517-1.632 c-0.953-0.759-1.89-2.601-2.116-4.047c-0.582-0.17-1.091-0.751-1.163-1.866c-0.073-1.115 0.484-1.479 0.484-1.479 s-0.437-2.932 0.775-5.162c1.146-2.107 4.089-2.006 4.406-1.988c0.318-0.018 3.261-0.119 4.407 1.988 c1.211 2.23 0.775 5.162 0.775 5.162s0.557 0.363 0.484 1.479s-0.582 1.696-1.163 1.866c-0.226 1.446-1.163 3.288-2.116 4.047 c0 0-0.098 1.341 0.517 1.632c1.147 0.307 3.934 1.459 4.718 2.004c0.582 0.403 4.104 2.181 4.379 4.895c-3.249 0-10.49 0-11.883 0 c-0.152 0-0.235 0-0.235 0c-1.393 0-8.634 0-11.882 0C3.274 23.825 6.796 22.048 7.378 21.645L7.378 21.645z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#ABABAB\"},ico55:{path:\"M20.25 3H9.75C8.513 3 7.5 4.013 7.5 5.25v19.5C7.5 25.987 8.513 27 9.75 27h10.5c1.237 0 2.25-1.013 2.25-2.25V5.25 C22.5 4.013 21.487 3 20.25 3z M12 4.125h6v0.75h-6V4.125z M15 25.5c-0.828 0-1.5-0.672-1.5-1.5s0.672-1.5 1.5-1.5 s1.5 0.672 1.5 1.5S15.828 25.5 15 25.5z M21 21H9V6h12V21z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#333\"},ico56:{path:\"M23.462 3H6.538C5.142 3 4 4.013 4 5.25v19.5C4 25.987 5.142 27 6.538 27h16.924C24.857 27 26 25.987 26 24.75V5.25 C26 4.013 24.857 3 23.462 3z M15 26.25c-0.468 0-0.846-0.336-0.846-0.75s0.378-0.75 0.846-0.75s0.846 0.336 0.846 0.75 S15.468 26.25 15 26.25z M22.614 24H7.385V6h15.229V24z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#333\"},ico57:{path:\"M26.992 14.677c0.008 0.115 0 0.234-0.031 0.352l-2.16 9.95c-0.029 0.119-0.08 0.228-0.143 0.324 c-0.232 0.482-0.584 0.908-1.053 1.219C23.113 26.848 22.564 27 22.02 27v-0.006L8.146 26.987C8.098 26.995 8.049 27 7.998 27 c-0.05 0-0.1-0.005-0.149-0.013l-3.691-0.001C4.107 26.994 4.055 27 4 27c-0.553 0-1-0.467-1-1.043l0.009-12.524 c0-0.575 0.448-1.043 1-1.043c0.04 0 0.082 0.003 0.122 0.009l3.317-0.008v-0.02c3.052-0.229 5.472-2.84 5.558-6.063 c-0.008-0.09-0.014-0.182-0.014-0.273C12.992 4.359 14.294 3 15.9 3c1.379 0 2.533 1.004 2.832 2.35l0.014-0.002 c0.164 0.77 0.252 1.566 0.252 2.387c0 1.264-0.207 2.477-0.586 3.605l5.58 0.006c0.053 0 0.104 0.006 0.152 0.014 c0.951 0.039 1.871 0.551 2.41 1.46C26.898 13.397 27.035 14.047 26.992 14.677 M5 24.899L7 24.9l0.006-10.423L5.01 14.482L5 24.899 L5 24.899L5 24.899L5 24.899z M24.867 13.909c-0.191-0.323-0.531-0.493-0.871-0.474v-0.004h-0.004l-7.051-0.008 c-0.553 0-0.999-0.467-0.999-1.043c0-0.166 0.036-0.322 0.103-0.461l-0.009-0.01c0.399-0.775 0.688-1.621 0.853-2.514h0.014 c0 0 0.131-0.563 0.129-1.644c0-0.856-0.148-1.638-0.148-1.638h-0.008c0-0.015 0.002-0.029 0.002-0.045 c0-0.539-0.418-0.976-0.935-0.976c-0.516 0-0.935 0.437-0.935 0.976c0 0.022 0.001 0.045 0.003 0.066h-0.011 c0 0 0.014 0.814-0.142 1.66c-0.066 0.357-0.159 0.691-0.243 0.957c-0.002-0.001-0.003-0.002-0.005-0.002 c-0.842 2.684-2.957 4.765-5.602 5.466l-0.01 10.684l13.028 0.005c0.043 0 0.088 0.004 0.129 0.011 c0.131-0.019 0.258-0.065 0.377-0.144c0.168-0.111 0.289-0.269 0.359-0.446l0.004 0.001l2.08-9.579l-0.01-0.002 C25.049 14.476 25.023 14.17 24.867 13.909\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#2391FA\"},ico58:{path:\"M26.992 15.323c0.008-0.115 0-0.233-0.031-0.353l-2.16-9.949c-0.029-0.119-0.08-0.228-0.143-0.323 c-0.232-0.483-0.584-0.909-1.053-1.22C23.113 3.152 22.564 3 22.02 3v0.006L8.146 3.013C8.098 3.005 8.049 3 7.998 3 c-0.05 0-0.1 0.005-0.149 0.013L4.158 3.014C4.107 3.006 4.055 3 4 3C3.448 3 3 3.467 3 4.043l0.009 12.524 c0 0.575 0.448 1.044 1 1.044c0.04 0 0.082-0.003 0.122-0.009l3.317 0.008v0.019c3.052 0.229 5.472 2.84 5.558 6.063 c-0.008 0.089-0.014 0.181-0.014 0.273c0 1.675 1.303 3.034 2.909 3.034c1.379 0 2.533-1.003 2.832-2.349l0.014 0.002 c0.164-0.771 0.252-1.567 0.252-2.388c0-1.263-0.207-2.477-0.586-3.605l5.58-0.006c0.053 0 0.104-0.006 0.152-0.014 c0.951-0.039 1.871-0.551 2.41-1.459C26.898 16.603 27.035 15.954 26.992 15.323 M5 5.101L7 5.1l0.006 10.423L5.01 15.518L5 5.101 L5 5.101L5 5.101L5 5.101z M24.867 16.092c-0.191 0.322-0.531 0.492-0.871 0.473v0.004h-0.004l-7.051 0.008 c-0.553 0-0.999 0.468-0.999 1.043c0 0.166 0.036 0.322 0.103 0.461l-0.009 0.01c0.399 0.775 0.688 1.621 0.853 2.514h0.014 c0 0 0.131 0.563 0.129 1.644c0 0.856-0.148 1.638-0.148 1.638h-0.008c0 0.015 0.002 0.029 0.002 0.045 c0 0.539-0.418 0.977-0.935 0.977c-0.516 0-0.935-0.438-0.935-0.977c0-0.022 0.001-0.045 0.003-0.065h-0.011 c0 0 0.014-0.814-0.142-1.66c-0.066-0.358-0.159-0.691-0.243-0.957c-0.002 0.001-0.003 0.002-0.005 0.002 c-0.842-2.685-2.957-4.766-5.602-5.467L8.998 5.099l13.028-0.005c0.043 0 0.088-0.004 0.129-0.011 c0.131 0.02 0.258 0.065 0.377 0.144c0.168 0.111 0.289 0.269 0.359 0.446l0.004-0.001l2.08 9.579l-0.01 0.002 C25.049 15.524 25.023 15.831 24.867 16.092\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#2391FA\"},ico59:{path:\"M13.58 23.576c-0.288-0.393-0.576-0.781-0.886-1.203c-1.371 0.527-1.751 0.311-1.915-1.199 C9.707 21.461 9 21.512 8.825 19.744c-0.236 0.051-0.494 0.188-0.7 0.135c-0.374-0.1-0.856-0.223-1.036-0.5 c-0.179-0.277-0.211-0.924-0.015-1.115c1.017-0.99 0.738-1.793-0.138-2.672c-0.187-0.188-0.092-0.649-0.127-0.984 c0.088-0.027 0.176-0.053 0.265-0.081c0.375 0.457 0.721 0.94 1.137 1.358c0.215 0.217 0.546 0.424 0.838 0.443 c0.735 0.047 1.076 0.418 1.09 1.092c0.01 0.494 0.23 0.613 0.692 0.727c0.359 0.09 0.768 0.447 0.918 0.787 c0.203 0.459 0.437 0.66 0.927 0.771c0.322 0.07 0.601 0.395 0.864 0.643c0.257 0.24 0.447 0.551 0.708 0.787 c0.281 0.254 0.601 0.475 0.922 0.68c0.24 0.152 0.505 0.342 0.769 0.357c0.208 0.014 0.501-0.164 0.622-0.346 c0.068-0.102-0.08-0.445-0.227-0.568c-0.499-0.428-1.055-0.789-1.558-1.211c-0.132-0.111-0.148-0.355-0.218-0.539 c0.202 0.01 0.452-0.053 0.598 0.043c0.917 0.602 1.814 1.232 2.71 1.867c0.419 0.297 0.853 0.479 1.214-0.016 c0.364-0.496 0.13-0.896-0.334-1.221c-0.938-0.658-1.878-1.316-2.787-2.01c-0.182-0.139-0.233-0.445-0.345-0.674 c0.237 0.041 0.521 0.012 0.702 0.133c1.075 0.717 2.126 1.469 3.186 2.209c0.119 0.086 0.235 0.176 0.359 0.254 c0.388 0.24 0.786 0.338 1.101-0.088c0.322-0.436 0.184-0.822-0.232-1.125c-1.243-0.902-2.489-1.801-3.734-2.699 c-0.138-0.1-0.31-0.178-0.402-0.309c-0.083-0.117-0.08-0.295-0.114-0.445c0.136-0.03 0.291-0.115 0.405-0.078 c0.202 0.067 0.39 0.194 0.567 0.318c1.258 0.881 2.517 1.76 3.766 2.654c0.487 0.35 0.959 0.52 1.425 0 c0.399-0.441 0.33-0.953-0.236-1.445c-2.075-1.809-4.154-3.612-6.253-5.394c-0.837-0.711-2.025-0.333-2.326 0.725 c-0.281 0.989-0.859 1.698-1.874 1.938c-0.367 0.087-0.819-0.016-1.185-0.155c-0.173-0.065-0.355-0.437-0.325-0.637 c0.113-0.756 0.297-1.501 0.487-2.242c0.112-0.437 0.285-0.857 0.465-1.387c-0.729 0-1.397 0-2.096 0 C9.375 8.984 9.71 8.719 10.374 8.78c0.484 0.044 0.984 0.058 1.466-0.003c0.736-0.093 1.491-0.18 2.186-0.419 c1.209-0.417 2.388-0.383 3.6-0.078c0.802 0.2 1.622 0.329 2.423 0.534c0.22 0.056 0.486 0.226 0.582 0.417 c0.959 1.904 1.891 3.822 2.816 5.742c0.078 0.161 0.152 0.421 0.076 0.54c-0.407 0.631-0.233 1.197 0.021 1.832 c0.306 0.764-0.172 1.633-1.016 1.873c-0.436 0.127-0.609 0.33-0.719 0.746c-0.229 0.875-0.968 1.064-1.746 1.115 c-0.505 1.281-1 1.506-2.327 1.129c-0.167-0.047-0.4 0.098-0.593 0.176c-0.434 0.178-0.933 0.611-1.275 0.51 c-0.838-0.246-1.255 0.168-1.699 0.684C13.972 23.576 13.776 23.576 13.58 23.576z M7.114 6.423c0.468 0.253 0.93 0.516 1.402 0.757 C8.912 7.382 9.03 7.646 8.829 8.06c-1.098 2.255-2.186 4.515-3.276 6.773C5.341 15.272 5 15.359 4.589 15.147 C4.051 14.872 3.529 14.566 3 14.273c0-0.146 0-0.292 0-0.437c0.656-1.251 1.317-2.499 1.965-3.754 c0.627-1.215 1.238-2.44 1.855-3.659C6.919 6.423 7.016 6.423 7.114 6.423z M23.132 6.423c0.242 0.385 0.514 0.755 0.719 1.159 c0.999 1.963 1.962 3.945 2.978 5.901c0.325 0.626 0.195 0.949-0.44 1.235c-1.546 0.696-1.537 0.717-2.294-0.81 c-0.935-1.887-1.858-3.78-2.809-5.659c-0.271-0.538-0.228-0.894 0.372-1.152c0.414-0.18 0.789-0.446 1.182-0.674 C22.937 6.423 23.034 6.423 23.132 6.423z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#aaa\"},ico60:{path:\"M4.817 15.205l1.407 1.407l-0.001 0.002l8.775 8.771L15 25.383l0.001 0.002l8.775-8.771l-0.001-0.002l1.407-1.407 c2.423-2.422 2.423-6.349 0-8.772c-2.424-2.423-6.353-2.423-8.775 0L15 7.839l-1.407-1.406c-2.423-2.423-6.352-2.423-8.775 0 C2.395 8.855 2.395 12.782 4.817 15.205z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#E547B0\"},ico61:{path:\"M26.489 10.364l-2.37-2.369c-0.581-0.582-1.532-1.533-2.113-2.113l-2.37-2.37c-0.581-0.581-1.616-0.683-2.3-0.228 l-6.479 4.318c-0.684 0.457-0.943 1.431-0.575 2.166l1.652 3.304c0.05 0.101 0.109 0.208 0.173 0.321L3.75 21.75L3 27h4.5v-1.5h3v-3 h3v-3h3v-1.669c0.15 0.089 0.294 0.169 0.427 0.235l3.304 1.652c0.735 0.367 1.709 0.108 2.165-0.575l4.319-6.48 c0.456-0.684 0.354-1.719-0.228-2.299H26.489z M6.532 23.03L5.471 21.97l7.303-7.303l1.061 1.061L6.532 23.03L6.532 23.03z  M24.101 12.667c0 1.104-0.896 2-2 2s-2-0.896-2-2s0.896-2 2-2S24.101 11.563 24.101 12.667z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#ABABAB\"},ico62:{path:\"M23.967 12.14c-0.041 0.01-0.082 0.015-0.123 0.015c-0.241 0-0.457-0.159-0.516-0.395c-0.247-0.999-2.121-1.396-2.835-1.536 c-0.204 0.39-0.616 0.66-1.098 0.66c-0.299 0-0.57-0.107-0.783-0.28c0.065 0.064 0.134 0.13 0.208 0.209 c0.098 0.079 0.188 0.154 0.27 0.227c0.009 0.008 0.018 0.016 0.026 0.023l-0.001 0.001c0.7 0.65 3.995 4.023 5.187 7.116 c0.982 2.547 1.053 3.591 1.039 4.441c-0.019 1.173-0.067 4.289-5.713 4.348c-3.136 0.035-3.775 0.054-8.821-0.018 c-5.655-0.082-5.705-3.168-5.724-4.329c-0.013-0.852 0.056-1.896 1.04-4.443c0.992-2.574 2.747-5.109 5.213-7.141 c0.07-0.058 0.145-0.141 0.219-0.247c0.12-0.244 0.177-0.491 0.184-0.739c-0.132 0.027-0.264 0.047-0.397 0.076 c-0.262 0.056-0.522-0.103-0.582-0.358c-0.06-0.255 0.106-0.51 0.368-0.566c0.145-0.032 0.287-0.055 0.431-0.083 c-0.29-0.752-0.877-1.456-1.333-2.001c-0.1-0.118-0.191-0.229-0.273-0.33C9.357 6.161 9.136 5.151 9.042 4.635 C9.028 4.563 9.02 4.511 9.011 4.48L8.974 4.35C8.708 3.433 8.697 3.396 8.859 3.188C8.951 3.071 9.098 3 9.25 3 C9.52 3 9.652 3.188 9.738 3.313C9.85 3.472 9.935 3.574 9.991 3.616c0.085-0.019 0.215-0.029 0.37-0.029 c0.367 0 0.823 0.06 1.351 0.128c0.561 0.073 1.196 0.156 1.779 0.168c0 0 0.001 0 0.002 0c0.6 0 1.045-0.184 1.517-0.377 c0.529-0.217 1.084-0.443 1.766-0.396c0.858 0.06 1.471 0.484 2.013 0.858c0.291 0.202 0.566 0.392 0.854 0.511 c0.342 0.141 0.873-0.003 1.255-0.128c0.229-0.075 0.41-0.135 0.589-0.135c0.229 0 0.373 0.1 0.452 0.182 c0.396 0.197 0.242 0.622 0.19 0.766C22.094 5.258 22.043 5.4 21.97 5.621c-0.266 0.797-1.55 1.662-2.896 2.694 c-0.123 0.094-0.216 0.164-0.267 0.206c-0.071 0.058-0.209 0.188-0.337 0.375c0.226-0.252 0.554-0.414 0.925-0.414 c0.421 0 0.791 0.206 1.014 0.519c0.391-0.271 1.056-0.932 1.113-1.2c0.059-0.271 0.329-0.466 0.611-0.421 c0.281 0.046 0.478 0.281 0.44 0.557c-0.054 0.413-0.511 1.001-1.021 1.467c1.078 0.286 2.498 0.865 2.807 2.114 C24.428 11.794 24.252 12.073 23.967 12.14z M18.471 7.57c1.566-1.2 2.432-1.821 2.571-2.241c0.003-0.01 0.006-0.019 0.009-0.028 c-0.492 0.157-1.232 0.281-1.789 0.052c-0.387-0.159-0.718-0.389-1.039-0.611c-0.479-0.331-0.933-0.643-1.517-0.685 c-0.457-0.031-0.85 0.131-1.317 0.322c-0.516 0.213-1.101 0.452-1.85 0.452L13.471 4.83c-0.638-0.013-1.303-0.099-1.889-0.175 c-0.473-0.062-0.918-0.12-1.221-0.12c-0.121 0-0.188 0.01-0.222 0.017C10.1 4.561 10.06 4.566 10.02 4.569 c0.085 0.453 0.28 1.388 0.676 1.807c0.104 0.127 0.192 0.232 0.288 0.346c0.512 0.612 1.22 1.182 1.551 2.147 c1.755-0.264 3.426-0.288 4.852-0.07c0.233-0.572 0.63-0.868 0.792-1.001C18.233 7.752 18.336 7.674 18.471 7.57z M18.207 10.021 c0.026 0.137 0.078 0.229 0.163 0.332c-0.067-0.1-0.116-0.212-0.152-0.328C18.214 10.024 18.211 10.022 18.207 10.021z M18.436 11.742c-0.073-0.064-0.165-0.141-0.264-0.22c-0.017-0.015-0.034-0.03-0.049-0.047c-0.087-0.092-0.167-0.17-0.241-0.242 c-0.32-0.311-0.623-0.604-0.669-1.312c-0.002-0.037 0.002-0.07 0.002-0.106c-1.309-0.194-2.871-0.171-4.496 0.067 c0.017 0.442-0.069 0.898-0.305 1.359c-0.009 0.02-0.021 0.038-0.033 0.055c-0.132 0.19-0.272 0.347-0.416 0.465 c-2.338 1.925-3.997 4.329-4.93 6.75c-0.923 2.393-0.989 3.335-0.977 4.095c0.018 1.163 0.053 3.244 4.763 3.313 c5.692 0.082 6.042 0.049 8.797 0.02c4.695-0.05 4.729-2.155 4.748-3.332c0.012-0.76-0.054-1.702-0.977-4.095 C22.238 15.527 18.821 12.101 18.436 11.742z M17.875 20.407c0 1.044-0.66 2.122-2.423 2.318v1.101h-0.196v0.009h-0.814v-1.08 c-1.25-0.073-2.16-0.577-2.778-1.264l0.618-0.771c0.471 0.543 1.182 1.023 2.16 1.133v-2.926c-1.262-0.336-2.519-0.746-2.519-2.227 c0-1.239 1.033-2.118 2.519-2.227v-1.071h0.473v-0.01h0.538v1.126c0.931 0.118 1.673 0.502 2.238 1.074l-0.618 0.734 c-0.447-0.479-1.002-0.761-1.62-0.884v2.636C16.666 18.423 17.875 18.912 17.875 20.407z M15.452 21.829 c1.017-0.175 1.36-0.807 1.36-1.35c0-0.721-0.586-1.053-1.36-1.299V21.829z M14.441 15.377c-0.878 0.06-1.455 0.565-1.455 1.264 c0 0.661 0.614 0.95 1.455 1.19V15.377z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#ddd\"},ico63:{path:\"M26.122 8.115l-2.233 2.234L19.58 6.178l2.299-2.299c1.172-1.172 3.071-1.172 4.243 0 C27.293 5.048 27.293 6.943 26.122 8.115z M22.579 11.652L8.847 25.372L3 27l1.604-5.863L18.286 7.469L22.579 11.652z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#7D3B16\"},ico64:{path:\"M8.624 4.875c0-0.414 0.337-0.75 0.751-0.75h11.249c0.415 0 0.751 0.336 0.751 0.75V6.75H22.5V4.875 C22.5 3.84 21.66 3 20.624 3H9.375C8.339 3 7.5 3.84 7.5 4.875V6.75h1.124V4.875L8.624 4.875z M9.375 9h11.249 C21.66 9 22.5 8.16 22.5 7.125V6.75h-1.125v0.375c0 0.414-0.336 0.75-0.751 0.75H9.375c-0.414 0-0.751-0.336-0.751-0.75V6.75H7.5 v0.375C7.5 8.16 8.339 9 9.375 9z M10.875 23.25v-1.125h8.249v1.125H10.875z M10.875 18.375h8.249V19.5h-8.249V18.375L10.875 18.375 z M10.875 15h8.249v1.125h-8.249V15L10.875 15z M21.75 21h-0.375v4.125c0 0.414-0.336 0.75-0.751 0.75H9.375 c-0.414 0-0.751-0.336-0.751-0.75V21H8.25c-0.414 0-0.751-0.336-0.751-0.75v6c0 0.414 0.337 0.75 0.751 0.75h13.5 c0.414 0 0.75-0.336 0.75-0.75v-6C22.5 20.664 22.164 21 21.75 21z M21.75 11.625H8.25c-0.414 0-0.751 0.336-0.751 0.75v0.375 c0-0.414 0.337-0.75 0.751-0.75h13.5c0.414 0 0.75 0.336 0.75 0.75v-0.375C22.5 11.961 22.164 11.625 21.75 11.625z M26.25 6.75 H22.5v0.375C22.5 8.16 21.66 9 20.624 9H9.375C8.339 9 7.5 8.16 7.5 7.125V6.75H3.749C3.335 6.75 3 7.086 3 7.5v11.25 c0 0.414 0.335 0.75 0.749 0.75h3.75v-6.75c0-0.414 0.337-0.75 0.751-0.75h13.5c0.414 0 0.75 0.336 0.75 0.75v6.75h3.75 c0.414 0 0.749-0.336 0.749-0.75V7.5C26.999 7.086 26.664 6.75 26.25 6.75z M7.499 20.25c0 0.414 0.337 0.75 0.751 0.75h0.374v-1.5 H7.499V20.25L7.499 20.25z M21.375 21h0.375c0.414 0 0.75-0.336 0.75-0.75V19.5h-1.125V21z M21.75 12H8.25 c-0.414 0-0.751 0.336-0.751 0.75v6.75h1.125v-6c0-0.414 0.337-0.75 0.751-0.75h11.249c0.415 0 0.751 0.336 0.751 0.75v6H22.5v-6.75 C22.5 12.336 22.164 12 21.75 12z\",x:0,y:0,width:30,height:30,boxW:30,boxH:30,color:\"#ABABAB\"}}};$(function(){$.fn.css2num=function(c){if(typeof c!=\"string\"){return\"0\"}var b=$(this).css(c);if(/^-?[0-9]+.?[0-9]*$/.test(b.replace(\"px\",\"\"))&&!/\\s/g.test(b.replace(\"px\",\"\"))){return parseInt(b.replace(\"px\",\"\"))}return b}});Export.svg={draw2svg:function(J,aq,N,S,B,r){var D,F,E,M,O,e,am,b,ab,aj,ad,av,s,v,t,C,j,m,L,ay,au,Y,ae,an,W,G,Q,H,z,P;var V=des.utils.getRelativePos(J.offset().left,J.offset().top,$(\"#canvas\"));var ax=this.getTopicType(S),y=B.key;var ag=des.utils.getExtendStyle(S);D=J.css2num(\"font-style\");F=J.css2num(\"font-size\");E=J.css2num(\"font-weight\");M=J.css2num(\"font-family\");O=J.css2num(\"color\");e=J.css2num(\"text-align\");am=J.find(\".topic_text\").width();b=J.find(\".topic_text\").height();ab=J.find(\".topic_text\").css2num(\"padding-top\");aj=J.find(\".topic_text\").css2num(\"padding-left\");ad=J.find(\".topic_text\").css2num(\"padding-right\");av=J.find(\".topic_text\").css2num(\"padding-bottom\");s=J.css2num(\"padding-top\");v=J.css2num(\"padding-left\");t=J.css2num(\"padding-right\");C=J.css2num(\"padding-bottom\");an=J.height()+s+C;W=J.width()+v+t;j=V.x-$(\"#canvas\").width()/2;m=V.y-$(\"#canvas\").height()/2;L=this.restoreXss(J.find(\".topic_text\").html()).split(\"<br>\");ay=Export.getColor(ag.bgColor||B[ax].bgColor);au=J.css2num(\"border-color\");Y=J.css2num(\"border-width\");ae=this.getRadius(W,an);G=ag.lineWidth;Q=ag.lineColor;H=ag.lineType;z=ag.shape;P=J.parent().attr(\"id\");var c;var d;var l;var ai,Z,U,R=an/2,ar;if(J.siblings(\".tp_expand_box\")[0]){l=J.siblings(\".tp_expand_box\");if(z==\"underline\"){Z=an-7,R=an+Math.ceil(G/2)}else{Z=an/2-7,R=an/2+Math.ceil(G/2)}if(j<0){ai=-15,U=0,ar=-l.width()}else{ai=W+1,U=W,ar=l.width()}c=[[\"M\",U,R],[\"l\",ar,0]];if(!J.siblings(\".tp_expand_box.collapsed\")[0]){d=[[\"M\",7,1],[\"a\",6,6,0,0,0,-6,6],[\"a\",6,6,0,1,0,6,-6],[\"z\"],[\"M\",0,7],[\"a\",7,7,0,0,1,7,-7],[\"a\",7,7,0,1,1,-7,7],[\"z\"],[\"M\",3,6],[\"h\",8],[\"v\",2],[\"h\",-8],[\"v\",-3],[\"z\"]]}else{d=[[\"M\",7,1],[\"a\",6,6,0,0,0,-6,6],[\"a\",6,6,0,1,0,6,-6],[\"z\"],[\"M\",0,7],[\"a\",7,7,0,0,1,7,-7],[\"a\",7,7,0,1,1,-7,7],[\"z\"],[\"M\",3,6],[\"h\",3],[\"v\",-3],[\"h\",2],[\"v\",3],[\"h\",3],[\"v\",2],[\"h\",-3],[\"v\",3],[\"h\",-2],[\"v\",-3],[\"h\",-3],[\"v\",-2],[\"z\"]]}}var ao=aq.group().attr({transform:\"translate(\"+j+\" \"+m+\")\"});var aa,ac;var at=[ae,ae,0,0,1];if(z==\"round\"){aa=[[\"M\",0,an/2],[\"A\",W/2,an/2,0,0,1,W/2,0],[\"A\",W/2,an/2,0,1,1,0,an/2],[\"Z\"]];ac=ao.path(aa)}else{if(z==\"diamond\"){aa=[[\"M\",0,an/2],[\"L\",W/2,0],[\"L\",W,an/2],[\"L\",W/2,an],[\"Z\"]];ac=ao.path(aa)}else{if(z==\"underline\"){aa=[[\"M\",0,an+Math.ceil(G/2)],[\"l\",W,0]];ac=ao.path(aa).stroke({width:G,color:Q})}else{if(z==\"bubbleRound\"){aa=[[\"M\",0,an/2],[\"A\",W/2,an/2,0,0,1,W/2,0],[\"A\",W/2,an/2,0,1,1,0,an/2],[\"Z\"],[\"M\",0,an],[\"L\",W/4,an/2],[\"H\",W/4*3],[\"Z\"]];ac=ao.path(aa)}else{if(z==\"bubbleRectangle\"){aa=[[\"M\",0,ae],[\"a\",at.concat(ae,-ae)],[\"h\",W-2*ae],[\"a\",at.concat(ae,ae)],[\"v\",an-2*ae],[\"a\",at.concat(-ae,ae)],[\"h\",-W+ae+34],[\"l\",-34,10],[\"l\",10,-10],[\"h\",-10+ae],[\"a\",at.concat(-ae,-ae)],[\"z\"]];ac=ao.path(aa)}else{if(z==\"roundRectangle\"){aa=[[\"M\",0,ae],[\"a\",at.concat(ae,-ae)],[\"h\",W-2*ae],[\"a\",at.concat(ae,ae)],[\"v\",an-2*ae],[\"a\",at.concat(-ae,ae)],[\"h\",-W+2*ae],[\"a\",at.concat(-ae,-ae)],[\"z\"]];ac=ao.path(aa).stroke({width:parseInt(Y),color:au})}else{if(z==\"rectangle\"){aa=[[\"M\",0,0],[\"h\",W],[\"v\",an],[\"h\",-W],[\"z\"]];ac=ao.path(aa).stroke({width:parseInt(Y),color:au})}}}}}}}if(c){ao.path(c).stroke({width:l.height(),color:l.css(\"background-color\")});var aw=ao.group();aw.attr({transform:\"translate(\"+ai+\" \"+Z+\")\"});aw.path(\"M0 7A7 7 0 0 1 7 0A7 7 0 1 1 0 7Z\").fill(\"#fff\");aw.path(d).fill(\"#7C8084\")}ac.fill(ay.color).opacity(ay.opacity);var X=ao.group().attr(\"transform\",\"translate(\"+(v+J.find(\".topic_icon_box\").width())+\" \"+s+\")\");var I=X.group().attr(\"transform\",\"translate(0 \"+ab+\")\");for(var al=0;al<L.length;al++){var T=0,f=\"start\",q=F/4;if(e==\"center\"){f=\"middle\";T=J.find(\".topic_text\").width()/2}else{if(e==\"left\"){f=\"start\";T=0}else{f=\"end\";T=J.find(\".topic_text\").width()}}I.text(function(a){a.plain(L[al])}).fill(O).font({family:M+\",宋体\",size:F,weight:E,style:D,anchor:f}).x(T).y(al*(F+q))}if(J.find(\".tp_extend_item.note\")[0]){var A=J.find(\".tp_extend_item.note\");this.createIcon(X,\"note\",A)}if(J.find(\".tp_extend_item.link\")[0]){var k=J.find(\".tp_extend_item.link\");this.createIcon(X,\"link\",k,r)}if(J.find(\".topic_icon_box\")[0]){var ap=J.children(\".topic_icon_box\").children(\".topic_ico\");for(var al=ap.length-1;al>=0;al--){var u=ap.eq(al);var ah=u.attr(\"n\");if(!ah){ah=\"ico\"+u.attr(\"index\")}this.createIcon(X,ah,u)}}if(J.find(\".tp_task\")[0]){I=X.group().attr(\"transform\",\"translate(\"+(-J.find(\".topic_icon_box\").width())+\" \"+(ab+b+av)+\")\");f=\"middle\";T=J.find(\".tp_task\").width()/2;I.text(function(a){a.plain(J.find(\".tp_task\").text())}).fill(O).font({family:M+\",宋体\",size:F,weight:E,style:D,anchor:f}).x(T).y(0)}if(J.siblings(\".topic_tag\")[0]){var K=J.siblings(\".topic_tag\");var ak=this.getStyle(K);var af=ao.group().attr(\"transform\",\"translate(\"+(W/2+K.css2num(\"margin-left\"))+\" \"+an+\")\");at=[ak.bdr,ak.bdr,0,0,1];if(ak.bdr>=0){aa=[[\"M\",0,ak.bdr],[\"a\",at.concat(ak.bdr,-ak.bdr)],[\"h\",ak.w-2*ak.bdr],[\"a\",at.concat(ak.bdr,ak.bdr)],[\"v\",ak.h-2*ak.bdr],[\"a\",at.concat(-ak.bdr,ak.bdr)],[\"h\",-ak.w+2*ak.bdr],[\"a\",at.concat(-ak.bdr,-ak.bdr)],[\"z\"]]}else{aa=[[\"M\",0,0],[\"H\",ak.w],[\"L\",ak.h],[\"H\",0],[\"Z\"]]}af.path(aa).fill(ak.bgc.color).opacity(ak.bgc.opacity);I=af.group().attr(\"transform\",\"translate(\"+ak.pl+\" 0)\");f=\"middle\";T=ak.w/2-ak.pl;I.text(function(a){a.plain(ak.str)}).fill(ak.fc).font({family:ak.ff+\",宋体\",size:ak.fs,weight:ak.fw,style:ak.fst,anchor:f}).x(T).y(0)}var o;if(ax==\"centerTopic\"){o=$(\".linker_canvas\")}else{o=$(\".sub_linker_canvas[fortp='\"+P+\"']\")}$.each(o,function(az,aE){var h=$(aE);var w=des.utils.getRelativePos(h.offset().left+5,h.offset().top+5,$(\"#canvas\"));var aC=w.x-$(\"#canvas\").width()/2;var aA=w.y-$(\"#canvas\").height()/2;var x=h.width()-8;var a=h.height()-8;var g=[\"M\"],n,aD,aB,p;if(aC-5<=j){g.push(aC+x);aD=[-0.5,-10];aB=[[aC+x],[aC+x/2]];p=[aC-4]}else{g.push(aC);aD=[0.5,10];aB=[[aC],[aC+x/2]];p=[aC+x]}if(m+R>aA+a/2){g.push(aA+a);n=[0,-a];aD[0]=aD[0]+0.5;aD.push(-10);aB[0].push(aA+a/2);aB[1].push(aA);p.push(aA)}else{if(m+R<aA+a/2){g.push(aA);n=[0,a];aD[0]=Math.abs(aD[0]-0.5);aD.push(10);aB[0].push(aA+a/2);aB[1].push(aA+a);p.push(aA+a)}else{g.push(aA+a);n=[0,-a];aD[0]=aD[0]+0.5;aD.push(0);aB[0].push(aA+a/2);aB[1].push(aA);p.push(aA)}}if(H==\"straight\"){aa=[g,[\"L\"].concat(p)]}else{if(H==\"broken\"){aa=[g,[\"l\"].concat(n),[\"L\"].concat(p)]}else{if(H==\"roundBroken\"){aa=[g,[\"l\"].concat(n[0],n[1]-aD[2]),[\"a\",10,10,0,0].concat(aD),[\"L\"].concat(p)]}else{aa=[g,[\"C\"].concat(aB[0],aB[1],p)]}}}N.path(aa).fill(\"none\").stroke({width:G,color:Q})})},line2svg:function(e,v,D){var n,m,l,j,L;n=v.start;m=v.end;l=v.points[0];j=v.points[1];L=v.styles;var C=[[\"M\",y(n.x),y(n.y)],[\"C\",y(l.x),y(l.y),y(j.x),y(j.y),y(m.x),y(m.y)]];var M=e.group();var E=M.path(C).fill(\"none\").stroke({width:L.lineWidth,color:L.lineColor,dasharray:(L.lineType==\"dashed\"?[20,20]:[\"none\"])});var I=L.lineWidth*1+4;E.marker(\"start\",I,I,function(c){var a=I/2;C=[[\"M\",0,a],[\"A\",a,a,0,0,1,a,0],[\"A\",a,a,0,1,1,0,a]];c.path(C).fill(L.lineColor);this.attr(\"markerUnits\",\"userSpaceOnUse\")});I=L.lineWidth*1+8;E.marker(\"end\",I,I,function(a){C=[[\"M\",I,I/2],[\"l\",-I,I/2],[\"l\",0,-I],[\"z\"]];a.path(C).fill(L.lineColor);this.attr({markerUnits:\"userSpaceOnUse\",refX:0,refY:I/2})});var z=$(\"#\"+D+\" .connection_textarea\");if(!z[0]){return}var q=des.utils.getRelativePos(z.offset().left,z.offset().top,$(\"#canvas\"));var F,O,H,d,K,u,P,k,N,o,B,A,f,s,G;F=z.css2num(\"padding-top\");O=z.css2num(\"padding-left\");H=z.css2num(\"padding-right\");d=z.css2num(\"padding-bottom\");K=z.height()+F+d;u=z.width()+O+H;f=z.css2num(\"font-style\");o=z.css2num(\"font-size\");A=z.css2num(\"font-family\");B=z.css2num(\"color\");s=z.css2num(\"text-align\");k=Export.getColor(z.css2num(\"background-color\"));N=z.css2num(\"border-radius\");G=z.val().split(/\\n/);var Q=[N,N,0,0,1];if(N>0){C=[[\"M\",0,N],[\"a\",Q.concat(N,-N)],[\"h\",u-2*N],[\"a\",Q.concat(N,N)],[\"v\",K-2*N],[\"a\",Q.concat(-N,N)],[\"h\",-u+2*N],[\"a\",Q.concat(-N,-N)],[\"z\"]]}else{C=[[\"M\",0,0],[\"h\",u],[\"v\",K],[\"h\",-u],[\"z\"]]}var b=M.group().attr(\"transform\",\"translate(\"+y(q.x)+\" \"+y(q.y)+\")\").fill(k.color).opacity(k.opacity);b.path(C);z=b.group();for(var J=0;J<G.length;J++){var t=0;var r=\"start\";if(s==\"center\"){r=\"middle\";t=(u-O-H)/2}else{if(s==\"left\"){r=\"start\";t=0}else{r=\"end\";t=u-O-H}}z.text(function(a){a.plain(G[J])}).fill(B).font({family:A+\",宋体\",size:o,style:f,anchor:r}).x(t).y(J*(o+7)+5)}function y(a){return a-10000}},restoreXss:function(a){if(a==null||a==\"\"){return\"\"}a=a.replace(/&lt;/g,\"<\");a=a.replace(/&gt;/g,\">\");a=a.replace(/&#39;/g,'\"');a=a.replace(/&quot;/g,\"'\");a=a.replace(/&nbsp;/g,\" \");return a},getTopicType:function(a){if(!a.parent){return\"centerTopic\"}else{if(a.parent==\"root\"){return\"childTopic\"}else{return\"othersTopic\"}}},createIcon:function(j,n,t,u){var d,s,f,p,b,a,m,q;d=t.css2num(\"margin-left\");s=t.parent().css2num(\"padding-top\");f=t.height();p=t.width();q=$(\".dock_content.dock_icons\");var c=t.siblings().length+1;var e=t.index();var k=Export.ico[n];var o=this.getRect(j);if(n==\"link\"){a=t.attr(\"href\");if(u==\"svg\"){b=j.link(a).target(\"_blank\")}else{b=j.group()}}else{b=j.group()}var r=[[\"M\",0,p/2],[\"a\",p/2,p/2,0,0,1,p/2,-p/2],[\"a\",p/2,p/2,0,1,1,-p/2,p/2]];if(n==\"link\"||n==\"note\"){b.attr({transform:\"translate(\"+(o.width+d)+\" \"+s+\")\"}).style(\"cursor\",\"pointer\").path(r).fill(k.color);b.path(k.path).fill(\"#fff\").attr({transform:\"translate(\"+k.x+\" \"+k.y+\")\"})}else{if(n==\"priority\"){m=q.children(\".dock_ico[ico='\"+t.attr(\"index\")+\"']\").index()+1;b.attr({transform:\"translate(\"+(p*(e-c))+\" \"+s+\")\"}).style(\"cursor\",\"pointer\").path(k.path).fill(k.color).attr({transform:\"translate(\"+k.x+\" \"+k.y+\")\"});b.group().attr(\"transform\",\"translate(\"+3+\" \"+3+\")\").text(function(g){g.plain(m)}).fill(\"#fff\").font({family:\"黑体\",size:20,anchor:\"middle\"}).x(12).y(2)}else{if(n==\"face\"){m=t.attr(\"index\")*1-10;b.attr({transform:\"translate(\"+(p*(e-c))+\" \"+s+\")\"}).style(\"cursor\",\"pointer\").path(Export.ico.box).fill(\"#000\");b.path(k.path[m]).fill(k.color).attr({transform:\"translate(\"+k.x+\" \"+k.y+\")\"})}else{if(n==\"completion\"){m=t.attr(\"index\")*1-17;b.attr({transform:\"translate(\"+(p*(e-c))+\" \"+s+\")\"}).style(\"cursor\",\"pointer\").path(Export.ico.box).fill(\"#fff\");b.path(k.path[m]).fill(k.color).attr({transform:\"translate(\"+k.x+\" \"+k.y+\")\"})}else{if(n==\"flag\"){m=t.attr(\"index\")*1-26;b.attr({transform:\"translate(\"+(p*(e-c))+\" \"+s+\")\"}).style(\"cursor\",\"pointer\").path(k.path).fill(k.color[m]).attr({transform:\"translate(\"+k.x+\" \"+k.y+\")\"})}else{if(n==\"arrow\"){m=t.attr(\"index\")*1-33;b.attr({transform:\"translate(\"+(p*(e-c))+\" \"+s+\")\"}).style(\"cursor\",\"pointer\").path(k.path[m]).fill(k.color).attr({transform:\"translate(\"+k.x+\" \"+k.y+\")\"})}else{b.attr({transform:\"translate(\"+(p*(e-c))+\" \"+s+\")\"}).style(\"cursor\",\"pointer\");b.path(k.path).fill(k.color).attr({transform:\"translate(\"+k.x+\" \"+k.y+\")\"})}}}}}}},getStyle:function(e){var f,d,i,b,a,c,g;g=des.utils.getRelativePos(e.offset().left,e.offset().top,$(\"#canvas\"));f=e.css2num(\"padding-top\");d=e.css2num(\"padding-left\");i=e.css2num(\"padding-right\");b=e.css2num(\"padding-bottom\");c=e.height()+f+b;a=e.width()+d+i;return{fst:e.css2num(\"font-style\"),fs:e.css2num(\"font-size\"),fw:e.css2num(\"font-weight\"),ff:e.css2num(\"font-family\"),fc:e.css2num(\"color\"),ta:e.css2num(\"text-align\"),pt:f,pl:d,pr:i,pb:b,h:c,w:a,left:g.x-$(\"#canvas\").width()/2,top:g.y-$(\"#canvas\").height()/2,str:e.text(),bgc:Export.getColor(e.css(\"background-color\")),bdc:e.css2num(\"border-color\"),bdw:e.css2num(\"border-width\"),bdr:this.getRadius(a,c)}},getRect:function(c){var b=c[0]||c.node||c;if($(b).length<=0){return}var a=b.getBoundingClientRect();return{width:a.width,height:a.height,top:a.top,bottom:a.bottom,left:a.left,right:a.right}},getRadius:function(b,d){var a=6;var c=d;if(b<d){c=b}if(c>=50){a=7}else{if(c>=40){a=6}else{a=4}}return a}},Export.flow={shape2svg:function(b,t,d){var D,J,A,z=b.path,E,F,u,f,H,a;J=t.attr({transform:\"translate(\"+b.x+\" \"+b.y+\")\"}).opacity(b.shape&&b.shape.alpha?b.shape.alpha:1);for(var I=0;I<z.length;I++){F=z[I],u=F.line,H=F.fill,E=\"#fff\",f=u.lineWidth,D={solid:[\"none\"],dashed:[f*5,f*2],dot:[f,f*1.5],dashdot:[f*5,f*2,f,f*2]};A=J.path(F.actions).stroke({width:f,color:u.lineColor.color,dasharray:D[u.lineStyle]});if(H&&H.type){E=this.getFill(b,H,J,A)}if(E){if(E.node){A.fill(E)}else{A.fill(E.color).opacity(E.opacity)}}}if(b.markers){var K=b.markers,m;for(var I=0;I<K.length;I++){var m=K[I];this.shape2svg(m,J)}}if(b.attrs){for(var I=0;I<b.attrs.length;I++){var M=J.group();var C=b.attrs[I],v=\"Microsoft Yahei\",k=13,y=C.type==\"link\"?\"#72ACE3\":\"#000\",h=k*1.25;if(C.type==\"link\"&&d==\"svg\"){M.link(\"http://\"+C.value).attr(\"transform\",\"translate(\"+C.x+\" \"+C.y+\")\").fill(\"#fff\")}else{M.attr(\"transform\",\"translate(\"+C.x+\" \"+C.y+\")\").fill(\"#fff\")}if(C.showType!=\"icon\"){var s=C.w/2;M.text(function(g){g.plain(C.text)}).fill(y).font({family:v+\",宋体\",size:k,weight:\"normal\",style:\"normal\",anchor:\"middle\"}).x(s).y(0)}else{this.convertImgToBase64(location.origin+C.icon,function(g){M.image(g).loaded(function(i){this.size(i.width,i.height)})})}}}if(b.strs){for(var I=0;I<b.strs.length;I++){var r=J.group();var B=b.strs[I],n=B.block,w=B.font,q=w.textAlign,v=w.family,k=w.size,e=w.bold,y=w.color,c=w.italic,o=w.underline,h=k*1.25*n.txt.length;if(n.rotate){r.attr(\"transform\",\"matrix(0 -1 1 0 \"+((n.h-h)/2+n.x)+\" \"+n.y+\")\").fill(\"#fff\")}else{if(w.vAlign==\"top\"){r.attr(\"transform\",\"matrix(1 0 0 1 \"+n.x+\" 1)\").fill(\"#fff\")}else{if(w.vAlign==\"bottom\"){r.attr(\"transform\",\"matrix(1 0 0 1 \"+n.x+\" \"+(n.h-20+n.y)+\")\").fill(\"#fff\")}else{r.attr(\"transform\",\"matrix(1 0 0 1 \"+n.x+\" \"+((n.h-h)/2+n.y)+\")\").fill(\"#fff\")}}}for(var G=0;G<n.txt.length;G++){var s=0,l=\"start\";var L=k*0.25;if(q==\"center\"){l=\"middle\";s=n.w/2}else{if(q==\"left\"){l=\"start\"}else{l=\"end\";s=n.w}}r.text(function(g){g.plain(n.txt[G])}).fill(y.color).font({family:v+\",宋体\",size:k,weight:e,style:c,anchor:l,\"text-decoration\":o}).x(s).y(G*(k+L))}}}if(b.angle){J.transform({rotation:b.angle/Math.PI*180})}},flowline2svg:function(b,l,q){var s,w=b.path,C=b.points,r=b.line,g=r.beginArrowStyle,e=r.endArrowStyle,a,u=b.font,f=r.lineWidth,A={solid:[\"none\"],dashed:[f*5,f*2],dot:[f,f*1.5],dashdot:[f*5,f*2,f,f*2]};var y=q.path(w.actions).stroke({width:f,color:r.lineColor.color,dasharray:A[r.lineStyle]}).fill(\"none\");if(g&&g!=\"none\"){y.marker(\"start\",this.getMarkerArrow(r,l,true)[g]())}if(e&&e!=\"none\"){y.marker(\"end\",this.getMarkerArrow(r,l)[e]())}if(w.text.length){a=this.getRect(y),b.w=a.width,b.h=a.height,b.x=a.left,b.y=a.top;var n=u.textAlign,t=\"Microsoft Yahei\",j=u.size,d=u.bold,v=u.color,c=u.italic,m=u.underline,h=j*1.25*w.text.length;s=q.group().attr(\"transform\",\"matrix(1 0 0 1 \"+C.mid.x+\" \"+(C.mid.y-h/2)+\")\");var E=s.path().fill(\"#fff\");for(var B=0;B<w.text.length;B++){var z=w.text[B];var D=j*1.25,k=\"middle\",o=0;s.text(function(i){i.plain(z)}).fill(v.color).font({family:t+\",宋体\",size:j,weight:d,style:c,anchor:k,\"text-decoration\":m}).x(o).y(B*D)}a=this.getRect(s);_path=[[\"M\",0,0],[\"H\",a.width],[\"V\",a.height],[\"H\",0],[\"V\",0],[\"Z\"]];E.plot(_path).attr(\"transform\",\"translate(\"+-a.width/2+\" 0)\")}},json2path:function(props,paths,line,fill){var path,pathArr=[],lineStyle,fillStyle,l,f,actions,action,hex,c1,c2,r,g,b,lineWidth,w=props.w,h=props.h,x=props.x,y=props.y;for(var i=0;i<paths.length;i++){path=[],l=$.extend({},line),f=$.extend({},fill),lineStyle=$.extend({},paths[i].lineStyle),fillStyle=$.extend({},paths[i].fillStyle),actions=paths[i].actions;if(fillStyle&&fillStyle.type==\"none\"){f={type:\"none\"}}else{if(fillStyle&&/^r-/.test(fillStyle.color)){hex=Export.getRGB(fill.color.color);c1=hex.replace(/rgb|\\(|\\)|\\s/gi,\"\").split(\",\"),c2=fillStyle.color.replace(/\\s/g,\"\").split(\",\"),r=c1[0],g=c1[1],b=c1[2];fillStyle.color=[eval(c2[0]),eval(c2[1]),eval(c2[2])].join(\",\");f=$.extend(f,fillStyle)}else{f=$.extend(f,fillStyle)}}lineWidth=l.lineWidth;lineStyle.lineWidth=eval(lineStyle.lineWidth);l=$.extend(l,lineStyle);if(l.lineColor){l.lineColor=Export.getColor(l.lineColor)}for(var j=0;j<actions.length;j++){action=actions[j];path.push(this.toPath[action.action](w,h,x,y,action,l.lineWidth))}pathArr.push({actions:path,line:l,fill:f})}return pathArr},line2path:function(f){var h=f.from,j=f.to,k={},p,l,a,m,o=f.lineStyle,c=f.linkerType,b=o.beginArrowStyle,d=o.endArrowStyle,g={x:0,y:0,w:0,h:0},n={x:0,y:0,w:0,h:0};a=l=j;k.from=h,k.to=j;if(f.points&&f.points.length>0){for(var e=0;e<f.points.length;e++){if(e==0){l=f.points[e]}k[\"p\"+(e+1)]=a=f.points[e]}}if(b&&b!=\"none\"&&b!=\"normal\"&&b!=\"cross\"){g=this.getMarkerArrow(o,null,b)[b]();k.from=h=Export.getMarkerPoint(h,l,g,c,true)}if(d&&d!=\"none\"&&d!=\"normal\"&&d!=\"cross\"){n=this.getMarkerArrow(o)[d]();if(c==\"normal\"){k.to=j=Export.getMarkerPoint(h,j,n,c,false)}else{k.to=j=Export.getMarkerPoint(a,j,n,c,false)}}p=[[\"M\",h.x,h.y]].concat(this.toPath[c](f.points,j)),k.mid=this.getPostOnLine[c](h,f.points,j,0.5);return[{actions:p,text:f.text.split(\"\\n\")},k]},marker2svg:function(j,l,g){var a=[],o,e,b=j.markers,c=j.markerOffset,k=4,f=Schema.config.markerSize,p=b.length*f+(b.length-1)*k,n=l.w/2-p/2,m=l.h-f-c,r={lineColor:\"50,50,50\",lineStyle:\"solid\",lineWidth:2,beginArrowStyle:\"none\",endArrowStyle:\"solidArrow\"},q={type:\"solid\",color:\"255,255,255\",alpha:1};for(var d=0;d<b.length;d++){o={},e=Schema.markers[b[d]].call(g,f),o.h=f,o.w=p,o.x=n,o.y=m,o.line=r,o.line.lineColor=Export.getColor(o.line.lineColor);o.fill=q;if(o.fill.alpha!=1){o.fill.color+=\",\"+o.fill.alpha}o.fill.color=Export.getColor(o.fill.color);o.path=this.json2path({w:p,h:f,x:n,y:m},e,o.line,o.fill);n+=f+k;a.push(o)}return a},attr2svg:function(g,m,b){var f,l=[],d,j,k,e,a;for(var c=0;c<m.length;c++){d=m[c],f={};if((d.value||d.icon)&&d.showType&&d.showType!=\"none\"){f.text=\"\",f.name=d.name,f.value=d.value,f.showType=d.showType,f.type=d.type,a=$(\"#attr_canvas_\"+d.id);if(d.showName){f.text=d.name+\"：\"}if(d.icon){f.icon=\"/images/data-attr/\"+d.icon+\".png\"}if(d.value){f.text+=d.value}k=a.width();e=a.height();f.w=k,f.h=e;switch(d.vertical){case\"mosttop\":f.y=-e;break;case\"topedge\":f.y=-e/2;break;case\"top\":f.y=0;break;case\"middle\":f.y=(g.h-e)/2;break;case\"bottom\":f.y=g.h-e;break;case\"bottomedge\":f.y=g.h-e/2;break;case\"mostbottom\":f.y=g.h;break}switch(d.horizontal){case\"mostleft\":f.x=-k;break;case\"leftedge\":f.x=-k/2;break;case\"left\":f.x=0;break;case\"center\":f.x=(g.w-k)/2;break;case\"right\":f.x=g.w-k;break;case\"rightedge\":f.x=g.w+k/2;break;case\"mostright\":f.x=g.w;break}l.push(f)}}return l},convertImgToBase64:function(d,e){var c=document.createElement(\"CANVAS\"),a=c.getContext(\"2d\"),b=new Image;b.crossOrigin=\"Anonymous\";b.onload=function(){c.height=b.height;c.width=b.width;a.drawImage(b,0,0);var f=c.toDataURL(\"image/png\");c=null;e(f)};b.src=d},getMarkerArrow:function(s,o,b){var a,k,e,p,j,g=b?180:0,q,c=s.lineWidth,f=c/2,i=Math.PI,n=Export.getMarkerRect,m;return{normal:function(){var d=12,r=Math.PI/5,l=d*Math.tan(r);m=n.getArrowRect(r,l*2,d,f);if(!o){return m}return o.marker(m.w,m.h,function(h){q=[[\"M\",0,0],[\"L\",d,l],[\"L\",0,l*2]];h.path(q).stroke({color:s.lineColor.color,width:c}).fill(\"none\").rotate(g,m.w/2+m.x,m.h/2+m.y);this.attr({markerUnits:\"userSpaceOnUse\",viewBox:[m.x,m.y,m.w,m.h].join(\" \")})}).ref(m.x+(b?0:m.w),l)},solidArrow:function(){p=12,arrowAngle=Math.PI/10,j=p*Math.tan(arrowAngle);m=n.getTriRect(arrowAngle,j*2,p,f);if(!o){return m}return o.marker(m.w,m.h,function(d){q=[[\"M\",p,j],[\"l\",-p,j],[\"v\",-j*2],[\"z\"]];d.path(q).stroke({color:s.lineColor.color,width:c}).fill(s.lineColor.color).rotate(g,m.w/2+m.x,m.h/2+m.y);this.attr({markerUnits:\"userSpaceOnUse\",viewBox:[m.x,m.y,m.w,m.h].join(\" \")})}).ref(m.x+(b?m.w:0),j)},dashedArrow:function(){p=12,arrowAngle=Math.PI/10,j=p*Math.tan(arrowAngle);m=n.getTriRect(arrowAngle,j*2,p,f);if(!o){return m}return o.marker(m.w,m.h,function(d){q=[[\"M\",p,j],[\"l\",-p,j],[\"v\",-j*2],[\"z\"]];d.path(q).stroke({color:s.lineColor.color,width:c}).fill(\"#fff\").rotate(g,m.w/2+m.x,m.h/2+m.y);this.attr({markerUnits:\"userSpaceOnUse\",viewBox:[m.x,m.y,m.w,m.h].join(\" \")})}).ref(m.x+(b?m.w:0),j)},solidCircle:function(){a=4,k=a*2,outerW=k+c;if(!o){return{x:-f,y:-f,w:outerW,h:outerW}}return o.marker(outerW,outerW,function(d){q=[[\"M\",0,a],[\"A\",a,a,0,0,1,a,0],[\"A\",a,a,0,1,1,0,a]];d.path(q).stroke({color:s.lineColor.color,width:c}).fill(s.lineColor.color);this.attr({markerUnits:\"userSpaceOnUse\",viewBox:[-f,-f,outerW,outerW].join(\" \")})}).ref(b?k:0,a)},dashedCircle:function(){a=4,k=a*2,outerW=k+c;if(!o){return{x:-f,y:-f,w:outerW,h:outerW}}return o.marker(outerW,outerW,function(d){q=[[\"M\",0,a],[\"A\",a,a,0,0,1,a,0],[\"A\",a,a,0,1,1,0,a]];d.path(q).stroke({color:s.lineColor.color,width:c}).fill(\"#fff\");this.attr({markerUnits:\"userSpaceOnUse\",viewBox:[-f,-f,outerW,outerW].join(\" \")})}).ref(b?k:0,a)},solidDiamond:function(){p=8,arrowAngle=Math.PI/7,j=p/Math.tan(Math.PI/2-arrowAngle);m=n.getTriRect(arrowAngle,j*2,p,f);m.x=-m.r,m.w=m.w*2-c;if(!o){return m}return o.marker(m.w,m.h,function(d){q=[[\"M\",0,j],[\"L\",p,0],[\"L\",p*2,j],[\"L\",p,j*2],[\"z\"]];d.path(q).stroke({color:s.lineColor.color,width:c}).fill(s.lineColor.color);this.attr({markerUnits:\"userSpaceOnUse\",viewBox:[m.x,m.y,m.w,m.h].join(\" \")})}).ref(b?0:j,p*2)},dashedDiamond:function(){p=8,arrowAngle=Math.PI/7,j=p/Math.tan(Math.PI/2-arrowAngle);m=n.getTriRect(arrowAngle,j*2,p,f);m.x=-m.r,m.w=m.w*2-c;if(!o){return m}return o.marker(m.w,m.h,function(d){q=[[\"M\",0,j],[\"L\",p,0],[\"L\",p*2,j],[\"L\",p,j*2],[\"z\"]];d.path(q).stroke({color:s.lineColor.color,width:c}).fill(\"#fff\");this.attr({viewBox:[m.x,m.y,m.w,m.h].join(\" \")})}).ref(b?0:j,p*2)},cross:function(){e=14,j=12,m=n.getDiagRect(e,j/2,f);if(!o){return m}return o.marker(m.w,m.h,function(d){q=[[\"M\",m.w+m.x*2,0],[\"L\",0,j]];d.path(q).stroke({color:s.lineColor.color,width:c}).fill(\"none\");this.attr({markerUnits:\"userSpaceOnUse\",viewBox:[m.x,m.y,m.w,m.h].join(\" \")})}).ref(m.x+(b?0:m.w),m.h/2+m.y)}}},getRect:function(c){var b=c[0]||c.node||c;if($(b).length<=0){return}var a=b.getBoundingClientRect();return{width:a.width,height:a.height,top:a.top,bottom:a.bottom,left:a.left,right:a.right}},getRotated:function(b,i,c){var e=i.y-b.y;var g=i.x-b.x;var a=Math.sqrt(Math.pow(e,2)+Math.pow(g,2));if(a==0||c==0){return i}var f=Math.atan(Math.abs(i.x-b.x)/Math.abs(b.y-i.y));if(i.x>=b.x&&i.y>=b.y){f=Math.PI-f}else{if(i.x<=b.x&&i.y>=b.y){f=Math.PI+f}else{if(i.x<=b.x&&i.y<=b.y){f=Math.PI*2-f}}}f=f%(Math.PI*2);var d=(f+c)%(Math.PI*2);var j={x:b.x+Math.sin(d)*a,y:b.y-Math.cos(d)*a};return j},getFill:function(shape,fill,draw,path){var h=shape.h,w=shape.w;if(fill.type==\"none\"){return{color:\"none\",opacity:1}}else{if(fill.type==\"solid\"){return Export.getColor(fill.color||\"#fff\")}else{if(fill.gradientType==\"linear\"){var p={x:shape.x,y:shape.y,w:shape.w,h:shape.h},begin,end,angle;if(p.w>p.h){begin={x:0,y:p.h/2},end={x:p.w,y:p.h/2},angle=(fill.angle+Math.PI/2)%(Math.PI*2)}else{begin={x:p.w/2,y:0};end={x:p.w/2,y:p.h};angle=fill.angle}if(angle!=0){var center={x:p.w/2,y:p.h/2};begin=this.getRotated(center,begin,angle);end=this.getRotated(center,end,angle);if(begin.x<0){begin.x=0}if(begin.x>shape.w){begin.x=shape.w}if(begin.y<0){begin.y=0}if(begin.y>shape.h){begin.y=shape.h}if(end.x<0){end.x=0}if(end.x>shape.w){end.x=shape.w}if(end.y<0){end.y=0}if(end.y>shape.h){end.y=shape.h}}return draw.gradient(fill.gradientType,function(stop){var bc=Export.getColor(fill.beginColor);var ec=Export.getColor(fill.endColor);stop.at({offset:0,color:bc.color,opacity:bc.opacity});stop.at({offset:1,color:ec.color,opacity:ec.opacity})}).from(begin.x/p.w,begin.y/p.h).to(end.x/p.w,end.y/p.h)}else{if(fill.gradientType==\"radial\"){return draw.gradient(fill.gradientType,function(stop){var bc=Export.getColor(fill.beginColor);var ec=Export.getColor(fill.endColor);if(fill.radius<0.1){stop.at({offset:fill.radius,color:ec.color,opacity:ec.opacity})}stop.at({offset:0.1,color:bc.color,opacity:bc.opacity});if(fill.radius>=0.1){stop.at({offset:fill.radius,color:ec.color,opacity:ec.opacity})}})}else{if(fill.type==\"image\"){var filePath=fill.fileId;var cate=filePath.match(/andriod_icons|ios_icons/);if(cate){var name=filePath.substring(filePath.lastIndexOf(\"/\")+1,filePath.lastIndexOf(\".\"));var icon=Export[cate[0]][name];var pattern=draw.pattern(shape.w,shape.h,function(add){var x=(shape.w-icon.width)/2,y=(shape.h-icon.height)/2;add.path(icon.path).fill(icon.color).translate(x,y)});path.fill(pattern);return}cate=filePath.match(/\\.svg/);if(cate){return}var flag=/image/.test(filePath);var url=flag?location.origin+filePath:location.origin+\"/file/id/\"+filePath+\"/diagram_user_image\";this.convertImgToBase64(url,function(img){var pattern=draw.pattern(shape.w,shape.h,function(add){var x=parseInt(eval(fill.imageX)),y=parseInt(eval(fill.imageY)),imgW=fill.imageW||shape.w,imgH=fill.imageH||shape.h;if(fill.display==\"fill\"){if(shape.w/shape.h>imgW/imgH){imgH=imgH*shape.w/imgW,imgW=shape.w}else{imgW=imgW*shape.h/imgH,imgH=shape.h}}x=typeof x==\"number\"&&!isNaN(x)?x:(shape.w-imgW)/2;y=typeof y==\"number\"&&!isNaN(y)?y:(shape.h-imgH)/2;add.image(img,imgW,imgH).move(x,y)});path.fill(pattern)})}else{return}}}}}},textSplit:function(props,blocks,font){var h,w,tw,div_temp,block,text={},post,f,width,val,lines,line,textTemp,lineBlock,lineBlocks=[],name=font.orientation;h=w=/horizontal/.test(name)?props.h:props.w;for(var k=0;k<blocks.length;k++){block=blocks[k],f=$.extend(block.font,$.extend({},font));post=block.position;if(/horizontal/.test(name)){tw=eval(post.h)}else{tw=eval(post.w)}h=props.h,w=props.w,f=$.extend(f,block.fontStyle);div_temp=document.getElementById(\"area_div_temp\");if(!div_temp){div_temp=document.createElement(\"div\");div_temp.setAttribute(\"id\",\"area_div_temp\");document.body.appendChild(div_temp)}div_temp.style.opacity=0;div_temp.style.visibility=\"hidden\";div_temp.style.display=\"inline-block\";div_temp.style.fontSize=f.size+\"px\";if(!block.text){continue}val=block.text.replace(/\\u00A0|\\u0000/g,\" \");lines=val.split(/\\n/g);if(/horizontal/.test(name)){lineBlock={x:eval(post.x),y:eval(post.y)+tw,w:tw,h:eval(post.w),txt:[],rotate:true}}else{lineBlock={x:eval(post.x),y:eval(post.y),w:tw,h:eval(post.h),txt:[],rotate:false}}for(var i=0;i<lines.length;i++){line=lines[i];div_temp.innerHTML=\"\";div_temp.innerHTML=line;if(div_temp.offsetWidth+10>tw){div_temp.innerHTML=\"\";textTemp=\"\";for(var j=0;j<line.length;j++){div_temp.innerHTML+=line[j];if(div_temp.offsetWidth+10<=tw){textTemp+=line[j];if(j==line.length-1){lineBlock.txt.push(textTemp);textTemp=\"\";div_temp.innerHTML=\"\"}}else{lineBlock.txt.push(textTemp+line[j]);textTemp=\"\";div_temp.innerHTML=\"\"}}}else{lineBlock.txt.push(line);textTemp=\"\";div_temp.innerHTML=\"\"}}div_temp.parentNode.removeChild(div_temp);lineBlocks.push({block:lineBlock,font:f})}return lineBlocks},getPostOnLine:{curve:function(h,c,g,b){var a,f,e=c[0],d=c[1];a=h.x*Math.pow((1-b),3)+3*e.x*b*(1-b)*(1-b)+3*d.x*b*b*(1-b)+g.x*b*b*b,f=h.y*Math.pow((1-b),3)+3*e.y*b*(1-b)*(1-b)+3*d.y*b*b*(1-b)+g.y*b*b*b;return{x:a,y:f}},broken:function(h,m,j,n){var o=[],a,c=0,e,d;function k(l,i){if(l.x==i.x){return{len:Math.abs(i.y-l.y),hor:false,right:i.y>l.y?true:false}}return{len:Math.abs(i.x-l.x),hor:true,right:i.x>l.x?true:false}}a=k(h,m[0]),c+=a.len,o[0]=a;for(var b=0;b<m.length;b++){if(b==m.length-1){a=k(m[b],j),c+=a.len,o.push(a)}else{a=k(m[b],m[b+1]),c+=a.len,o.push(a)}}a=0;for(var b=0;b<o.length;b++){a+=o[b].len;if(a>=c/2){var g=o[b].right?-a+c/2:a-c/2,f=m[b]?m[b]:j;if(o[b].hor){e=f.x+g,d=f.y}else{e=f.x,d=f.y+g}break}}return{x:e,y:d}},normal:function(f,c,e,b){var a,d;a=f.x+Math.abs((f.x-e.x)*b),d=f.y+Math.abs((f.y-e.y)*b);return{x:a,y:d}}},toPath:{move:function(w,h,x,y,a,lineWidth){return[\"M\",eval(a.x),eval(a.y)]},line:function(w,h,x,y,a,lineWidth){return[\"L\",eval(a.x),eval(a.y)]},quadraticCurve:function(w,h,x,y,a,lineWidth){return[\"Q\",eval(a.x1),eval(a.y1),eval(a.x),eval(a.y)]},curve:function(w,h,x,y,a,lineWidth){if(typeof w==\"number\"||typeof w==\"string\"){return[\"C\",eval(a.x1),eval(a.y1),eval(a.x2),eval(a.y2),eval(a.x),eval(a.y)]}return[[\"C\",w[0].x,w[0].y,w[1].x,w[1].y,h.x,h.y]]},close:function(e,f,c,g,d,b){return[\"Z\"]},broken:function(c,d){var a=[];for(var b=0;b<c.length;b++){a.push([\"L\",c[b].x,c[b].y])}a.push([\"L\",d.x,d.y]);return a},normal:function(a,b){return[[\"L\",b.x,b.y]]}}},Export.xmind={getTopicId:function(){var b=Math.random();var a=(b+new Date().getTime());return a.toString(16).replace(\".\",\"\")}};"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/global.css",
    "content": "::-webkit-scrollbar{width:12px;height:12px}::-webkit-scrollbar-thumb{border-width:2px;border-style:solid;border-color:#fff;border-radius:6px;background-color:#c6c6c6}::-webkit-scrollbar-thumb:hover{background:#999}body,html{background:#fff;color:#000;font:400 13px arial,Microsoft Yahei!important;margin:0;overflow:hidden;height:100%;-webkit-font-smoothing:antialiased}ol,ul{margin:0;padding:0;list-style:none}a{font-size:inherit;text-decoration:none;color:#666;cursor:pointer}select{cursor:pointer}h1,h2,h3,h4,h5,h6{margin:0}div,input,textarea,ul{resize:none;outline:0;font-size:inherit}.fl{float:left}.fr{float:right}.clear{clear:both}.link{color:#4386f5}.clearfix:after{content:\".\";display:block;height:0;clear:both;visibility:hidden}.full{display:block;width:100%}.hide{display:none!important}.center{margin:0 auto}.button{margin-top:20px;display:inline-block;width:76px;text-align:center;padding:6px 12px;color:#fff;background:#4386f5;border-radius:3px;cursor:pointer}.pro-btn.default{background:#4386f5;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.pro-btn.basic.default{box-shadow:0 0 0 1px #4386f5 inset!important;color:#4386f5!important}.pro-btn.green{background:#16ab39;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.pro-btn.basic.green{box-shadow:0 0 0 1px #16ab39 inset!important;color:#16ab39!important}.pro-btn{cursor:pointer;display:inline-block;min-height:1em;outline:0;border:none;vertical-align:baseline;font-family:'Arial, 黑体';font-size:1rem;padding:11px 1.5em;text-transform:none;line-height:1em;font-style:normal;text-align:center;text-decoration:none;border-radius:.28571429rem;user-select:none;transition:opacity .1s ease,background-color .1s ease,color .1s ease,box-shadow .1s ease,background .1s ease;will-change:'';-webkit-tap-highlight-color:transparent;background:#fff;color:rgba(0,0,0,.6);font-weight:400;text-shadow:none;box-shadow:0 0 0 1px rgba(34,36,38,.35) inset}.pro-btn.basic{text-shadow:none;background-image:none;background:0 0!important;color:rgba(0,0,0,.6)!important;font-weight:400;border-radius:.28571429rem;text-transform:none;text-shadow:none!important;box-shadow:0 0 0 1px rgba(34,36,38,.35) inset}.pro-btn.basic:active,.pro-btn.basic:hover{background:0 0!important}.pro-btn.default:hover{background:#1678c2;color:#fff;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.pro-btn.default:active{background:#1171b4;color:#fff;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.pro-btn.default.basic:hover{color:#1171b4;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.pro-btn.green:hover{background:#0c9628;color:#fff;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.pro-btn.green:active{background:#09871d;color:#fff;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.pro-btn.green.basic:hover{color:#09871d;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.pro-btn:hover{background:#fff;color:rgba(0,0,0,.8);box-shadow:0 0 0 1px rgba(34,36,38,.5) inset,0 0 0 0 rgba(34,36,38,.35) inset}.pro-btn:active{background:#fff;color:rgba(0,0,0,.8);box-shadow:0 0 0 1px rgba(34,36,38,.55) inset,0 0 0 0 rgba(34,36,38,.15) inset}.pro-btn.disable{box-shadow:0 0 0 1px rgba(34,36,38,.15) inset}.triangle span{position:absolute;border-color:transparent;border-style:dashed dashed solid;border-width:0 9px 9px;width:0;height:0;display:block;right:70px}.triangle .top{border-bottom-color:#f3f4f5;z-index:1;top:-7.5px}.triangle .down{border-bottom-color:#ccc;top:-9px}@font-face{font-family:icons;src:url(//at.alicdn.com/t/font_142592_5owg4dv45kk8d7vi.eot);src:url(//at.alicdn.com/t/font_142592_5owg4dv45kk8d7vi.eot?#iefix) format('embedded-opentype'),url(//at.alicdn.com/t/font_142592_5owg4dv45kk8d7vi.woff) format('woff'),url(//at.alicdn.com/t/font_142592_5owg4dv45kk8d7vi.ttf) format('truetype'),url(//at.alicdn.com/t/font_142592_5owg4dv45kk8d7vi.svg#iconfont) format('svg')}.icons{font-family:icons;font-size:16px;font-style:normal;cursor:pointer}.icons.middle{display:inline-block;vertical-align:middle;margin-left:10px}.multi-input{border:1px solid #d9d9d9;border-radius:3px;padding:0 4px}.multi-input-vals{max-height:150px;overflow-x:hidden;overflow-y:auto}.multi-input-value{font-family:arial,微软雅黑;background:#e0e0e0;font-size:13px;text-align:center;margin:8px 0 0 4px;color:#444;padding:5px 6px 5px 10px;border-radius:3px;display:inline-block}.multi-input-value span{display:inline-block;vertical-align:middle;margin-left:3px}.multi-input-value span:last-child{font-size:12px;margin-left:6px;vertical-align:2px;cursor:pointer;color:#999}.multi-input-value span:last-child:hover{color:#666}.multi-input input{padding-left:6px;width:300px;border:0;margin:6px 0}.drop-btn{display:inline-block;font-size:12px;padding-left:6px}.drop-btn .icons{vertical-align:-2px}.popWindow{position:fixed;z-index:999;background:#fff;padding:10px 15px;border-radius:3px;display:none;box-shadow:1px 1px 4px #ddd;min-width:150px;border:1px solid #ddd;transition:all .2s ease-in-out;overflow:hidden}.popWindow>div{line-height:24px}.popWindow .pop-text{line-height:24px}.popWindow .pop-text-i{font-style:italic;font-size:12px;color:#888}.popmenu{padding:5px 0;background:#fff;display:none;outline:0}.popmenu.popover{display:block}.shadow_1{-ms-box-shadow:0 2px 4px rgba(0,0,0,.2);-o-box-shadow:0 2px 4px rgba(0,0,0,.2);-moz-box-shadow:-1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2);border:1px solid #bebebe;background:#fff;text-align:left}.radius3{-moz-border-radius:3px;-webkit-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px}.disable{opacity:.5;cursor:default}.popmenu li{padding:0 20px;line-height:30px;cursor:pointer;position:relative;color:#000}.popmenu li:hover{background:#f3f3f3}.popmenu li.active{background:#f3f3f3}.popmenu li:hover a{text-decoration:none;color:#fff}.popmenu li.split{height:1px;margin:9px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.popmenu li.split:hover{background-color:#e5e5e5;background-image:none}.alert{color:#c09853;padding:8px 14px;text-shadow:0 1px 0 rgba(255,255,255,.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert.error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert.success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6;height:16px}.alert.info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.popover{position:absolute;width:auto;font-size:12px}.popover .arrow{width:32px;height:32px;overflow:hidden;display:block;position:absolute;top:-32px;left:70px;z-index:2000}.popover .button{width:50px;padding:3px 6px 4px 6px;font-size:13px;margin-top:8px}.popover .cancel{cursor:pointer}.faces-lib{width:390px;height:130px;padding:5px;display:none;background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:1px 1px 3px #ddd}.faces-lib ul{background:url(/assets/images/faces/faces.png) no-repeat;cursor:pointer;height:130px}.faces-lib ul li{width:26px;height:26px;float:left}.ico-face{vertical-align:-8px}.input-tip{background:#fff;z-index:9;position:fixed;opacity:0;display:none;font-size:12px;color:red}.number-tip{font-size:14px;font-weight:700;color:red;display:none;opacity:0;position:fixed;z-index:2}#hover_tip{position:absolute;z-index:100000000000;max-width:250px;color:#fff}#hover_tip .tip_arrow{height:6px;background:url(images/common-16.png) center 0 no-repeat}#hover_tip .tip_arrow.tip_right{left:-6px;top:5px;width:6px;height:15px;position:absolute;background-position:-2px 0}#hover_tip .tip_arrow.tip_top{bottom:-6px;width:100%;position:absolute;background-position:center -8px}#hover_tip .tip_arrow.tip_left{right:-6px;top:5px;width:6px;height:15px;position:absolute;background-position:-9px 0}#hover_tip .tip_content{padding:5px 8px;font-size:12px;background:#333;background:rgba(50,50,50,.95);word-wrap:break-word;word-break:normal}.window-mask{background:#ccc;position:fixed;width:1000px;top:0;left:0;opacity:.6;z-index:2}.dialog{display:none}.new-form-switch{display:inline-block;margin-left:10px;margin-bottom:-10px}.switchbutton.gray{background:#e5e5e5}.switchbutton{display:inline-block;border-radius:18px;position:relative;cursor:pointer;font-size:13px;width:91px;height:30px;line-height:20px}.switchbutton .switch{width:22px;height:22px;background:#fff}.switchbutton .switch.left{left:5px}.switchbutton .switch.right{right:5px}.switchbutton .switch{position:absolute;border-radius:50%;top:4px;cursor:pointer;text-align:center}.switchbutton .switch-right{position:absolute;right:10px;top:5px;color:#9e9e9e;font-size:12px;font-weight:100}.switchbutton.green{background:#4ebc79;color:#fff}.switchbutton .switch-left{position:absolute;left:10px;top:5px;display:none;background:0 0;font-size:12px;font-weight:100}.suggest-menu{border:1px solid #d9d9d9;border-top:1px solid silver;box-shadow:3px 4px 8px #ccc;background:#fff;display:none;z-index:1004;list-style:none;position:fixed}.suggest-menu .suggest-item{padding:5px;cursor:pointer}.suggest-menu .active,.suggest-menu .suggest-item:hover{background:#eee}.dialog-box{position:fixed;z-index:999;background-color:#fff;border:1px solid #c0c2c4;padding:20px;display:inline-block;color:#5b636b;-moz-box-shadow:0 5px 15px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 5px 15px 0 rgba(0,0,0,.2);-o-box-shadow:0 5px 15px 0 rgba(0,0,0,.2);-ms-box-shadow:0 5px 15px 0 rgba(0,0,0,.2);box-shadow:0 5px 15px 0 rgba(0,0,0,.2);-moz-border-radius:4px;-webkit-border-radius:4px;-o-border-radius:4px;border-radius:4px;min-width:330px}.dialog-close{background:transparent url(images/common-16.png) 0 -16px no-repeat;position:absolute;top:15px;right:15px;width:16px;height:16px;cursor:pointer;display:none}.dialog-close:hover{background-position:0 -32px}.dlg-import{width:560px;height:434px;display:none}.dialog-title{text-align:left;cursor:move;font-size:24px;line-height:26px;color:#333;margin:0 20px 20px 0;font-weight:200;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.dlg-content{position:relative;z-index:2;display:block;font-size:1em;line-height:1.4;padding:0 0 .5rem 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.dlg-content h3{margin-top:0}.dlg-buttons{text-align:right;margin-top:12px}.dialog-win{overflow:hidden;padding-right:0;z-index:9}.dialog-win-left{display:inline-block;width:160px;position:absolute;height:90%;left:0;border-top:1px solid #ddd;border-right:1px solid #ddd;padding-top:15px}.dialog-win-left li{display:block;padding-left:15px;line-height:27px;border-left:5px solid transparent;margin-top:10px}.dialog-win-left li:first-child{margin-top:0}.dialog-win-left li.active{border-left:5px solid #4386f5;font-weight:700}.dialog-win-right{margin-left:140px;border-radius:3px;overflow-y:auto;padding:15px 15px 0 15px;position:relative;min-width:450px;border-top:1px solid #ddd;min-height:300px}.dialog-win-con{margin-top:2px;display:none}.dialog-win-con .des{padding:0 0 8px 0;line-height:20px}.dialog-win-con .des.bold{font-size:13px;font-weight:700}.dialog-win-con li{padding:5px 0}.dialog-win-con .form .title{display:inline-block;width:15%;vertical-align:top;line-height:20px;color:#333}.dialog-win-con .form .title.top{display:block;width:100%;text-align:left}.dialog-win-con .form .content{display:inline-block;line-height:25px}.dialog-win-con .form .textarea{width:437px;height:80px}.dialog-win-con .form label[for]{cursor:pointer;color:#777}.publish-content{text-align:center;padding:108px 0;width:340px;margin:auto}.publish-content>div{font-size:13px;width:150px;display:inline-block;height:100px;cursor:pointer;position:relative;vertical-align:top}.publish-content>.item-seq{width:40px;line-height:70px}.publish-content .icons{display:block;font-size:60px;margin-bottom:8px;color:#888}.feedTags{border:1px solid #d9d9d9;border-top:1px solid silver;display:inline-block;padding:5px;height:50px;overflow-y:auto;border-radius:2px;width:437px;cursor:text}.feedTags .tag-txt{width:190px;height:18px;margin:0;padding:0;line-height:18px;border:0 none}.feedTags .tagitem{position:relative;display:inline-block;margin:0 5px 5px 0;padding:1px 5px 0 5px;border-radius:2px;font-size:12px;height:25px;line-height:25px;white-space:nowrap;cursor:default;text-align:center;background-color:#4386f5;color:#fff}.feedTags .tagitem .close-tag{float:right;margin-left:3px;margin-top:-2px;font-size:12px;cursor:pointer}.embed-left{overflow:auto;height:250px;position:relative;border:1px solid #999}.embed-preview-wrap{position:absolute;top:50%;left:50%}.embed-preview{margin:auto}.embed_attributes{margin-top:10px;position:relative}.embed-size{margin-top:5px}.embed-size .title{font-weight:700;margin:0 5px;display:inline-block}.embed-size .input{width:35px;padding:3px;margin-right:5px;display:inline-block}.share-control-line .share-link-control,.share-control-line>.tip{display:inline-block;vertical-align:middle;line-height:30px}.share-control-line .share-link-control{margin-left:30px;color:#4386f5;cursor:pointer}.global_top_dialog{position:absolute;top:40px;height:auto;width:auto;left:50%;padding:0;margin:0;display:none;opacity:0;background:#5da206;color:#fff;line-height:26px;padding:0 20px;z-index:9999;-webkit-transition:all 80ms cubic-bezier(.7,0,.7,1) 0s;-moz-transition:all 80ms cubic-bezier(.7,0,.7,1) 0s;-o-transition:all 80ms cubic-bezier(.7,0,.7,1) 0s;transition:all 80ms cubic-bezier(.7,0,.7,1) 0s;-khtml-transition:all 80ms cubic-bezier(.7,0,.7,1) 0s;-ms-transition:all 80ms cubic-bezier(.7,0,.7,1) 0s}.global_top_dialog.show{opacity:1;-webkit-transition:all .25s cubic-bezier(.7,0,.7,1) 0s;-moz-transition:all .25s cubic-bezier(.7,0,.7,1) 0s;-o-transition:all .25s cubic-bezier(.7,0,.7,1) 0s;transition:all .25s cubic-bezier(.7,0,.7,1) 0s;-khtml-transition:all .25s cubic-bezier(.7,0,.7,1) 0s;-ms-transition:all .25s cubic-bezier(.7,0,.7,1) 0s}.global_top_dialog.noarrow{border-radius:0 0 3px 3px;box-shadow:1px 1px 3px #ccc}.top_success{background:#5da206;color:#fff;-webkit-box-shadow:0 0 2px rgba(0,0,0,.2);-moz-box-shadow:0 0 2px rgba(0,0,0,.2);-ms-box-shadow:0 0 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.2)}.top_success .left_arrow{position:absolute;top:0;left:-26px;border:13px solid #5da206;border-bottom-color:transparent;border-left-color:transparent}.top_success .right_arrow{position:absolute;top:0;right:-26px;border:13px solid #5da206;border-bottom-color:transparent;border-right-color:transparent}.top_success .content{position:relative;white-space:nowrap;line-height:26px}.top_error{background:#f60;color:#fff;-webkit-box-shadow:0 0 2px rgba(0,0,0,.2);-moz-box-shadow:0 0 2px rgba(0,0,0,.2);-ms-box-shadow:0 0 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.2)}.top_error a{text-decoration:underline;color:#fff}.top_error .left_arrow{position:absolute;top:0;left:-26px;border:13px solid #f60;border-bottom-color:transparent;border-left-color:transparent}.top_error .right_arrow{position:absolute;top:0;right:-26px;border:13px solid #f60;border-bottom-color:transparent;border-right-color:transparent}.top_error .content{position:relative;white-space:nowrap;line-height:26px}.top_error a{text-decoration:underline;color:#fff}.opacity{opacity:.6}.show{display:block!important}.global-leftbot-dialog{position:absolute;background:rgba(0,0,0,.5);left:18px;bottom:18px;line-height:30px;border-radius:2px;color:#fff;z-index:9;padding:5px 15px;font-size:12px;font-weight:700}.left-bot-default{background-color:rgba(0,0,0,.7)}.page{display:block;clear:both;text-align:center}.pagination{display:inline-block}.pagination a{display:inline-block;float:left;padding:0 10px;line-height:28px;text-align:center;border-width:1px 1px 1px 0;border-style:solid;border-color:#ccc;font-size:13px;background-color:#fff}.pagination a:first-child{border-radius:3px 0 0 3px;border-left:1px solid #ccc}.pagination a:last-child{border-radius:0 3px 3px 0}.pagination a:hover{background-color:#f5f5f5;text-decoration:none;color:#005580}.pagination .disabled{background-color:#f9f9f9;color:#999;cursor:default}.pagination .disabled:hover{color:#999}.pagination .ellipsis{background-color:#fff}.pagination .ellipsis:hover{background-color:#fff}.export-box{margin:10px 0 5px;color:#5b636b;font-family:'Microsoft Yahei','Helvetica Neue',Helvetica,Arial,sans-serif}.export-list{padding:10px 0;border-bottom:1px solid #efefef;font-weight:700}.export-menu{line-height:20px;font-weight:700}.suffix{font-weight:400}.export_des{font-weight:400;color:#555;margin-left:15px}.header{height:50px;padding:0 40px;position:relative;background:#fff;border-bottom:1px solid #e5e5e5;box-shadow:0 3px 2px -2px rgba(200,200,200,.15)}.header .logo{margin:12px 12px 3px 20px;display:inline-block;font-weight:700}.header .left-item{min-width:80px;position:absolute;left:230px;display:inline-block;top:17px;height:100%}.header .left-item .icons{vertical-align:-2px;color:#555}.header .left-item a{margin-right:36px;text-decoration:none;color:#333;display:inline-block}.header .left-item a.active{color:#4386f5}.header .left-item a:last-child{margin-right:0;margin-left:8px}.header .right-item{position:absolute;right:22px;display:inline-block;text-align:right;top:10px}.header .right-item .user-logo{position:absolute;right:-5px;top:-5px;cursor:pointer;border:5px solid transparent;border-radius:50%}.user-logo>img{width:30px;height:30px;display:block;border-radius:50%}.right-item>a{display:inline-block;margin-left:14px;margin-top:6px;color:#333}.user-logo>span{width:30px;height:30px;display:inline-block;font-size:14px;line-height:30px;border-radius:50%;text-align:center;background:#f7b75d;color:#fff;font-weight:600}.header .right-item .user-logo.active{border:5px solid #ccc}.header .right-item .notice-icon{line-height:50px;margin-right:55px;position:relative;cursor:pointer;display:inline-block;height:50px;margin-top:-11px}.header .right-item .notice-icon .icons{font-size:18px;color:#888}.gift-box{display:inline-block;color:red;position:absolute;right:123px;top:0;width:142px;height:50px;background:url(/assets/images/younclickme.png) center center no-repeat;background-size:100%}.gift-box .icons{font-size:21px}.header .search-btn{font-size:12px;color:#444;cursor:pointer;margin-right:25px}.txt{border:1px solid #d9d9d9;border-top:1px solid silver;padding:9px 5px;width:180px;background-color:#fff;border-radius:2px}.txt:hover{border:1px solid #b8b8b8;border-top:1px solid #a1a1a1}.txt:focus{border:1px solid #63abf7;box-shadow:0 0 5px #93c4f7;-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}.filecheck-con .icons{display:inline-block;font-size:48px;color:#f89406}.filecheck-con .filecheck-right{display:inline-block;margin-left:15px;font-size:14px;line-height:23px;letter-spacing:.5px}.filecheck-con .filecheck-right a{color:#4386f5}.user-quickinfo>*{width:32px;height:32px;vertical-align:middle;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;margin-right:4px}.user-quickinfo>span{display:inline-block;font-size:14px;line-height:32px;border-radius:50%;text-align:center;background:#f7b75d;color:#fff;font-weight:600}header{height:50px;padding:0 40px;position:relative;background:#fff;border-bottom:1px solid #e5e5e5;box-shadow:0 3px 2px -2px rgba(200,200,200,.15)}header .logo-text{display:inline-block;margin-left:8px;font-size:19px;vertical-align:6px;text-indent:-9999px}header.red{background:#d23245;border-bottom:1px solid #d23245}header.red .left-item a{color:#fff}header.red .left-item a.active{color:#fff;font-weight:700}header.red .right-item .notice-icon .icons{color:#fff}header .logo{margin:12px 12px 3px 20px;display:inline-block;font-weight:700}header .left-item{min-width:80px;position:absolute;left:230px;display:inline-block;top:17px;height:100%;top:0}header .left-item .icons{vertical-align:-2px;color:#555}header .left-item a{margin-right:36px;text-decoration:none;color:#333;display:inline-block;height:100%;line-height:50px}header .left-item a.active{color:#4386f5}header .left-item a:last-child{margin-right:0;margin-left:8px}header .right-item{position:absolute;right:22px;display:inline-block;text-align:right;top:10px}header .right-item .user-logo{position:absolute;right:-5px;top:-5px;cursor:pointer;border:5px solid transparent;border-radius:50%}header .right-item .user-logo.active,header .right-item .user-logo:hover{border:5px solid #ccc}header .right-item .notice-icon{line-height:50px;margin-right:55px;position:relative;cursor:pointer;display:inline-block;height:50px;margin-top:-10px}header .right-item .notice-icon .icons{font-size:18px;color:#888}header .search-btn{font-size:12px;color:#444;cursor:pointer;margin-right:25px}header .groupName{max-width:220px;display:inline-block;font-size:16px;height:16px;line-height:16px;font-family:arial,Microsoft yahei;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}header .header-btn{background:#fff;border:1px solid #ccc;position:absolute;right:123px;padding:4px 8px;border-radius:3px;font-size:12px;color:#333;top:12px;display:none}header .header-btn:hover{box-shadow:1px 1px 3px #ddd}footer{min-height:260px;padding:10px 10px;margin-top:20px}footer .wx-con{right:0;top:94px;width:130px;position:absolute;text-align:center}footer .wx-con img{width:100px;display:inline-block;margin-bottom:7px}footer .wx-con span{display:block}footer .footer-con{max-width:700px;margin:0 auto;position:relative}footer .footer-title{font-size:20px;margin-bottom:20px;text-align:center;color:#555}footer .footer-item{line-height:30px;color:#777}footer .footer-item a{font-size:13px;color:#444}footer .footer-nav{margin-bottom:14px;color:#666;font-size:13px;text-align:center}footer .footer-nav a{display:inline-block;margin-right:10px}.rotate{animation:.6s linear rotate;-webkit-animation:.6s linear infinite rotate;-o-animation:.6s linear infinite rotate;-moz-animation:.6s linear infinite rotate;-ms-animation:.6s linear infinite rotate}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0);color:red}to{-webkit-transform:rotate(360deg);color:#4386f5}}@-moz-keyframes rotate{from{-moz-transform:rotate(0);color:#000}to{-moz-transform:rotate(360deg);color:#4386f5}}@-ms-keyframes rotate{from{-ms-transform:rotate(0);color:#000}to{-ms-transform:rotate(360deg);color:#4386f5}}@-o-keyframes rotate{from{-o-transform:rotate(0);color:#000}to{-o-transform:rotate(360deg);color:#4386f5}}@keyframes rotate{from{transform:rotate(0);color:#000}to{transform:rotate(360deg);color:#4386f5}}.center-middle{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.badge{display:inline-block;font-weight:700;line-height:13px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);white-space:nowrap;background-color:#999;border-radius:10px;text-align:center;padding:1px 4px}.badge.warning{background-color:#f89406}.global-tip{font-weight:400;min-width:7px;position:absolute;top:8px;right:-10px}.disabled-mask{background:#fff;opacity:0;cursor:default!important;position:absolute}.opacity{opacity:.5!important;cursor:default}.disable{text-shadow:none!important;cursor:default!important;pointer-events:none}.disable:hover{cursor:default!important;text-shadow:none!important}.ball-spinner{width:100px;text-align:center}.ball-spinner>div{width:20px;height:20px;display:inline-block;margin-right:10px;-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%;background:#aaa;-webkit-animation:ballbounce 1.4s infinite ease-in-out;-o-animation:ballbounce 1.4s infinite ease-in-out;animation:ballbounce 1.4s infinite ease-in-out;-ms-animation:ballbounce 1.4s infinite ease-in-out}.ball-spinner .ball1{-webkit-animation-delay:.32s;-o-animation-delay:.32s;animation-delay:.32s}.ball-spinner .ball2{-webkit-animation-delay:.16s;-o-animation-delay:.16s;animation-delay:.16s}.keyframes-scale{animation:1.2s linear scale;-webkit-animation:1.2s linear infinite scale;-o-animation:1.2s linear infinite scale;-moz-animation:1.2s linear infinite scale;-ms-animation:1.2s linear infinite scale}@-webkit-keyframes ballbounce{0%,100%,80%{-webkit-transform:scale(0)}40%{-webkit-transform:scale(1)}}@-moz-keyframes ballbounce{0%,100%,80%{-moz-transform:scale(0)}40%{-moz-transform:scale(1)}}@-o-keyframes ballbounce{0%,100%,80%{-o-transform:scale(0)}40%{-o-transform:scale(1)}}@-ms-keyframes ballbounce{0%,100%,80%{-ms-transform:scale(0)}40%{-ms-transform:scale(1)}}@keyframes ballbounce{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@-webkit-keyframes scale{0%,100%,80%{-webkit-transform:scale(.7)}40%{-webkit-transform:scale(1.3)}}@-moz-keyframes scale{0%,100%,80%{-moz-transform:scale(.7)}40%{-moz-transform:scale(1.3)}}@-o-keyframes scale{0%,100%,80%{-o-transform:scale(.7)}40%{-o-transform:scale(1.3)}}@-ms-keyframes scale{0%,100%,80%{-ms-transform:scale(.7)}40%{-ms-transform:scale(1.3)}}@keyframes scale{0%,100%,80%{transform:scale(.7)}40%{transform:scale(1.3)}}"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/jquery.js",
    "content": "(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f(\"<\"+a+\">\").appendTo(b),e=d.css(\"display\");d.remove();if(e===\"none\"||e===\"\"){ck||(ck=c.createElement(\"iframe\"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement){cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?\"<!doctype html>\":\"\")+\"<html><body>\"),cl.close()}d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,\"display\"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1){for(h in a.converters){typeof h==\"string\"&&(e[h.toLowerCase()]=a.converters[h])}}l=k,k=d[g];if(k===\"*\"){k=l}else{if(l!==\"*\"&&l!==k){m=l+\" \"+k,n=e[m]||e[\"* \"+k];if(!n){p=b;for(o in e){j=o.split(\" \");if(j[0]===l||j[0]===\"*\"){p=e[j[1]+\" \"+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error(\"No conversion from \"+m.replace(\" \",\" to \")),n!==!0&&(c=n?n(c):p(o(c)))}}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g){i in d&&(c[g[i]]=d[i])}while(f[0]===\"*\"){f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader(\"content-type\"))}if(h){for(i in e){if(e[i]&&e[i].test(h)){f.unshift(i);break}}}if(f[0] in d){j=f[0]}else{for(i in d){if(!f[0]||a.converters[i+\" \"+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b)){f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+\"[\"+(typeof e==\"object\"?b:\"\")+\"]\",e,c,d)})}else{if(!c&&f.type(b)===\"object\"){for(var e in b){b_(a+\"[\"+e+\"]\",b[e],c,d)}}else{d(a,b)}}}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c){c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d])}e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++){l=h[i](c,d,e),typeof l==\"string\"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)))}(k||!l)&&!g[\"*\"]&&(l=bZ(a,c,d,e,\"*\",g));return l}function bY(a){return function(b,c){typeof b!=\"string\"&&(c=b,b=\"*\");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++){h=d[e],j=/^\\+/.test(h),j&&(h=h.substr(1)||\"*\"),i=a[h]=a[h]||[],i[j?\"unshift\":\"push\"](c)}}}}function bB(a,b,c){var d=b===\"width\"?a.offsetWidth:a.offsetHeight,e=b===\"width\"?1:0,g=4;if(d>0){if(c!==\"border\"){for(;e<g;e+=2){c||(d-=parseFloat(f.css(a,\"padding\"+bx[e]))||0),c===\"margin\"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,\"border\"+bx[e]+\"Width\"))||0}}return d+\"px\"}d=by(a,b);if(d<0||d==null){d=a.style[b]}if(bt.test(d)){return d}d=parseFloat(d)||0;if(c){for(;e<g;e+=2){d+=parseFloat(f.css(a,\"padding\"+bx[e]))||0,c!==\"padding\"&&(d+=parseFloat(f.css(a,\"border\"+bx[e]+\"Width\"))||0),c===\"margin\"&&(d+=parseFloat(f.css(a,c+bx[e]))||0)}}return d+\"px\"}function bo(a){var b=c.createElement(\"div\");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||\"\").toLowerCase();b===\"input\"?bm(a):b!==\"script\"&&typeof a.getElementsByTagName!=\"undefined\"&&f.grep(a.getElementsByTagName(\"input\"),bm)}function bm(a){if(a.type===\"checkbox\"||a.type===\"radio\"){a.defaultChecked=a.checked}}function bl(a){return typeof a.getElementsByTagName!=\"undefined\"?a.getElementsByTagName(\"*\"):typeof a.querySelectorAll!=\"undefined\"?a.querySelectorAll(\"*\"):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c===\"object\"?b.outerHTML=a.outerHTML:c!==\"input\"||a.type!==\"checkbox\"&&a.type!==\"radio\"?c===\"option\"?b.selected=a.defaultSelected:c===\"input\"||c===\"textarea\"?b.defaultValue=a.defaultValue:c===\"script\"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute(\"_submit_attached\"),b.removeAttribute(\"_change_attached\"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i){for(d=0,e=i[c].length;d<e;d++){f.event.add(b,c,i[c][d])}}}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,\"table\")?a.getElementsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\")):a}function U(a){var b=V.split(\"|\"),c=a.createDocumentFragment();if(c.createElement){while(b.length){c.createElement(b.pop())}}return c}function T(a,b,c){b=b||0;if(f.isFunction(b)){return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c})}if(b.nodeType){return f.grep(a,function(a,d){return a===b===c})}if(typeof b==\"string\"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b)){return f.filter(b,d,!c)}b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return !a||!a.parentNode||a.parentNode.nodeType===11}function K(){return !0}function J(){return !1}function n(a,b,c){var d=b+\"defer\",e=b+\"queue\",g=b+\"mark\",h=f._data(a,d);h&&(c===\"queue\"||!f._data(a,e))&&(c===\"mark\"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b===\"data\"&&f.isEmptyObject(a[b])){continue}if(b!==\"toJSON\"){return !1}}return !0}function l(a,c,d){if(d===b&&a.nodeType===1){var e=\"data-\"+c.replace(k,\"-$1\").toLowerCase();d=a.getAttribute(e);if(typeof d==\"string\"){try{d=d===\"true\"?!0:d===\"false\"?!1:d===\"null\"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else{d=b}}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\\s+/);for(c=0,d=a.length;c<d;c++){b[a[c]]=!0}return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll(\"left\")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,j=/\\S/,k=/^\\s+/,l=/\\s+$/,m=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,n=/^[\\],:{}\\s]*$/,o=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,q=/(?:^|:|,)(?:\\s*\\[)+/g,r=/(webkit)[ \\/]([\\w.]+)/,s=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,t=/(msie) ([\\w.]+)/,u=/(mozilla)(?:.*? rv:([\\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+\"\").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a){return this}if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a===\"body\"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a==\"string\"){a.charAt(0)!==\"<\"||a.charAt(a.length-1)!==\">\"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2]){return f.find(a)}this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return !d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a)){return f.ready(a)}a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:\"\",jquery:\"1.7.2\",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b===\"find\"?d.selector=this.selector+(this.selector?\" \":\"\")+c:b&&(d.selector=this.selector+\".\"+b+\"(\"+c+\")\");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),\"slice\",F.call(arguments).join(\",\"))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==\"boolean\"&&(l=i,i=arguments[1]||{},j=2),typeof i!=\"object\"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++){if((a=arguments[j])!=null){for(c in a){d=i[c],f=a[c];if(i===f){continue}l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}}}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body){return setTimeout(e.ready,1)}e.isReady=!0;if(a!==!0&&--e.readyWait>0){return}A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger(\"ready\").off(\"ready\")}},bindReady:function(){if(!A){A=e.Callbacks(\"once memory\");if(c.readyState===\"complete\"){return setTimeout(e.ready,1)}if(c.addEventListener){c.addEventListener(\"DOMContentLoaded\",B,!1),a.addEventListener(\"load\",e.ready,!1)}else{if(c.attachEvent){c.attachEvent(\"onreadystatechange\",B),a.attachEvent(\"onload\",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}}},isFunction:function(a){return e.type(a)===\"function\"},isArray:Array.isArray||function(a){return e.type(a)===\"array\"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return !isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||\"object\"},isPlainObject:function(a){if(!a||e.type(a)!==\"object\"||a.nodeType||e.isWindow(a)){return !1}try{if(a.constructor&&!D.call(a,\"constructor\")&&!D.call(a.constructor.prototype,\"isPrototypeOf\")){return !1}}catch(c){return !1}var d;for(d in a){}return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a){return !1}return !0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!=\"string\"||!b){return null}b=e.trim(b);if(a.JSON&&a.JSON.parse){return a.JSON.parse(b)}if(n.test(b.replace(o,\"@\").replace(p,\"]\").replace(q,\"\"))){return(new Function(\"return \"+b))()}e.error(\"Invalid JSON: \"+b)},parseXML:function(c){if(typeof c!=\"string\"||!c){return null}var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,\"text/xml\")):(d=new ActiveXObject(\"Microsoft.XMLDOM\"),d.async=\"false\",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName(\"parsererror\").length)&&e.error(\"Invalid XML: \"+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,\"ms-\").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a){if(c.apply(a[f],d)===!1){break}}}else{for(;g<h;){if(c.apply(a[g++],d)===!1){break}}}}else{if(i){for(f in a){if(c.call(a[f],f,a[f])===!1){break}}}else{for(;g<h;){if(c.call(a[g],g,a[g++])===!1){break}}}}return a},trim:G?function(a){return a==null?\"\":G.call(a)}:function(a){return a==null?\"\":(a+\"\").replace(k,\"\").replace(l,\"\")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d===\"string\"||d===\"function\"||d===\"regexp\"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H){return H.call(b,a,c)}d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++){if(c in b&&b[c]===a){return c}}}return -1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length==\"number\"){for(var f=c.length;e<f;e++){a[d++]=c[e]}}else{while(c[e]!==b){a[d++]=c[e++]}}a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++){e=!!b(a[f],f),c!==e&&d.push(a[f])}return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j==\"number\"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k){for(;i<j;i++){f=c(a[i],i,d),f!=null&&(h[h.length]=f)}}else{for(g in a){f=c(a[g],g,d),f!=null&&(h[h.length]=f)}}return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c==\"string\"){var d=a[c];c=a,a=d}if(!e.isFunction(a)){return b}var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d==\"object\"){for(l in d){e.access(a,c,l,d[l],1,h,f)}g=1}else{if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c){for(;l<m;l++){c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i)}}g=1}}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf(\"compatible\")<0&&u.exec(a)||[];return{browser:b[1]||\"\",version:b[2]||\"0\"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(a,b){I[\"[object \"+b+\"]\"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(\" \")&&(k=/^[\\s\\xA0]+/,l=/[\\s\\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener(\"DOMContentLoaded\",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState===\"complete\"&&(c.detachEvent(\"onreadystatechange\",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++){g=b[d],h=f.type(g),h===\"array\"?n(g):h===\"function\"&&(!a.unique||!p.has(g))&&c.push(g)}},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++){if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++){for(var f=0;f<c.length;f++){if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.splice(f--,1);if(a.unique){break}}}}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++){if(a===c[b]){return !0}}}return !1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return !c},lock:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return !d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return !!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks(\"once memory\"),c=f.Callbacks(\"once memory\"),d=f.Callbacks(\"memory\"),e=\"pending\",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,\"resolve\"],fail:[b,\"reject\"],progress:[c,\"notify\"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+\"With\"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null){a=h}else{for(var b in h){a[b]=h[b]}}return a}},i=h.promise({}),j;for(j in g){i[j]=g[j].fire,i[j+\"With\"]=g[j].fireWith}i.done(function(){e=\"resolved\"},c.disable,d.lock).fail(function(){e=\"rejected\"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++){b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g}g||j.resolveWith(j,b)}else{j!==a&&j.resolveWith(j,d?[a]:[])}return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement(\"div\"),q=c.documentElement;p.setAttribute(\"className\",\"t\"),p.innerHTML=\"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\",d=p.getElementsByTagName(\"*\"),e=p.getElementsByTagName(\"a\")[0];if(!d||!d.length||!e){return{}}g=c.createElement(\"select\"),h=g.appendChild(c.createElement(\"option\")),i=p.getElementsByTagName(\"input\")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName(\"tbody\").length,htmlSerialize:!!p.getElementsByTagName(\"link\").length,style:/top/.test(e.getAttribute(\"style\")),hrefNormalized:e.getAttribute(\"href\")===\"/a\",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value===\"on\",optSelected:h.selected,getSetAttribute:p.className!==\"t\",enctype:!!c.createElement(\"form\").enctype,html5Clone:c.createElement(\"nav\").cloneNode(!0).outerHTML!==\"<:nav></:nav>\",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode===\"CSS1Compat\",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent(\"onclick\",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent(\"onclick\")),i=c.createElement(\"input\"),i.value=\"t\",i.setAttribute(\"type\",\"radio\"),b.radioValue=i.value===\"t\",i.setAttribute(\"checked\",\"checked\"),i.setAttribute(\"name\",\"t\"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent){for(n in {submit:1,change:1,focusin:1}){m=\"on\"+n,o=m in p,o||(p.setAttribute(m,\"return;\"),o=typeof p[m]==\"function\"),b[n+\"Bubbles\"]=o}}j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName(\"body\")[0];!u||(m=1,t=\"padding:0;margin:0;border:\",r=\"position:absolute;top:0;left:0;width:1px;height:1px;\",s=t+\"0;visibility:hidden;\",n=\"style='\"+r+t+\"5px solid #000;\",q=\"<div \"+n+\"display:block;'><div style='\"+t+\"0;display:block;overflow:hidden;'></div></div><table \"+n+\"' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\",d=c.createElement(\"div\"),d.style.cssText=s+\"width:0;height:0;position:static;top:0;margin-top:\"+m+\"px\",u.insertBefore(d,u.firstChild),p=c.createElement(\"div\"),d.appendChild(p),p.innerHTML=\"<table><tr><td style='\"+t+\"0;display:none'></td><td>t</td></tr></table>\",k=p.getElementsByTagName(\"td\"),o=k[0].offsetHeight===0,k[0].style.display=\"\",k[1].style.display=\"none\",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML=\"\",l=c.createElement(\"div\"),l.style.width=\"0\",l.style.marginRight=\"0\",p.style.width=\"2px\",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!=\"undefined\"&&(p.innerHTML=\"\",p.style.width=p.style.padding=\"1px\",p.style.border=0,p.style.overflow=\"hidden\",p.style.display=\"inline\",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display=\"block\",p.style.overflow=\"visible\",p.innerHTML=\"<div style='width:5px;'></div>\",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position=\"fixed\",g.style.top=\"20px\",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top=\"\",e.style.overflow=\"hidden\",e.style.position=\"relative\",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop=\"1%\",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!==\"1%\"),typeof d.style.zoom!=\"undefined\"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\\{.*\\}|\\[.*\\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:\"jQuery\"+(f.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return !!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c==\"string\",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c===\"events\";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b){return}n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c==\"object\"||typeof c==\"function\"){e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c)}g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c]){return g.events}k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k]){return}if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(\" \")));for(e=0,g=b.length;e<g;e++){delete d[b[e]]}if(!(c?m:f.isEmptyObject)(d)){return}}}if(!c){delete j[k].data;if(!m(j[k])){return}}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b){return b!==!0&&a.getAttribute(\"classid\")===b}}return !0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,\"parsedAttrs\")){g=j.attributes;for(i=g.length;k<i;k++){h=g[k].name,h.indexOf(\"data-\")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]))}f._data(j,\"parsedAttrs\",!0)}}return m}if(typeof a==\"object\"){return this.each(function(){f.data(this,a)})}d=a.split(\".\",2),d[1]=d[1]?\".\"+d[1]:\"\",e=d[1]+\"!\";return f.access(this,function(c){if(c===b){m=this.triggerHandler(\"getData\"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler(\"setData\"+e,d),f.data(this,a,c),b.triggerHandler(\"changeData\"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||\"fx\")+\"mark\",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||\"fx\";var d=c+\"mark\",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,\"mark\"))}},queue:function(a,b,c){var d;if(a){b=(b||\"fx\")+\"queue\",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||\"fx\";var c=f.queue(a,b),d=c.shift(),e={};d===\"inprogress\"&&(d=c.shift()),d&&(b===\"fx\"&&c.unshift(\"inprogress\"),f._data(a,b+\".run\",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+\"queue \"+b+\".run\",!0),n(a,b,\"queue\"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!=\"string\"&&(c=a,a=\"fx\",d--);if(arguments.length<d){return f.queue(this[0],a)}return c===b?this:this.each(function(){var b=f.queue(this,a,c);a===\"fx\"&&b[0]!==\"inprogress\"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||\"fx\";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!=\"string\"&&(c=a,a=b),a=a||\"fx\";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+\"defer\",j=a+\"queue\",k=a+\"mark\",l;while(g--){if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks(\"once memory\"),!0)){h++,l.add(m)}}m();return d.promise(c)}});var o=/[\\n\\t\\r]/g,p=/\\s+/,q=/\\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a)){return this.each(function(b){f(this).addClass(a.call(this,b,this.className))})}if(a&&typeof a==\"string\"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1){if(!e.className&&b.length===1){e.className=a}else{g=\" \"+e.className+\" \";for(h=0,i=b.length;h<i;h++){~g.indexOf(\" \"+b[h]+\" \")||(g+=b[h]+\" \")}e.className=f.trim(g)}}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a)){return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))})}if(a&&typeof a==\"string\"||a===b){c=(a||\"\").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className){if(a){h=(\" \"+g.className+\" \").replace(o,\" \");for(i=0,j=c.length;i<j;i++){h=h.replace(\" \"+c[i]+\" \",\" \")}g.className=f.trim(h)}else{g.className=\"\"}}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b==\"boolean\";if(f.isFunction(a)){return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)})}return this.each(function(){if(c===\"string\"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++]){i=d?i:!h.hasClass(e),h[i?\"addClass\":\"removeClass\"](e)}}else{if(c===\"undefined\"||c===\"boolean\"){this.className&&f._data(this,\"__className__\",this.className),this.className=this.className||a===!1?\"\":f._data(this,\"__className__\")||\"\"}}})},hasClass:function(a){var b=\" \"+a+\" \",c=0,d=this.length;for(;c<d;c++){if(this[c].nodeType===1&&(\" \"+this[c].className+\" \").replace(o,\" \").indexOf(b)>-1){return !0}}return !1},val:function(a){var c,d,e,g=this[0];if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h=\"\":typeof h==\"number\"?h+=\"\":f.isArray(h)&&(h=f.map(h,function(a){return a==null?\"\":a+\"\"})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!(\"set\" in c)||c.set(this,h,\"value\")===b){this.value=h}}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&\"get\" in c&&(d=c.get(g,\"value\"))!==b){return d}d=g.value;return typeof d==\"string\"?d.replace(q,\"\"):d==null?\"\":d}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return !b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type===\"select-one\";if(g<0){return null}c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute(\"disabled\")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,\"optgroup\"))){b=f(e).val();if(j){return b}h.push(b)}}if(j&&!h.length&&i.length){return f(i[g]).val()}return h},set:function(a,b){var c=f.makeArray(b);f(a).find(\"option\").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn){return f(a)[c](d)}if(typeof a.getAttribute==\"undefined\"){return f.prop(a,c,d)}i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&\"set\" in h&&i&&(g=h.set(a,d,c))!==b){return g}a.setAttribute(c,\"\"+d);return d}if(h&&\"get\" in h&&i&&(g=h.get(a,c))!==null){return g}g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++){e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,\"\"),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode){f.error(\"type property can't be changed\")}else{if(!f.support.radioValue&&b===\"radio\"&&f.nodeName(a,\"input\")){var c=a.value;a.setAttribute(\"type\",b),c&&(a.value=c);return b}}}},value:{get:function(a,b){if(w&&f.nodeName(a,\"button\")){return w.get(a,b)}return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,\"button\")){return w.set(a,b,c)}a.value=b}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&\"set\" in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&\"get\" in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode(\"tabindex\");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!=\"boolean\"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!==\"\":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+\"\"}},f.attrHooks.tabindex.set=w.set,f.each([\"width\",\"height\"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===\"\"){a.setAttribute(b,\"auto\");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===\"\"&&(b=\"false\"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each([\"href\",\"src\",\"width\",\"height\"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=\"\"+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype=\"encoding\"),f.support.checkOn||f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]={get:function(a){return a.getAttribute(\"value\")===null?\"on\":a.value}}}),f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b)){return a.checked=f.inArray(f(a).val(),b)>=0}}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\\.]*)?(?:\\.(.+))?$/,B=/(?:^|\\s)hover(\\.\\S+)?\\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||\"\").toLowerCase(),b[3]=b[3]&&new RegExp(\"(?:^|\\\\s)\"+b[3]+\"(?:\\\\s|$)\"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c[\"class\"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,\"mouseenter$1 mouseleave$1\")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!=\"undefined\"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(\" \");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||\"\").split(\".\").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(\".\")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1){a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent(\"on\"+m,i)}}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||\"\")).split(\" \");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o){f.event.remove(a,j+b[h],c,d,!0)}continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp(\"(^|\\\\.)\"+l.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(n=0;n<r.length;n++){s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d===\"**\"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s))}r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,[\"events\",\"handle\"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered)){return}h.indexOf(\"!\")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(\".\")>=0&&(i=h.split(\".\"),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h]){return}c=typeof c==\"object\"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join(\".\"),c.namespace_re=c.namespace?new RegExp(\"(^|\\\\.)\"+i.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null,o=h.indexOf(\":\")<0?\"on\"+h:\"\";if(!e){j=f.cache;for(l in j){j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0)}return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1){return}r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode){r.push([m,s]),n=m}n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++){m=r[l][0],c.type=r[l][1],q=(f._data(m,\"events\")||{})[c.type]&&f._data(m,\"handle\"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault()}c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!==\"click\"||!f.nodeName(e,\"a\"))&&f.acceptData(e)&&o&&e[h]&&(h!==\"focus\"&&h!==\"blur\"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,\"events\")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!==\"click\")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this){if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++){s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s)}r.length&&j.push({elem:m,matches:r})}}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace)){c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}}i.postDispatch&&i.postDispatch.call(this,c);return c.result}},props:\"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando]){return a}var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;){e=i[--d],a[e]=g[e]}a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent(\"on\"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event)){return new f.Event(a,b)}a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d)){a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b}return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,\"form\")){return !1}f.event.add(this,\"click._submit keypress._submit\",function(a){var c=a.target,d=f.nodeName(c,\"input\")||f.nodeName(c,\"button\")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,\"submit._submit\",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate(\"submit\",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,\"form\")){return !1}f.event.remove(this,\"._submit\")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\"){f.event.add(this,\"propertychange._change\",function(a){a.originalEvent.propertyName===\"checked\"&&(this._just_changed=!0)}),f.event.add(this,\"click._change\",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate(\"change\",this,a,!0))})}return !1}f.event.add(this,\"beforeactivate._change\",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,\"change._change\",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate(\"change\",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!==\"radio\"&&b.type!==\"checkbox\"){return a.handleObj.handler.apply(this,arguments)}},teardown:function(){f.event.remove(this,\"._change\");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a==\"object\"){typeof c!=\"string\"&&(d=d||c,c=b);for(i in a){this.on(i,c,d,a[i],g)}return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c==\"string\"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1){e=J}else{if(!e){return this}}g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+\".\"+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a==\"object\"){for(var g in a){this.off(g,c,a[g])}return this}if(c===!1||typeof c==\"function\"){d=c,c=b}d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||\"**\",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,\"**\"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){return f.event.trigger(a,b,this[0],!0)}},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,\"lastToggle\"+a.guid)||0)%d;f._data(this,\"lastToggle\"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length){b[d++].guid=c}return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!=\"string\"){if(j===b){k=!0;break}}else{if(m.filter(b,[j]).length>0){k=j;break}}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,d=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\\\/g,k=/\\r\\n/g,l=/\\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9){return[]}if(!b||typeof b!=\"string\"){return e}var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(\"\"),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b)){if(w.length===2&&o.relative[w[0]]){j=y(w[0]+w[1],d,f)}else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length){b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}}}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]===\"~\"||w[0]===\"+\")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length){q=w.pop(),r=q,o.relative[q]?r=w.pop():q=\"\",r==null&&(r=d),o.relative[q](k,r,v)}}else{k=w=[]}}k||(k=j),k||m.error(q||b);if(g.call(k)===\"[object Array]\"){if(!u){e.push.apply(e,k)}else{if(d&&d.nodeType===1){for(t=0;k[t]!=null;t++){k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t])}}else{for(t=0;k[t]!=null;t++){k[t]&&k[t].nodeType===1&&e.push(j[t])}}}}else{s(k,e)}l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h){for(var b=1;b<a.length;b++){a[b]===a[b-1]&&a.splice(b--,1)}}}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a){return[]}for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!==\"\\\\\"){g[1]=(g[1]||\"\").replace(j,\"\"),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],\"\");break}}}}d||(d=typeof b.getElementsByTagName!=\"undefined\"?b.getElementsByTagName(\"*\"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter){if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)===\"\\\\\"){continue}s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f){g=i=!0}else{if(f===!0){continue}}}if(f){for(n=0;(j=s[n])!=null;n++){j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0))}}if(i!==b){d||(s=r),a=a.replace(o.match[h],\"\");if(!g){return[]}break}}}if(a===q){if(g==null){m.error(a)}else{break}}q=a}return s},m.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e=\"\";if(d){if(d===1||d===9||d===11){if(typeof a.textContent==\"string\"){return a.textContent}if(typeof a.innerText==\"string\"){return a.innerText.replace(k,\"\")}for(a=a.firstChild;a;a=a.nextSibling){e+=n(a)}}else{if(d===3||d===4){return a.nodeValue}}}else{for(b=0;c=a[b];b++){c.nodeType!==8&&(e+=n(c))}}return e},o=m.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,NAME:/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(a){return a.getAttribute(\"href\")},type:function(a){return a.getAttribute(\"type\")}},relative:{\"+\":function(a,b){var c=typeof b==\"string\",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++){if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1){}a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}}e&&m.filter(b,a,!0)},\">\":function(a,b){var c,d=typeof b==\"string\",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++){c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b)}d&&m.filter(b,a,!0)}},\"\":function(a,b,c){var d,f=e++,g=x;typeof b==\"string\"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g(\"parentNode\",b,f,a,d,c)},\"~\":function(a,b,c){var d,f=e++,g=x;typeof b==\"string\"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g(\"previousSibling\",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=\"undefined\"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!=\"undefined\"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++){d[e].getAttribute(\"name\")===a[1]&&c.push(d[e])}return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!=\"undefined\"){return b.getElementsByTagName(a[1])}}},preFilter:{CLASS:function(a,b,c,d,e,f){a=\" \"+a[1].replace(j,\"\")+\" \";if(f){return a}for(var g=0,h;(h=b[g])!=null;g++){h&&(e^(h.className&&(\" \"+h.className+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1))}return !1},ID:function(a){return a[1].replace(j,\"\")},TAG:function(a,b){return a[1].replace(j,\"\").toLowerCase()},CHILD:function(a){if(a[1]===\"nth\"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\\+|\\s*/g,\"\");var b=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(a[2]===\"even\"&&\"2n\"||a[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(a[2])&&\"0n+\"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else{a[2]&&m.error(a[0])}a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,\"\");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||\"\").replace(j,\"\"),a[2]===\"~=\"&&(a[4]=\" \"+a[4]+\" \");return a},PSEUDO:function(b,c,d,e,f){if(b[1]===\"not\"){if((a.exec(b[3])||\"\").length>1||/^\\w/.test(b[3])){b[3]=m(b[3],null,null,c)}else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return !1}}else{if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0])){return !0}}return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!==\"hidden\"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return !!a.firstChild},empty:function(a){return !a.firstChild},has:function(a,b,c){return !!m(c[3],a).length},header:function(a){return/h\\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute(\"type\"),c=a.type;return a.nodeName.toLowerCase()===\"input\"&&\"text\"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"radio\"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===a.type},file:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"file\"===a.type},password:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"password\"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"submit\"===a.type},image:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"image\"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"reset\"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b===\"input\"&&\"button\"===a.type||b===\"button\"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f){return f(a,c,b,d)}if(e===\"contains\"){return(a.textContent||a.innerText||n([a])||\"\").indexOf(b[3])>=0}if(e===\"not\"){var g=b[3];for(var h=0,i=g.length;h<i;h++){if(g[h]===a){return !1}}return !0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case\"only\":case\"first\":while(l=l.previousSibling){if(l.nodeType===1){return !1}}if(k===\"first\"){return !0}l=a;case\"last\":while(l=l.nextSibling){if(l.nodeType===1){return !1}}return !0;case\"nth\":c=b[2],e=b[3];if(c===1&&e===0){return !0}f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling){l.nodeType===1&&(l.nodeIndex=++i)}g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute(\"id\")===b},TAG:function(a,b){return b===\"*\"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(\" \"+(a.className||a.getAttribute(\"class\"))+\" \").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+\"\",f=b[2],g=b[4];return d==null?f===\"!=\":!f&&m.attr?d!=null:f===\"=\"?e===g:f===\"*=\"?e.indexOf(g)>=0:f===\"~=\"?(\" \"+e+\" \").indexOf(g)>=0:g?f===\"!=\"?e!==g:f===\"^=\"?e.indexOf(g)===0:f===\"$=\"?e.substr(e.length-g.length)===g:f===\"|=\"?e===g||e.substr(0,g.length+1)===g+\"-\":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f){return f(a,c,b,d)}}}},p=o.match.POS,q=function(a,b){return\"\\\\\"+(b-0+1)};for(var r in o.match){o.match[r]=new RegExp(o.match[r].source+/(?![^\\[]*\\])(?![^\\(]*\\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+o.match[r].source.replace(/\\\\(\\d+)/g,q))}o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)===\"[object Array]\"){Array.prototype.push.apply(d,a)}else{if(typeof a.length==\"number\"){for(var e=a.length;c<e;c++){d.push(a[c])}}else{for(;a[c];c++){d.push(a[c])}}}return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition){return a.compareDocumentPosition?-1:1}return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex){return a.sourceIndex-b.sourceIndex}var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i){return v(a,b)}if(!g){return -1}if(!i){return 1}while(j){e.unshift(j),j=j.parentNode}j=i;while(j){f.unshift(j),j=j.parentNode}c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++){if(e[k]!==f[k]){return v(e[k],f[k])}}return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b){return c}var d=a.nextSibling;while(d){if(d===b){return -1}d=d.nextSibling}return 1}),function(){var a=c.createElement(\"div\"),d=\"script\"+(new Date).getTime(),e=c.documentElement;a.innerHTML=\"<a name='\"+d+\"'/>\",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!=\"undefined\"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=\"undefined\"&&e.getAttributeNode(\"id\").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=\"undefined\"&&a.getAttributeNode(\"id\");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement(\"div\");a.appendChild(c.createComment(\"\")),a.getElementsByTagName(\"*\").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]===\"*\"){var d=[];for(var e=0;c[e];e++){c[e].nodeType===1&&d.push(c[e])}c=d}return c}),a.innerHTML=\"<a href='#'></a>\",a.firstChild&&typeof a.firstChild.getAttribute!=\"undefined\"&&a.firstChild.getAttribute(\"href\")!==\"#\"&&(o.attrHandle.href=function(a){return a.getAttribute(\"href\",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement(\"div\"),d=\"__sizzle__\";b.innerHTML=\"<p class='TEST'></p>\";if(!b.querySelectorAll||b.querySelectorAll(\".TEST\").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1]){return s(e.getElementsByTagName(b),f)}if(h[2]&&o.find.CLASS&&e.getElementsByClassName){return s(e.getElementsByClassName(h[2]),f)}}if(e.nodeType===9){if(b===\"body\"&&e.body){return s([e.body],f)}if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode){return s([],f)}if(i.id===h[3]){return s([i],f)}}try{return s(e.querySelectorAll(b),f)}catch(j){}}else{if(e.nodeType===1&&e.nodeName.toLowerCase()!==\"object\"){var k=e,l=e.getAttribute(\"id\"),n=l||d,p=e.parentNode,q=/^\\s*[+~]/.test(b);l?n=n.replace(/'/g,\"\\\\$&\"):e.setAttribute(\"id\",n),q&&p&&(e=e.parentNode);try{if(!q||p){return s(e.querySelectorAll(\"[id='\"+n+\"'] \"+b),f)}}catch(r){}finally{l||k.removeAttribute(\"id\")}}}}return a(b,e,f,g)};for(var e in a){m[e]=a[e]}b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement(\"div\"),\"div\"),e=!1;try{b.call(c.documentElement,\"[test!='']:sizzle\")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!m.isXML(a)){try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11){return f}}}catch(g){}}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement(\"div\");a.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(!!a.getElementsByClassName&&a.getElementsByClassName(\"e\").length!==0){a.lastChild.className=\"e\";if(a.getElementsByClassName(\"e\").length===1){return}o.order.splice(1,0,\"CLASS\"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=\"undefined\"&&!c){return b.getElementsByClassName(a[1])}},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return !!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return !1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!==\"HTML\":!1};var y=function(a,b,c){var d,e=[],f=\"\",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a)){f+=d[0],a=a.replace(o.match.PSEUDO,\"\")}a=o.relative[a]?a+\"*\":a;for(var h=0,i=g.length;h<i;h++){m(a,g[h],e,c)}return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[\":\"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!=\"string\"){return f(a).filter(function(){for(c=0,d=b.length;c<d;c++){if(f.contains(b[c],this)){return !0}}})}var e=this.pushStack(\"\",\"find\",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0){for(h=g;h<e.length;h++){for(i=0;i<g;i++){if(e[i]===e[h]){e.splice(h--,1);break}}}}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++){if(f.contains(this,b[a])){return !0}}})},not:function(a){return this.pushStack(T(this,a,!1),\"not\",a)},filter:function(a){return this.pushStack(T(this,a,!0),\"filter\",a)},is:function(a){return !!a&&(typeof a==\"string\"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++){f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h})}g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!=\"string\"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11){break}}}c=c.length>1?f.unique(c):c;return this.pushStack(c,\"closest\",a)},index:function(a){if(!a){return this[0]&&this[0].parentNode?this.prevAll().length:-1}if(typeof a==\"string\"){return f.inArray(this[0],f(a))}return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==\"string\"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return f.dir(a,\"parentNode\",c)},next:function(a){return f.nth(a,2,\"nextSibling\")},prev:function(a){return f.nth(a,2,\"previousSibling\")},nextAll:function(a){return f.dir(a,\"nextSibling\")},prevAll:function(a){return f.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return f.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return f.dir(a,\"previousSibling\",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d==\"string\"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(\",\"))}}),f.extend({filter:function(a,b,c){c&&(a=\":not(\"+a+\")\");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d))){g.nodeType===1&&e.push(g),g=g[c]}return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c]){if(a.nodeType===1&&++e===b){break}}return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling){a.nodeType===1&&a!==b&&c.push(a)}return c}});var V=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",W=/ jQuery\\d+=\"(?:\\d+|null)\"/g,X=/^\\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,Z=/<([\\w:]+)/,$=/<tbody/i,_=/<|&#?\\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp(\"<(?:\"+V+\")[\\\\s/>]\",\"i\"),bd=/checked\\s*(?:[^=]|=\\s*.checked.)/i,be=/\\/(java|ecma)script/i,bf=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,bg={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],area:[1,\"<map>\",\"</map>\"],_default:[0,\"\",\"\"]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,\"div<div>\",\"</div>\"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a)){return this.each(function(b){f(this).wrapAll(a.call(this,b))})}if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1){a=a.firstChild}return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a)){return this.each(function(b){f(this).wrapInner(a.call(this,b))})}return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,\"body\")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)})}if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,\"before\",arguments)}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)})}if(arguments.length){var a=this.pushStack(this,\"after\",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++){if(!a||f.filter(a,[d]).length){!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName(\"*\")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d)}}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName(\"*\"));while(b.firstChild){b.removeChild(b.firstChild)}}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b){return c.nodeType===1?c.innerHTML.replace(W,\"\"):null}if(typeof a==\"string\"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=a.replace(Y,\"<$1></$2>\");try{for(;d<e;d++){c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName(\"*\")),c.innerHTML=a)}c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a)){return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))})}typeof a!=\"string\"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),\"replaceWith\",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j==\"string\"&&bd.test(j)){return this.each(function(){f(this).domManip(a,c,d,!0)})}if(f.isFunction(j)){return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)})}if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,\"tr\");for(var l=0,m=this.length,n=m-1;l<m;l++){d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:\"GET\",global:!1,url:b.src,async:!1,dataType:\"script\"}):f.globalEval((b.text||b.textContent||b.innerHTML||\"\").replace(bf,\"/*$0*/\")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j==\"string\"&&j.length<512&&i===c&&j.charAt(0)===\"<\"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test(\"<\"+a.nodeName+\">\")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g){e[g]&&bk(d[g],e[g])}}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g){bj(d[g],e[g])}}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement==\"undefined\"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l==\"number\"&&(l+=\"\");if(!l){continue}if(typeof l==\"string\"){if(!_.test(l)){l=b.createTextNode(l)}else{l=l.replace(Y,\"<$1></$2>\");var m=(Z.exec(l)||[\"\",\"\"])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement(\"div\"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--){p=p.lastChild}if(!f.support.tbody){var s=$.test(l),t=m===\"table\"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===\"<table>\"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i){f.nodeName(t[i],\"tbody\")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}}var u;if(!f.support.appendChecked){if(l[0]&&typeof(u=l.length)==\"number\"){for(i=0;i<u;i++){bn(l[i])}}else{bn(l)}}l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return !a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,\"script\")&&(!h.type||be.test(h.type))){e.push(h.parentNode?h.parentNode.removeChild(h):h)}else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName(\"script\"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()]){continue}c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events){e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle)}b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\\([^)]*\\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\\-+]?(?:\\d*\\.)?\\d+$/i,bt=/^-?(?:\\d*\\.)?\\d+(?!px)[^\\d\\s]+$/i,bu=/^([\\-+])=([\\-+.\\de]+)/,bv=/^margin/,bw={position:\"absolute\",visibility:\"hidden\",display:\"block\"},bx=[\"Top\",\"Right\",\"Bottom\",\"Left\"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,\"opacity\");return c===\"\"?\"1\":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":f.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&\"get\" in k&&(g=k.get(a,!1,e))!==b){return g}return j[c]}h=typeof d,h===\"string\"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h=\"number\");if(d==null||h===\"number\"&&isNaN(d)){return}h===\"number\"&&!f.cssNumber[i]&&(d+=\"px\");if(!k||!(\"set\" in k)||(d=k.set(a,d))!==b){try{j[c]=d}catch(l){}}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c===\"cssFloat\"&&(c=\"float\");if(g&&\"get\" in g&&(e=g.get(a,!0,d))!==b){return e}if(by){return by(a,c)}},swap:function(a,b,c){var d={},e,f;for(f in b){d[f]=a.style[f],a.style[f]=b[f]}e=c.call(a);for(f in b){a.style[f]=d[f]}return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,\"-$1\").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===\"\"&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b===\"fontSize\"?\"1em\":f,f=g.pixelLeft+\"px\",g.left=c,d&&(a.runtimeStyle.left=d));return f===\"\"?\"auto\":f}),by=bz||bA,f.each([\"height\",\"width\"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c){return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})}},set:function(a,b){return bs.test(b)?b+\"px\":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?parseFloat(RegExp.$1)/100+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?\"alpha(opacity=\"+b*100+\")\":\"\",g=d&&d.filter||c.filter||\"\";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,\"\"))===\"\"){c.removeAttribute(\"filter\");if(d&&!d.filter){return}}c.filter=bp.test(g)?g.replace(bp,e):g+\" \"+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:\"inline-block\"},function(){return b?by(a,\"margin-right\"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,\"display\"))===\"none\"},f.expr.filters.visible=function(a){return !f.expr.filters.hidden(a)}),f.each({margin:\"\",padding:\"\",border:\"Width\"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c==\"string\"?c.split(\" \"):[c],f={};for(d=0;d<4;d++){f[a+bx[d]+b]=e[d]||e[d-2]||e[0]}return f}}});var bC=/%20/g,bD=/\\[\\]$/,bE=/\\r?\\n/g,bF=/#.*$/,bG=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\\/\\//,bL=/\\?/,bM=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=[\"*/\"]+[\"*\"];try{bU=e.href}catch(bX){bU=c.createElement(\"a\"),bU.href=\"\",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!=\"string\"&&bR){return bR.apply(this,arguments)}if(!this.length){return this}var e=a.indexOf(\" \");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h=\"GET\";c&&(f.isFunction(c)?(d=c,c=b):typeof c==\"object\"&&(c=f.param(c,f.ajaxSettings.traditional),h=\"POST\"));var i=this;f.ajax({url:a,type:h,dataType:\"html\",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f(\"<div>\").append(c.replace(bM,\"\")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,\"\\r\\n\")}}):{name:b.name,value:c.replace(bE,\"\\r\\n\")}}).get()}}),f.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each([\"get\",\"post\"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,\"script\")},getJSON:function(a,b,c){return f.get(a,b,c,\"json\")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:\"GET\",contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",processData:!0,async:!0,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":a.String,\"text html\":!0,\"text json\":f.parseJSON,\"text xml\":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||\"\",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader(\"Last-Modified\")){f.lastModified[k]=y}if(z=v.getResponseHeader(\"Etag\")){f.etag[k]=z}}if(a===304){w=\"notmodified\",o=!0}else{try{r=cb(d,x),w=\"success\",o=!0}catch(A){w=\"parsererror\",u=A}}}else{u=w;if(!w||a){w=\"error\",a<0&&(a=0)}}v.status=a,v.statusText=\"\"+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger(\"ajax\"+(o?\"Success\":\"Error\"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger(\"ajaxComplete\",[v,d]),--f.active||f.event.trigger(\"ajaxStop\"))}}typeof a==\"object\"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks(\"once memory\"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n)){o[c[1].toLowerCase()]=c[2]}}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||\"abort\",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2){for(b in a){j[b]=[j[b],a[b]]}}else{b=a[v.status],v.then(b,b)}}return this},d.url=((a||d.url)+\"\").replace(bF,\"\").replace(bK,bV[1]+\"//\"),d.dataTypes=f.trim(d.dataType||\"*\").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]===\"http:\"?80:443))==(bV[3]||(bV[1]===\"http:\"?80:443)))),d.data&&d.processData&&typeof d.data!=\"string\"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2){return !1}t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger(\"ajaxStart\");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?\"&\":\"?\")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,\"$1_=\"+x);d.url=y+(y===d.url?(bL.test(d.url)?\"&\":\"?\")+\"_=\"+x:\"\")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader(\"Content-Type\",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader(\"If-Modified-Since\",f.lastModified[k]),f.etag[k]&&v.setRequestHeader(\"If-None-Match\",f.etag[k])),v.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!==\"*\"?\", \"+bW+\"; q=0.01\":\"\"):d.accepts[\"*\"]);for(u in d.headers){v.setRequestHeader(u,d.headers[u])}if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return !1}for(u in {success:1,error:1,complete:1}){v[u](d[u])}p=bZ(bT,d,c,v);if(!p){w(-1,\"No Transport\")}else{v.readyState=1,t&&g.trigger(\"ajaxSend\",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort(\"timeout\")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2){w(-1,z)}else{throw z}}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a)){f.each(a,function(){e(this.name,this.value)})}else{for(var g in a){b_(g,a[g],c,e)}}return d.join(\"&\").replace(bC,\"+\")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\\=)\\?(&|$)|\\?\\?/i;f.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return f.expando+\"_\"+cc++}}),f.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e=typeof b.data==\"string\"&&/^application\\/x\\-www\\-form\\-urlencoded/.test(b.contentType);if(b.dataTypes[0]===\"jsonp\"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l=\"$1\"+h+\"$2\";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\\?/.test(j)?\"&\":\"?\")+b.jsonp+\"=\"+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters[\"script json\"]=function(){g||f.error(h+\" was not called\");return g[0]},b.dataTypes[0]=\"json\";return\"script\"}}),f.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter(\"script\",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\",a.global=!1)}),f.ajaxTransport(\"script\",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName(\"head\")[0]||c.documentElement;return{send:function(f,g){d=c.createElement(\"script\"),d.async=\"async\",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState)){d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,\"success\")}},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg){cg[a](0,1)}}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return !this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&\"withCredentials\" in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields){for(j in c.xhrFields){h[j]=c.xhrFields[j]}}c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e[\"X-Requested-With\"]&&(e[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(j in e){h.setRequestHeader(j,e[j])}}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e){h.readyState!==4&&h.abort()}else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=\"\"}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,co,cp=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0){return this.animate(ct(\"show\",3),a,b,c)}for(var g=0,h=this.length;g<h;g++){d=this[g],d.style&&(e=d.style.display,!f._data(d,\"olddisplay\")&&e===\"none\"&&(e=d.style.display=\"\"),(e===\"\"&&f.css(d,\"display\")===\"none\"||!f.contains(d.ownerDocument.documentElement,d))&&f._data(d,\"olddisplay\",cu(d.nodeName)))}for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===\"\"||e===\"none\"){d.style.display=f._data(d,\"olddisplay\")||\"\"}}}return this},hide:function(a,b,c){if(a||a===0){return this.animate(ct(\"hide\",3),a,b,c)}var d,e,g=0,h=this.length;for(;g<h;g++){d=this[g],d.style&&(e=f.css(d,\"display\"),e!==\"none\"&&!f._data(d,\"olddisplay\")&&f._data(d,\"olddisplay\",e))}for(g=0;g<h;g++){this[g].style&&(this[g].style.display=\"none\")}return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a==\"boolean\";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(\":hidden\");f(this)[b?\"show\":\"hide\"]()}):this.animate(ct(\"toggle\",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(\":hidden\"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&&\"expand\" in k){l=k.expand(a[g]),delete a[g];for(i in l){i in a||(a[i]=l[i])}}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||\"swing\";if(h===\"hide\"&&d||h===\"show\"&&!d){return b.complete.call(this)}c&&(g===\"height\"||g===\"width\")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,\"display\")===\"inline\"&&f.css(this,\"float\")===\"none\"&&(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)===\"inline\"?this.style.display=\"inline-block\":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow=\"hidden\");for(i in a){j=new f.fx(this,b,i),h=a[i],cm.test(h)?(q=f._data(this,\"toggle\"+i)||(h===\"toggle\"?d?\"show\":\"hide\":0),q?(f._data(this,\"toggle\"+i,q===\"show\"?\"hide\":\"show\"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?\"\":\"px\"),p!==\"px\"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&&(o=(m[1]===\"-=\"?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,\"\"))}return !0}var e=f.speed(b,c,d);if(f.isEmptyObject(a)){return this.each(e.complete,[!1])}a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!=\"string\"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||\"fx\",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null){for(b in g){g[b]&&g[b].stop&&b.indexOf(\".run\")===b.length-4&&h(this,g,b)}}else{g[b=a+\".run\"]&&g[b].stop&&h(this,g,b)}for(b=e.length;b--;){e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1))}(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:ct(\"show\",1),slideUp:ct(\"hide\",1),slideToggle:ct(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a==\"object\"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration==\"number\"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0){d.queue=\"fx\"}d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a){return a},swing:function(a){return -Math.cos(a*Math.PI)/2+0.5}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b===\"auto\"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?\"\":\"px\"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){f._data(e.elem,\"fxshow\"+e.prop)===b&&(e.options.hide?f._data(e.elem,\"fxshow\"+e.prop,e.start):e.options.show&&f._data(e.elem,\"fxshow\"+e.prop,e.end))},h()&&f.timers.push(h)&&!co&&(co=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,\"fxshow\"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties){i.animatedProperties[b]!==!0&&(g=!1)}if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each([\"\",\"X\",\"Y\"],function(a,b){h.style[\"overflow\"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show){for(b in i.animatedProperties){f.style(h,b,i.orig[b]),f.removeData(h,\"fxshow\"+b,!0),f.removeData(h,\"toggle\"+b,!0)}}d=i.complete,d&&(i.complete=!1,d.call(h))}return !1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return !0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++){a=b[c],!a()&&b[c]===a&&b.splice(c--,1)}b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,\"opacity\",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf(\"margin\")&&(f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;\"getBoundingClientRect\" in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a)){return d?{top:d.top,left:d.left}:{top:0,left:0}}var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){if(f.support.fixedPosition&&j.position===\"fixed\"){break}d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&d.overflow!==\"visible\"&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position===\"relative\"||j.position===\"static\"){k+=h.offsetTop,l+=h.offsetLeft}f.support.fixedPosition&&j.position===\"fixed\"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length){return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)})}var c=this[0],d=c&&c.ownerDocument;if(!d){return null}if(c===d.body){return f.offset.bodyOffset(c)}return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,\"marginTop\"))||0,c+=parseFloat(f.css(a,\"marginLeft\"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,\"position\");d===\"static\"&&(a.style.position=\"relative\");var e=f(a),g=e.offset(),h=f.css(a,\"top\"),i=f.css(a,\"left\"),j=(d===\"absolute\"||d===\"fixed\")&&f.inArray(\"auto\",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),\"using\" in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0]){return null}var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,\"marginTop\"))||0,c.left-=parseFloat(f.css(a,\"marginLeft\"))||0,d.top+=parseFloat(f.css(b[0],\"borderTopWidth\"))||0,d.left+=parseFloat(f.css(b[0],\"borderLeftWidth\"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,\"position\")===\"static\"){a=a.offsetParent}return a})}}),f.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b){return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e]}h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:\"height\",Width:\"width\"},function(a,c){var d=\"client\"+a,e=\"scroll\"+a,g=\"offset\"+a;f.fn[\"inner\"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,\"padding\")):this[c]():null},f.fn[\"outer\"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?\"margin\":\"border\")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e]){return i[d]}return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define==\"function\"&&define.amd&&define.amd.jQuery&&define(\"jquery\",[],function(){return f})})(window);"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/schema.js",
    "content": "var Schema = {\n    config: {\n        markerSize: 13\n    },\n    pageDefaults: {\n        backgroundColor: \"transparent\",\n        width: $(window).width() * 1.2,\n        height: $(window).height() * 2,\n        padding: 20,\n        showGrid: false,\n        gridSize: 15,\n        orientation: \"portrait\"\n    },\n    shapeDefaults: {\n        id: \"\",\n        name: \"\",\n        title: \"\",\n        category: \"\",\n        group: \"\",\n        groupName: null,\n        locked: false,\n        link: \"\",\n        icon: '',//自定义\n        selected: [],//自定义\n        status: 0,//自定义\n        //formEL:[],//自定义\n        children: [],\n        parent: \"\",\n        resizeDir: [\"tl\", \"tr\", \"br\", \"bl\"],\n        attribute: {\n            container: false,\n            visible: true,\n            rotatable: true,\n            linkable: true,\n            collapsable: false,\n            collapsed: false,\n            markerOffset: 5\n        },\n        dataAttributes: [],\n        props: {\n            x: 0,\n            y: 0,\n            w: 120,\n            h: 80,\n            zindex: 0,\n            angle: 0\n        },\n        shapeStyle: {\n            alpha: 0.8\n        },\n        lineStyle: {\n            lineWidth: 1,\n            lineColor: \"20,130,240\",\n            lineStyle: \"solid\"\n        },\n        fillStyle: {\n            type: \"solid\",\n            color: \"255,255,255\"\n        },\n        path: [{\n            actions: [{\n                action: \"move\",\n                x: \"0\",\n                y: \"0\"\n            }, {\n                action: \"line\",\n                x: \"w\",\n                y: \"0\"\n            }, {\n                action: \"line\",\n                x: \"w\",\n                y: \"h\"\n            }, {\n                action: \"line\",\n                x: \"0\",\n                y: \"h\"\n            }, {\n                action: \"close\"\n            }]\n        }],\n        fontStyle: {\n            fontFamily: \"微软雅黑\",\n            size: 13,\n            color: \"50,50,10\",\n            bold: false,\n            italic: false,\n            underline: false,\n            textAlign: \"left\",\n            vAlign: \"middle\",\n            orientation: \"vertical\"\n        },\n        textBlock: [{\n            position: {\n                x: 10,\n                y: 0,\n                w: \"w-50\",\n                h: \"h\"\n            },\n            text: \"\"\n        }],\n        anchors: [{\n            x: \"w/2\",\n            y: \"0\"\n        }, {\n            x: \"w/2\",\n            y: \"h\"\n        }, /*{\n            x: \"0\",\n            y: \"h/2\"\n        }, {\n            x: \"w\",\n            y: \"h/2\"\n        }*/]\n    },\n    linkerDefaults: {\n        id: \"\",\n        name: \"linker\",\n        text: \"\",\n        group: \"\",\n        linkerType: \"curve\",//连接线改为曲线\n        points: [],\n        locked: false,\n        dataAttributes: [],\n        props: {\n            zindex: 0\n        },\n        lineStyle: {\n            lineWidth: 1,\n            lineColor: \"217,217,217\",\n            lineStyle: \"solid\",\n            beginArrowStyle: \"none\",\n            endArrowStyle: \"solidArrow\"\n        },\n        fontStyle: {\n            fontFamily: \"微软雅黑\",\n            size: 13,\n            color: \"50,50,50\",\n            // color: \"24, 144, 255\",//蓝色（非命中）\n            // color: \"228, 75, 78\",//红色命中\n            bold: false,\n            italic: false,\n            underline: false,\n            textAlign: \"center\"\n        }\n    },\n    categories: [],\n    shapes: {},\n    markers: {},\n    themes: {},\n    addCategory: function (a) {\n        Schema.categories.push(a);\n        CategoryMapping[a.name] = a\n    },\n    addShape: function (a) {\n        if (typeof Schema.shapes[a.name] != \"undefined\") {\n            throw \"--Duplicated shape name: \" + a.name\n        }\n        if (a.groupName) {\n            SchemaGroup.addGroupShape(a.groupName, a.name)\n        }\n        Schema.shapes[a.name] = this.initShape(a)\n    },\n    addTheme: function (a) {\n        Schema.themes[a.name] = a\n    },\n    initShape: function (b) {\n        var a = {};\n        for (var c in this.shapeDefaults) {\n            if (c == \"attribute\") {\n                a.attribute = this.extend(b.attribute, this.shapeDefaults.attribute)\n            } else {\n                if (c == \"props\") {\n                    a.props = this.extend(b.props, this.shapeDefaults.props)\n                } else {\n                    if (c == \"shapeStyle\") {\n                        a.shapeStyle = this.extend(b.shapeStyle, this.shapeDefaults.shapeStyle)\n                    } else {\n                        if (c == \"lineStyle\") {\n                            a.lineStyle = this.extend({}, b.lineStyle)\n                        } else {\n                            if (c == \"fillStyle\") {\n                                a.fillStyle = this.extend({}, b.fillStyle)\n                            } else {\n                                if (c == \"fontStyle\") {\n                                    a.fontStyle = this.extend({}, b.fontStyle)\n                                } else {\n                                    if (c == \"textBlock\") {\n                                        if (typeof b[c] != \"undefined\") {\n                                            a[c] = b[c]\n                                        } else {\n                                            a[c] = [{\n                                                position: this.extend({}, this.shapeDefaults.textBlock[0].position),\n                                                text: \"\"\n                                            }]\n                                        }\n                                    } else {\n                                        if (typeof b[c] != \"undefined\") {\n                                            a[c] = b[c]\n                                        } else {\n                                            a[c] = this.shapeDefaults[c]\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        if (b.onCreated) {\n            a.onCreated = b.onCreated\n        }\n        if (b.drawIcon) {\n            a.drawIcon = b.drawIcon\n        }\n        return a\n    },\n    extend: function (d, c) {\n        if (!d) {\n            d = {}\n        }\n        var a = {};\n        for (var b in c) {\n            a[b] = c[b]\n        }\n        for (var b in d) {\n            a[b] = d[b]\n        }\n        return a\n    },\n    addGlobalCommand: function (a, b) {\n        GlobalCommand[a] = b\n    },\n    addMarker: function (a, b) {\n        if (typeof Schema.markers[a] != \"undefined\") {\n            throw \"--Duplicated marker name: \" + a\n        }\n        Schema.markers[a] = b\n    },\n    empty: function () {\n        Schema.categories = [];\n        Schema.shapes = {};\n        CategoryMapping = {};\n        SchemaGroup.groups = {}\n    },\n    init: function (c) {\n        for (var b in Schema.shapes) {\n            var a = Schema.shapes[b];\n            this.initShapePath(a);\n            if (c) {\n                this.initShapeFunctions(a)\n            }\n            this.initShapeDataAttribute(a)\n        }\n    },\n    initShapePath: function (a) {\n        if (a.path) {\n            for (var b = 0; b < a.path.length; b++) {\n                var c = a.path[b];\n                if (c.actions && c.actions.ref) {\n                    a.path[b].actions = GlobalCommand[c.actions.ref]\n                }\n            }\n        }\n    },\n    initShapeFunctions: function (shape) {\n        var pathEval = \"shape.getPath = function(){var color = [255,255,255];var fillStyle = Utils.getShapeFillStyle(this.fillStyle, false);if(fillStyle.color && fillStyle.color.length > 0){color = fillStyle.color.split(',');}var r = color[0]; var g = color[1]; var b = color[2];var w = this.props.w; var h = this.props.h;var lineStyle = Utils.getShapeLineStyle(this.lineStyle, false); var lineWidth = lineStyle.lineWidth; \";\n        pathEval += SchemaHelper.constructPathFunBody(shape.path) + \"}\";\n        eval(pathEval);\n        var anchorsEval = \"shape.getAnchors = function(){var w = this.props.w; var h = this.props.h; return [\";\n        for (var i = 0; i < shape.anchors.length; i++) {\n            var anchor = shape.anchors[i];\n            anchorsEval += \"{x:\" + anchor.x + \", y:\" + anchor.y + \"}\";\n            if (i < shape.anchors.length - 1) {\n                anchorsEval += \",\"\n            }\n        }\n        anchorsEval += \"];}\";\n        eval(anchorsEval);\n        shape.getTextBlock = function () {\n            // debugger\n            var tbs = this.textBlock;\n            var w = this.props.w;\n            var h = this.props.h;\n            var result = [];\n            for (var i = 0; i < tbs.length; i++) {\n                var tb = tbs[i];\n                var p = tb.position;\n                var newTb = {\n                    position: {\n                        x: eval(p.x),\n                        y: eval(p.y),\n                        w: eval(p.w),\n                        h: eval(p.h)\n                    },\n                    text: tb.text,\n                    fontStyle: tb.fontStyle\n                };\n                result.push(newTb)\n            }\n            return result\n        }\n    },\n    initMarkers: function () {\n        for (var name in Schema.markers) {\n            var pathEval = \"Schema.markers['\" + name + \"'] = function(size){var w = size; var h = size; var lineWidth = this.lineStyle.lineWidth; \";\n            pathEval += SchemaHelper.constructPathFunBody(Schema.markers[name]) + \"}\";\n            eval(pathEval)\n        }\n    },\n    initShapeDataAttribute: function (b) {\n        var a = CategoryMapping[b.category].dataAttributes;\n        if (!b.dataAttributes) {\n            b.dataAttributes = []\n        }\n        if (a && a.length > 0) {\n            b.dataAttributes = a.concat(b.dataAttributes)\n        }\n    }\n};\nvar CategoryMapping = {};\nvar GlobalCommand = {};\nSchema.addGlobalCommand(\"rectangle\", [{\n    action: \"move\",\n    x: \"0\",\n    y: \"0\"\n}, {\n    action: \"line\",\n    x: \"w\",\n    y: \"0\"\n}, {\n    action: \"line\",\n    x: \"w\",\n    y: \"h\"\n}, {\n    action: \"line\",\n    x: \"0\",\n    y: \"h\"\n}, {\n    action: \"close\"\n}]);\nSchema.addGlobalCommand(\"round\", [{\n    action: \"move\",\n    x: \"0\",\n    y: \"h/2\"\n}, {\n    action: \"curve\",\n    x1: \"0\",\n    y1: \"-h/6\",\n    x2: \"w\",\n    y2: \"-h/6\",\n    x: \"w\",\n    y: \"h/2\"\n}, {\n    action: \"curve\",\n    x1: \"w\",\n    y1: \"h+h/6\",\n    x2: \"0\",\n    y2: \"h+h/6\",\n    x: \"0\",\n    y: \"h/2\"\n}, {\n    action: \"close\"\n}]);\nSchema.addGlobalCommand(\"roundRectangle\", [{\n    action: \"move\",\n    x: \"0\",\n    y: \"4\"\n}, {\n    action: \"quadraticCurve\",\n    x1: \"0\",\n    y1: \"0\",\n    x: \"4\",\n    y: \"0\"\n}, {\n    action: \"line\",\n    x: \"w-4\",\n    y: \"0\"\n}, {\n    action: \"quadraticCurve\",\n    x1: \"w\",\n    y1: \"0\",\n    x: \"w\",\n    y: \"4\"\n}, {\n    action: \"line\",\n    x: \"w\",\n    y: \"h-4\"\n}, {\n    action: \"quadraticCurve\",\n    x1: \"w\",\n    y1: \"h\",\n    x: \"w-4\",\n    y: \"h\"\n}, {\n    action: \"line\",\n    x: \"4\",\n    y: \"h\"\n}, {\n    action: \"quadraticCurve\",\n    x1: \"0\",\n    y1: \"h\",\n    x: \"0\",\n    y: \"h-4\"\n}, {\n    action: \"close\"\n}]);\nSchema.addMarker(\"expand\", [{\n    lineStyle: {\n        lineWidth: 1,\n        lineColor: \"50,50,50\",\n        lineStyle: \"solid\"\n    },\n    fillStyle: {\n        type: \"none\"\n    },\n    actions: [{\n        action: \"move\",\n        x: \"w/2\",\n        y: \"2\"\n    }, {\n        action: \"line\",\n        x: \"w/2\",\n        y: \"h-2\"\n    }, {\n        action: \"move\",\n        x: \"2\",\n        y: \"h/2\"\n    }, {\n        action: \"line\",\n        x: \"w-2\",\n        y: \"h/2\"\n    }, {\n        action: \"move\",\n        x: \"0\",\n        y: \"0\"\n    }, {\n        action: \"line\",\n        x: \"w\",\n        y: \"0\"\n    }, {\n        action: \"line\",\n        x: \"w\",\n        y: \"h\"\n    }, {\n        action: \"line\",\n        x: \"0\",\n        y: \"h\"\n    }, {\n        action: \"close\"\n    }]\n}]);\nSchema.addMarker(\"ad_hoc\", [{\n    lineStyle: {\n        lineWidth: 3,\n        lineColor: \"50,50,50\",\n        lineStyle: \"solid\"\n    },\n    fillStyle: {\n        type: \"none\"\n    },\n    actions: [{\n        action: \"move\",\n        x: \"0\",\n        y: \"5*h/8\"\n    }, {\n        action: \"curve\",\n        x1: \"w/8-1\",\n        y1: \"h/2-h/8\",\n        x2: \"3*w/8-1\",\n        y2: \"h/2-h/8\",\n        x: \"w/2\",\n        y: \"h/2\"\n    }, {\n        action: \"curve\",\n        x1: \"5*w/8-1\",\n        y1: \"h/2+h/8\",\n        x2: \"7*w/8+1\",\n        y2: \"h/2+h/8\",\n        x: \"w\",\n        y: \"3*w/8\"\n    }]\n}]);\nSchema.addMarker(\"compensation\", [{\n    lineStyle: {\n        lineWidth: 1,\n        lineColor: \"78,150,250\",\n        lineStyle: \"solid\"\n    },\n    fillStyle: {\n        type: \"none\"\n    },\n    actions: [{\n        action: \"move\",\n        x: \"0\",\n        y: \"h*0.5\"\n    }, {\n        action: \"line\",\n        x: \"w*0.5\",\n        y: \"0\"\n    }, {\n        action: \"line\",\n        x: \"w*0.5\",\n        y: \"h\"\n    }, {\n        action: \"line\",\n        x: \"0\",\n        y: \"h*0.5\"\n    }, {\n        action: \"move\",\n        x: \"w*0.5\",\n        y: \"h*0.5\"\n    }, {\n        action: \"line\",\n        x: \"w\",\n        y: \"0\"\n    }, {\n        action: \"line\",\n        x: \"w\",\n        y: \"h\"\n    }, {\n        action: \"line\",\n        x: \"w*0.5\",\n        y: \"h*0.5\"\n    }]\n}]);\nSchema.addMarker(\"parallel\", [{\n    lineStyle: {\n        lineWidth: 4,\n        lineColor: \"50,50,50\",\n        lineStyle: \"solid\"\n    },\n    fillStyle: {\n        type: \"none\"\n    },\n    actions: [{\n        action: \"move\",\n        x: 1,\n        y: \"0\"\n    }, {\n        action: \"line\",\n        x: 1,\n        y: \"h\"\n    }, {\n        action: \"move\",\n        x: \"w/2\",\n        y: \"0\"\n    }, {\n        action: \"line\",\n        x: \"w/2\",\n        y: \"h\"\n    }, {\n        action: \"move\",\n        x: \"w-1\",\n        y: \"0\"\n    }, {\n        action: \"line\",\n        x: \"w-1\",\n        y: \"h\"\n    }]\n}]);\nSchema.addMarker(\"sequential\", [{\n    lineStyle: {\n        lineWidth: 4,\n        lineColor: \"50,50,50\",\n        lineStyle: \"solid\"\n    },\n    fillStyle: {\n        type: \"none\"\n    },\n    actions: [{\n        action: \"move\",\n        x: \"0\",\n        y: 1\n    }, {\n        action: \"line\",\n        x: \"w\",\n        y: 1\n    }, {\n        action: \"move\",\n        x: \"0\",\n        y: \"h/2\"\n    }, {\n        action: \"line\",\n        x: \"w\",\n        y: \"h/2\"\n    }, {\n        action: \"move\",\n        x: \"0\",\n        y: \"h-1\"\n    }, {\n        action: \"line\",\n        x: \"w\",\n        y: \"h-1\"\n    }]\n}]);\nSchema.addMarker(\"loop\", [{\n    lineStyle: {\n        lineWidth: 1,\n        lineColor: \"50,50,50\",\n        lineStyle: \"solid\"\n    },\n    fillStyle: {\n        type: \"none\"\n    },\n    actions: [{\n        action: \"move\",\n        x: \"w/2\",\n        y: \"h\"\n    }, {\n        action: \"curve\",\n        x1: \"w*7/6\",\n        y1: \"h\",\n        x2: \"w*7/6\",\n        y2: \"0\",\n        x: \"w/2\",\n        y: \"0\"\n    }, {\n        action: \"curve\",\n        x1: \"-w/6\",\n        y1: \"0\",\n        x2: \"-w*0.2/6\",\n        y2: \"h*0.8\",\n        x: \"w*0.2\",\n        y: \"h*0.8\"\n    }, {\n        action: \"move\",\n        x: \"w*0.2\",\n        y: \"h*0.8\"\n    }, {\n        action: \"line\",\n        x: \"-w*0.1\",\n        y: \"h*0.7\"\n    }, {\n        action: \"move\",\n        x: \"w*0.2\",\n        y: \"h*0.8\"\n    }, {\n        action: \"line\",\n        x: \"w*0.25\",\n        y: \"h*0.6\"\n    }]\n}]);\nSchema.addCategory({\n    name: \"standard\",\n    text: \"Standard\",\n    dataAttributes: []\n});\nSchema.addShape({\n    name: \"standardText\",\n    title: \"\",\n    category: \"standard\",\n    attribute: {\n        linkable: false\n    },\n    props: {\n        w: 160,\n        h: 40\n    },\n    anchors: [],\n    textBlock: [{\n        position: {\n            x: 0,\n            y: 0,\n            w: \"w\",\n            h: \"h\"\n        },\n        text: \"文本\"\n    }],\n    path: [{\n        lineStyle: {\n            lineWidth: 0\n        },\n        fillStyle: {\n            type: \"none\"\n        },\n        actions: {\n            ref: \"rectangle\"\n        }\n    }]\n});\nSchema.addShape({\n    name: \"standardImage\",\n    title: \"\",\n    attribute: {\n        linkable: false,\n        visible: false\n    },\n    category: \"standard\",\n    props: {\n        w: 100,\n        h: 70\n    },\n    textBlock: [],\n    path: [{\n        lineStyle: {\n            lineWidth: 0\n        },\n        actions: {\n            ref: \"rectangle\"\n        }\n    }]\n});\nSchema.addShape({\n    name: \"standardRectangle\",\n    title: \"\",\n    attribute: {\n        visible: false\n    },\n    category: \"standard\",\n    props: {\n        w: 100,\n        h: 70\n    },\n    textBlock: [{\n        position: {\n            x: 0,\n            y: 0,\n            w: \"w\",\n            h: \"h\"\n        },\n        text: \"\"\n    }],\n    path: [{\n        actions: {\n            ref: \"rectangle\"\n        }\n    }]\n});\nvar SchemaHelper = {\n    constructPathFunBody: function (n) {\n        var d = \"return [\";\n        for (var k = 0; k < n.length; k++) {\n            var c = n[k];\n            d += \"{\";\n            if (c.fillStyle) {\n                var a = \"fillStyle: {\";\n                var m = c.fillStyle;\n                if (typeof m.type != \"undefined\") {\n                    a += \"type:'\" + m.type + \"',\"\n                }\n                if (typeof m.color != \"undefined\") {\n                    var l = m.color.split(\",\");\n                    var f = \"\";\n                    if (l[0].indexOf(\"r\") >= 0) {\n                        f += \"(\" + l[0] + \")+','+\"\n                    } else {\n                        f += \"'\" + l[0] + \",'+\"\n                    } if (l[1].indexOf(\"g\") >= 0) {\n                        f += \"(\" + l[1] + \")+','+\"\n                    } else {\n                        f += \"'\" + l[1] + \",'+\"\n                    } if (l[2].indexOf(\"b\") >= 0) {\n                        f += \"(\" + l[2] + \")\"\n                    } else {\n                        f += \"'\" + l[2] + \"'\"\n                    }\n                    a += \"color:\" + f + \",\"\n                }\n                if (typeof m.gradientType != \"undefined\") {\n                    a += \"gradientType:\" + m.gradientType + \",\"\n                }\n                if (typeof m.beginColor != \"undefined\") {\n                    var l = m.beginColor.split(\",\");\n                    var f = \"\";\n                    if (l[0].indexOf(\"r\") >= 0) {\n                        f += \"(\" + l[0] + \")+','+\"\n                    } else {\n                        f += \"'\" + l[0] + \",'+\"\n                    } if (l[1].indexOf(\"g\") >= 0) {\n                        f += \"(\" + l[1] + \")+','+\"\n                    } else {\n                        f += \"'\" + l[1] + \",'+\"\n                    } if (l[2].indexOf(\"b\") >= 0) {\n                        f += \"(\" + l[2] + \")\"\n                    } else {\n                        f += \"'\" + l[2] + \"'\"\n                    }\n                    a += \"beginColor:\" + f + \",\"\n                }\n                if (typeof m.endColor != \"undefined\") {\n                    var l = m.endColor.split(\",\");\n                    var f = \"\";\n                    if (l[0].indexOf(\"r\") >= 0) {\n                        f += \"(\" + l[0] + \")+','+\"\n                    } else {\n                        f += \"'\" + l[0] + \",'+\"\n                    } if (l[1].indexOf(\"g\") >= 0) {\n                        f += \"(\" + l[1] + \")+','+\"\n                    } else {\n                        f += \"'\" + l[1] + \",'+\"\n                    } if (l[2].indexOf(\"b\") >= 0) {\n                        f += \"(\" + l[2] + \")\"\n                    } else {\n                        f += \"'\" + l[2] + \"'\"\n                    }\n                    a += \"endColor:\" + f + \",\"\n                }\n                if (typeof m.angle != \"undefined\") {\n                    a += \"angle:\" + m.angle + \",\"\n                }\n                if (typeof m.radius != \"undefined\") {\n                    a += \"radius:\" + m.radius + \",\"\n                }\n                if (typeof m.fileId != \"undefined\") {\n                    a += \"fileId:'\" + m.fileId + \"',\"\n                }\n                if (typeof m.display != \"undefined\") {\n                    a += \"display:'\" + m.display + \"',\"\n                }\n                if (typeof m.imageW != \"undefined\") {\n                    a += \"imageW:\" + m.imageW + \",\"\n                }\n                if (typeof m.imageH != \"undefined\") {\n                    a += \"imageH:\" + m.imageH + \",\"\n                }\n                if (typeof m.alpha != \"undefined\") {\n                    a += \"alpha:\" + m.alpha + \",\"\n                }\n                if (typeof m.imageX != \"undefined\") {\n                    a += \"imageX:\" + m.imageX + \",\"\n                }\n                if (typeof m.imageY != \"undefined\") {\n                    a += \"imageY:\" + m.imageY + \",\"\n                }\n                a = a.substring(0, a.length - 1);\n                a += \"},\";\n                d += a\n            }\n            if (c.lineStyle) {\n                var b = \"lineStyle: {\";\n                if (typeof c.lineStyle.lineWidth != \"undefined\") {\n                    b += \"lineWidth:\" + c.lineStyle.lineWidth + \",\"\n                }\n                if (typeof c.lineStyle.lineStyle != \"undefined\") {\n                    b += \"lineStyle:'\" + c.lineStyle.lineStyle + \"',\"\n                }\n                if (typeof c.lineStyle.lineColor != \"undefined\") {\n                    b += \"lineColor:'\" + c.lineStyle.lineColor + \"',\"\n                }\n                b = b.substring(0, b.length - 1);\n                b += \"},\";\n                d += b\n            }\n            d += \"actions:[\";\n            var h = c.actions;\n            for (var g = 0; g < h.length; g++) {\n                var e = h[g];\n                d += \"{action:'\" + e.action + \"'\";\n                if (e.action == \"move\" || e.action == \"line\") {\n                    d += \",x:\" + e.x + \",y:\" + e.y\n                } else {\n                    if (e.action == \"curve\") {\n                        d += \",x1:\" + e.x1 + \",y1:\" + e.y1 + \",x2:\" + e.x2 + \",y2:\" + e.y2 + \",x:\" + e.x + \",y:\" + e.y\n                    } else {\n                        if (e.action == \"quadraticCurve\") {\n                            d += \",x1:\" + e.x1 + \",y1:\" + e.y1 + \",x:\" + e.x + \",y:\" + e.y\n                        }\n                    }\n                }\n                d += \"}\";\n                if (g < h.length - 1) {\n                    d += \",\"\n                }\n            }\n            d += \"]}\";\n            if (k < n.length - 1) {\n                d += \",\"\n            }\n        }\n        d += \"];\";\n        return d\n    }\n};\nvar SchemaGroup = {\n    groups: {},\n    addGroupShape: function (b, a) {\n        if (!this.groupExists(b)) {\n            this.groups[b] = [a]\n        } else {\n            this.groups[b].push(a)\n        }\n    },\n    groupExists: function (a) {\n        if (this.groups[a]) {\n            return true\n        } else {\n            return false\n        }\n    },\n    getGroup: function (a) {\n        return this.groups[a]\n    }\n};\nif (typeof JSON !== \"object\") {\n    JSON = {}\n} (function () {\n    function f(n) {\n        return n < 10 ? \"0\" + n : n\n    }\n    if (typeof Date.prototype.toJSON !== \"function\") {\n        Date.prototype.toJSON = function (key) {\n            return isFinite(this.valueOf()) ? this.getUTCFullYear() + \"-\" + f(this.getUTCMonth() + 1) + \"-\" + f(this.getUTCDate()) + \"T\" + f(this.getUTCHours()) + \":\" + f(this.getUTCMinutes()) + \":\" + f(this.getUTCSeconds()) + \"Z\" : null\n        };\n        String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function (key) {\n            return this.valueOf()\n        }\n    }\n    var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n        escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n        gap, indent, meta = {\n            \"\\b\": \"\\\\b\",\n            \"\\t\": \"\\\\t\",\n            \"\\n\": \"\\\\n\",\n            \"\\f\": \"\\\\f\",\n            \"\\r\": \"\\\\r\",\n            '\"': '\\\\\"',\n            \"\\\\\": \"\\\\\\\\\"\n        }, rep;\n\n    function quote(string) {\n        escapable.lastIndex = 0;\n        return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n            var c = meta[a];\n            return typeof c === \"string\" ? c : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4)\n        }) + '\"' : '\"' + string + '\"'\n    }\n\n    function str(key, holder) {\n        var i, k, v, length, mind = gap,\n            partial, value = holder[key];\n        if (value && typeof value === \"object\" && typeof value.toJSON === \"function\") {\n            value = value.toJSON(key)\n        }\n        if (typeof rep === \"function\") {\n            value = rep.call(holder, key, value)\n        }\n        switch (typeof value) {\n            case \"string\":\n                return quote(value);\n            case \"number\":\n                return isFinite(value) ? String(value) : \"null\";\n            case \"boolean\":\n            case \"null\":\n                return String(value);\n            case \"object\":\n                if (!value) {\n                    return \"null\"\n                }\n                gap += indent;\n                partial = [];\n                if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n                    length = value.length;\n                    for (i = 0; i < length; i += 1) {\n                        partial[i] = str(i, value) || \"null\"\n                    }\n                    v = partial.length === 0 ? \"[]\" : gap ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\" : \"[\" + partial.join(\",\") + \"]\";\n                    gap = mind;\n                    return v\n                }\n                if (rep && typeof rep === \"object\") {\n                    length = rep.length;\n                    for (i = 0; i < length; i += 1) {\n                        if (typeof rep[i] === \"string\") {\n                            k = rep[i];\n                            v = str(k, value);\n                            if (v) {\n                                partial.push(quote(k) + (gap ? \": \" : \":\") + v)\n                            }\n                        }\n                    }\n                } else {\n                    for (k in value) {\n                        if (Object.prototype.hasOwnProperty.call(value, k)) {\n                            v = str(k, value);\n                            if (v) {\n                                partial.push(quote(k) + (gap ? \": \" : \":\") + v)\n                            }\n                        }\n                    }\n                }\n                v = partial.length === 0 ? \"{}\" : gap ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\" : \"{\" + partial.join(\",\") + \"}\";\n                gap = mind;\n                return v\n        }\n    }\n    if (typeof JSON.stringify !== \"function\") {\n        JSON.stringify = function (value, replacer, space) {\n            var i;\n            gap = \"\";\n            indent = \"\";\n            if (typeof space === \"number\") {\n                for (i = 0; i < space; i += 1) {\n                    indent += \" \"\n                }\n            } else {\n                if (typeof space === \"string\") {\n                    indent = space\n                }\n            }\n            rep = replacer;\n            if (replacer && typeof replacer !== \"function\" && (typeof replacer !== \"object\" || typeof replacer.length !== \"number\")) {\n                throw new Error(\"JSON.stringify\")\n            }\n            return str(\"\", {\n                \"\": value\n            })\n        }\n    }\n    if (typeof JSON.parse !== \"function\") {\n        JSON.parse = function (text, reviver) {\n            var j;\n\n            function walk(holder, key) {\n                var k, v, value = holder[key];\n                if (value && typeof value === \"object\") {\n                    for (k in value) {\n                        if (Object.prototype.hasOwnProperty.call(value, k)) {\n                            v = walk(value, k);\n                            if (v !== undefined) {\n                                value[k] = v\n                            } else {\n                                delete value[k]\n                            }\n                        }\n                    }\n                }\n                return reviver.call(holder, key, value)\n            }\n            text = String(text);\n            cx.lastIndex = 0;\n            if (cx.test(text)) {\n                text = text.replace(cx, function (a) {\n                    return \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4)\n                })\n            }\n            if (/^[\\],:{}\\s]*$/.test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, \"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, \"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g, \"\"))) {\n                j = eval(\"(\" + text + \")\");\n                return typeof reviver === \"function\" ? walk({\n                    \"\": j\n                }, \"\") : j\n            }\n            throw new SyntaxError(\"JSON.parse\")\n        }\n    }\n}());"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/themes.js",
    "content": "Schema.addTheme({\n    name: \"normal\",\n    shape: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: false,\n            italic: false\n        },\n        fillStyle: {\n            type: \"solid\",\n            color: \"255,255,255\"\n        },\n        lineStyle: {\n            lineWidth: 1,\n            lineColor: \"50,50,50\"\n        }\n    },\n    linker: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: false,\n            italic: false\n        },\n        lineStyle: {\n            lineWidth: 2,\n            lineColor: \"50,50,50\"\n        }\n    }\n});\nSchema.addTheme({\n    name: \"normal_yahei\",\n    shape: {\n        fontStyle: {\n            fontFamily: \"微软雅黑\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: false,\n            italic: false\n        },\n        fillStyle: {\n            type: \"solid\",\n            color: \"255,255,255\"\n        },\n        lineStyle: {\n            lineWidth: 2,\n            lineColor: \"50,50,50\"\n        }\n    },\n    linker: {\n        fontStyle: {\n            fontFamily: \"微软雅黑\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: false,\n            italic: false\n        },\n        lineStyle: {\n            lineWidth: 2,\n            lineColor: \"50,50,50\"\n        }\n    }\n});\nSchema.addTheme({\n    name: \"normal_bold\",\n    shape: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: true,\n            italic: false\n        },\n        fillStyle: {\n            type: \"solid\",\n            color: \"255,255,255\"\n        },\n        lineStyle: {\n            lineWidth: 4,\n            lineColor: \"50,50,50\"\n        }\n    },\n    linker: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: true,\n            italic: false\n        },\n        lineStyle: {\n            lineWidth: 4,\n            lineColor: \"50,50,50\"\n        }\n    }\n});\nSchema.addTheme({\n    name: \"colorful_green\",\n    shape: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: false,\n            italic: false\n        },\n        fillStyle: {\n            type: \"solid\",\n            color: \"110,212,100\"\n        },\n        lineStyle: {\n            lineWidth: 2,\n            lineColor: \"50,50,50\"\n        }\n    },\n    linker: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: false,\n            italic: false\n        },\n        lineStyle: {\n            lineWidth: 2,\n            lineColor: \"50,50,50\"\n        }\n    }\n});\nSchema.addTheme({\n    name: \"colorful_yellow\",\n    shape: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: false,\n            italic: false\n        },\n        fillStyle: {\n            type: \"solid\",\n            color: \"255,255,237\"\n        },\n        lineStyle: {\n            lineWidth: 2,\n            lineColor: \"50,50,50\"\n        }\n    },\n    linker: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: false,\n            italic: false\n        },\n        lineStyle: {\n            lineWidth: 2,\n            lineColor: \"50,50,50\"\n        }\n    }\n});\nSchema.addTheme({\n    name: \"colorful_red\",\n    shape: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: false,\n            italic: false\n        },\n        fillStyle: {\n            type: \"solid\",\n            color: \"245,146,123\"\n        },\n        lineStyle: {\n            lineWidth: 2,\n            lineColor: \"50,50,50\"\n        }\n    },\n    linker: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: false,\n            italic: false\n        },\n        lineStyle: {\n            lineWidth: 2,\n            lineColor: \"50,50,50\"\n        }\n    }\n});\nSchema.addTheme({\n    name: \"colorful_bold_yellow\",\n    shape: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"100,100,100\",\n            bold: false,\n            italic: false\n        },\n        fillStyle: {\n            type: \"solid\",\n            color: \"248,238,206\"\n        },\n        lineStyle: {\n            lineWidth: 4,\n            lineColor: \"173,165,141\"\n        }\n    },\n    linker: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"100,100,100\",\n            bold: false,\n            italic: false\n        },\n        lineStyle: {\n            lineWidth: 4,\n            lineColor: \"108,122,122\"\n        }\n    }\n});\nSchema.addTheme({\n    name: \"colorful_bold_green\",\n    shape: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: true,\n            italic: false\n        },\n        fillStyle: {\n            type: \"solid\",\n            color: \"192,212,163\"\n        },\n        lineStyle: {\n            lineWidth: 4,\n            lineColor: \"96,106,82\"\n        }\n    },\n    linker: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: true,\n            italic: false\n        },\n        lineStyle: {\n            lineWidth: 4,\n            lineColor: \"50,50,50\"\n        }\n    }\n});\nSchema.addTheme({\n    name: \"colorful_bold_blue\",\n    shape: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: true,\n            italic: false\n        },\n        fillStyle: {\n            type: \"solid\",\n            color: \"77,195,186\"\n        },\n        lineStyle: {\n            lineWidth: 4,\n            lineColor: \"39,98,93\"\n        }\n    },\n    linker: {\n        fontStyle: {\n            fontFamily: \"Arial\",\n            size: 13,\n            color: \"50,50,50\",\n            bold: true,\n            italic: false\n        },\n        lineStyle: {\n            lineWidth: 4,\n            lineColor: \"50,50,50\"\n        }\n    }\n});"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/ui.css",
    "content": "@CHARSET \"UTF-8\";\n/**    ################ UI Styles #################### **/\nhtml,body{\n\tpadding:0px; margin:0px;\n\toverflow: hidden;\n\t-moz-user-select:none;\n\t-webkit-user-select:none;\n\t-ms-user-select:none;\n\t-khtml-user-select:none;\n\tuser-select:none;\n}\n::-webkit-scrollbar {\n\twidth: 9px;\n\theight: 9px;\n\tbackground: white;\n\tborder-left: 0px solid #e8e8e8;\n}\n::-webkit-scrollbar-thumb {\n\tborder-width: 1px;\n\tborder-style: solid;\n\tborder-color: #fff;\n\tborder-radius: 6px;\n\tbackground: #c9c9c9;\n}\n::-webkit-scrollbar-thumb:hover {\n\tbackground: #b5b5b5;\n}\n#designer_header{\n\tbackground-color: #F7F7F7;\n}\n#designer_header .row{\n\tposition: relative;\n\tmargin: 0px 20px 0px 30px;\n}\n#bar_return{\n\tposition: absolute;\n\tleft: 5px;\n\tdisplay: none;\n}\n.btn_back{\n\theight: 20px;\n\twidth: 20px;\n\tposition: absolute;\n\tleft: 2px;\n\ttop: 10px;\n\tpadding: 5px;\n\tcursor: pointer;\n\tdisplay: block;\n}\n.btn_back .ico, #bar_return .ico{\n\tdisplay: block;\n}\n.btn_back:hover{\n\tbackground-color: #eee;\n}\n#title_container{\n\tdisplay: inline-block;\n}\n.diagram_title{\n\tdisplay: inline-block;\n\tfont-size: 20px;\n\tcursor: pointer;\n\tpadding: 0px 10px;\n\tline-height: 30px;\n\theight: 30px;\n\tmargin-top: 10px;\n}\n.diagram_title:hover{\n\tbackground-color: #eee;\n}\n.diagram_title.readonly{\n\tcursor: default;\n}\n.diagram_title.readonly:hover{\n\tbackground-color: transparent;\n}\n#title_container input{\n\tborder: 1px solid #D9D9D9;\n\tborder-top: 1px solid silver;\n\tpadding: 4px 10px;\n\theight: 20px;\n\tline-height: 20px;\n\twidth: 300px;\n\tmargin-top: 10px;\n\tborder-radius: 3px;\n}\n.input_text{\n\tborder: 1px solid #D9D9D9;\n\tborder-top: 1px solid silver;\n\tpadding: 3px 5px;\n\theight: 18px;\n\tline-height: 18px;\n\tborder-radius: 2px;\n}\n.input_select{\n\tborder: 1px solid #D9D9D9;\n\tborder-top: 1px solid silver;\n\tpadding: 3px 2px 3px 0px;\n\theight: 26px;\n\tline-height: 26px;\n\tborder-radius: 2px;\n\toutline:none;\n}\n#designer_header{\n\tposition: relative;\n}\n#designer_header .row2{\n\theight: 30px;\n\tline-height: 30px;\n}\n\n#menu_bar{\n\tdisplay: inline-block;\n\tfloat: left;\n}\n#saving_tip{\n\tdisplay: inline-block;\n\tfloat: left;\n\tmargin-left: 20px;\n\tline-height: 28px;\n\tcolor: #777;\n}\n#menu_bar li{\n\tfloat: left;\n\tline-height: 28px;\n\tpadding: 0px 10px;\n\tcursor: default;\n}\n#menu_bar li:hover{\n\tbackground-color: #eee;\n}\n#menu_bar li.readonly:hover{\n\tbackground-color: transparent;\n}\n.titlebar{\n\tposition: relative;\n}\n.toolbar{\n\tposition: relative;\n\tpadding-left: 35px;\n\tbackground-color: #f3f3f3;\n\tborder-top: 1px solid #cbcccc;\n\theight: 36px;\n\tfont-size: 12px;\n\tmin-width: 840px;\n\t-webkit-box-shadow: inset 0 1px 0 0 #fff;\n\t-moz-box-shadow: inset 0 1px 0 0 #fff;\n\tbox-shadow: inset 0 1px 0 0 #fff;\n\tbackground-color: #f5f5f5;\n\tbackground-image: -webkit-linear-gradient(top,#f5f5f5,#eee);\n\tbackground-image: -moz-linear-gradient(top,#f5f5f5,#eee);\n\tbackground-image: -ms-linear-gradient(top,#f5f5f5,#eee);\n\tbackground-image: -o-linear-gradient(top,#f5f5f5,#eee);\n\tbackground-image: linear-gradient(top,#f5f5f5,#eee);\n\tborder-bottom: 1px solid #aaaaaa;\n}\n.toolbar_right{\n\tposition: absolute;\n\tright: 20px;\n\theight: 36px;\n}\n.toolbar .toolbar_button, .toolbar .spinner{\n\tfloat: left;\n\tmargin-top: 5px;\n}\n.toolbar_devider{\n\tfloat: left;\n\tborder-left: 1px solid #D2D2D2;\n\theight: 36px;\n\tmargin: 0px 3px 0px 3px;\n\tborder-right: 1px solid #FAFAFA;\n}\n.toolbar_small_devider{\n\tfloat: left;\n\twidth: 1px;\n\theight: 20px;\n\tbackground-color: #D2D2D2;\n\tmargin: 8px 3px 0px 3px;\n}\n.ico{\n\tbackground: url(./images/sprite.png?9) no-repeat;\n\theight: 20px;\n\twidth: 20px;\n}\n.disabled .ico{\n\tbackground-image: url(./images/sprite_disabled.png?8);\n}\n.ico.undo{\n\tbackground-position: 0px -20px;\n}\n.ico.redo{\n\tbackground-position: -20px 0px;\n}\n.ico.brush{\n\tbackground-position: -20px -20px;\n}\n.ico.bold{\n\tbackground-position: -20px -40px;\n}\n.ico.italic{\n\tbackground-position: 0px -60px;\n}\n.ico.underline{\n\tbackground-position: -20px -60px;\n}\n.ico.fontcolor{\n\tbackground-position: 0px -80px;\n}\n.ico.alignleft{\n\tbackground-position: -20px -80px;\n}\n.ico.aligncenter{\n\tbackground-position: 0px -100px;\n}\n.ico.alignright{\n\tbackground-position: -20px -100px;\n}\n.ico.aligntop{\n\tbackground-position: 0px -120px;\n}\n.ico.alignmiddle{\n\tbackground-position: -20px -120px;\n}\n.ico.alignbottom{\n\tbackground-position: 0px -140px;\n}\n.ico.fillcolor{\n\tbackground-position: -20px -140px;\n}\n.ico.linecolor{\n\tbackground-position: 0px -160px;\n}\n.ico.linewidth{\n\tbackground-position: -20px -160px;\n}\n.ico.linedash{\n\tbackground-position: 0px -180px;\n}\n.ico.linestyle{\n\twidth: 50px;\n\theight: 2px;\n}\n.ico.linesolid{\n\tbackground-position: 0px -202px;\n}\n.ico.linedashed{\n\tbackground-position: 0px -215px;\n}\n.ico.linedot{\n\tbackground-position: 0px -208px;\n}\n.ico.linedashdot{\n\tbackground-position: 0px -222px;\n}\n.ico.linkertype_broken{\n\tbackground-position: -20px -180px;\n}\n.ico.linkertype_curve{\n\tbackground-position: -40px -160px;\n}\n.ico.linkertype_normal{\n\tbackground-position: -40px -180px;\n}\n.ico.transparent{\n\tbackground-position: 0px -645px;\n\tposition:relative !important;\n\tcursor:pointer;\n\tmargin-top:4px !important;\n\tborder:1px solid #ccc;\n\tleft:0px !important;\n\ttop:0px !important;\n\twidth:16px !important;\n\theight:16px !important;\n}\n.ico.transparent:hover{\n\tborder:1px solid #aaa;\n}\n.ico_arrow{\n\twidth: 26px;\n\theight: 10px;\n}\n.ico.larrow_none{\n\tbackground-position: 0px -329px;\n}\n.larrow_solidarrow{\n\tbackground-position: 0px -228px;\n}\n.larrow_dashedarrow{\n\tbackground-position: 0px -240px;\n}\n.larrow_normal{\n\tbackground-position: 0px -254px;\n}\n.larrow_soliddiamond{\n\tbackground-position: 0px -266px;\n}\n.larrow_dasheddiamond{\n\tbackground-position: 0px -279px;\n}\n.larrow_solidcircle{\n\tbackground-position: 0px -293px;\n}\n.larrow_dashedcircle{\n\tbackground-position: 0px -305px;\n}\n.larrow_cross{\n\tbackground-position: 0px -319px;\n}\n.ico.rarrow_none{\n\tbackground-position: -26px -329px;\n}\n.rarrow_solidarrow{\n\tbackground-position: -26px -228px;\n}\n.rarrow_dashedarrow{\n\tbackground-position: -26px -240px;\n}\n.rarrow_normal{\n\tbackground-position: -26px -254px;\n}\n.rarrow_soliddiamond{\n\tbackground-position: -26px -266px;\n}\n.rarrow_dasheddiamond{\n\tbackground-position: -26px -279px;\n}\n.rarrow_solidcircle{\n\tbackground-position: -26px -293px;\n}\n.rarrow_dashedcircle{\n\tbackground-position: -26px -305px;\n}\n.rarrow_cross{\n\tbackground-position: -26px -319px;\n}\n.ico_lock{\n\tbackground-position: -40px -140px;\n}\n.ico_unlock{\n\tbackground-position: -40px -120px;\n}\n.ico_link{\n\tbackground-position: -20px -420px;\n}\n.ico_selected{\n\tbackground-position: -40px -100px;\n}\n.ico_accordion{\n\twidth: 8px;\n\theight: 8px;\n\tbackground-position: -40px -47px;\n}\n.ico_dock_nav{\n\tbackground-position: -40px 0px;\n}\n.ico_dock_styles{\n\tbackground-position: 1px -340px;\n}\n.ico_dock_metric{\n\tbackground-position: 0px -360px;\n}\n.ico_dock_page{\n\tbackground-position: -20px -360px;\n}\n.ico_dock_attribute{\n\tbackground-position: -39px -360px;\n}\n.ico_attr_delete{\n\tbackground-position: 0px -380px;\n}\n.ico_attr_delete:hover{\n\tbackground-position: -20px -380px;\n}\n.ico_plus{\n\tbackground-position: -40px -380px;\n}\n.gradient{\n\tbackground-position: 0px -400px;\n}\n.ico_img{\n\tbackground-position: -20px -400px;\n}\n.ico_front{\n\tbackground-position: -40px -400px;\n}\n.ico_back{\n\tbackground-position: 0px -420px;\n}\n.ico_goback{\n\tbackground-position: -40px -420px;\n}\n.ico_chat{\n\tbackground-position: 0px -440px;\n\tmargin: 4px 2px;\n}\n.ico_history{\n\tbackground-position: -20px -440px;\n}\n.ico_comment{\n\tbackground-position: -40px -620px;\n}\n.ico_play{\n\tbackground-position: -40px -440px;\n}\n.ico_pause{\n\tbackground-position: 0px -460px;\n}\n.ico_playing{\n\tbackground-position: -20px -460px;\n\tposition: absolute;\n\ttop: 10px;\n\tleft: -5px;\n}\n.ico_restore{\n\tbackground-position: -40px -460px;\n}\n.ico.cut{\n\tbackground-position: 0px -480px;\n}\n.ico.copy{\n\tbackground-position: -20px -480px;\n}\n.ico.paste{\n\tbackground-position: -40px -480px;\n}\n.ico.remove{\n\tbackground-position: 0px -500px;\n}\n.ico.zoomin{\n\tbackground-position: -20px -500px;\n}\n.ico.zoomout{\n\tbackground-position: -40px -500px;\n}\n.ico.text{\n\tbackground-position: 0px -520px;\n}\n.ico.gridsize{\n\tbackground-position: -20px -520px;\n}\n.ico.padding{\n\tbackground-position: -40px -520px;\n}\n.ico.edittext{\n\tbackground-position: 0px -540px;\n}\n.ico.useradd{\n\tbackground-position: -20px -540px;\n}\n.ico.chrome{\n\tbackground-position: -40px -540px;\n}\n.ico.weibo{\n\tbackground-position: 0px -560px;\n}\n.ico.twitter{\n\tbackground-position: -20px -560px;\n}\n.ico_header_share{\n\tbackground-position: 0px -580px;\n}\n.ico_remove_red{\n\tbackground-position: -20px -580px;\n}\n.ico_fullscreen{\n\tbackground-position: -40px -580px;\n}\n.ico_presentation{\n\tbackground-position: 0px -600px;\n}\n.ico.firefox{\n\tbackground-position: -20px -600px;\n}\n.ico.collapse{\n\tbackground-position: -40px -600px;\n}\n.ico.expand{\n\tbackground-position: 0px -620px;\n}\n.ico.theme{\n\tbackground-position: -20px -620px;\n}\n\n\n/**    ################ Control Styles #################### **/\n.toolbar_button{\n\theight: 24px;\n\tline-height: 24px;\n\tmin-width: 20px;\n\tpadding: 0;\n\ttext-align: center;\n\tborder: 1px solid transparent;\n\t-webkit-border-radius: 2px;\n\t-moz-border-radius: 2px;\n\t-ms-border-radius: 2px;\n\tborder-radius: 2px;\n\tposition: relative;\n\tcursor: default;\n}\n.toolbar_button.active, .toolbar_button:hover{\n\tborder-color: #c6c6c6;\n\t-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\t-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\t-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\tbox-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\tbackground-color: #F8F8F8;\n\tbackground-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1);\n\tbackground-image: -moz-linear-gradient(top, #f8f8f8, #f1f1f1);\n\tbackground-image: -ms-linear-gradient(top, #f8f8f8, #f1f1f1);\n\tbackground-image: linear-gradient(top, #f8f8f8, #f1f1f1);\n}\n.toolbar_button.active:hover{\n\tbackground-color: #f3f3f3;\n\tbackground-image: -webkit-linear-gradient(top, #f8f8f8, #e8e8e8);\n\tbackground-image: -moz-linear-gradient(top, #f8f8f8, #e8e8e8);\n\tbackground-image: -ms-linear-gradient(top, #f8f8f8, #e8e8e8);\n\tbackground-image: linear-gradient(top, #f8f8f8, #e8e8e8);\n}\n\n.spinner{\n\theight: 24px;\n\tborder: 1px solid transparent;\n\t-webkit-border-radius: 2px;\n\t-moz-border-radius: 2px;\n\t-ms-border-radius: 2px;\n\tborder-radius: 2px;\n    position: relative;\n}\n.spinner.active, .spinner:hover, .spinner.active:hover{\n\tborder-color: #c6c6c6;\n\t-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\t-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\t-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\tbox-shadow: 0px 1px 1px rgba(0,0,0,.1);\n    background: #FFF;\n}\n.spinner_input{\n\tmargin-right: 15px;\n}\n.spinner input{\n\tmargin: 0px;\n\tborder: 0px;\n\theight: 24px;\n\tline-height: 16px;\n\tpadding: 0px;\n\ttext-align: right;\n\tbackground: transparent;\n\twidth: 100%;\n}\n.spinner .buttons{\n\tposition: absolute;\n\tright: 0px;\n\ttop: 0px;\n\theight: 24px;\n\twidth: 12px;\n\tborder-left: 1px solid transparent;\n}\n.spinner.active .buttons, .spinner:hover .buttons{\n\tborder-color: #c6c6c6;\n\tbackground-color: #F8F8F8;\n\tbackground-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1);\n\tbackground-image: -moz-linear-gradient(top, #f8f8f8, #f1f1f1);\n\tbackground-image: -ms-linear-gradient(top, #f8f8f8, #f1f1f1);\n\tbackground-image: linear-gradient(top, #f8f8f8, #f1f1f1);\n}\n.spinner .buttons div{\n\tbackground-image: url(./images/sprite.png?9);\n\theight: 12px;\n\twidth: 12px;\n}\n.spinner_up{\n\tbackground-position: -44px -343px;\n}\n.spinner_down{\n\tbackground-position: -3px -46px;\n}\n.spinner .buttons div:hover{\n\tbackground-color: #d2d2d2;\n}\n\n.spinner.disabled:hover{\n\tborder-color: transparent;\n\t-webkit-box-shadow: none;\n\t-moz-box-shadow: none;\n\t-ms-box-shadow: none;\n\tbox-shadow: none;\n    background: transparent;\n}\n.spinner.active.disabled, .spinner.active.disabled:hover{\n\tborder-color: #d6d6d6;\n\t-webkit-box-shadow: none;\n\t-moz-box-shadow: none;\n\t-ms-box-shadow: none;\n\tbox-shadow: none;\n\tbackground: #FFF;\n}\n.spinner.disabled input{\n\tcolor: #b3b3b3;\n}\n.spinner.active.disabled .buttons, .spinner.active.disabled:hover .buttons{\n\tborder-color: #c6c6c6;\n\tbackground-color: #fcfcfc;\n\tbackground-image: -webkit-linear-gradient(top, #fcfcfc, #f5f5f5);\n\tbackground-image: -moz-linear-gradient(top, #fcfcfc, #f5f5f5);\n\tbackground-image: -ms-linear-gradient(top, #fcfcfc, #f5f5f5);\n\tbackground-image: linear-gradient(top, #fcfcfc, #f5f5f5);\n}\n.spinner.disabled:hover .buttons{\n\tborder-color: transparent;\n\tbackground-color: transparent;\n\tbackground-image: none;\n}\n.spinner.disabled .buttons div:hover{\n\tbackground-color: transparent;\n}\n.spinner.disabled .buttons div{\n\tbackground-image: url(./images/sprite_disabled.png?8);\n}\n\n.toolbar_button .ico{\n\tmargin: 2px;\n}\n.drop_button .ico{\n\tmargin-right: 0px;\n}\n.drop_button .ico_arrow{\n\tmargin-top: 7px;\n\tmargin-left: 4px;\n}\n.drop_button{\n\tpadding-right: 13px;\n}\n.toolbar_button .ico_dropdown{\n\tposition: absolute;\n\tright: 0px;\n\ttop: 2px;\n\tbackground-position: -3px -40px;\n\theight: 20px;\n\twidth: 13px;\n\tmargin: 0px;\n}\n.btn_color{\n\theight: 3px;\n\twidth: 20px;\n\tposition: absolute;\n\tleft: 2px;\n\tbottom: 2px;\n\tbackground-color: #333;\n}\n.text_content{\n\tmargin: 0px 13px 0px 5px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\theight: 24px;\n\tline-height: 24px;\n\ttext-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n\ttext-align: left;\n\tcursor: default;\n}\n.toolbar_button.disabled{\n\tcolor: #b3b3b3;\n}\n.toolbar_button.disabled:hover{\n\tborder-color: transparent;\n\t-webkit-box-shadow: none;\n\t-moz-box-shadow: none;\n\t-ms-box-shadow: none;\n\tbox-shadow: none;\n\tbackground-color: transparent;\n\tbackground-image: none;\n}\n.toolbar_button.active.disabled, .toolbar_button.active.disabled:hover{\n\tborder-color: #d6d6d6;\n\t-webkit-box-shadow: none;\n\t-moz-box-shadow: none;\n\t-ms-box-shadow: none;\n\tbox-shadow: none;\n\tbackground-color: #fcfcfc;\n\tbackground-image: -webkit-linear-gradient(top, #fcfcfc, #f5f5f5);\n\tbackground-image: -moz-linear-gradient(top, #fcfcfc, #f5f5f5);\n\tbackground-image: -ms-linear-gradient(top, #fcfcfc, #f5f5f5);\n\tbackground-image: linear-gradient(top, #fcfcfc, #f5f5f5);\n}\n.toolbar_button.selected, .toolbar_button.selected:hover{\n\t-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);\n\t-moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);\n\tbox-shadow: inset 0 1px 2px rgba(0,0,0,.1);\n\tbackground-color: #eee;\n\tbackground-image: -webkit-linear-gradient(top,#eee,#e0e0e0);\n\tbackground-image: -moz-linear-gradient(top,#eee,#e0e0e0);\n\tbackground-image: -ms-linear-gradient(top,#eee,#e0e0e0);\n\tbackground-image: -o-linear-gradient(top,#eee,#e0e0e0);\n\tbackground-image: linear-gradient(top,#eee,#e0e0e0);\n\tborder-color: #ccc;\n}\n.toolbar_button.disabled .btn_color{\n\topacity: 0.3;\n\tfilter:alpha(opacity=30);\n}\n#font_align_list{\n\tpadding: 4px;\n\twidth: 78px;\n\theight: 52px;\n}\n#font_align_list li{\n\tfloat: left;\n\twidth:20px;\n\theight: 20px;\n\tpadding: 3px;\n\tborder-radius: 2px;\n}\n#line_style_list li{\n\tpadding-top: 12px;\n\tpadding-bottom: 12px;\n}\n#line_type_list{\n\tpadding: 4px;\n}\n#line_type_list li{\n\twidth:20px;\n\theight: 20px;\n\tpadding: 3px;\n\tborder-radius: 2px;\n}\n#beginarrow_list li, #endarrow_list li{\n\tpadding: 8px 30px;\n}\n\n.color_picker{\n\tpadding: 0px 10px 10px;\n\tz-index: 1;\n}\n.color_items{\n\tborder-color: #000;\n\tborder-width: 0 1px 1px 0;\n\tborder-style: solid;\n\twidth: 156px;\n\tmargin-top: 10px;\n}\n.color_btn{\n\tline-height:20px;\n\tmargin-top:5px;\n}\n.color_extend{\n\tmargin-top: 10px;\n\twidth: 156px;\n\tposition: relative;\n}\n.color_extend .toolbar_button{\n\tdisplay: inline-block;\n\tpadding: 0px 2px;\n}\n.color_transparent{\n\tdisplay:inline-block;\n\tfloat:left;\n\tmargin-right:8px;\n}\n.color_hex{\n\tdisplay:inline-block;\n\twidth:76px;\n\theight:18px;\n\tline-height:18px;\n\tcolor:#666;\n\tfloat:left;\n\tclear:right;\n\tmargin-left:0px;\n\tposition:relative;\n\tmargin-top:4px;\n}\n.color_hex input{\n\tposition:absolute;\n\twidth:54px;\n\theight:16px;\n\tline-height:16px;\n\tcolor:#666;\n\tmargin:0px;\n\tpadding:0px 2px;\n\tfont-size:12px;\n\ttop:0px;\n\tleft:10px;\n\tborder:1px solid #ccc;\n\tborder-radius:3px;\n}\n#bar_fill_img{\n\tmargin-left: 5px;\n}\n#bar_fill_more{\n\tposition: absolute;\n\tright: 0px; top: 0px;\n\tpadding: 0px 10px;\n}\n.color_items div{\n\theight: 12px;\n\twidth: 12px;\n\tfloat: left;\n\tborder: #000 solid 1px;\n\tborder-width: 1px 0 0 1px;\n}\n.color_items div:hover{\n\tposition: relative;\n\tborder: #FFF solid 2px;\n\tmargin: -1px -2px -2px -1px;\n}\n.color_items .selected{\n\tposition: relative;\n\tborder: #f7ddaa solid 2px;\n\tmargin: -1px -2px -2px -1px;\n}\n.color_items .clear{\n\tborder: 0px;\n\tfloat: none;\n\theight: 0px;\n\twidth: 100%;\n\tclear: both;\n}\n.options_menu{\n\tdisplay: none;\n}\n.options_menu li{\n\twidth: 180px;\n\tposition: relative;\n\tcolor: #333;\n\ttext-shadow: none;\n\tpadding: 0px 30px;\n}\n.options_menu.noico li{\n\tpadding: 0px 20px;\n}\n.options_menu li .ico{\n\tposition: absolute;\n\ttop: 3px;\n\tleft: 5px;\n}\n.options_menu li .extend{\n\tposition: absolute;\n\tright: 10px;\n\ttop: 0px;\n\tcolor: #777;\n\ttext-align: right;\n}\n.options_menu li .ex_arrow{\n\tcolor: #888;\n}\n.options_menu li:hover .extend{\n/* \tcolor: #a9ddf3; */\n}\n.options_menu li:hover .ex_arrow{\n\tcolor: #444;\n}\n.options_menu li.disabled:hover .extend{\n\tcolor: #ccc;\n}\n.options_menu li.disabled .extend{\n\tcolor: #ccc;\n}\n.options_menu li.disabled .ex_arrow{\n\tcolor: #C9C9C9;\n}\n.options_menu li.disabled:hover .ex_arrow{\n\tcolor: #C9C9C9;\n}\n.options_menu li:hover .extend_menu{\n\tdisplay: block;\n}\n.options_menu li.disabled:hover .extend_menu{\n\tdisplay: none;\n}\n.extend_menu{\n\tposition: absolute;\n\tborder-top-left-radius: 0px;\n\tborder-left: 1px solid #999;\n\ttop: -5px;\n\tright: -162px;\n\tdisplay: none;\n}\n.extend_menu li{\n\twidth: 120px;\n\tpadding: 0px 20px;\n}\n.extend_menu.menu_ico li{\n\twidth: 100px;\n\tpadding: 0px 30px;\n}\n.extend_menu .list_text{\n\tcolor: #999;\n}\n.extend_menu .list_text:hover{\n\tcolor: #999;\n\tbackground-color: transparent;\n\tbackground-image: none;\n\tfilter: none;\n\ttext-shadow:none;\n}\n.options_menu .ico_selected{\n\tposition: absolute;\n\tleft: 2px;\n\ttop: 1px;\n}\n\n.dialog{\n\tbackground-color: #fff;\n\tposition: absolute;\n\tborder: 1px solid #acacac;\n\t-webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);\n\t-moz-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);\n\tbox-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);\n\tdisplay: none;\n\tz-index: 1;\n}\n.dlg_close{\n\tposition: absolute;\n\ttop: 15px;\n\tright: 10px;\n\tbackground-position: 0px -380px;\n\tcursor: pointer;\n}\n.dlg_close:hover{\n\tbackground-position: -20px -380px;\n}\n.dlg_mask{\n\tbackground: #fff;\n\topacity: 0.60;\n\tfilter: alpha(opacity=60);\n\tposition: absolute;\n\ttop: 0px;\n\tleft: 0px;\n\twidth: 3000px;\n\theight: 3000px;\n}\n.dialog_header{\n\theight: 50px;\n\tline-height: 50px;\n\tfont-size: 20px;\n\tborder-bottom: 1px solid #e5e5e5;\n\tpadding: 0px 30px 0px 20px;\n\tcursor: default;\n}\n.dialog_content{\n\tpadding: 15px 20px;\n}\n.dialog_buttons{\n\tpadding: 0px 20px 20px;\n\ttext-align: right;\n}\n\n.export-list li{\n\tpadding: 10px 0px;\n\tborder-bottom: 1px solid #EFEFEF;\n\tfont-weight: bold;\n}\n.export_des{\n\tfont-weight: normal;\n\tcolor: #555;\n\tmargin-left: 10px;\n}\n\n.mark_content{\n\tdisplay:none;\n\tmax-width: 280px;\n\tpadding-bottom: 15px;\n}\n.mark_content .dialog_header{\n\theight: 30px;\n\tline-height: 30px;\n\tpadding: 10px 30px 5px 13px;\n}\n.mark_content .dlg_close{\n\ttop: 12px;\n}\n.mark_content ._content{\n\tmargin: 5px 10px 5px 10px;\n\tline-height: 20px;\n}\n.mark_content .arr-icon{\n\tposition: absolute;\n\twidth: 12px;\n\theight: 12px;\n}\n.mark_content .mark_next{\n\ttext-align: right;\n\tpadding-right: 15px;\n}\n.mark_content .mark_next span{\n\tcursor: pointer;\n\theight: 24px;\n\tline-height: 24px;\n\tpadding: 0px 5px;\n}\n.mark_content p{\n\tmargin: 0px;\n\tpadding: 4px 0px;\n}\n.arr-icon .arr-border{\n\tposition: absolute;\n\twidth: 0;\n\theight: 0;\n\tleft: 0;\n\tborder-width: 10px 12px 10px 0px;\n\tborder-color: transparent #b4b4b4 transparent transparent;\n\tborder-style: dashed solid dashed none;\n\toverflow: hidden;\n}\n.arr-icon .inner-arr{\n\tposition: absolute;\n\twidth: 0;\n\theight: 0;\n\tleft: 1px;\n\tborder-width: 10px 12px 10px 0px;\n\tborder-color: transparent #fff transparent transparent;\n\tborder-style: dashed solid dashed none;\n\toverflow: hidden;\n}\n.arr-icon.left{\n\ttop: 45%;\n\tleft: -12px;\n}\n.arr-icon.top{\n\ttop: -12px;\n\tleft: 45%;\n\t-webkit-transform: rotate(90deg);\n\t-moz-transform: rotate(90deg);\n\t-ms-transform: rotate(90deg);\n\t-o-transform: rotate(90deg);\n\ttransform: rotate(90deg);\n}\n.arr-icon.right{\n\tright: -12px;\n\ttop: 45%;\n\t-webkit-transform: rotate(180deg);\n\t-moz-transform: rotate(180deg);\n\t-ms-transform: rotate(180deg);\n\t-o-transform: rotate(180deg);\n\ttransform: rotate(180deg);\n}\n\n.non_support_mask{\n\ttext-shadow:  0 1px rgba(255, 255, 255, .9);\n\tbackground: #F2F2F2;\n\tcolor: #666;\n\tfont-size: .75em;\n\tfont-family: NewsGothic,\"News Gothic MT\",\"Lucida Sans\",\"Lucida Grande\",sans-serif !important;\n}\n.no_sup_mask_main{\n\tposition: relative;\n\tmargin: 0px auto;\n\tpadding: 0 25px;\n\tmax-width: 700px;\n\ttext-align: center;\n}\n.no_sup_mask_main h1{\n\tmargin:  50px 0px 30px;\n\tdisplay: block;\n\tfont-size: 64px;\n\tfont-weight: 100;\n}\n.no_sup_mask_main h1 del{\n\tcolor: #999;\n\ttext-decoration: line-through;\n}\n.no_sup_mask_main p{\n\tmargin: 20px 0px;\n\tfont-size: 14px;\n\tline-height: 26px;\n}\n.bs_logo_list{\n\theight: 80px;\n}\n.bs_logo_list a{\n\tdisplay: inline-block;\n\twidth: 80px;\n\theight: 80px;\n\toverflow: hidden;\n\tmargin: 0px 5px;\n\t/*background: url(\"./images/support_browsers_list.png\") 0px 0px no-repeat;*/\n}\n.non_support_mask .no_sup_mask_main .bs_logo_list a.sup_chrome{\n\tbackground-position:  0px 0px;\n}\n.non_support_mask .no_sup_mask_main .bs_logo_list a.sup_firefox{\n\tbackground-position:  -80px 0px;\n}\n.non_support_mask .no_sup_mask_main .bs_logo_list a.sup_ie{\n\tbackground-position:  -160px 0px;\n}\n.non_support_mask .no_sup_mask_main .bs_logo_list a.sup_safari{\n\tbackground-position:  0px -80px;\n}\n.non_support_mask .no_sup_mask_main .bs_logo_list a.sup_opera{\n\tbackground-position:  -80px -80px;\n}\n.non_support_mask .no_sup_footer{\n\tposition: fixed;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tbackground-color: #272727;\n\tpadding: 25px 25px 20px;\n}\n.non_support_mask .no_sup_footer .processon_logo{\n\tdisplay: inline-block;\n\twidth: 120px;\n\theight: 26px;\n\tbackground: url(\"/images/default/logo/logo_m.png\") no-repeat;\n}\n\n/* Dock */\n#dock{\n\tdisplay: none;\n\tposition: absolute;\n\tright: 0px;\n\ttop: 0px;\n\tborder-width: 0px 0px 1px 1px;\n\tborder-color: #aaa;\n\tborder-style: solid;\n\tbackground: #f5f5f5;\n\tborder-bottom-left-radius: 3px;\n\t-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\t-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\t-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\tbox-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\tz-index: 1;\n}\n.dock_header{\n\tbackground: #5c5c5c;\n\tbackground-image: -webkit-linear-gradient(top,#5c5c5c,#3e3e3e);\n\tbackground-image: -moz-linear-gradient(top,#5c5c5c,#3e3e3e);\n\tbackground-image: -ms-linear-gradient(top,#5c5c5c,#3e3e3e);\n\tbackground-image: -o-linear-gradient(top,#5c5c5c,#3e3e3e);\n\tbackground-image: linear-gradient(top,#5c5c5c,#3e3e3e);\n\theight: 8px;\n\tborder-top: 1px solid #646464;\n\tborder-bottom: 1px solid #000;\n\twidth: 36px;\n}\n.dock_buttons{\n\tborder-top: 1px solid #f9f9f9;\n\tpadding: 0px 0px 10px;\n}\n.dock_buttons .ico{\n\topacity: 1;\n}\n#dock .toolbar_button{\n\tmargin: 5px 5px 0px 5px;\n}\n.dock_history_remove{\n\tfloat:right;margin-top:-10px;\n}\n.dock_history_remove_con{\n\tposition:absolute;width:100%;\n\theight:100%;top:0px;left:0px;\n\tbackground:#fff;\n}\n.dock_history_remove_div{\n\tpadding:5px 8px;\n}\n.dock_history_remove_div span{\n\tpadding: 0px 10px 0px 10px;\n\tmargin-top:8px;\n}\n\n\n.dock_view{\n\tbackground: #f5f5f5;\n\tborder: 1px solid #999;\n\t-webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33);\n\t-moz-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33);\n\tbox-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33);\n\tz-index: 0;\n\tposition: absolute;\n\ttop: 10px;\n\tdisplay: none;\n\twidth: 220px;\n}\n.dock_view_header{\n\theight: 18px;\n\tline-height: 18px;\n\tborder-top: #bfbfbf solid 1px;\n\tborder-bottom: #666666 solid 1px;\n\ttext-shadow: 0 1px 0 rgba(255, 255, 255, 0.33);\n\tbackground-color: #a6a6a6;\n\tbackground-image: -webkit-linear-gradient(top,#b2b2b2,#9b9b9b);\n\tbackground-image: -moz-linear-gradient(top,#b2b2b2,#9b9b9b);\n\tbackground-image: -ms-linear-gradient(top,#b2b2b2,#9b9b9b);\n\tbackground-image: -o-linear-gradient(top,#b2b2b2,#9b9b9b);\n\tbackground-image: linear-gradient(top,#b2b2b2,#9b9b9b);\n\tpadding: 0px 10px;\n\tposition: relative;\n}\n.ico_dock_collapse{\n\twidth: 12px;\n\theight: 12px;\n\tposition: absolute;\n\tright: 3px;\n\ttop: 2px;\n\tbackground-position: -43px -24px;\n\tcursor: pointer;\n\tborder-radius: 2px;\n\tborder: 1px solid transparent;\n}\n.ico_dock_collapse:hover{\n\tbackground-color: #878787;\n\tborder-color: #737373;\n}\n.dock_content{\n\tpadding: 5px 10px 10px;\n\tposition: relative;\n}\n.dock_content_title{\n\tfont-weight: bold;\n\tmargin: 5px 0px;\n}\n.dock_devider{\n\theight: 0px;\n\tborder-width: 1px 0px;\n\tborder-style: solid;\n\tborder-top-color: #c4c4c4;\n\tborder-bottom-color: #fff;\n\tmargin-top: 10px;\n\tclear: both;\n}\n.dock_page_ori_list{\n\tdisplay: inline-block;\n\tline-height: 26px;\n}\n.fill_detail{\n\tmargin-top: 10px;\n\tdisplay: none;\n}\n.picker_btn{\n\tposition: relative;\n\tborder: 2px solid #d2d2d2;\n\tdisplay: inline-block;\n\tborder-radius: 2px;\n}\n.picker_btn.disabled{\n\tborder-color: #dcdcdc;\n}\n.disabled .ico_colordrop{\n\tbackground-color: #e5e5e5;\n}\n.disabled .picker_btn_holder{\n\topacity: 0.3;\n\tfilter:alpha(opacity=30);\n}\n.picker_btn_holder{\n\twidth: 20px;\n\theight: 20px;\n\tbackground: white;\n\tborder: 1px solid #f0f0f0;\n}\n.ico_colordrop{\n\tposition: absolute;\n\tright: 0px;\n\tbottom: 0px;\n\tbackground-position: -5px -46px;\n\theight: 9px;\n\twidth: 9px;\n\tbackground-color: #d2d2d2;\n\tborder-top: 1px solid #f0f0f0;\n\tborder-left: 1px solid #e6e6e6;\n\tborder-top-left-radius: 1px;\n}\n.gradient_swap{\n\tbackground-position: -20px -340px;\n\tdisplay: inline-block;\n}\n.btn_normal{\n\tdisplay: inline-block;\n\tmargin-top: 0px;\n}\n.btn_inline{\n\tfloat: left;\n}\n#gradient_swap{\n\tmargin: 0px 5px 0px 5px;\n}\n.gradient_details{\n\tmargin-top: 10px;\n\tfloat: right;\n\tdisplay: none;\n}\n#dock_line_style .linestyle{\n\tmargin-top: 12px;\n\tmargin-left: 5px;\n}\n.dock_label{\n\tdisplay: inline-block;\n\tline-height: 26px;\n\tfloat: left;\n\tmargin-right:5px;\n\tmin-width: 26px;\n\ttext-align: right;\n}\n.dock_page_menu{\n\tz-index: 1;\n}\n\n.attr_add{\n\tpadding: 5px 10px 0px;\n}\n.attr_add_items{\n\tdisplay: none;\n}\n.attr_list{\n\toverflow-y: auto;\n\toverflow-x: hidden;\n}\n.attr_none{\n\tpadding: 30px 0px;\n\ttext-align: center;\n}\n.attr_item{\n\tpadding-left: 10px;\n\tmargin-top: 1px;\n\tposition: relative;\n}\n.attr_item:hover{\n\tbackground-color: #ebebeb;\n}\n.attr_item .ico_attr_delete{\n\tposition: absolute;\n\tright: 5px;\n\ttop: 4px;\n\tz-index: 1;\n\tcursor: pointer;\n\tdisplay: none;\n}\n.attr_item:hover .ico_attr_delete{\n\tdisplay: block;\n}\n.attr_name{\n\twidth: 100px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\theight: 28px;\n\tline-height: 28px;\n\tfloat: left;\n}\n.attr_type{\n\twidth: 60px;\n\tmargin-left: 10px;\n\theight: 28px;\n\tline-height: 28px;\n\tfloat: left;\n}\n.attr_value{\n\twidth: 130px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tmargin-left: 10px;\n\theight: 28px;\n\tline-height: 28px;\n\tfloat: left;\n}\n.attr_editing{\n\tbackground-color: #ebebeb;\n}\n.attr_item.attr_editing .ico_attr_delete{\n\tdisplay: none;\n}\n.attr_editing .input_text, .attr_editing .input_select{\n\tmargin-top: 1px;\n}\n.attr_edit_display{\n\tpadding-top: 5px;\n}\n.attr_edit_btns{\n\tclear: both;\n\tpadding: 5px 0px;\n\tborder-top: 1px solid #ccc;\n\tmargin-top: 5px;\n}\n.attr_edit_btns div{\n\tdisplay: inline-block;\n\twidth: 70px;\n}\n.attr_display_options .opt_area{\n\tfloat: left;\n\twidth: 110px;\n\tpadding-top: 5px;\n}\n.attr_display_options .location_area{\n\tmargin-left: 10px;\n\twidth: 200px;\n}\n.location_area .dock_label{\n\twidth: 66px;\n\ttext-align: left;\n\tmargin-top: 5px;\n}\n.location_area .toolbar_button{\n\twidth: 125px;\n\tmargin-top: 5px;\n}\n#attr_display_icon img{\n\tmargin-top: 2px;\n}\n#attr_icon_list li{\n\twidth: 120px;\n\theight: 245px;\n\t/*background: url(./images/data-attr-icons.png) no-repeat;*/\n\tpadding: 0px;\n\tmargin: 0px 5px;\n}\n#attr_icon_list div{\n\tfloat: left;\n\twidth: 22px;\n\theight: 21px;\n\tborder: 1px solid transparent;\n}\n#attr_icon_list .attr_icon_item:hover{\n\tborder-color: #6EB1EB;\n}\n.attr_location_menu li{\n\tposition: relative;\n\tpadding: 0px 10px 0px 30px;\n\twidth: 85px;\n}\n.location_content{\n\tposition: relative;\n\tmargin: 0px 13px 0px 5px;\n\tpadding-left: 23px;\n}\n.attr_location_menu li div, .location_content div{\n\tposition: absolute;\n\twidth: 11px;\n\theight: 11px;\n\tleft: 10px;\n\ttop: 6px;\n\tborder: 1px solid #333;\n\tbackground: white;\n}\n.location_content div{\n\tleft: 5px;\n}\n.attr_location_menu span, .location_content span{\n\tdisplay: block;\n\tposition: absolute;\n\twidth: 5px;\n\theight: 5px;\n\tbackground: #dd4b39;\n\ttop: 3px;\n\tleft: 3px;\n}\n\n.image_sources{\n\tfloat: left;\n\tpadding: 15px 0px;\n}\n.image_sources li{\n\theight: 30px;\n\tline-height: 30px;\n\twidth: 160px;\n\tpadding-left: 16px;\n\tborder-left: 4px solid transparent;\n\tcursor: pointer;\n\tposition: relative;\n}\n.image_sources li.active{\n\tborder-color: #dd4b39;\n\tcolor: #cf4236;\n\tfont-weight: bold;\n}\n.image_sources li:hover{\n\tbackground: #eee;\n}\n.image_content{\n\tfloat: left;\n\tborder-left: 1px solid #e5e5e5;\n}\n.image_list{\n\tborder-bottom: 1px solid #e5e5e5;\n\twidth: 600px;\n\tpadding: 15px 20px;\n\toverflow-y: auto;\n}\n#btn_img_upload{\n\tdisplay: inline-block;\n\tposition: relative;\n\ttext-align: left;\n\tpadding-right: 10px;\n\tfloat: left;\n}\n#btn_img_upload div{\n\tfloat: left;\n\tmargin: 2px 0px 0px 5px;\n\tbackground-position: -40px -380px;\n}\n#btn_img_upload input{\n\twidth: 100%;\n\theight: 26px;\n\tpadding: 0px;\n\tmargin: 0px;\n\tborder: 0px;\n\tleft: 0px;\n\ttop: 0px;\n\topacity: 0;\n\tfilter:alpha(opacity=0);\n\tposition: absolute;\n}\n#upload_img_res{\n\tcolor: #cf4236;\n\tmargin-left: 10px;\n\tline-height: 26px;\n}\n.image_btns{\n\theight: 30px;\n\tpadding: 15px 20px;\n}\n.image_btns div{\n\twidth: 60px;\n\tmargin-right: 5px;\n}\n#set_image_text{\n\tcolor: #555;\n}\n#set_image_text.errored{\n\tcolor: #cf4236;\n}\n.image_items{\n\tpadding: 15px 0px;\n}\n.image_item{\n\tfloat: left;\n\twidth: 140px;\n\theight: 140px;\n\tborder-radius: 4px;\n\tposition: relative;\n\tmargin-right: 5px;\n}\n.image_item .image_box{\n\twidth: 140px;\n\theight: 140px;\n\ttext-align: center;\n\tdisplay: table-cell;\n\tvertical-align: middle;\n}\n.image_item:hover{\n\tbackground-color: #F3F3F3;\n\tbox-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.1);\n}\n.image_item .drop_size{\n\tbackground-color: #fff;\n\tborder: 1px solid #dfe1e4;\n\tborder-radius: 2px;\n\tpadding: 3px 19px 3px 9px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tposition: absolute;\n\tright: 10px;\n\tbottom: 10px;\n\tdisplay: none;\n\tcursor: pointer;\n}\n.drop_size .ico_accordion{\n\tposition: absolute;\n\tright: 9px;\n\ttop: 8px;\n}\n.image_item:hover .drop_size{\n\tdisplay: block;\n}\n.image_item_selected .drop_size{\n\tdisplay: block;\n}\n.image_item .ico_remove_red{\n\tposition: absolute;\n\tright: -10px;\n\ttop: -10px;\n\tcursor: pointer;\n}\n.image_items img{\n\tmax-width: 128px;\n\tmax-height: 128px;\n\tvertical-align: middle;\n}\n.image_item_selected, .image_item_selected:hover{\n\tbackground-color: #63ABF7;\n\tbox-shadow: inset 0 2px 3px 0 rgba(0, 0, 0, 0.2);\n}\n#img_url_area{\n\tpadding: 20px 0px;\n\ttext-align: center;\n}\n#img_url_area img{\n\tmax-width: 600px;\n}\n.img_url_loading{\n\tdisplay: none;\n}\n.img_url_loading_tip{\n\tdisplay: block;\n\tcolor:#666;\n\tmargin-top: 80px;\n}\n.img_url_error{\n\tcolor: #cf4236;\n\tmargin-top: 80px;\n\ttext-align: left;\n}\n.img_url_error ul{\n\tmargin: 10px 0px 0px 30px;\n\tlist-style: disc;\n}\n.tip_content b{\n\tcolor: #cf4236;\n}\n.img_gg_loading_tip{\n\tcolor:#666;\n\tline-height: 40px;\n\theight: 40px;\n\ttext-align: center;\n}\n.gg_img_more{\n\tmargin: 15px auto;\n}\n#history_versions{\n\toverflow-y: auto;\n\tmin-height: 140px;\n\tposition: relative;\n}\n#history_versions li{\n\tborder-bottom: 1px solid #ddd;\n\tpadding: 5px 10px;\n\tcursor: default;\n\tposition: relative;\n}\n#history_versions li:hover{\n\tbackground: #ebebeb;\n}\n.version_name{\n\tcolor: #808080;\n}\n.version_name div, .history_remark{\n\tpadding: 2px 0px 0px;\n}\n#history_versions .selected, #history_versions .selected:hover{\n\tbackground-color: #e6e6e6;\n}\n#history_versions .selected .version_time{\n\tcolor: #d14836;\n\tfont-weight: bold;\n}\n.remark_container a{\n\tdisplay: none;\n}\n#history_versions .selected .remark_container a{\n\tdisplay: inline-block;\n}\n#history_versions .selected.playing .remark_container a{\n\tdisplay: none;\n}\n.edit_container{\n\tdisplay: none;\n}\n.edit_container textarea{\n\twidth: 179px;\n\theight: 36px;\n}\n.edit_container a{\n\tmargin-top: 4px;\n}\n.history_bar{\n\tpadding: 10px 10px 0px;\n\tposition: relative;\n}\n.comment_bar{\n\tpadding: 10px;\n\theight: 75px;\n}\n.history_bar .toolbar_button, .history_bar .spinner{\n\tdisplay: inline-block;\n}\n.history_bar .toolbar_button{\n\tcursor: pointer;\n}\n.history_msg{\n\tdisplay: none;\n}\n#btn_history_restore{\n\tposition: absolute;\n\tright: 10px;\n}\n#area_history_add{\n\tdisplay: none;\n}\n#comment_container{\n\toverflow: auto;\n}\n.comment_item_outer{\n\tborder-bottom: 1px solid #ddd;\n\tpadding: 0px 10px 5px;\n\tcursor: pointer;\n\tposition: relative;\n\tmin-height: 40px;\n}\n.comment_item_inner{\n\tpadding: 0px;\n\tborder-top: 1px solid #c1c1c1;\n\tposition: relative;\n\tmargin-top: 5px;\n}\n.comment_item_outer:hover{\n\tbackground: #ebebeb;\n}\n.comment_item img{\n\twidth: 40px;\n\theight: 40px;\n\tborder-radius: 50%;\n\tbox-shadow: 0px 0px 3px rgba(0,0,0,0.3);\n\tposition: absolute;\n\ttop: 8px;\n}\n.comment_content_box{\n\tmargin-left: 45px;\n}\n.comment_item_inner img{\n\twidth: 30px;\n\theight: 30px;\n}\n.comment_item_inner .comment_content_box{\n\tmargin-left: 35px;\n}\n.comment_name{\n\tfont-weight: bold;\n\tpadding: 5px 0px;\n}\n.comment_date{\n\tpadding-top: 5px;\n\tcolor: #666;\n}\n.comment_reply{\n\tpadding: 10px 0px 5px;\n\tdisplay: none;\n\tborder-top: 1px solid #c1c1c1;\n\tmargin-top: 5px;\n}\n.comment_reply input{\n\twidth: 90%;\n}\n.comment_item.selected{\n\tbackground: #e6e6e6;\n}\n.comment_item.selected .comment_reply{\n\tdisplay: block;\n}\n.comment_control{\n\tline-height: 26px;\n\tmargin-top: 5px;\n}\n.comment_control input{\n\tvertical-align: middle;\n}\n.comment_control label{\n\tcursor: pointer;\n}\n.comment_none{\n\tline-height: 120px;\n\ttext-align: center;\n}\n.comment_remove{\n\tposition: absolute;\n\ttop: 5px;\n\tright: 10px;\n\tbackground-position: 0px -380px;\n\tcursor: pointer;\n\tdisplay: none;\n}\n.comment_remove:hover{\n\tbackground-position: -20px -380px;\n}\n.comment_item:hover .comment_remove{\n\tdisplay: block;\n}\n.shape_comment_ico{\n\t/*background: url(./images/comments.png) no-repeat;*/\n\twidth: 24px;\n\theight: 24px;\n\tposition: absolute;\n\ttop: -5px;\n\tleft: 20px;\n\tcursor: pointer;\n}\n/*****************************colla-add-dialog********************************/\n.designer_button{\n\tdisplay: inline-block;\n\tline-height:30px;\n\tborder: 0px;\n\theight:30px;\n\tpadding:0px 10px;\n\ttext-align: center;\n\tbackground-color: #2EB5E5;\n\tbackground-image: -moz-linear-gradient(top, #34C0E9, #29AAE1);\n\tbackground-image: -webkit-linear-gradient(top, #34C0E9, #29AAE1);\n\tbackground-image: -o-linear-gradient(top, #34C0E9, #29AAE1);\n\tbackground-image: -ms-linear-gradient(top, #34C0E9, #29AAE1);\n\tbackground-image: linear-gradient(top, #34C0E9, #29AAE1);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#34c0e9', endColorstr='#29aae1',GradientType=0 );\n\tcolor: white;\n\tcursor: pointer;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);\n\tborder-radius: 2px;\n\t-webkit-border-radius: 2px;\n\t-moz-border-radius: 2px;\n\t-o-border-radius: 2px;\n\t-webkit-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);\n\t-moz-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);\n\tbox-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);\n\tmin-width: 50px;\n}\n.designer_button:hover{\n\tbackground-color: #2EB5E5;\n\tbackground-image: -moz-linear-gradient(top, #34c0df, #29aad7);\n\tbackground-image: -webkit-linear-gradient(top, #34c0df, #29aad7);\n\tbackground-image: -o-linear-gradient(top, #34c0df, #29aad7);\n\tbackground-image: -ms-linear-gradient(top, #34c0df, #29aad7);\n\tbackground-image: linear-gradient(top, #34c0df, #29aad7);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#34c0df', endColorstr='#29aad7',GradientType=0 );\n\ttext-decoration: none;\n}\n.designer_button.disabled, .designer_button.disabled:hover{\n\tbackground-color: #48d4fd;\n\tbackground-image: -moz-linear-gradient(top, #48d4fd, #3dbeeb);\n\tbackground-image: -webkit-linear-gradient(top, #48d4fd, #3dbeeb);\n\tbackground-image: -o-linear-gradient(top, #48d4fd, #3dbeeb);\n\tbackground-image: -ms-linear-gradient(top, #48d4fd, #3dbeeb);\n\tbackground-image: linear-gradient(top, #48d4fd, #3dbeeb);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#48d4fd', endColorstr='#3dbeeb',GradientType=0 );\n\tbox-shadow:  none;\n\ttext-shadow: none;\n\tcursor: default;\n\tcolor: #e6e6e6;\n}\n.designer_button.normal{\n\ttext-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n\tcolor: #333;\n\tline-height:28px;\n\theight:28px;\n\tborder: 1px solid #c6c6c6;\n\tbackground-color: #F8F8F8;\n\tmin-width: 48px;\n\tbackground-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1);\n\tbackground-image: -moz-linear-gradient(top, #f8f8f8, #f1f1f1);\n\tbackground-image: -ms-linear-gradient(top, #f8f8f8, #f1f1f1);\n\tbackground-image: -o-linear-gradient(top, #f8f8f8, #f1f1f1);\n\tbackground-image: linear-gradient(top, #f8f8f8, #f1f1f1);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8f8f8', endColorstr='#f1f1f1',GradientType=0 );\n\t-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\t-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\t-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\n\tbox-shadow: 0px 1px 1px rgba(0,0,0,.1);\n}\n.designer_button.normal:hover{\n\tbackground-color: #f3f3f3;\n\tbackground-image: -webkit-linear-gradient(top, #f8f8f8, #e8e8e8);\n\tbackground-image: -moz-linear-gradient(top, #f8f8f8, #e8e8e8);\n\tbackground-image: -ms-linear-gradient(top, #f8f8f8, #e8e8e8);\n\tbackground-image: -o-linear-gradient(top, #f8f8f8, #e8e8e8);\n\tbackground-image: linear-gradient(top, #f8f8f8, #e8e8e8);\n\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8f8f8', endColorstr='#e8e8e8',GradientType=0 );\n}\n\n#colla_suggest_box .alert{\n\tmargin-top: 10px;\n}\n.colla_suggest li{\n\tpadding: 2px 0px 2px 5px;\n\tcursor: pointer;\n}\n.colla_suggest li:hover{\n\tbackground-color: #eee;\n}\n.colla_suggest li.seled{\n\tbackground-color: #63ABF7;\n\tcolor: white;\n}\n.colla_suggest img{\n\twidth: 25px;\n\theight: 25px;\n\tborder-radius: 3px;\n\tvertical-align: middle;\n\tmargin-right: 8px;\n}\n\n\n#colla_suggest_box .no_result{\n\tline-height: 30px;\n\tmargin: 10px auto 5px auto;\n\theight: 30px;\n\ttext-align:center;\n}\n.colla_suggest{\n\tmax-height: 160px;\n\toverflow: auto;\n}\n.colla_suggest li.team_item{\n\tline-height:25px;\n\theight:25px;\n\tpadding: 2px 0px 2px 5px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.colla_suggest .team_member{\n\tmax-height:none;\n\tmargin-left: 15px;\n\tdisplay:none;\n\tbackground: url(/images/default/view_loading.gif) center center no-repeat;\n}\n.slider {\n\tmargin:auto;\n\theight: 10px;\n\tborder-radius: 6px;\n\tborder: 1px solid #dcdcdc;\n\tbackground: #F4F4F4;\n\twidth: 80%;\n\ttext-align: center;\n\tcursor: pointer;\n\tmargin-top: 5px;\n\tbackground: -webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#f2f2f2));\n\tbackground: -moz-linear-gradient(top,#fdfdfd,#f2f2f2 100%);\n\tuser-select: none;\n\t-webkit-user-select: none;\n\tposition: relative;\n}\n.slider:hover {\n\tborder-color: #c8c8c8;\n}\n.slider span {\n\tdisplay: inline-block;\n\twidth: 7px;\n\theight: 4px;\n\tbackground: url(../images/explore/arrows.png) no-repeat;\n\tmargin-top: 3px;\n\topacity: 0.8;\n\tposition:absolute;\n\tleft:50%;\n}\n.add_team_icon{\n\tdisplay:inline-block;\n\tbackground: url(../images/network/icons.png) no-repeat;\n\tposition: relative;\n\twidth: 8px;\n\theight: 8px;\n\tmargin-top: 10px;\n\tleft: 10px;\n\tbackground-position: -12px -205px;\n}\n.add_team_icon.unfold{\n\tbackground-position: 0px -207px;\n}\n.colla_suggest li.team_item.active .add_team_icon{\n\tbackground-position: 0px -207px;\n}\n.colla_suggest img,.colla_suggest span{\n\twidth: 30px;\n\theight: 30px;\n\tborder-radius: 3px;\n\t-webkit-border-radius: 3px;\n\t-moz-border-radius: 3px;\n\tvertical-align: middle;\n\tmargin-right: 5px;\n\ttext-align: center;\n\tbackground: #f7b75d;\n\tdisplay: inline-block;\n\tcolor: #fff;\n\tfont-weight: 600;\n\tfont-size: 14px;\n\tline-height:30px;\n}\n\n/***调整****/\n._update{\n\t -webkit-transition: all .15s ease-in-out 0.05s;\n\t  -o-transition: all .15s ease-in-out 0.05s;\n\t  -moz-transition: all .15s ease-in-out 0.05s;\n\t  transition: all .15s ease-in-out 0.05s;\n}\n\n.colla-tabs .colla-tab{\n\tdisplay:inline-block;margin-right:15px;color:#888;\n}\n.colla-tabs .colla-tab.active{\n\tborder-bottom: 2px solid #4386f5;color:#333;padding-bottom:10px;\n}\n/*colla-context-con  loading-view2*/\n.colla-context-con .loading-view2{\n\tdisplay:block;margin:0 auto;width:30px;font-size:20px;margin-top:70px;position: relative;\n}\n.colla-follow-more{\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 25%;\n\tline-height: 20px;\n\tdisplay: block;\n\ttext-align: center;\n\tfont-size: 12px;\n\tcolor: #333;\n\tborder: 1px solid #ddd;\n\twidth: 50%;\n}\n.colla-context-con{\n\tmin-height:100px;\n\tmax-height:170px;overflow:auto;\n}\n.colla-tab-content{\n\tposition: relative;\n\tdisplay: none;\n\tpadding-bottom: 25px;\n}\n.colla-tab-content:first-child{\n\tdisplay: block;\n}\n.colla-tab-content:after{\n\tcontent: '';\n\tdisplay: block;\n\theight: 1px;\n\tclear: both;\n}\n.colla-context-con .colla-users-none{\n\ttext-align:center;margin-top:40px;color:#999;font-size:14px;\n}\n.colla-context-con .colla-users-none .icons{\n\tfont-size:50px;color:#888;margin-bottom:10px;display:block;\n}\n\n.colla-context-con .colla-team{\n\tmargin: 0px 0px 0px 0px;padding:3px 5px;position:relative;cursor:default;\n}\n.colla-context-con .colla-team:first-child{\n\tmargin: 8px 0px 0px 0px;\n}\n.colla-context-con .colla-team-user .colla-user{\n\tfloat:none;\n\tmargin:0;\n\tmargin-bottom:2px;\n\tpadding:2px;\n}\n.colla-context-con .colla-team-user > div{\n\tmargin-bottom:2px;\n\tcursor:pointer;\n\tpadding: 5px 0px;padding-left:42px;\n}\n.colla-context-con .colla-team-user > div:hover{\n\tbackground:#f3f4f5;\n}\n.colla-context-con .colla-team-user span:first-child{\n\twidth:28px;display:inline-block;\n}\n.colla-context-con .colla-team-user span img{\n\twidth:28px;vertical-align:-6px;border-radius: 3px 0px 0px 3px;\n}\n.colla-context-con .colla-team{height:30px;line-height:30px;border-radius:3px;}\n.colla-context-con .colla-team:hover{background:#eee;}\n.colla-context-con .colla-team > span:first-child{\n\tdisplay:inline-block;width:36px;\n}\n.colla-context-con .colla-team > span img{\n\tborder-radius: 3px 0px 0px 3px;width:28px;vertical-align:-9px;\n}\n.colla-context-con .colla-team .icons{\n\tvertical-align:-1px;margin-left:5px;position:absolute;top:4px;\n}\n.colla-context-con .colla-team .icons.teamlogo{\n\tfont-size:28px;top:4px;margin-left:0px;color:#777;\n}\n.colla-context-con .colla-team .title{\n\tfont-size:13px;\n}\n#colla_users{\n\twidth: 100%;\n\tposition: relative;\n}\n#colla_users:after{\n\tcontent: '';\n\tdisplay: block;\n\tclear: both;\n}\n.colla-context-con .colla-user{\n\t-webkit-box-sizing:border-box;\n\t-moz-box-sizing:border-box;\n\tbox-sizing:border-box;\n\twidth:33%;\n\tpadding:2px 10px;\n\tmargin:10px 0;\n\tdisplay:inline-block;\n\tvertical-align: middle;\n\tcursor:pointer;\n\tfloat:left;\n\twhite-space: nowrap;\n\toverflow: hidden;\n}\n.colla-context-con .colla-user>span{\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n.colla-context-con .colla-user > span:last-child{\n\tpadding-left: 12px;\n\tborder-left:0;\n\tfont-size:12px;\n\tcolor:#333;\n\tborder-radius: 0px 3px 3px 0px;\n\tmin-width:50px;\n\tvertical-align:middle;\n\tmax-width:100px;\n\twhite-space:nowrap;text-overflow:ellipsis;overflow:hidden;\n}\n.colla-context-con .colla-user > span:last-child:hover{\n\tcolor:#333;\n}\n.colla-context-con .colla-user > span img{\n\tdisplay:block;\n\tborder-radius:50%;width:30px;\n}\n\n.colla-item[tit=contacter]{\n\theight:200px;border:1px solid #ddd;border-radius:3px;padding:2px 5px;\n}\n\n.colla-user-item{\n\tfont-family:arial,寰蒋闆呴粦;background: #e0e0e0;font-size:13px;\n\ttext-align:center;\n\tmargin:8px 0px 0px 4px;color: #444;\n\tborder-radius: 0px 3px 3px 0px;display:inline-block;\n\theight:30px;padding-right:8px;\n}\n.colla-user-item img{\n\twidth:30px;border-radius:3px 0px 0px 3px;vertical-align:-10px;\n}\n.colla_role_list{\n\twidth:480px;\n\tborder:1px solid #d9d9d9;\n\toverflow-x:hidden;\n\toverflow-y:auto;\n\tmax-height:110px\n}\n.colla_role_list .role_item{\n\theight:25px;\n\tpadding:2px 0px;\n\toverflow:hidden;\n\tline-height:25px;\n\tposition:relative;\n}\n.colla_role_list .role_item .user_photo{\n\twidth:25px;\n\tfloat:left;\n\tmargin-left:5px\n}\n.colla_role_list .role_item .user_username{\n\ttext-align:left;\n\tfloat:left;\n\tmargin-left:7px;\n\tline-height:25px;\n\twidth:400px\n}\n.colla_role_list .role_item .user_given_role{\n\tline-height:25px;\n\tfloat:right;\n\tmargin-right:10px\n}\n.colla_role_list .role_item .user_inviting_{\n\tfloat:right;\n\tmargin-right:50px;\n\ttext-align:right;\n}\n.tab_title label{\n\tcursor:pointer;\n\tdisplay:inline-block;\n\ttext-align:center;\n\tbackground-color:#fff;\n\tborder:1px solid #BBBDC0;\n\tfont-size:12px;\n\twidth:25%;\n\tpadding:5px 0;\n\tborder-top-left-radius:5px;\n\tborder-top-right-radius:5px;\n}\n.tab_title .active{\n\tbackground-color:#50c28b;\n\tcolor:white;\n}\n#colla_add .tab_content{\n\theight:200px;border:1px solid #d9d9d9\n}\n#colla_add .tab_content div{\n\tdisplay:none;\n}\n\n#role_list{\n\tmargin:10px 0;\n\tmax-height:180px;\n\toverflow-y: auto;\n\tmin-height:100px;\n}\n#role_list .role-item{\n\tposition: relative;\n\tborder-top: 1px solid #e1e1e1;\n\tpadding: 8px 3px;\n}\n/*#role_list .role-item>span{vertical-align: middle;display: inline-block;}*/\n#role_list .item-portrait{\n\tdisplay:inline-block;\n\twidth:10%;\n}\n\n#role_list .item-portrait>img{\n\twidth:30px;border-radius:50%;vertical-align:-10px;\n}\n#role_list .item-user-fullname{\n\tdisplay:inline-block;width:25%;font-size:12px;color:#333;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;vertical-align:-3px;\n}\n\n#role_list .role-item .closeme{\n\tposition: absolute;\n\ttop: 12px;\n\tright:0;\n\tdisplay:none;cursor: pointer;margin-left: 10px;\n\tpadding:2px;\n\twidth: 20px;\n\theight: 20px;\n}\n#role_list .role-item:hover .closeme{\n\tdisplay: inline-block;\n}\n\n#role_list .role-item .item-role-status{\n\tdisplay:inline-block;\n\twidth:40%;\n\ttext-align: left;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n#role_list .role-sel-con{\n\tdisplay:inline-block;width:15%;font-size:12px;text-align: center;\n}\n#role_list .role-sel-con>select{\n\theight: 24px;border-radius: 3px;\n\tborder:0;\n\tbackground-color: transparent;\n}\n#role_list .role-sel-con>select:hover{\n\tborder:1px;\n\tbackground-color: #eee;\n}\n\n#confirm_dlg{\n\tdisplay: none;\n\tposition: absolute;\n\tbackground: #fff;\n\tz-index: 999;\n\toverflow: hidden;\n\tborder: 1px solid #acacac;\n\twidth: 50px;\n\theight: 25px;\n\topacity: 0;\n\tfilter: alpha(opacity=0);\n\t -webkit-transition: all .15s ease-in-out 0.05s;\n\t  -o-transition: all .15s ease-in-out 0.05s;\n\t  -moz-transition: all .15s ease-in-out 0.05s;\n\t  transition: all .15s ease-in-out 0.05s;\n}\n#confirm_dlg.newSize{\n\twidth: 270px;\n\theight: 102px;\n\topacity: 1;\n\tfilter: alpha(opacity=100);\n\t-webkit-box-shadow: 0 0px 30px 0 rgba(0, 0, 0, 0.3);\n\t-moz-box-shadow: 0 0px 30px 0 rgba(0, 0, 0, 0.3);\n\tbox-shadow: 0 0px 30px 0 rgba(0, 0, 0, 0.3);\n}\n#confirm_dlg .confirm_header{\n\theight: 30px;\n\tpadding: 0px 10px;\n\tfont-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n\tline-height: 30px;\n\tfont-size: 15px;\n\tborder-bottom: 1px solid #e5e5e5;\n}\n#confirm_dlg .confirm_content{\n\ttext-align: center;\n\tmargin: 10px;\n\tmargin-bottom: 5px;\n}\n#confirm_dlg .confirm_content p{\n\tpadding: 0px;margin: 0px;\n}\n#confirm_dlg .confirm_content .designer_button{\n\tfloat: right;height: 25px;line-height: 25px;width: 50px;margin:auto;margin-top: 10px;display: block;\n}\n/*****************************colla-add-dialog********end************************/\n\n#hotkey_list{\n\twidth: auto;\n}\n#hotkey_list .dialog_content{\n\tpadding:0px;\n\tmax-height: 500px;\n\toverflow:auto;\n\tmargin-bottom: 65px;\n}\n#hotkey_list .hotkey_content{\n\tmargin: 0px;\n\tpadding: 20px;\n}\n.hotkey_content span{\n\tpadding: 0px;\n\tmargin: 0px;\n\tdisplay: inline-block;\n\tpadding: 4px 8px;\n\ttext-align: left;\n}\n.hotkey_content .hotkey_line{\n\tdisplay: block;\n\tmin-width: 663px;\n\tborder-bottom: #f3f2f2 solid 1px;\n}\n.hotkey_content .hotkey_line.null_line{\n\tborder-bottom: 0;\n}\n.hotkey_content .hotkey_line.hotkey_group{\n\tfont-size: 14px;\n\tfont-weight: bold;\n}\n.hotkey_content .hotkey_line .hotkey{\n\twidth: 160px;\n\tmargin-right: 20px;\n}\n#hotkey_list .hotkey_ok{\n\tposition: absolute;\n\tright: 20px;\n\tbottom: 20px;\n\tline-height:25px;\n\theight:25px;\n}\n\n#send_feedback .feedback_lebal{\n\tdisplay: block;\n\twidth: 490px;\n\ttext-align: left;\n}\n.feedback_error_email_format{\n\tdisplay: none;\n\tcolor: #cf4236;\n\tmargin-left: 20px;\n}\n.feedback_error_msg{\n\tdisplay: none;\n\tcolor: #cf4236;\n\tmargin-left: 20px;\n}\n#designer_ui_tip{\n\tposition: absolute;\n\ttop: calc(40%);\n\tleft: 20px;\n\tcolor: white;\n\tpadding: 10px 15px;\n\tborder-radius: 4px;\n\tbackground: rgba(0,0,0,0.6);\n\tdisplay: none;\n}\n.ui_tip_close{\n\tposition: absolute;\n\twidth: 18px;\n\theight: 18px;\n\tright: -9px;\n\ttop: -9px;\n\tbackground-color: rgb(255,255,255);\n\tborder: 1px solid #424242;\n\tborder-radius: 50%;\n\tcursor: pointer;\n\tbackground-position: -1px -381px;\n}\n\n#chattingbox{\n \tdisplay: none;\n\tbottom: 35px;\n\tleft: 260px;\n\twidth: 260px;\n\tposition: absolute;\n\tbackground: #f5f5f5;\n\tborder-width: 1px 1px 0px 0px;\n\tborder-style: solid;\n\tborder-color: #999;\n}\n.chatting_icon{\n\tposition:absolute;\n\ttop:2px;\n\tdisplay:block;\n\twidth: 12px;\n\theight: 12px;\n\tcursor: pointer;\n\tbackground: url(./images/sprite.png?9) -44px -564px no-repeat;\n\tborder: 1px solid transparent;\n\tborder-radius: 2px;\n\t-moz-border-radius: 2px;\n\t-webkit-border-radius: 2px;\n\tright:5px;\n}\n.chatting_icon:hover{\n\tbackground-color: #878787;\n\tborder-color: #737373;\n}\n#chat_messages{\n\theight: 200px;\n\toverflow: auto;\n\tpadding: 5px 10px;\n}\n#chat_messages li{\n\tpadding: 2px 0px;\n}\n#chat_messages li span{\n\tcolor: #4183C4;\n}\n.chatting_bottom{\n\ttext-align: right;\n\tpadding: 5px 10px 10px;\n}\n.chatting_bottom .designer_button{\n\theight: 24px;\n\tline-height: 24px;\n\tmargin-top: 3px;\n\tmargin-right: 0px;\n}\n#chat_prompt{\n\tbackground: #e43a3c;\n\tpadding: 0px 5px;\n\theight: 18px;\n\tposition: absolute;\n\tright: -8px;\n\ttop: -9px;\n\tcolor: white;\n\tline-height: 18px;\n\tborder-radius: 9px;\n\ttext-align: center;\n\tfont-size: 12px;\n\tbox-shadow: 0px 0px 3px rgba(0,0,0,0.6);\n\tdisplay: none;\n}\n#designer_contextmenu{\n\tcursor: default;\n}\n#designer_footer{\n\tposition: fixed;\n\tleft: 0px;\n\tbottom: 0px;\n\twidth: 100%;\n\theight: 34px;\n\tbackground: #f3f3f3;\n\tborder-top: 1px solid #aaaaaa;\n}\n.footer_content{\n\tposition: relative;\n}\n.footer_content .left_box{\n\twidth: 162px;\n\tborder-right: 1px solid #A2A2A2;\n\theight: 34px;\n\ttext-align: center;\n\tposition: absolute;\n\tleft: 0px;\n\ttop: 0px;\n}\n.left_box div{\n\tline-height: 24px;\n\theight: 24px;\n\tmargin-top: 4px;\n\twidth: 80px;\n}\n.footer_content .content_box{\n\tmargin-left: 163px;\n\theight: 34px;\n\tline-height: 34px;\n\tpadding-left: 5px;\n\tcolor: #525252;\n}\n.footer_left .toolbar_button{\n\tdisplay: inline-block;\n\tfloat: left;\n\tmargin-left: 5px;\n\tpadding: 0px 10px 0px 3px;\n\tmargin-top: 4px;\n\tcursor: pointer;\n}\n.footer_devider{\n\tfloat: left;\n\tborder-left: 1px solid #aaa;\n\tborder-right: 1px solid #FFF;\n\theight: 26px;\n\tmargin: 4px 5px 0px 10px;\n}\n#collaborators{\n\tdisplay: inline-block;\n\tfloat: left;\n\theight: 24px;\n\tmargin-top: 5px;\n}\n#collaborators img{\n\tfloat: left;\n\theight: 24px;\n\twidth: 24px;\n\tmargin-left: 5px;\n\t-webkit-border-radius: 2px;\n\t-moz-border-radius: 2px;\n\t-ms-border-radius: 2px;\n\tborder-radius: 2px;\n}\n.footer_right{\n\tposition: absolute;\n\tright: 0px;\n\ttop: 0px;\n}\n.footer_right li{\n\tfloat: left;\n\tcursor: pointer;\n\tfont-weight: bold;\n\tborder-left: 1px solid #aaa;\n}\n.footer_right li a{\n\tpadding: 0px 12px;\n\tdisplay: block;\n\tcolor: #525252;\n}\n.footer_right li a:hover{\n\tcolor: #29AAE1;\n\ttext-decoration: none;\n}\n.footer_right .footer_fb{\n\tpadding: 0px 12px;\n\tcolor: #fff;\n\tbackground-color: #555;\n\tborder-left: 0px;\n}\n.footer_fb:hover{\n\tcolor: #fff;\n\tbackground-color: #2EB5E5;\n\tbackground-image: -moz-linear-gradient(top, #34C0E9, #29AAE1);\n\tbackground-image: -webkit-linear-gradient(top, #34C0E9, #29AAE1);\n\tbackground-image: -o-linear-gradient(top, #34C0E9, #29AAE1);\n\tbackground-image: -ms-linear-gradient(top, #34C0E9, #29AAE1);\n\tbackground-image: linear-gradient(top, #34C0E9, #29AAE1);\n}\n.footer_chrome{\n\tdisplay: none;\n}\n.footer_right li span{\n\tdisplay: inline-block;\n\tmargin-top: 7px;\n\tfloat: left;\n\tmargin-right: 5px;\n\topacity: 1;\n}\n#shapes_dialog .dialog_header{\n\tborder-color: #ccc;\n}\n#shape_manage_list li{\n\tbackground: #F3F3F3;\n\tborder-top: #fff solid 1px;\n\tborder-bottom: #ccc solid 1px;\n\tcursor: default;\n}\n#shape_manage_list li div{\n\tborder-left: 4px solid transparent;\n\tpadding: 5px 10px 5px 20px;\n}\n#shape_manage_list li:hover div{\n\tborder-left-color: #dd4b39;\n}\n#shape_manage_list li.child{\n\tbackground: #fafafa;\n}\n#shape_manage_list li.child div{\n\tpadding-left: 50px;\n}\n#shape_manage_list input{\n\tfloat: left;\n}\n\n.share_container{\n\tposition: absolute;\n\tright: 20px;\n\ttop: 20px;\n\theight: 30px;\n\tz-index: 0;\n}\n.share_container .user{\n\ttext-shadow: 0 1px 0 #FFF;\n\tcolor: #525252;\n\tfont-weight: bold;\n\tline-height: 30px;\n\tfloat: left;\n\tposition: relative;\n\tpadding-right: 10px;\n\tcursor: pointer;\n}\n.share_container .user img{\n\twidth: 30px;\n\theight: 30px;\n\tfloat: left;\n\tborder-radius: 50%;\n\tfloat: left;\n\tmargin-right: 5px;\n}\n.share_container .user .ico{\n\tposition: absolute;\n\tright: 0px;\n\ttop: 12px;\n}\n.share_container .designer_button{\n\tposition: relative;\n}\n.header_right_btn{\n\tfloat: left;\n\theight: 30px;\n\tborder-right: 1px solid #cbcccc;\n\tmargin-right: 10px;\n}\n.header_right_btn .toolbar_button{\n\tfloat: left;\n\tmargin-right: 10px;\n\tcursor: pointer;\n\tmargin-top: 2px;\n}\n.header_right_btn .drop_button{\n\tpadding: 0px 10px 0px 10px;\n}\n.header_right_btn .ico_accordion{\n\tposition: absolute;\n\tright: 5px;\n\ttop: 8px;\n}\n#bar_list_pagesize .lbl, #page_size_list .lbl{\n\tdisplay: inline-block;\n\twidth: 20px;\n}\n#bar_list_pagesize .spinner, #page_size_list .spinner{\n\tdisplay: inline-block;\n}\n\n#shape_opt_box{\n\tposition: absolute;\n\tborder-radius: 5px;\n\topacity: .5;\n\tbackground-color: #f5f5f5;\n\tpadding: 10px;\n\twidth: 200px;\n\tcursor: default;\n\t-webkit-transition: opacity .25s,border-color .25s,background-color .25s;\n\ttransition: opacity .25s,border-color .25s,background-color .25s;\n\tborder: 1px solid rgb(180,180,180);\n\t-webkit-box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.3);\n\t-moz-box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.3);\n\tbox-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.3);\n}\n#shape_opt_box:hover{\n\topacity: 1;\n}\n#shape_opt_box .dlg_close{\n\ttop: 5px;\n\tright: 5px;\n}\n.shape_opts .opt{\n\tpadding: 5px 0px;\n\theight: 26px;\n}\n.shape_opts label{\n\tfloat: left;\n\tdisplay: block;\n\twidth: 95px;\n\ttext-align: right;\n\tline-height: 26px;\n}\n.shape_opts .field{\n\tfloat: left;\n\tdisplay: block;\n\twidth: 100px;\n\tmargin-left: 5px;\n}\n.shape_opts .field{\n\tfloat: left;\n\tdisplay: block;\n\twidth: 100px;\n\tmargin-left: 5px;\n}\n.shape_opts .button_box{\n\ttext-align: center\n}\n.shape_opts .button_box{\n\ttext-align: center\n}\n.button_box .toolbar_button{\n\tdisplay: inline-block;\n\tpadding: 0px 15px;\n}\n#publish_dialog li{\n\tpadding: 6px 0px;\n}\n#publish_dialog li span{\n\tdisplay: inline-block;\n\twidth: 75px;\n\ttext-align: right;\n\tmargin-right: 5px;\n\tvertical-align: top;\n\tline-height: 30px;\n}\n.dlg_publish_tip{\n\tcolor: #555;\n\tpadding-bottom: 10px;\n}\n.tag_des{\n\tmargin-left: 80px;\n\tcolor: #948b88;\n}\n.unpublish_box{\n\tposition: relative;\n\twidth: 400px;\n\theight: 160px;\n}\n.unpub_item{\n\tposition: absolute;\n\ttop: 40px;\n\ttext-align: center;\n\twidth: 150px;\n}\n.pub_cancel{\n\tleft: 25px;\n}\n.pub_or{\n\tleft: 175px;\n\twidth: 50px;\n\tpadding-top: 15px;\n}\n.pub_edit{\n\tright: 25px;\n}\n.unpublish_box span{\n\tbackground: url(../images/diagrams/diagrams.png) no-repeat;\n\tdisplay: inline-block;\n\twidth: 52px;\n\theight: 52px;\n\tcursor: pointer;\n\topacity: 0.7;\n}\n.unpublish_box span:hover{\n\topacity: 1;\n}\n.pub_edit span{\n\tbackground-position: 0px -56px;\n}\n#embed_designer_chart .embed_preview_box{\n\tfloat:left;\n\toverflow:auto;\n\twidth: 450px;\n\theight: 330px;\n\tposition:relative;\n\tborder: 1px solid #999;\n\tbox-shadow:inset 0px 0px 15px rgba(0,0,0,0.5);\n\t-webkit-box-shadow:inset 0px 0px 15px rgba(0,0,0,0.5);\n\t-moz-box-shadow:inset 0px 0px 15px rgba(0,0,0,0.5);\n\t-o-box-shadow:inset 0px 0px 15px rgba(0,0,0,0.5);\n\t-ms-box-shadow:inset 0px 0px 15px rgba(0,0,0,0.5);\n}\n.embed_preview_box .embed_preview_wrap{\n\tmax-width:450px;\n\tmax-height:330px;\n\tposition:absolute;\n\ttop:50%;\n\tleft:50%;\n}\n.embed_preview_wrap .embed_preview{\n\tmargin:auto;\n}\n#embed_designer_chart .embed_attributes{\n\twidth: 320px;\n\theight: 330px;\n\tfloat:right;\n\tmargin-left:25px;\n\tposition: relative;\n}\n.embed_attributes .dlg_publish_tip{\n\tfont-size:15px;\n\tpadding:0px 0px 8px 0px;\n\tline-height:20px;\n}\n.embed_attributes .iframe_html{\n\tdisplay: block;width: 305px;height: 140px;margin-top: 5px;margin-bottom: 3px;\n}\n.embed_attributes .embed_size input{\n\twidth: 60px;\n}\n#themes{\n\tpadding: 5px;\n\twidth: 444px;\n\tmax-height: 380px;\n\toverflow: auto;\n}\n.theme_box{\n\tmargin: 3px;\n\tborder: 2px solid transparent;\n\tfloat: left;\n\tcursor: pointer;\n}\n.theme_box:hover, #themes canvas:hover{\n\tborder-color: #2EB5E5;\n}\n#themes canvas{\n\tborder: #ccc solid 1px;\n}\n\n.icon{position: absolute;left: 20px;top: 22px;font-size: 1.3em; color: rgb(80,150,240);}\n.status{position: absolute;right: 20px;top: 20px;left: auto;font-size:1.6em}\n.status.fa-clock-o{color: #DDDDDD;margin-top: 2px;}\n.status.fa-check{color: #22ca2f;margin-top: 2px;}\n.status.fa-check-circle{color: #22ca2f;}\n.status.fa-exclamation-circle{color: #f14c0c;}\n\n.dashboard_box .icon{left: 10px; top: 10px;}\n\n.flow-tool{height:32px;line-height:32px;width: 100%;}\n.flow-tool > div{display: inline-block;height: 31px;}\n.flow-tool > div.first{width: 158px; text-align: center; border-bottom: 1px solid #eee;}\n.flow-tool > div.middle{border: 1px solid #eee;width: 161px;border-top:0;border-left: none;}\n.flow-tool > div.last{width: 300px; text-align: center;border-bottom: 1px solid #eee;margin-left:-5px;}\n.flow-tool > div.middle a{padding: 0px 10px 0 15px; line-height: 34px; }\n.flow-tool > div.middle a.name, .flow-tool > div.middle a.time{margin-left: 50px;}\n.flow-tool > div.middle a.plus,.flow-tool > div.middle a.minus{float: right;}\n.flow-tool > div.middle a:hover{color: #f71e3e;}\n\n.fa{font-size: 1.3em;}\n\n#configure{width:300px;height:calc(100% - 40px);border:1px solid #eee;position:absolute;top:32px;right:0;z-index:200000;background-color:#fff;display:none;border-top: 0;overflow: auto;}\n#configure .layui-form-label{padding: 10px 0px;width: 70px;}\n#configure .layui-input-block{margin-left:80px;width: 180px;}\n#configure .layui-form-item{margin-bottom: 5px;}\n#configure button.layui-btn{width:30%;}\n#configure .fa-question-circle{position: absolute;right: -18px;top: 10px;color: #e0db09;}\n#configure .layui-hide-div{position: absolute;width: 100%;height: calc(100%);top: 0; left: 0;}\n\n.layui-layer-content .layui-code-view{margin: 0;}\n.layui-tab-brief>.layui-tab-title .layui-this{color: #f71e3e;}\n.layui-tab-brief>.layui-tab-more li.layui-this:after, .layui-tab-brief>.layui-tab-title .layui-this:after{border-bottom-color: #BF0017;}\n.layui-form .layui-form-label font{color: red;}\n.layui-btn-danger{background-color: #f71e3e;}\n\n.layui-layer-loading .layui-layer-content{padding-top: 25px; text-align: center;}\n\n.layui-edit .save, .layui-log .save, .layui-log .test, .layui-log .down{display: none;}\n"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/flow/util.js",
    "content": "var Util={};!function(){document.ondragstart=function(){return!1},$.ajaxSetup({cache:!1}),$(\"[title],[original-title]\").live(\"mouseover\",function(){if($(this).attr(\"disableTitle\"))return!1;var a=$(this);if(a.attr(\"title\")&&(a.attr(\"original-title\",a.attr(\"title\")),a.removeAttr(\"title\")),a.attr(\"original-title\")){var b=a.attr(\"original-title\"),c=$(\"#hover_tip\");0==c.length&&(c=$(\"<div id='hover_tip'><div class='tip_arrow'></div><div class='tip_content radius3'></div></div>\").appendTo(\"body\")),$(\".tip_content\").html(b),$(\"#hover_tip\").show(),$(\".tip_arrow\").removeClass(\"tip_right\").removeClass(\"tip_top\").css(\"top\",\"\"),\"right\"==a.attr(\"title_pos\")?(c.css({left:a.offset().left+a.outerWidth()+7,top:a.offset().top+a.outerHeight()/2-c.outerHeight()/2}),$(\".tip_arrow\").attr(\"class\",\"tip_arrow tip_right\").css(\"top\",c.outerHeight()/2-7)):\"top\"==a.attr(\"title_pos\")?(c.css({left:a.offset().left+a.outerWidth()/2-c.outerWidth()/2,top:a.offset().top-c.outerHeight()}),$(\".tip_arrow\").attr(\"class\",\"tip_arrow tip_top\")):\"left\"==a.attr(\"title_pos\")?(c.css({left:a.offset().left-c.outerWidth()-7,top:a.offset().top+a.outerHeight()/2-c.outerHeight()/2}),$(\".tip_arrow\").attr(\"class\",\"tip_arrow tip_left\")):(c.css({left:a.offset().left+a.outerWidth()/2-c.outerWidth()/2,top:a.offset().top+a.outerHeight()}),$(\".tip_arrow\").attr(\"class\",\"tip_arrow\"))}}).live(\"mouseout\",function(){$(\"#hover_tip\").hide()}),$.simpleAlert=function(a,b,c){if(\"close\"==a)return void $(\"#simplealert\").remove();$(\"#simplealert\").length&&$(\"#simplealert\").remove();var d=\"simplealert-icon-info\";b&&(d=\"simplealert-icon-\"+b);var e=$(\"<div id='simplealert' class='simplealert'></div>\").appendTo(\"body\"),f=\"<div class='\"+d+\"'>\";\"loading\"==b&&(f+=\"<img src='/images/default/designer/loading.gif' style='margin:10px 0px 0px 12px'/>\"),f+=\"</div><div class='simplealert-msg'>\"+a+\"</div><div class='simplealert-right'></div>\",e.html(f),e.css(\"top\",($(window).height()-e.height())/2+$(window).scrollTop()+\"px\"),e.css(\"left\",($(window).width()-e.width())/2+$(window).scrollLeft()+\"px\"),e.show(),\"no\"!=c&&setTimeout(function(){e.fadeOut(200)},c?c:3500)},$.fn.disable=function(a,b){$(this).attr(\"disable\",!0),$(this).addClass(\"opacity disable\");for(var c=0;c<$(this).length;c++){var d=$(this)[c];$(d).unbind(\"mouseover.disable\").bind(\"mouseover.disable\",function(){var c=$(\"<div class='disabled-mask'></div>\").appendTo(\"body\");a||(a=2),c.css({width:$(d).outerWidth()+a,height:$(d).outerHeight()+4,top:$(d).offset().top,left:$(d).offset().left,\"z-index\":9999}),b&&c.css(\"z-index\",b),c.on(\"mouseout\",function(){$(this).remove()}).on(\"mouseup\",function(a){a.stopPropagation()})})}return this},$.fn.enable=function(){$(this).attr(\"disable\",!1),$(this).removeClass(\"opacity disable\");for(var a=0;a<$(this).length;a++){var b=$(this)[a];$(b).unbind(\"mouseover.disable\").unbind(\"focus\")}return this},Util.loginWindow=function(a,b){if(\"undefined\"==typeof a&&(a=\"open\"),\"open\"==a){$(\"#loginWindow\").length&&$(\"#loginWindow\").remove();var c=$(\"<div id='loginWindow' style='margin-top:-120px;margin-left:-50px;' class='loginWindow'></div>\").appendTo(\"body\");c.append(\"<div id='loginWindow-content' class='loginWindow-content'><img src='/images/ajaxload.gif' style='margin:80px 0px 0px 45%'/></div>\"),$(\"#loginWindow-content\").load(\"/login/window\",function(){loginCallback=b}),c.dialog()}else(a=\"close\")&&$(\"#loginWindow\").dialog(\"close\")},Util.payWindow=function(a,b,c){if(\"undefined\"==typeof a&&(a=\"open\"),\"open\"==a){$(\"#payWindow\").length&&$(\"#payWindow\").remove();var d=$(\"<div id='payWindow' style='margin-top:-120px;margin-left:-50px;' class='payWindow'></div>\").appendTo(\"body\");d.append(\"<div id='payWindow-content' class='loginWindow-content'><img src='/images/ajaxload.gif' style='margin:80px 0px 0px 45%'/></div>\"),$(\"#payWindow-content\").load(\"/order/pay/window\",b,function(){payCallback=c}),d.dialog()}else(a=\"close\")&&$(\"#payWindow\").dialog(\"close\")},Util.setCookie=function(a,b,c){var d=new Date;d.setDate(d.getDate()+c),document.cookie=a+\"=\"+escape(b)+(null==c?\"\":\";expires=\"+d.toGMTString())},Util.getCookies=function(a){if(document.cookie.length>0){var b=document.cookie.indexOf(a+\"=\");if(b!=-1){b=b+a.length+1;var c=document.cookie.indexOf(\";\",b);return c==-1&&(c=document.cookie.length),unescape(document.cookie.substring(b,c))}}return\"\"};var maskStackCount=0;$.mask=function(a){if(\"undefined\"==typeof a&&(a=\"open\"),\"open\"==a){if(0==maskStackCount){var b=$(\"<div id='window-mask' class='window-mask' style='display:none'></div>\").appendTo(\"body\");b.css({width:$(window).width()+\"px\",height:$(window).height()+\"px\",filter:\"alpha(opacity=60)\"}).show(),$(window).bind(\"resize.mask\",function(){b.css({width:$(window).width()+\"px\",height:$(window).height()+\"px\"})})}maskStackCount++}else\"close\"==a&&(maskStackCount--,0==maskStackCount&&($(\"#window-mask\").remove(),$(window).unbind(\"resize.mask\")))},$.fn.dialog=function(a){var b=$(this);if(\"string\"==typeof a)\"close\"==a&&(b.find(\".dialog-close\").trigger(\"click\"),null!=$(\"#window-mask\")&&$(\"#window-mask\").hide());else{var c={fixed:!0,closable:!0,mask:!0};a=$.extend(c,a),a||(a={});var d=\"\";a.title?d=a.title:b.attr(\"title\")&&(d=b.attr(\"title\"),b.attr(\"title\",\"\")),b.addClass(\"dialog-box\").show();var e=$(\"<div class='dialog-close'></div>\").appendTo(b);e.bind(\"click\",function(){if(!a.onClose||0!=a.onClose()){$.mask(\"close\"),b.hide(),b.removeClass(\"dialog-box\").find(\".dialog-close\").remove();var c=b.find(\".dialog-title\");b.attr(\"title\",c.text()),c.remove(),$(window).unbind(\"resize.dialog\")}}),b.find(\".close\").on(\"click\",function(){e.click()}),a.closable&&e.show(),\"\"!=d&&b.prepend(\"<h2 class='dialog-title'>\"+d+\"</h2>\"),a.mask&&$.mask(),$(window).bind(\"resize.dialog\",function(){var c=b.outerWidth(),d=b.outerHeight(),e=0;a.fixed?(b.css(\"position\",\"fixed\"),e=($(window).height()-d)/2+\"px\"):(b.css(\"position\",\"absolute\"),e=($(window).height()-d)/2+$(document).scrollTop()+\"px\");var f=($(window).width()-c)/2+\"px\";b.css({top:e,left:f})}),$(window).trigger(\"resize.dialog\"),b.find(\".dialog-title\").draggable({target:b})}return b},$.fn.draggable=function(a){var b={target:\"default\",clone:!1,undrag:\"\",scroll:!0,start:function(){},drag:function(){},end:function(){}},c=$.extend(b,a);return $(this).off(\"mousedown.drag\").on(\"mousedown.drag\",function(a){$(document).on(\"selectstart.drag dragstart\",function(){return!1});var b=$(this),d=\"string\"==typeof c.target&&\"default\"==c.target?b:c.target,e=a.pageX,f=a.pageY,g=d.offset().left,h=d.offset().top;c.clone&&(d=b.clone().removeAttr(\"id\").css(\"position\",\"absolute\").offset({left:g,top:h}),\"function\"==typeof c.clone&&(c.clone.call(d,a),g=1*d.css(\"left\").replace(\"px\",\"\"),h=1*d.css(\"top\").replace(\"px\",\"\")),c.opacity&&d.css(\"opacity\",c.opacity)),$(document).on(\"mousemove.drag\",function(a){b.hasClass(\"ondrag\")||(b.addClass(\"ondrag\"),c.clone&&d.appendTo(b.parent()),c.start.call(b[0],a));var i=a.pageX-e+g,j=a.pageY-f+h;if(c.bounding){var k=c.bounding.offset().left,l=c.bounding.offset().top;i>k&&j>l&&i<k+c.bounding.outerWidth()-d.outerWidth()&&j<l+c.bounding.outerHeight()-d.outerHeight()&&d.offset({left:i,top:j})}else d.offset({left:i,top:j});c.drag.call(b[0],a)}),$(document).on(\"mouseup.drag\",function(a){c.end.call(b[0],a),c.clone&&d.remove(),$(document).off(\"selectstart.drag dragstart\"),$(document).off(\"mousemove.drag\"),$(document).off(\"mouseup.drag\"),$(\".drop-hover\").length||b.removeClass(\"ondrag\")}),$(this).on(\"mouseup.drag\",function(a){$(document).trigger(\"mouseup.drag\"),$(this).off(\"mouseup.drag\")})}),c.undrag&&$(this).find(c.undrag).off(\"mousemove.drag\").on(\"mousemove.drag\",function(a){a.stopPropagation()}).on(\"dragstart\",function(){return!1}),this},$.confirm=function(a){var b=$(\"#global_confirm_window\"),c=\"确定\";a.okval&&(c=a.okval),b.length?(b.find(\".dlg-content\").html(a.content),b.find(\".okbtn\").html(c)):b=$(\"<div id='global_confirm_window' tabindex='-1' class='confirm-box' title='请确认'><div class='dlg-content'>\"+a.content+\"</div><div class='dlg-buttons'><span class='pro-btn default okbtn'>\"+c+\"</span>&nbsp;&nbsp;<span class='pro-btn cancelbtn close'>取消</span></div></div>\").appendTo(\"body\"),a.width&&b.css(\"width\",a.width),a.height&&b.css(\"height\",a.height),b.dialog(),$(document).off(\"keyup.confirm\").on(\"keyup.confirm\",function(a){13==a.keyCode&&b.find(\".okbtn\").trigger(\"click\")}),b.find(\".okbtn\").off().on(\"click\",function(){b.dialog(\"close\"),a.onConfirm&&a.onConfirm()}),b.find(\".cancelbtn\").off(\"click.cancel\").on(\"click.cancel\",function(){a.onCancel&&a.onCancel()})},$.fn.popMenu=function(a){var b=$(this);if(\"string\"==typeof a)return void(\"close\"==a&&(b.hide().removeClass(\"popover\"),$(window).unbind(\"resize.popmenu\")));var c={position:\"left\",fixed:!1,offsetX:0,offsetY:0,zindex:2,autoClose:!0,closeAfterClick:!1,autoPosition:!0},d=$.extend(c,a),e=$(d.target);b.addClass(\"popover\").css(\"z-index\",d.zindex),d.fixed&&b.css(\"position\",\"fixed\"),d.autoClose&&(0==d.closeAfterClick&&b.unbind(\"mouseup.popmenu\").bind(\"mouseup.popmenu\",function(a){a.stopPropagation()}),$(document).bind(\"mouseup.popmenu\",function(){b.popMenu(\"close\"),$(document).unbind(\"mouseup.popmenu\"),d.onClose&&d.onClose()})),$(window).bind(\"resize.popmenu\",function(){b.popMenu(a)}),b.show();var f=0;f=\"center\"==d.position?e.offset().left+e.outerWidth()/2-b.outerWidth()/2:\"right\"==d.position?e.offset().left+e.outerWidth()-b.outerWidth():e.offset().left,f+b.outerWidth()>$(window).width()&&(f=$(window).width()-b.outerWidth());var g=e.offset().top+e.outerHeight();d.autoPosition&&g+d.offsetY+b.outerHeight()>$(window).height()+$(document).scrollTop()?b.css({top:$(window).height()-b.outerHeight()+$(document).scrollTop(),left:f+d.offsetX}):b.css({top:g+d.offsetY,left:f+d.offsetX})},$.fn.suggest=function(a){var b=$(this),c={valueField:\"value\",offsetX:0,offsetY:0,width:b.outerWidth(),format:function(a){return a.text}},d=$.extend(c,a),e=$(\".suggest-menu\");e.length<1&&(e=$(\"<ul class='suggest-menu'></ul>\").appendTo(\"body\")),e.width(d.width);var f=-1,g=\"\";b.off(\"keydown.suggest\").on(\"keydown.suggest\",function(a){if(40==a.keyCode)a.preventDefault(),f<e.children().length-1&&(f++,e.find(\".active\").removeClass(\"active\"),e.find(\"li[index=\"+f+\"]\").addClass(\"active\"));else if(38==a.keyCode)a.preventDefault(),e.find(\".active\").removeClass(\"active\"),f>=0&&(f--,e.find(\"li[index=\"+f+\"]\").addClass(\"active\"));else if(13==a.keyCode){var c=e.find(\".active\");c.length&&b.val(c.attr(\"val\")),d.onEnter&&d.onEnter(b),e.hide(),value=\"\"}}).off(\"keyup.suggest\").on(\"keyup.suggest\",function(a){var c=b.val();\"\"==c?e.hide():c!=g&&(f=-1,$.get(d.url,{q:c},function(a){e.empty();var f=a.items;if(0==f.length)e.hide(),c=\"\";else{for(var h=0;h<f.length;h++){var i=f[h],j=\"<li index='\"+h+\"' class='suggest-item' val='\"+i[d.valueField]+\"'>\";j+=d.format(i),j+=\"</li>\",e.append(j)}e.show(),e.attr(\"tabindex\",0);var k=0;k=\"center\"==d.position?b.offset().left+b.outerWidth()/2-e.outerWidth()/2:\"right\"==d.position?b.offset().left+b.outerWidth()-e.outerWidth():b.offset().left,k+e.outerWidth()>$(window).width()&&(k=$(window).width()-e.outerWidth());var l=b.offset().top+b.outerHeight();d.autoPosition&&l+d.offsetY+e.outerHeight()>$(window).height()+$(document).scrollTop()?e.css({top:$(window).height()-e.outerHeight()+$(document).scrollTop(),left:k+d.offsetX}):e.css({top:l+d.offsetY,left:k+d.offsetX}),e.find(\".suggest-item\").off(\"mousedown\").on(\"mousedown\",function(a){a.preventDefault(),b.val($(this).attr(\"val\")),d.onEnter&&d.onEnter(b),e.hide(),g=c=\"\"})}})),g=c}).off(\"blur.suggest\").on(\"blur.suggest\",function(a){e.hide(),g=\"\"})},$.fn.pagination=function(a,b,c,d){if(!(b<=1)){var e=5;d&&(e=d);var f=$(this).addClass(\"pagination\"),g=1,h=b;if(b>e){var i=Math.floor(e/2),g=a-i>0?a-i:1;b-g<e&&(g=b-e+1);var h=g+e-1}var j=\"\";j+=a>1?\"<a p='\"+(a-1)+\"'>«</a>\":\"<a class='disabled'>«</a>\",g>=2&&(j+=\"<a p='1'>1</a>\"),g>=3&&(j+=\"<a class='disabled ellipsis'>...</a>\");for(var k=g;k<=h&&!(k>b);k++)j+=k==a?'<a class=\"disabled\">'+k+\"</a>\":\"<a p='\"+k+\"'>\"+k+\"</a>\";h<=b-2?j+=\"<a class='disabled ellipsis'>...</a><a p='\"+b+\"'>\"+b+\"</a>\":h<=b-1&&(j+=\"<a p='\"+b+\"'>\"+b+\"</a>\"),j+=a<b?\"<a p='\"+(a+1)+\"'>»</a>\":\"<a class='disabled'>»</a>\",f.html(j),c&&f.find(\"a[p]\").bind(\"click\",function(){var a=$(this).attr(\"p\");c(a)})}},$.fn.multiInput=function(a,b,c){function d(a,b){var c=e.find(\".multi-input-vals\"),d=\"&#xe63e;\",f=/^([\\w]+)(.[\\w]+)*@([\\w-]+\\.){1,5}([A-Za-z]){2,4}$/.test(b);if(f&&null==a)d=\"&#xe614;\",a=b;else if(!f&&null==a)return;var g='<span val=\"'+a+'\" class=\"multi-input-value\"><span class=\"icons\">'+d+'</span><span class=\"multi-text\">'+b+'</span><span class=\"icons closeme\">&#xe637;</span></span>';c.append(g)}var e=$(this);if(\"string\"==typeof a&&\"setVal\"==a)return void d(b,c);a=$.extend({text:\"请在此输入邮箱，回车添加\",autoComplete:!1,url:\"\",params:{}},a),e.html(\"\");var f=$('<div class=\"multi-input-vals\"></div>'),g=$('<div><input type=\"text\" id=\"multi-input\" placeholder=\"'+a.text+'\"></div>');e.append(f).append(g),g.find(\"input\").off().on(\"keyup\",function(b){var c=$.trim($(this).val());if(\"\"!=c)if(13==b.keyCode&&a.setVal){var e=/^([\\w]+)(.[\\w]+)*@([\\w-]+\\.){1,5}([A-Za-z]){2,4}$/.test(c);if(!e)return;var f=a.setVal(c);d(null,f),$(this).val(\"\")}else a.autoComplete&&(a.params=$.extend(a.params,{value:c}),$.ajax({url:a.url,cache:!1,data:a.params,success:function(b){var c=a.autoCompleteCallback(b);if($(\".popWindow\").remove(),\"\"!=c){var d=$(\"<div class='popWindow'></div>\").appendTo(\"body\");d.html(c),d.popWindow({target:\"#multi-input\"})}}}))}),$(document).on(\"click\",\".multi-input-vals .closeme\",function(){var b=$(this),c=b.prev().text();null!=c&&a.deleteVal&&(b.parent().remove(),a.deleteVal(c))})},$.fn.popWindow=function(a){var b=$(this),c=$(a.target);b.css({left:c.offset().left,top:c.offset().top+c.height()+(a.mh||0),zIndex:a.index||1}).show(),b.on(\"click.popwindow\",function(a){a.stopPropagation()}),$(document).on(\"click.popwindow\",function(){b.hide().css({index:-1})})},$.fn.id=function(){return this.attr(\"id\")},$.fn.submitForm=function(opt){function submitCallback(){frame.unbind();var body=$(\"#\"+frameId).contents().find(\"body\"),data=body.html();if(\"\"!=data){var ta=body.find(\">textarea\");if(ta.length)data=ta.val();else{var pre=body.find(\">pre\");pre.length&&(data=pre.html())}try{eval(\"data=\"+data),\"error\"==data.error?$.simpleAlert(\"暂时无法处理您的请求，请稍候重试。\",\"error\",3e3):\"notlogin\"==data.error?Util.loginWindow(\"open\",function(){form.submitForm(options)}):options.success&&options.success(data)}catch(a){options.json?($.simpleAlert(\"暂时无法处理您的请求，请稍候重试。\",\"error\",3e3),options.error&&options.error(data)):options.success&&options.success(data)}setTimeout(function(){frame.unbind(),frame.remove()},100)}else if(--checkCount)return void setTimeout(submitCallback,200)}var defaultOpt={json:!0},options=$.extend(defaultOpt,opt),form=$(this);if(!options.onSubmit||0!=options.onSubmit.call(form)){options.url&&form.attr(\"action\",options.url);var frameId=\"submit_frame_\"+(new Date).getTime(),frame=$(\"<iframe id=\"+frameId+\" name=\"+frameId+\"></iframe>\").attr(\"src\",window.ActiveXObject?\"javascript:false\":\"about:blank\").css({position:\"absolute\",top:-1e3,left:-1e3});form.attr(\"target\",frameId),frame.appendTo(\"body\"),frame.bind(\"load\",submitCallback),form.append(\"<input type='hidden' name='submitFormByHiddenFrame' id='submitFormByHiddenFrameParam' value='hiddenFrame'/>\"),form[0].submit(),$(\"#submitFormByHiddenFrameParam\").remove();var checkCount=10}},$.fn.submitFormAjax=function(a){var b=$(this);a.onSubmit&&0==a.onSubmit.call()||$.ajax({url:a.url?a.url:$(this).attr(\"action\"),type:\"POST\",data:$(this).serialize(),success:function(c){\"error\"==c.error?$.simpleAlert(\"暂时无法处理您的请求，请稍候重试\",\"error\",3e3):\"notlogin\"==c.error?Util.loginWindow(\"open\",function(){b.submitFormAjax(a)}):a.success&&a.success(c)},error:function(b){$.simpleAlert(\"暂时无法处理您的请求，请稍候重试\",\"error\",3e3),a.error&&a.error(b)}})},$.fn.numberTip=function(a){var b=$.extend({val:\"+1\",size:14,color:\"red\",time:1e3,pos:\"right\"},a),c=$(this),d=$(\"<span class='number-tip'>\"+b.val+\"</span>\").appendTo(\"body\"),e=c.offset().left;\"right\"==b.pos&&(e=c.offset().left+c.outerWidth()/2),d.css({left:e,top:c.offset().top,opacity:1}).show(),d.animate({top:\"-=14px\",opacity:0},400,function(){d.remove()})},$.fn.inputTip=function(a){var b=$.extend({text:\"\",time:500,pos:\"rightin\"},a),c=$(this),d=$(\".input-tip\");if(d.length)return void d.show();d=$(\"<span class='input-tip'>\"+b.text+\"</span>\").appendTo(\"body\");var e=c.offset().left;\"rightin\"==b.pos?e=c.offset().left+c.outerWidth()-c.width():\"rightout\"==b.pos&&(e=c.offset().left+c.outerWidth()+5),d.css({left:e,top:b.top||c.offset().top,opacity:1}).show(),setTimeout(function(){d.fadeOut(function(){d.remove()})},b.time)},$.fn.spread=function(a){var b=this;if(\"string\"!=typeof a&&!(b.length<=0)){var c=$(b[0]),d=c.parent(),e=parseInt(c.css(\"padding-left\").replace(\"px\",\"\")),f=parseInt(c.css(\"padding-right\").replace(\"px\",\"\")),g=parseInt(c.css(\"padding-top\").replace(\"px\",\"\")),h=parseInt(c.css(\"padding-bottom\").replace(\"px\",\"\")),i=parseInt(d.css(\"padding-left\").replace(\"px\",\"\")),j=(parseInt(d.css(\"padding-right\").replace(\"px\",\"\")),parseInt(d.css(\"padding-top\").replace(\"px\",\"\"))),k=(parseInt(d.css(\"padding-bottom\").replace(\"px\",\"\")),{w:c.width()+e+f,h:c.height()+g+h,ml:10,mt:10,maxWidth:d.width(),s:150}),l=$.extend(k,a),m=l.w,n=l.h,o=l.ml,p=l.mt,q=l.maxWidth,r=l.s;$.each(b,function(a,b){var c=$(b);c.css({top:\"-\"+n+\"px\",left:0})});var s=parseInt((q+o)/(m+o));Math.ceil(b.length/s);$.each(b,function(a,b){var c=$(b),d=parseInt(a/s),e=parseInt(a%s),f=0==e?i+10:e*(m+o)+i+10,g=0==d?j+6:d*(n+p)+j+6;c.css({display:\"block\",position:\"absolute\"});var h=Math.sqrt(Math.pow(g+150,2)+Math.pow(f,2))/150;c.animate({top:g,left:f},h*r)})}};var streamInputStreams={},curr_stream_icon=null;$.fn.streamInput=function(a){function b(a){try{var c=a.html().replace(/^\\s+/g,\" \").replace(/(\\S)\\s+(\\S)?/g,\"$1 $2\");a.html(c);var d=a.children(\":not(.ico-face, .paste-cont)\");if(d.length<1)return;d.each(function(a,b){$(b).css(\"display\");$(b).is(\"img, title, head, link, style, script\")?$(b).remove():$(b).replaceWith($(b).html())})}catch(a){}d=a.children(\":not(.ico-face, .paste-cont)\"),d.length>0&&b(a)}function c(a){var b=a.find(\".ico-face\");b.each(function(a,b){$(b).replaceWith($(\"<img class='\"+$(b).attr(\"class\")+\"' src='\"+$(b).attr(\"src\")+\"'>\"))})}function d(a){var b=a.children(\".paste-cont\");b.length<1||b.each(function(a,b){$(b).replaceWith($(b).html())})}function e(a){$(a).focus();try{var b=document.createRange();b.selectNode(a.lastChild||a),b.collapse(!1),window.getSelection().removeAllRanges(),window.getSelection().addRange(b),$(a).keyup()}catch(a){}}function f(a){var b=a.cloneNode(!0),c=b.childNodes.length,d=0,e=0;if(c>3&&$(b).children(\".paste-cont\").length>0)for(var f=0;f<c;f++){var g=b.childNodes[f];if(\"SPAN\"==g.nodeName){d=c-f-1,f<c-1&&\"#text\"==b.childNodes[f+1].nodeName&&(e=b.childNodes[f+1].data.length);break}}return{v:d,len:e}}function g(a,b,c,d){var e,f,g=a.html(),h=document.createElement(\"div\"),i=document.createDocumentFragment();if(g)for(h.innerHTML=g;e=h.firstChild;)f=i.appendChild(e);return c.insertNode(i),f&&(c=c.cloneRange(),c.setStartAfter(f),c.collapse(!0),b.removeAllRanges(),b.addRange(c),$(d).keyup()),c}if(this[0]&&a.face&&\"DIV\"==this[0].nodeName&&!this.attr(\"stream_id\")){var h={target:this},i=$.extend(h,a),j={id:\"\",range:null},k=Object.keys(streamInputStreams);j.id=k.length?streamInputStreams[k[k.length-1]].id+1:1,j.stream_id=\"stream_\"+(k.length?streamInputStreams[k[k.length-1]].id+1:1),this.attr({contentEditable:\"true\",spellcheck:\"false\",accesskey:\"q\",stream_id:j.stream_id}),$(i.face).attr(\"for_stream\",j.stream_id),streamInputStreams[j.stream_id]=j,curr_stream_icon=j;var l=!1,m=!1,n=0,o=0,p=0;!!i.home;$(i.target).off(\"click.stream keyup.stream\").on(\"click.stream keyup.stream\",function(a){curr_stream_icon=streamInputStreams[$(this).attr(\"stream_id\")],curr_stream_icon.target=$(this);var b=window.getSelection();curr_stream_icon.range=b.getRangeAt(0).cloneRange()}),$(i.target).off(\"DOMSubtreeModified.stream\").on(\"DOMSubtreeModified.stream\",function(a){if(l&&(l=!1,!($(this).children().length<1)))if(b($(this)),c($(this)),m){b($(this).find(\".paste-cont\"));var f=$(this).html();$(this).empty();var g=window.getSelection(),h=g.getRangeAt(0);h.deleteContents();var i,j,k=$(\"<div>\"+f+\"</div>\"),q=k.html(),r=document.createElement(\"div\"),s=document.createDocumentFragment();if(q)for(r.innerHTML=q;i=r.firstChild;)j=s.appendChild(i),\"SPAN\"==i.nodeName&&(n=s.childNodes.length+i.childNodes.length-1);if(h.insertNode(s),j){if(h=h.cloneRange(),h.collapse(!0),d($(this),!1),h.setStart(this,n||this.childNodes.length-o),h.setEnd(this,n||this.childNodes.length-o),o&&p){var t=this.childNodes.length-o;i=this.childNodes[t],h.setStart(i,i.data.length-p),h.setEnd(i,i.data.length-p)}g.removeAllRanges(),g.addRange(h)}}else e(this)}),$(i.target).off(\"paste.stream\").on(\"paste.stream\",function(a){a=a.originalEvent;var d=a.clipboardData||a.view.clipboardData,e=window.getSelection(),h=e.getRangeAt(0);h.deleteContents();try{var i=d.getData(\"text/html\")||d.getData(\"text/plain\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\");i=i.replace(/<(\\/)?(html|body)(\\s|\\S)+?>/g,\"\").replace(/(<!--.+?-->)|(\\r\\n)/g,\"\");var j=$(\"<div>\"+i+\"</div>\");return b(j),c(j),g(j,e,h,this),!1}catch(a){if(l=!0,\"\"==$.trim($(this).html().replace(/\\s+|<br>/g,\"\")))return void(m=!1);m=!0;var k=document.createElement(\"span\");k.className=\"paste-cont\",h.insertNode(k),h=h.cloneRange(),h.selectNodeContents(k),e.removeAllRanges(),e.addRange(h);var n=f(this);o=n.v,p=n.len}}),$(i.face).off(\"click.stream\").on(\"click.stream\",function(){curr_stream_icon=streamInputStreams[$(this).attr(\"for_stream\")];var a=curr_stream_icon.target=$(\"div[stream_id='\"+$(this).attr(\"for_stream\")+\"']\");if(a.focus(),curr_stream_icon.range){var b=window.getSelection();b.removeAllRanges(),b.addRange(curr_stream_icon.range)}var c=$(\"#faces_dialog\");c.length<1&&(c=$(\"<div></div>\").attr({id:\"faces_dialog\",class:\"faces-lib\"}).append(\"<ul><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul>\").appendTo(\"body\")),$(\"#faces_dialog\").popMenu({target:this,position:\"right\",zindex:4}),$(\"#faces_dialog ul li\").off(\"click.stream\").on(\"click.stream\",function(a){$(\"#faces_dialog\").popMenu(\"close\");var b,c=$(curr_stream_icon.target),d=$(this).index()+1;if(b=\"<img class='ico-face' src='/assets/images/faces/faces/\"+d+\".gif'>\",\"\"==$.trim(c.html().replace(/&nbsp;|<br>/g,\"\")))return c.html(b),void e(c[0]);c.focus();var f=window.getSelection(),h=curr_stream_icon.range;h.deleteContents();var i=$(\"<div>\"+b+\"</div>\");g(i,f,h,c)})})}}}(),Util.ajax=function(a){if(!a.onSend||0!=a.onSend()){var b={type:\"POST\"};return a=$.extend(b,a),$.ajax({url:a.url,type:a.type,traditional:!0,data:a.data,success:function(b){\"error\"==b.error?($.simpleAlert(\"<@i18n resource='global.error'/>\",\"error\",3e3),a.error&&a.error(b)):\"notlogin\"==b.error?(a.loginValidate&&a.loginValidate(b),Util.loginWindow(\"open\",function(){Util.ajax(a)})):a.success&&a.success(b)},error:function(b){b.status&&a.error&&a.error(b)}})}},Util.get=function(a,b,c){$.ajax({url:a,type:\"GET\",data:b,success:function(d){\"error\"==d.error?$.simpleAlert(\"<@i18n resource='global.error'/>\",\"error\",3e3):\"notlogin\"==d.error?Util.loginWindow(\"open\",function(){Util.get(a,b,c)}):c(d)},error:function(a){}})},Util.globalTopTip=function(a,b,c,d,e){if(\"undefined\"!=typeof a){null==c&&(c=5e3),null==b&&(b=\"top_success\");var f=$(\"#global_top_dialog\");f.length>0&&f.remove(),f=$('<div id=\"global_top_dialog\" class=\"global_top_dialog\"><div class=\"left_arrow\"></div>'+a+'<div class=\"right_arrow\"></div></div>').appendTo(\"body\"),f.addClass(b),e&&(f.find(\".left_arrow\").remove(),f.find(\".right_arrow\").remove(),f.addClass(\"noarrow\"));var g=f.outerWidth();d?f.css(\"top\",$(d).offset().top+\"px\"):0==$(\"#header\").length&&f.css(\"top\",\"0px\"),f.css({\"margin-left\":-(.5*g)+\"px\"}).show(),setTimeout(function(){f.addClass(\"show\"),setTimeout(function(){f.removeClass(\"show\"),setTimeout(function(){f.fadeOut(\"slow\").remove()},250)},c)},50)}},Util.globalLeftTip=function(a){var b=a;if(\"undefined\"!=typeof b.content){b.delay||(b.delay=5e3),null==b.type&&(b.type=\"left-bot-default\");var c=$(\"#global-leftbot-dialog\");c.length>0&&c.remove(),c=$('<div id=\"global-leftbot-dialog\" class=\"global-leftbot-dialog\">'+b.content+\"</div>\").appendTo(\"body\"),c.addClass(b.type),c.show(),setTimeout(function(){c.addClass(\"show\"),setTimeout(function(){c.removeClass(\"show\"),setTimeout(function(){c.fadeOut(\"slow\").remove()},250)},b.delay)},50)}},Util.loading=function(a){var b={content:\"loading...\",show:1e3,delay:0,model:!1};if(\"string\"==typeof a&&\"close\"==a)return $(\"#top_loading_tip\").remove(),void $(\"#dialog_model\").remove();a=$.extend(b,a),$(\"#top_loading_tip\").length>0&&$(\"#top_loading_tip\").remove();$(\"<div id='top_loading_tip' class='loadingTop'><p><b>\"+a.content+\"</b></p></div>\").appendTo(\"body\");a.model&&($(\"body\").append(\"<div id='dialog_model'></div>\"),$(\"#dialog_model\").css({width:\"100%\",height:\"100%\",position:\"fixed\",top:0,left:0,\"z-index\":a.zIndex-1,opacity:.6,background:\"#FFF\",display:\"none\"})),\"number\"==typeof a.show?$(\"#top_loading_tip\").delay(a.delay).show(0,function(){a.model&&$(\"#dialog_model\").show()}).delay(a.show).fadeOut(500,function(){a.model&&$(\"#dialog_model\").hide()}):a.show===!0&&$(\"#top_loading_tip\").delay(a.delay).show(0,function(){a.model&&$(\"#dialog_model\").show()})},Util.loadingball=function(a){if(a.close)return void $(\".ball-spinner\").hide();var b=a.con;b||(b=$(\"body\"));var c=b.children(\".ball-spinner\");c.length>0?c.show():$('<div class=\"ball-spinner center-middle\"><div class=\"ball1\"></div><div class=\"ball2\"></div><div class=\"ball3\"></div>').appendTo(b),a.css&&\"object\"==typeof a.css&&$(\".ball-spinner>div\").css(a.css)},Util.checkFileCount=function(a,b){Util.ajax({url:\"/view/privatefilecount\",data:b,success:function(b){return b.member?void a():void(b.filecount>=b.totalcount?$.confirm({content:\"<div class='filecheck-con'><span class='icons'>&#xe656;</span><div class='filecheck-right'><div>您的文件数量不足，无法创建新的文件</div><div>您可以 <a target='_blank' href='/upgrade'>去升级账号或者扩容</a></div></div></div>\",onConfirm:function(){a(!1)},okval:\"去看看\"}):a())}})},Util.creatCode=function(a){var b,c,d=[\"abcdefghijklmnopqrstuvwxyz\",\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\"123456789\"],e=\"\";for(c=0;c<a;c++)b=Math.floor(3*Math.random()),e+=d[b].substr(Math.floor(Math.random()*d[b].length),1);return e},Util.loadAvatar=function(a){var b=\"https://processon.io\",c=location.origin.toLowerCase(),d=c.indexOf(\"processon.com\");return d<0&&(b=\"\"),a?'<img src=\"'+b+\"/photo/\"+a+'.png\"/>':'<img src=\"/assets/imgs/on.png\"/>'},Util.filterXss=function(a){return null==a||\"\"==a?\"\":(a=a.toString(),a=a.replace(/</g,\"&lt;\"),a=a.replace(/%3C/g,\"&lt;\"),a=a.replace(/>/g,\"&gt;\"),a=a.replace(/%3E/g,\"&gt;\"),a=a.replace(/'/g,\"&apos;\"),a=a.replace(/\"/g,\"&quot;\"))},Util.restoreXss=function(a){return null==a||\"\"==a?\"\":(a=a.replace(/&lt;/g,\"<\"),a=a.replace(/&gt;/g,\">\"),a=a.replace(/&apos;/g,\"'\"),a=a.replace(/&quot;/g,'\"'))};var fromUrl=document.referrer;fromUrl&&fromUrl.indexOf(\"processon.com\")<0&&Util.setCookie(\"processon_referrer\",encodeURI(fromUrl),1),String.prototype.isEmpty=function(){return this.replace(/(^\\s*)|(\\s*$)/g,\"\").length<=0},String.prototype.notEmpty=function(){return!this.isEmpty()},String.prototype.isEmail=function(){return!(this.isEmpty()||!/^([\\w]+)(.[\\w]+)*@([\\w-]+\\.){1,5}([A-Za-z]){2,4}$/.test(this))},Array.prototype.inArray=function(a){for(var b=0;b<this.length;b++)if(this[b]==a)return!0;return!1},Array.prototype.indexOf=function(a){for(var b=0;b<this.length;b++)if(this[b]==a)return b;return-1},Array.prototype.remove=function(a){var b=this.indexOf(a);b>-1&&this.splice(b,1)},Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c,d;if(null==this)throw new TypeError(\" this is null or not defined\");var e=Object(this),f=e.length>>>0;if(\"[object Function]\"!={}.toString.call(a))throw new TypeError(a+\" is not a function\");for(b&&(c=b),d=0;d<f;){var g;d in e&&(g=e[d],a.call(c,g,d,e)),d++}}),Util.getUrlParams=function(a){var b=new RegExp(\"(^|&)\"+a+\"=([^&]*)(&|$)\",\"i\"),c=window.location.search.substr(1).match(b);return null!=c?unescape(c[2]):null};"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/jquery/canvasparticle.js",
    "content": "var CP=function(){var n=layui.jquery;var b=n('body');b.append('<canvas id=\"canvas\"></canvas>');var a=document.getElementById(\"canvas\");var e=a.getContext(\"2d\");t();window.onresize=t;function t(){a.width=b.width();a.height=b.height();}var o={x:null,y:null,max:2e4};window.onmousemove=function(n){n=n||window.event;o.x=n.clientX;o.y=n.clientY};window.onmouseout=function(n){o.x=null;o.y=null};var r=[];for(var u=0;u<100;u++){var m=Math.random()*a.width;var l=Math.random()*a.height;var w=Math.random()*2-1;var d=Math.random()*2-1;r.push({x:m,y:l,xa:w,ya:d,max:5e3})}function x(){e.clearRect(0,0,a.width,a.height);var n=[o].concat(r);r.forEach(function(t){t.x+=t.xa;t.y+=t.ya;t.xa*=t.x>a.width||t.x<0?-1:1;t.ya*=t.y>a.height||t.y<0?-1:1;e.fillStyle=\"#BF0017\";e.fillRect(t.x-.5,t.y-.5,1,1);for(var i=0;i<n.length;i++){var r=n[i];if(t===r||r.x===null||r.y===null)continue;var u=t.x-r.x;var m=t.y-r.y;var l=u*u+m*m;var w;if(l<r.max){if(r===o&&l>r.max/2){t.x-=u*.03;t.y-=m*.03}w=(r.max-l)/r.max;e.beginPath();e.lineWidth=w/20;e.strokeStyle=\"rgba(190,0,23,\"+(w+.2)+\")\";e.moveTo(t.x,t.y);e.lineTo(r.x,r.y);e.stroke()}}n.splice(n.indexOf(t),1)});setTimeout(x,50);}x();};"
  },
  {
    "path": "static/flow-editor/demo/js/plugin/jquery/scrollbar.js",
    "content": "//** Create scrolling variable if it doesn't exist *//\nif (!Scrolling) var Scrolling = {};\n//Scrollbar constructor\nScrolling.Scrollbar = function (o, s, t) {\n\t//private variables\n\tvar self = this;\n\tvar _components = {};\n\tvar _dimensions = {};\n\tvar _temporary  = {};\n\tvar _hasTween   = t ? true : false;\n\tvar _timer, _ratio;\n\t\n\t//public variables\n\tthis.onMouseDown   = function (){};\n\tthis.onMouseUp     = function (){};\n\tthis.onScroll      = function (){};\n\tthis.scrollAmount  = 5;\n\tthis.scrollSpeed   = 30;\n\tthis.disabled      = false;\n\t\n\t//private functions\n\tfunction initialize () {\n\t\tvar c = _components;\n\t\tvar d = _dimensions;\n\t\tvar g = s.getDimensions();\n\t\t\n\t\tc.up     = findComponent(\"Scrollbar-Up\", o);\n\t\tc.down   = findComponent(\"Scrollbar-Down\", o);\n\t\tc.track  = findComponent(\"Scrollbar-Track\", o);\n\t\tc.handle = findComponent(\"Scrollbar-Handle\", c.track);\n\t\t\n\t\td.trackTop     = findOffsetTop(c.track);\n\t\td.trackHeight  = c.track.offsetHeight;\n\t\td.handleHeight = c.handle.offsetHeight;\n\t\td.x = 0;\n\t\td.y = 0\n\t\t\n\t\tif (_hasTween) t.apply(self);\n\t\t\n\t\taddEvent(s.getContent(), \"mousewheel\", scrollbarWheel);\n\t\taddEvent(o, \"mousedown\", scrollbarClickPrimer);\n\t\t\n\t\tself.reset();\n\t};\n\t\n\tfunction findOffsetTop (o) {\n\t\tvar t = 0;\n\t\tif (o.offsetParent) {\n\t\t\twhile (o.offsetParent) {\n\t\t\t\tt += o.offsetTop;\n\t\t\t\to  = o.offsetParent;\n\t\t\t}\n\t\t}\n\t\treturn t;\n\t};\n\t\n\tfunction addEvent (o, t, f) {\n\t\tif (o.attachEvent) o.attachEvent('on'+ t, f);\n\t\telse o.addEventListener(t, f, false);\n\t};\n\t\n\tfunction removeEvent (o, t, f) {\n\t\tif (o.detachEvent) o.detachEvent('on'+ t, f);\n\t\telse o.removeEventListener(t, f, false);\n\t};\n\t\n\tfunction findComponent (c, o) {\n\t\tvar kids = o.childNodes;\n\t\tfor (var i = 0; i < kids.length; i++) {\n\t\t\tif (kids[i].className && kids[i].className.indexOf(c) >= 0) {\n\t\t\t\treturn kids[i];\n\t\t\t}\n\t\t}\n\t};\n\t\n\tfunction scroll (y) {\n\t\tif (y < 0) y = 0;\n\t\tif (y > _dimensions.trackHeight - _dimensions.handleHeight)\n\t\t\ty = _dimensions.trackHeight - _dimensions.handleHeight;\n\n\t\t_components.handle.style.top = y +\"px\";\n\t\t_dimensions.y = y;\n\t\t\n\t\ts.scrollTo(0, Math.round(_dimensions.y * _ratio));\n\t\tself.onScroll();\n\t};\n\t\n\tfunction scrollbarClickPrimer (e) {\n\t\tif (self.disabled) return false;\n\t\t\n\t\te = e?e:event;\n\t\tif (!e.target) e.target = e.srcElement;\n\t\t\n\t\tscrollbarClick(e.target.className, e);\n\t};\n\t\n\tfunction scrollbarClick (c, e) {\n\t\tvar d  = _dimensions;\n\t\tvar t  = _temporary;\n\t\tvar cy = e.clientY + document.body.scrollTop;\n\t\t\n\t\tif (c.indexOf(\"Scrollbar-Up\") >= 0)\n\t\t\tstartScroll(-self.scrollAmount);\n\t\t\n\t\tif (c.indexOf(\"Scrollbar-Down\") >= 0) \n\t\t\tstartScroll(self.scrollAmount);\n\t\t\t\n\t\tif (c.indexOf(\"Scrollbar-Track\") >= 0)\n\t\t\tif (_hasTween) self.tweenTo((cy - d.trackTop - d.handleHeight / 2) * _ratio);\n\t\t\telse scroll(cy - d.trackTop - d.handleHeight / 2);\t\n\t\t\n\t\tif (c.indexOf(\"Scrollbar-Handle\") >= 0) {\n\t\t\tt.grabPoint = cy - findOffsetTop(_components.handle);\n\t\t\taddEvent(document, \"mousemove\", scrollbarDrag, false);\t\n\t\t}\n\t\t\n\t\tt.target = e.target;\n\t\tt.select = document.onselectstart;\n\t\t\n\t\tdocument.onselectstart = function (){ return false; };\n\t\tself.onMouseDown(e.target, c, e);\n\t\t\n\t\taddEvent(document, \"mouseup\", stopScroll);\n\t};\n\t\n\tfunction scrollbarDrag (e) {\n\t\te = e?e:event;\n\t\tvar d = _dimensions;\n\t\tvar t = parseInt(_components.handle.style.top);\n\t\tvar v = e.clientY + document.body.scrollTop - d.trackTop;\n\t\t\n\t\tif (v >= d.trackHeight - d.handleHeight + _temporary.grabPoint)\n\t\t\tv = d.trackHeight - d.handleHeight;\n\t\t\t\n\t\telse if (v <= _temporary.grabPoint)\n\t\t\tv = 0;\n\t\t\t\n\t\telse v = v - _temporary.grabPoint;\n\t\t\t\n\t\tscroll(v);\n\t};\n\t\n\tfunction scrollbarWheel (e) {\n\t\tif (self.disabled) return false;\n\t\t\n\t\te = e ? e : event;\n\t\tvar dir = 0;\n\t\tif (e.wheelDelta >= 120) dir = -1;\n\t\tif (e.wheelDelta <= -120) dir = 1;\n\n\t\tself.scrollBy(dir * 20);\n\t\te.returnValue = false;\n\t};\n\t\n\tfunction startScroll (y) {\n\t\t_temporary.disty = y;\n\t\t_timer = window.setInterval(function () {\n\t\t\tself.scrollBy(_temporary.disty);\n\t\t}, self.scrollSpeed);\n\t};\n\t\n\tfunction stopScroll (e) {\n\t\te = e?e:event;\n\t\t\n\t\tremoveEvent(document, \"mousemove\", scrollbarDrag);\n\t\tremoveEvent(document, \"mouseup\", stopScroll);\n\t\t\n\t\tdocument.onselectstart = _temporary.select;\n\t\tif (_timer) window.clearInterval(_timer);\n\t\t\n\t\tself.onMouseUp(_temporary.target, _temporary.target.className, e);\n\t};\n\t\n\t//public functions\n\tthis.reset = function () {\n\t\tvar d = _dimensions;\n\t\tvar c = _components;\n\t\tvar g = s.getDimensions();\n\t\t\n\t\t_ratio = (g.theight - g.vheight) / (d.trackHeight - d.handleHeight);\n\t\t\n\t\tc.handle.ondragstart = function (){ return false; };\n\t\tc.handle.onmousedown = function (){ return false; };\n\t\tc.handle.style.top   = \"0px\";\n\t\td.y = 0;\n\t\t\n\t\ts.reset();\n\t\tscroll(0);\n\t\t\n\t\tif (g.theight < g.vheight) {\n\t\t\tthis.disabled = true;\n\t\t\to.className  += \" Scrollbar-Disabled\";\n\t\t}\n\t};\n\t\n\tthis.scrollTo = function (y) {\n\t\tscroll(y / _ratio);\n\t};\n\t\n\tthis.scrollBy = function (y) {\n\t\tscroll((s.getDimensions().y + y) / _ratio);\n\t};\n\t\n\tthis.swapContent = function (n, w, h) {\n\t\to = n;\n\t\ts.swapContent(o, w, h);\n\t\tinitialize();\n\t};\n\t\n\tthis.disable = function () {\n\t\tthis.disabled = true;\n\t\to.className  += \"Scrollbar-Disabled\";\n\t};\n\t\n\tthis.enable = function () {\n\t\tthis.disabled = false;\n\t\to.className = o.className.replace(/Scrollbar\\-Disabled/, \"\");\n\t};\n\t\n\tthis.getContent = function () {\n\t\treturn s.getContent();\n\t};\n\t\n\tthis.getComponents = function () {\n\t\treturn _components;\n\t};\n\t\n\tthis.getDimensions = function () {\n\t\tvar d = s.getDimensions();\n\t\td.trackHeight  = _dimensions.trackHeight;\n\t\td.handleHeight = _dimensions.handleHeight;\n\t\t\n\t\treturn d;\n\t};\n\t\n\tinitialize();\n};\n\n//----------------------------------------\n\n\n\n//Scroller constructor\nScrolling.Scroller = function (o, w, h, t) {\n\t//get the container\n\tvar list = o.getElementsByTagName(\"div\");\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (list[i].className.indexOf(\"Scroller-Container\") > -1) {\n\t\t\to = list[i];\n\t\t}\n\t}\n\t\n\t//private variables\n\tvar self  = this;\n\tvar _vwidth   = w;\n\tvar _vheight  = h;\n\tvar _twidth   = o.offsetWidth\n\tvar _theight  = o.offsetHeight;\n\tvar _hasTween = t ? true : false;\n\tvar _timer, _x, _y;\n\t\n\t//public variables\n\tthis.onScrollStart = function (){};\n\tthis.onScrollStop  = function (){};\n\tthis.onScroll      = function (){};\n\tthis.scrollSpeed   = 30;\n\t\n\t//private functions\n\tfunction setPosition (x, y) {\n\t\tif (x < _vwidth - _twidth) \n\t\t\tx = _vwidth - _twidth;\n\t\tif (x > 0) x = 0;\n\t\tif (y < _vheight - _theight) \n\t\t\ty = _vheight - _theight;\n\t\tif (y > 0) y = 0;\n\t\t\n\t\t_x = x;\n\t\t_y = y;\n\t\t\n\t\to.style.left = _x +\"px\";\n\t\to.style.top  = _y +\"px\";\n\t};\n\t\n\t//public functions\n\tthis.scrollBy = function (x, y) { \n\t\tsetPosition(_x - x, _y - y);\n\t\tthis.onScroll();\n\t};\n\t\n\tthis.scrollTo = function (x, y) { \n\t\tsetPosition(-x, -y);\n\t\tthis.onScroll();\n\t};\n\t\n\tthis.startScroll = function (x, y) {\n\t\tthis.stopScroll();\n\t\tthis.onScrollStart();\n\t\t_timer = window.setInterval(\n\t\t\tfunction () { self.scrollBy(x, y); }, this.scrollSpeed\n\t\t);\n\t};\n\t\t\n\tthis.stopScroll  = function () { \n\t\tif (_timer) window.clearInterval(_timer);\n\t\tthis.onScrollStop();\n\t};\n\t\n\tthis.reset = function () {\n\t\t_twidth  = o.offsetWidth\n\t\t_theight = o.offsetHeight;\n\t\t_x = 0;\n\t\t_y = 0;\n\t\t\n\t\to.style.left = \"0px\";\n\t\to.style.top  = \"0px\";\n\t\t\n\t\tif (_hasTween) t.apply(this);\n\t};\n\t\n\tthis.swapContent = function (c, w, h) {\n\t\to = c;\n\t\tvar list = o.getElementsByTagName(\"div\");\n\t\tfor (var i = 0; i < list.length; i++) {\n\t\t\tif (list[i].className.indexOf(\"Scroller-Container\") > -1) {\n\t\t\t\to = list[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (w) _vwidth  = w;\n\t\tif (h) _vheight = h;\n\t\treset();\n\t};\n\t\n\tthis.getDimensions = function () {\n\t\treturn {\n\t\t\tvwidth  : _vwidth,\n\t\t\tvheight : _vheight,\n\t\t\ttwidth  : _twidth,\n\t\t\ttheight : _theight,\n\t\t\tx : -_x, y : -_y\n\t\t};\n\t};\n\t\n\tthis.getContent = function () {\n\t\treturn o;\n\t};\n\t\n\tthis.reset();\n};\n\n\n//----------------------------------------\n\n\n//ScrollTween constructor\nScrolling.ScrollTween = function () {\n\t//private variables\n\tvar self    = this;\n\tvar _steps  = [0,25,50,70,85,95,97,99,100];\n\tvar _values = [];\n\tvar _idle   = true;\n\tvar o, _inc, _timer;\n\t\n\t//private functions\n\tfunction tweenTo (y) {\n\t\tif (!_idle) return false;\n\t\t\n\t\tvar d = o.getDimensions();\n\t\tif (y < 0) y = 0;\n\t\tif (y > d.theight - d.vheight)\n\t\t\ty = d.theight - d.vheight;\n\t\t\t\n\t\tvar dist = y - d.y;\n\t\t_inc     = 0;\n\t\t_timer   = null;\n\t\t_values  = [];\n\t\t_idle    = false;\n\t\t\n\t\tfor (var i = 0; i < _steps.length; i++) {\n\t\t\t_values[i] = Math.round(d.y + dist * (_steps[i] / 100));\n\t\t}\n\n\t\t_timer = window.setInterval(function () {\n\t\t\to.scrollTo(_values[_inc]); \n\t\t\tif (_inc == _steps.length - 1) {\n\t\t\t\twindow.clearInterval(_timer);\n\t\t\t\t_idle = true;\n\t\t\t} else _inc++;\n\t\t}, o.stepSpeed);\n\t};\n\t\n\tfunction tweenBy (y) {\n\t\to.tweenTo(o.getDimensions().y + y);\n\t};\n\t\n\tfunction setSteps (s) {\n\t\t_steps = s;\n\t};\n\t\n\t//public functions\n\tthis.apply = function (p) {\n\t\to = p;\n\t\to.tweenTo   = tweenTo;\n\t\to.tweenBy   = tweenBy;\n\t\to.setSteps  = setSteps;\n\t\to.stepSpeed = 30;\n\t};\n};\n\n////////////////////  ui  ////////////////////\nvar CM = {};\nCM.intro = {\n\tstart: function() {\n\t\tif ($('#dv_scroll').length) CM.intro.iniScr();\n\t}\n\t,\n\tiniScr: function(){\n\t\tvar scroller  = null;\n\t\tvar scrollbar = null;\n\t\tscroller  = new Scrolling.Scroller(document.getElementById('dv_scroll'), 430, 209);\n\t\tscrollbar = new Scrolling.Scrollbar(document.getElementById('dv_scroll_bar'), scroller, new Scrolling.ScrollTween());\n\t}\n};\n////////////////////  start  ////////////////////\n$(function() {\n\tCM.intro.start();\n});\n"
  },
  {
    "path": "static/font/demo.css",
    "content": "/* Logo 字体 */\n@font-face {\n  font-family: \"iconfont logo\";\n  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');\n  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),\n    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),\n    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),\n    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');\n}\n\n.logo {\n  font-family: \"iconfont logo\";\n  font-size: 160px;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n/* tabs */\n.nav-tabs {\n  position: relative;\n}\n\n.nav-tabs .nav-more {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  height: 42px;\n  line-height: 42px;\n  color: #666;\n}\n\n#tabs {\n  border-bottom: 1px solid #eee;\n}\n\n#tabs li {\n  cursor: pointer;\n  width: 100px;\n  height: 40px;\n  line-height: 40px;\n  text-align: center;\n  font-size: 16px;\n  border-bottom: 2px solid transparent;\n  position: relative;\n  z-index: 1;\n  margin-bottom: -1px;\n  color: #666;\n}\n\n\n#tabs .active {\n  border-bottom-color: #f00;\n  color: #222;\n}\n\n.tab-container .content {\n  display: none;\n}\n\n/* 页面布局 */\n.main {\n  padding: 30px 100px;\n  width: 960px;\n  margin: 0 auto;\n}\n\n.main .logo {\n  color: #333;\n  text-align: left;\n  margin-bottom: 30px;\n  line-height: 1;\n  height: 110px;\n  margin-top: -50px;\n  overflow: hidden;\n  *zoom: 1;\n}\n\n.main .logo a {\n  font-size: 160px;\n  color: #333;\n}\n\n.helps {\n  margin-top: 40px;\n}\n\n.helps pre {\n  padding: 20px;\n  margin: 10px 0;\n  border: solid 1px #e7e1cd;\n  background-color: #fffdef;\n  overflow: auto;\n}\n\n.icon_lists {\n  width: 100% !important;\n  overflow: hidden;\n  *zoom: 1;\n}\n\n.icon_lists li {\n  width: 100px;\n  margin-bottom: 10px;\n  margin-right: 20px;\n  text-align: center;\n  list-style: none !important;\n  cursor: default;\n}\n\n.icon_lists li .code-name {\n  line-height: 1.2;\n}\n\n.icon_lists .icon {\n  display: block;\n  height: 100px;\n  line-height: 100px;\n  font-size: 42px;\n  margin: 10px auto;\n  color: #333;\n  -webkit-transition: font-size 0.25s linear, width 0.25s linear;\n  -moz-transition: font-size 0.25s linear, width 0.25s linear;\n  transition: font-size 0.25s linear, width 0.25s linear;\n}\n\n.icon_lists .icon:hover {\n  font-size: 100px;\n}\n\n.icon_lists .svg-icon {\n  /* 通过设置 font-size 来改变图标大小 */\n  width: 1em;\n  /* 图标和文字相邻时，垂直对齐 */\n  vertical-align: -0.15em;\n  /* 通过设置 color 来改变 SVG 的颜色/fill */\n  fill: currentColor;\n  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示\n      normalize.css 中也包含这行 */\n  overflow: hidden;\n}\n\n.icon_lists li .name,\n.icon_lists li .code-name {\n  color: #666;\n}\n\n/* markdown 样式 */\n.markdown {\n  color: #666;\n  font-size: 14px;\n  line-height: 1.8;\n}\n\n.highlight {\n  line-height: 1.5;\n}\n\n.markdown img {\n  vertical-align: middle;\n  max-width: 100%;\n}\n\n.markdown h1 {\n  color: #404040;\n  font-weight: 500;\n  line-height: 40px;\n  margin-bottom: 24px;\n}\n\n.markdown h2,\n.markdown h3,\n.markdown h4,\n.markdown h5,\n.markdown h6 {\n  color: #404040;\n  margin: 1.6em 0 0.6em 0;\n  font-weight: 500;\n  clear: both;\n}\n\n.markdown h1 {\n  font-size: 28px;\n}\n\n.markdown h2 {\n  font-size: 22px;\n}\n\n.markdown h3 {\n  font-size: 16px;\n}\n\n.markdown h4 {\n  font-size: 14px;\n}\n\n.markdown h5 {\n  font-size: 12px;\n}\n\n.markdown h6 {\n  font-size: 12px;\n}\n\n.markdown hr {\n  height: 1px;\n  border: 0;\n  background: #e9e9e9;\n  margin: 16px 0;\n  clear: both;\n}\n\n.markdown p {\n  margin: 1em 0;\n}\n\n.markdown>p,\n.markdown>blockquote,\n.markdown>.highlight,\n.markdown>ol,\n.markdown>ul {\n  width: 80%;\n}\n\n.markdown ul>li {\n  list-style: circle;\n}\n\n.markdown>ul li,\n.markdown blockquote ul>li {\n  margin-left: 20px;\n  padding-left: 4px;\n}\n\n.markdown>ul li p,\n.markdown>ol li p {\n  margin: 0.6em 0;\n}\n\n.markdown ol>li {\n  list-style: decimal;\n}\n\n.markdown>ol li,\n.markdown blockquote ol>li {\n  margin-left: 20px;\n  padding-left: 4px;\n}\n\n.markdown code {\n  margin: 0 3px;\n  padding: 0 5px;\n  background: #eee;\n  border-radius: 3px;\n}\n\n.markdown strong,\n.markdown b {\n  font-weight: 600;\n}\n\n.markdown>table {\n  border-collapse: collapse;\n  border-spacing: 0px;\n  empty-cells: show;\n  border: 1px solid #e9e9e9;\n  width: 95%;\n  margin-bottom: 24px;\n}\n\n.markdown>table th {\n  white-space: nowrap;\n  color: #333;\n  font-weight: 600;\n}\n\n.markdown>table th,\n.markdown>table td {\n  border: 1px solid #e9e9e9;\n  padding: 8px 16px;\n  text-align: left;\n}\n\n.markdown>table th {\n  background: #F7F7F7;\n}\n\n.markdown blockquote {\n  font-size: 90%;\n  color: #999;\n  border-left: 4px solid #e9e9e9;\n  padding-left: 0.8em;\n  margin: 1em 0;\n}\n\n.markdown blockquote p {\n  margin: 0;\n}\n\n.markdown .anchor {\n  opacity: 0;\n  transition: opacity 0.3s ease;\n  margin-left: 8px;\n}\n\n.markdown .waiting {\n  color: #ccc;\n}\n\n.markdown h1:hover .anchor,\n.markdown h2:hover .anchor,\n.markdown h3:hover .anchor,\n.markdown h4:hover .anchor,\n.markdown h5:hover .anchor,\n.markdown h6:hover .anchor {\n  opacity: 1;\n  display: inline-block;\n}\n\n.markdown>br,\n.markdown>p>br {\n  clear: both;\n}\n\n\n.hljs {\n  display: block;\n  background: white;\n  padding: 0.5em;\n  color: #333333;\n  overflow-x: auto;\n}\n\n.hljs-comment,\n.hljs-meta {\n  color: #969896;\n}\n\n.hljs-string,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-strong,\n.hljs-emphasis,\n.hljs-quote {\n  color: #df5000;\n}\n\n.hljs-keyword,\n.hljs-selector-tag,\n.hljs-type {\n  color: #a71d5d;\n}\n\n.hljs-literal,\n.hljs-symbol,\n.hljs-bullet,\n.hljs-attribute {\n  color: #0086b3;\n}\n\n.hljs-section,\n.hljs-name {\n  color: #63a35c;\n}\n\n.hljs-tag {\n  color: #333333;\n}\n\n.hljs-title,\n.hljs-attr,\n.hljs-selector-id,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo {\n  color: #795da3;\n}\n\n.hljs-addition {\n  color: #55a532;\n  background-color: #eaffea;\n}\n\n.hljs-deletion {\n  color: #bd2c00;\n  background-color: #ffecec;\n}\n\n.hljs-link {\n  text-decoration: underline;\n}\n\n/* 代码高亮 */\n/* PrismJS 1.15.0\nhttps://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: black;\n  background: none;\n  text-shadow: 0 1px white;\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n\n  -moz-tab-size: 4;\n  -o-tab-size: 4;\n  tab-size: 4;\n\n  -webkit-hyphens: none;\n  -moz-hyphens: none;\n  -ms-hyphens: none;\n  hyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection,\npre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection,\ncode[class*=\"language-\"] ::-moz-selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n\npre[class*=\"language-\"]::selection,\npre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection,\ncode[class*=\"language-\"] ::selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n\n@media print {\n\n  code[class*=\"language-\"],\n  pre[class*=\"language-\"] {\n    text-shadow: none;\n  }\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: .5em 0;\n  overflow: auto;\n}\n\n:not(pre)>code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #f5f2f0;\n}\n\n/* Inline code */\n:not(pre)>code[class*=\"language-\"] {\n  padding: .1em;\n  border-radius: .3em;\n  white-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: slategray;\n}\n\n.token.punctuation {\n  color: #999;\n}\n\n.namespace {\n  opacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n  color: #9a6e3a;\n  background: hsla(0, 0%, 100%, .5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n  color: #07a;\n}\n\n.token.function,\n.token.class-name {\n  color: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n  color: #e90;\n}\n\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n\n.token.italic {\n  font-style: italic;\n}\n\n.token.entity {\n  cursor: help;\n}\n"
  },
  {
    "path": "static/font/demo_index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"utf-8\"/>\n  <title>IconFont Demo</title>\n  <link rel=\"shortcut icon\" href=\"https://gtms04.alicdn.com/tps/i4/TB1_oz6GVXXXXaFXpXXJDFnIXXX-64-64.ico\" type=\"image/x-icon\"/>\n  <link rel=\"stylesheet\" href=\"https://g.alicdn.com/thx/cube/1.3.2/cube.min.css\">\n  <link rel=\"stylesheet\" href=\"demo.css\">\n  <link rel=\"stylesheet\" href=\"iconfont.css\">\n  <script src=\"iconfont.js\"></script>\n  <!-- jQuery -->\n  <script src=\"https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js\"></script>\n  <!-- 代码高亮 -->\n  <script src=\"https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js\"></script>\n</head>\n<body>\n  <div class=\"main\">\n    <h1 class=\"logo\"><a href=\"https://www.iconfont.cn/\" title=\"iconfont 首页\" target=\"_blank\">&#xe86b;</a></h1>\n    <div class=\"nav-tabs\">\n      <ul id=\"tabs\" class=\"dib-box\">\n        <li class=\"dib active\"><span>Unicode</span></li>\n        <li class=\"dib\"><span>Font class</span></li>\n        <li class=\"dib\"><span>Symbol</span></li>\n      </ul>\n      \n      <a href=\"https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=1268923\" target=\"_blank\" class=\"nav-more\">查看项目</a>\n      \n    </div>\n    <div class=\"tab-container\">\n      <div class=\"content unicode\" style=\"display: block;\">\n          <ul class=\"icon_lists dib-box\">\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe69c;</span>\n                <div class=\"name\">单选框</div>\n                <div class=\"code-name\">&amp;#xe69c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe62b;</span>\n                <div class=\"name\">标题</div>\n                <div class=\"code-name\">&amp;#xe62b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c7;</span>\n                <div class=\"name\">布局</div>\n                <div class=\"code-name\">&amp;#xe6c7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61c;</span>\n                <div class=\"name\">多选框</div>\n                <div class=\"code-name\">&amp;#xe61c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe69d;</span>\n                <div class=\"name\">符号-图片上传</div>\n                <div class=\"code-name\">&amp;#xe69d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6e7;</span>\n                <div class=\"name\">多行文本</div>\n                <div class=\"code-name\">&amp;#xe6e7;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe673;</span>\n                <div class=\"name\">开关</div>\n                <div class=\"code-name\">&amp;#xe673;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe64d;</span>\n                <div class=\"name\">时间选择器</div>\n                <div class=\"code-name\">&amp;#xe64d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe62a;</span>\n                <div class=\"name\">单行文本</div>\n                <div class=\"code-name\">&amp;#xe62a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe617;</span>\n                <div class=\"name\">下拉选择</div>\n                <div class=\"code-name\">&amp;#xe617;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe620;</span>\n                <div class=\"name\">计数标签</div>\n                <div class=\"code-name\">&amp;#xe620;</div>\n              </li>\n          \n          </ul>\n          <div class=\"article markdown\">\n          <h2 id=\"unicode-\">Unicode 引用</h2>\n          <hr>\n\n          <p>Unicode 是字体在网页端最原始的应用方式，特点是：</p>\n          <ul>\n            <li>兼容性最好，支持 IE6+，及所有现代浏览器。</li>\n            <li>支持按字体的方式去动态调整图标大小，颜色等等。</li>\n            <li>但是因为是字体，所以不支持多色。只能使用平台里单色的图标，就算项目里有多色图标也会自动去色。</li>\n          </ul>\n          <blockquote>\n            <p>注意：新版 iconfont 支持多色图标，这些多色图标在 Unicode 模式下将不能使用，如果有需求建议使用symbol 的引用方式</p>\n          </blockquote>\n          <p>Unicode 使用步骤如下：</p>\n          <h3 id=\"-font-face\">第一步：拷贝项目下面生成的 <code>@font-face</code></h3>\n<pre><code class=\"language-css\"\n>@font-face {\n  font-family: 'iconfont';\n  src: url('iconfont.eot');\n  src: url('iconfont.eot?#iefix') format('embedded-opentype'),\n      url('iconfont.woff2') format('woff2'),\n      url('iconfont.woff') format('woff'),\n      url('iconfont.ttf') format('truetype'),\n      url('iconfont.svg#iconfont') format('svg');\n}\n</code></pre>\n          <h3 id=\"-iconfont-\">第二步：定义使用 iconfont 的样式</h3>\n<pre><code class=\"language-css\"\n>.iconfont {\n  font-family: \"iconfont\" !important;\n  font-size: 16px;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n</code></pre>\n          <h3 id=\"-\">第三步：挑选相应图标并获取字体编码，应用于页面</h3>\n<pre>\n<code class=\"language-html\"\n>&lt;span class=\"iconfont\"&gt;&amp;#x33;&lt;/span&gt;\n</code></pre>\n          <blockquote>\n            <p>\"iconfont\" 是你项目下的 font-family。可以通过编辑项目查看，默认是 \"iconfont\"。</p>\n          </blockquote>\n          </div>\n      </div>\n      <div class=\"content font-class\">\n        <ul class=\"icon_lists dib-box\">\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-danxuankuang\"></span>\n            <div class=\"name\">\n              单选框\n            </div>\n            <div class=\"code-name\">.icon-danxuankuang\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-biaoti\"></span>\n            <div class=\"name\">\n              标题\n            </div>\n            <div class=\"code-name\">.icon-biaoti\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ai211\"></span>\n            <div class=\"name\">\n              布局\n            </div>\n            <div class=\"code-name\">.icon-ai211\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-duoxuankuang1\"></span>\n            <div class=\"name\">\n              多选框\n            </div>\n            <div class=\"code-name\">.icon-duoxuankuang1\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tupianshangchuan\"></span>\n            <div class=\"name\">\n              符号-图片上传\n            </div>\n            <div class=\"code-name\">.icon-tupianshangchuan\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-duohangwenben\"></span>\n            <div class=\"name\">\n              多行文本\n            </div>\n            <div class=\"code-name\">.icon-duohangwenben\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-kaiguan\"></span>\n            <div class=\"name\">\n              开关\n            </div>\n            <div class=\"code-name\">.icon-kaiguan\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-shijianxuanzeqi\"></span>\n            <div class=\"name\">\n              时间选择器\n            </div>\n            <div class=\"code-name\">.icon-shijianxuanzeqi\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-danhangwenben\"></span>\n            <div class=\"name\">\n              单行文本\n            </div>\n            <div class=\"code-name\">.icon-danhangwenben\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-xialaxuanze\"></span>\n            <div class=\"name\">\n              下拉选择\n            </div>\n            <div class=\"code-name\">.icon-xialaxuanze\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-jishubiaoqian\"></span>\n            <div class=\"name\">\n              计数标签\n            </div>\n            <div class=\"code-name\">.icon-jishubiaoqian\n            </div>\n          </li>\n          \n        </ul>\n        <div class=\"article markdown\">\n        <h2 id=\"font-class-\">font-class 引用</h2>\n        <hr>\n\n        <p>font-class 是 Unicode 使用方式的一种变种，主要是解决 Unicode 书写不直观，语意不明确的问题。</p>\n        <p>与 Unicode 使用方式相比，具有如下特点：</p>\n        <ul>\n          <li>兼容性良好，支持 IE8+，及所有现代浏览器。</li>\n          <li>相比于 Unicode 语意明确，书写更直观。可以很容易分辨这个 icon 是什么。</li>\n          <li>因为使用 class 来定义图标，所以当要替换图标时，只需要修改 class 里面的 Unicode 引用。</li>\n          <li>不过因为本质上还是使用的字体，所以多色图标还是不支持的。</li>\n        </ul>\n        <p>使用步骤如下：</p>\n        <h3 id=\"-fontclass-\">第一步：引入项目下面生成的 fontclass 代码：</h3>\n<pre><code class=\"language-html\">&lt;link rel=\"stylesheet\" href=\"./iconfont.css\"&gt;\n</code></pre>\n        <h3 id=\"-\">第二步：挑选相应图标并获取类名，应用于页面：</h3>\n<pre><code class=\"language-html\">&lt;span class=\"iconfont icon-xxx\"&gt;&lt;/span&gt;\n</code></pre>\n        <blockquote>\n          <p>\"\n            iconfont\" 是你项目下的 font-family。可以通过编辑项目查看，默认是 \"iconfont\"。</p>\n        </blockquote>\n      </div>\n      </div>\n      <div class=\"content symbol\">\n          <ul class=\"icon_lists dib-box\">\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-danxuankuang\"></use>\n                </svg>\n                <div class=\"name\">单选框</div>\n                <div class=\"code-name\">#icon-danxuankuang</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-biaoti\"></use>\n                </svg>\n                <div class=\"name\">标题</div>\n                <div class=\"code-name\">#icon-biaoti</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ai211\"></use>\n                </svg>\n                <div class=\"name\">布局</div>\n                <div class=\"code-name\">#icon-ai211</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-duoxuankuang1\"></use>\n                </svg>\n                <div class=\"name\">多选框</div>\n                <div class=\"code-name\">#icon-duoxuankuang1</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tupianshangchuan\"></use>\n                </svg>\n                <div class=\"name\">符号-图片上传</div>\n                <div class=\"code-name\">#icon-tupianshangchuan</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-duohangwenben\"></use>\n                </svg>\n                <div class=\"name\">多行文本</div>\n                <div class=\"code-name\">#icon-duohangwenben</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-kaiguan\"></use>\n                </svg>\n                <div class=\"name\">开关</div>\n                <div class=\"code-name\">#icon-kaiguan</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-shijianxuanzeqi\"></use>\n                </svg>\n                <div class=\"name\">时间选择器</div>\n                <div class=\"code-name\">#icon-shijianxuanzeqi</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-danhangwenben\"></use>\n                </svg>\n                <div class=\"name\">单行文本</div>\n                <div class=\"code-name\">#icon-danhangwenben</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-xialaxuanze\"></use>\n                </svg>\n                <div class=\"name\">下拉选择</div>\n                <div class=\"code-name\">#icon-xialaxuanze</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-jishubiaoqian\"></use>\n                </svg>\n                <div class=\"name\">计数标签</div>\n                <div class=\"code-name\">#icon-jishubiaoqian</div>\n            </li>\n          \n          </ul>\n          <div class=\"article markdown\">\n          <h2 id=\"symbol-\">Symbol 引用</h2>\n          <hr>\n\n          <p>这是一种全新的使用方式，应该说这才是未来的主流，也是平台目前推荐的用法。相关介绍可以参考这篇<a href=\"\">文章</a>\n            这种用法其实是做了一个 SVG 的集合，与另外两种相比具有如下特点：</p>\n          <ul>\n            <li>支持多色图标了，不再受单色限制。</li>\n            <li>通过一些技巧，支持像字体那样，通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>\n            <li>兼容性较差，支持 IE9+，及现代浏览器。</li>\n            <li>浏览器渲染 SVG 的性能一般，还不如 png。</li>\n          </ul>\n          <p>使用步骤如下：</p>\n          <h3 id=\"-symbol-\">第一步：引入项目下面生成的 symbol 代码：</h3>\n<pre><code class=\"language-html\">&lt;script src=\"./iconfont.js\"&gt;&lt;/script&gt;\n</code></pre>\n          <h3 id=\"-css-\">第二步：加入通用 CSS 代码（引入一次就行）：</h3>\n<pre><code class=\"language-html\">&lt;style&gt;\n.icon {\n  width: 1em;\n  height: 1em;\n  vertical-align: -0.15em;\n  fill: currentColor;\n  overflow: hidden;\n}\n&lt;/style&gt;\n</code></pre>\n          <h3 id=\"-\">第三步：挑选相应图标并获取类名，应用于页面：</h3>\n<pre><code class=\"language-html\">&lt;svg class=\"icon\" aria-hidden=\"true\"&gt;\n  &lt;use xlink:href=\"#icon-xxx\"&gt;&lt;/use&gt;\n&lt;/svg&gt;\n</code></pre>\n          </div>\n      </div>\n\n    </div>\n  </div>\n  <script>\n  $(document).ready(function () {\n      $('.tab-container .content:first').show()\n\n      $('#tabs li').click(function (e) {\n        var tabContent = $('.tab-container .content')\n        var index = $(this).index()\n\n        if ($(this).hasClass('active')) {\n          return\n        } else {\n          $('#tabs li').removeClass('active')\n          $(this).addClass('active')\n\n          tabContent.hide().eq(index).fadeIn()\n        }\n      })\n    })\n  </script>\n</body>\n</html>\n"
  },
  {
    "path": "static/font/iconfont.css",
    "content": "@font-face {font-family: \"iconfont\";\n  src: url('iconfont.eot?t=1561901602427'); /* IE9 */\n  src: url('iconfont.eot?t=1561901602427#iefix') format('embedded-opentype'), /* IE6-IE8 */\n  url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAfIAAsAAAAADlAAAAd4AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCEPAqNQIsOATYCJAMwCxoABCAFhG0HgUQbPAyjooZRTiRkf4VxC0+ajNXErfz5YfTG9BJi5JQhMx1IgAT4AAAAAADACwAAcIEn4AkCQCDRsmXKbn9qU6VKfBWGbiQS4VFdKJRBIjTCHEKhb3g87V/SdEhKzupAZR2gg9r7/6d3Tj40s2fj0q32xMK7pKg4KV+98vInF5awWEiAswoePm9v27/Rbkoj3EUJBNQl2E0oiTSpAAJq2/z/38/lqYVmXLytF9FnnH+HiqRlEiFyCEnE45aommh4Ch0F3SRliElx+cb1EFBtcQKNp49v6HImFfTZSQnoZrJ5jU3krEg5NpALupyf9RjAS/D58jPaBRUK5o2utkcPbj7xh0aMFfmlghivEOA3AgPHAM6Lm1r8hRaR44BV2mDEE2ABhyU+1k0UzTpOOm3Pg8PfOEJROKi7pzZLxYKlEMkk/+IBKtcUKktEYCKkAtZZ1WdLwyB2MlExKBBXuRn89dwBSAF3BKLgSUAy+DQgCbwbiID3AAngB4EY+EPEEtc0eAXgCNCOnBfTeIfZnTaawAVmL0oKje2Q3Ved2QFsvDKztre6vLHSbFqeqvGGhdlYS38PsNaeu5d5/j5+8aH6woPZFy5kXbyoPn8eP3eu0vMm3oIHWxfBGA2DGEBGATAXRgEDB6qOkRHMlhJDApRshSAMUlckDEfburrGMGpCmol1De44gpKHtq0iVm8/jFEXLdH/N6Hkjtl8wANnQy5wJEZDyzE6OiNYp5RJY8xqJQWZWW7ix9uFeItQ2EKJxW3ivDZdAWvDGRN631kf9vrTSqT71ExyHCDVBMam9BBdN4lq+8Trf2KCEoeAlokRPQQFtVB6naiya9Bh8oDV8CrQc9qLOpqlE7e1LewiRLuAnGziDG+TIB3brdkQq3VyCKIfik7srrBzx/RZD1TjFDZiW9WmmyQF5Vmtw4NfuEPNpXOCuQhHm4lNBR2UHOok686dyzwpzuQW5hwg0Sa2C/dwPP/QqMw8d0Fdvt/F88WQrlM0Oi6ACeH/Qpu0bHPYiLitS6Tm0gYWeWIXbXVtA5k1ANN1YtQweiKTa2b0/0j5bVihMdvODrC/kxehsziEHBY4tOkxajtxLnAMow10bBmh9H2TJvOGPCKrrBy2c2i7ovtuBsS4FRiZkLZvQ8ktpnubTiFCIXISOSUUnKKfpBMJOZVZTyhk0iZ2ID9+NHdY+OO7W4R8/54M/P5Db4fiy8riUQmVlkF+tLSUvPmyUjDtswpXzYgOju4yDE4KduAmccn0pHRXD9cB4aVf3vGaGTr/AYbgGH+xrwevak7SnHtnfjXMOE3NKZfn/eJ61PSxU7yVmRceGaKKijR3i7B/FRlgIDEz82i+DEIB4ewH/sy9w7rDZN6Ov62Iu82y7uP8ivUKsG+Xtj96WlWzVGZhvPRXwsLdPJ2R7p7k/rPRIc0JIQjciDDCiWDV8R8sLotgny5QnXZYIl+Sk7NUaiFttziAwbsA+0BFh9RSuvTnxxrzwifGl91RGqqalS71Qcx20X5Dppnk7Z5Vt6IXoF+FEqiq3ywU3IIZoUyYvYsNM/tDd6Gqe9UreuRFi6ZOhWAH58DADolK2mFtPXVGW2pHX1+NEZg5AxWgS/Ir8936j2s02v81x2k2/OM8G9CQXQEtWgSXw2VeQQXsZntTtjK4fD2IthmHm6fCWTBOYnBY/hPwvz001X/lSv/UMWMm0/gY84e4+ewFa9fNZ67Fnj7F1jIPzWl+jQ38i8xjG8BcwOVBEdDChbMiF34K3gJmjqMrFtUI8qdXHFuO9hi/IRDW78St/QAIyEuzSDHTas1TLNLX2x6/QqtJMc8XbEi3QL5GY8g066db0Ndm6Gn37iHLEL0n6c3C+/fcyDLynrYNHj324nty+X4npW4XX+4RqeDZ8JkNpOrF6x0zzxCniDBznq/Jv4dkInK51TTa+VSZ+QjE5nD+VgmP/tgyLVAI4kSwZ5cBa8BMFgaKXu0LjO32yJoBwA4dBYy3Gv1mFsh3ZQBbum6nU3MBxkONTeZLUxC2R/WRvci10E/Ddvy8Pez/X734z87fxYrfYBakeiQczNeSKVoHPgSBlgtcC5k5PZS5cfy9Xd0j1qygJhM+AeVzbswhFlsHvjpiMQGVbILJtmWuOoagOYEoO4XqSMzJzbypGiQKcGghA2LGSlBTvsHMOC5z1XUIljyHaGYDqoe0ec5mN7F7i6JAj4/nnKROfTuvYGHfT1RlLGw6FNh/0eZUx4fuIN/2jCnaMQ7IJ2pUFD73rU74E3MzjGPNM6tDlIUbFEV21u/7tANdqRNgLllIKLy0Hq7U3L2GpKX85Qus8PGfkFKKCbZmStX9F7JytHbOnQu3FrJnlraaci2Dp5lQRqaTQh93RltagosmhSi2mjWumb5VCEkFV3WPxswZV7JUZVvmzi+SJy54iNOY8ehJxcQlSJQkWYpUadJlQp8inZUijZw7qPaYhC6oJWg0HC57paZuMFwryoxEmgcplIHuq/KRiimmY7uxEwlSlB6reUAhDde4QEPLQ09o0cOZkYgFvctySHlQTkZM2ygAAAAA') format('woff2'),\n  url('iconfont.woff?t=1561901602427') format('woff'),\n  url('iconfont.ttf?t=1561901602427') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */\n  url('iconfont.svg?t=1561901602427#iconfont') format('svg'); /* iOS 4.1- */\n}\n\n.iconfont {\n  font-family: \"iconfont\" !important;\n  font-size: 16px;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.icon-danxuankuang:before {\n  content: \"\\e69c\";\n}\n\n.icon-biaoti:before {\n  content: \"\\e62b\";\n}\n\n.icon-ai211:before {\n  content: \"\\e6c7\";\n}\n\n.icon-duoxuankuang1:before {\n  content: \"\\e61c\";\n}\n\n.icon-tupianshangchuan:before {\n  content: \"\\e69d\";\n}\n\n.icon-duohangwenben:before {\n  content: \"\\e6e7\";\n}\n\n.icon-kaiguan:before {\n  content: \"\\e673\";\n}\n\n.icon-shijianxuanzeqi:before {\n  content: \"\\e64d\";\n}\n\n.icon-danhangwenben:before {\n  content: \"\\e62a\";\n}\n\n.icon-xialaxuanze:before {\n  content: \"\\e617\";\n}\n\n.icon-jishubiaoqian:before {\n  content: \"\\e620\";\n}\n\n"
  },
  {
    "path": "static/font/iconfont.js",
    "content": "!function(a){var t,c='<svg><symbol id=\"icon-danxuankuang\" viewBox=\"0 0 1024 1024\"><path d=\"M507.699 16.766c-271.033 0-491.52 220.487-491.52 491.52s220.487 491.52 491.52 491.52 491.52-220.487 491.52-491.52-220.487-491.52-491.52-491.52zM507.699 958.846c-248.436 0-450.56-202.124-450.56-450.56s202.124-450.56 450.56-450.56 450.56 202.124 450.56 450.56-202.124 450.56-450.56 450.56z\"  ></path><path d=\"M331.339 508.286c0 97.401 78.959 176.361 176.361 176.361 97.401 0 176.361-78.959 176.361-176.361 0-97.401-78.959-176.361-176.361-176.361-97.401 0-176.361 78.959-176.361 176.361z\"  ></path></symbol><symbol id=\"icon-biaoti\" viewBox=\"0 0 1024 1024\"><path d=\"M116.181404 133.722146 116.181404 441.133425 201.417293 441.133425 201.417293 133.722146 317.598697 133.722146 317.598697 64 0 64 0 133.722146 116.181404 133.722146ZM412.356282 125.799174 412.356282 64 335.263948 64 335.263948 125.799174 412.356282 125.799174ZM335.263948 168.055021 335.263948 441.133425 412.356282 441.133425 412.356282 168.055021 335.263948 168.055021ZM550.003263 168.055021 550.003263 86.184319 472.91093 86.184319 472.91093 168.055021 426.221206 168.055021 426.221206 218.233837 472.91093 218.233837 472.91093 379.33425C472.91093 393.067469 475.263489 404.159517 479.968678 412.610729 484.673868 421.06194 491.098164 427.576318 499.241762 432.154058 507.385359 436.731797 516.795596 439.812922 527.472757 441.397524 538.149917 442.982126 549.4603 443.774415 561.404242 443.774415 569.004932 443.774415 576.786475 443.598351 584.749103 443.246218 592.711731 442.894084 599.950376 442.189827 606.465253 441.133425L606.465253 383.031637C602.845877 383.735905 599.045588 384.264097 595.064275 384.616231 591.082961 384.968365 586.92074 385.144429 582.577488 385.144429 569.547733 385.144429 560.86136 383.031658 556.518108 378.806052 552.174856 374.580447 550.003263 366.129362 550.003263 353.452545L550.003263 218.233837 606.465253 218.233837 606.465253 168.055021 550.003263 168.055021ZM624.673409 64 624.673409 441.133425 701.765741 441.133425 701.765741 64 624.673409 64ZM930.620557 275.279229 805.209786 275.279229C805.571725 269.997222 806.748006 264.011037 808.738662 257.320495 810.729318 250.629953 814.167674 244.291639 819.05383 238.305364 823.939994 232.31909 830.454771 227.301258 838.598368 223.25172 846.741965 219.20218 856.966547 217.177441 869.272429 217.177441 888.09319 217.177441 902.118061 222.107241 911.347469 231.966988 920.576883 241.826734 927.001178 256.264004 930.620557 275.279229L930.620557 275.279229ZM805.209786 322.817057 1007.71289 322.817057C1009.16064 301.689028 1007.350976 281.441637 1002.283853 262.074278 997.216723 242.706918 988.982765 225.45262 977.581728 210.310867 966.180691 195.169113 951.612922 183.10871 933.877978 174.129299 916.143034 165.149886 895.33193 160.660248 871.444045 160.660248 850.089722 160.660248 830.635866 164.357597 813.081888 171.752407 795.527917 179.147217 780.417248 189.270913 767.749427 202.123796 755.081613 214.97668 745.30944 230.206239 738.432627 247.81293 731.555808 265.41962 728.117453 284.434561 728.117453 304.858322 728.117453 325.986351 731.465325 345.35342 738.161171 362.96011 744.857018 380.566801 754.357741 395.708327 766.663622 408.385144 778.969498 421.061962 793.98969 430.833528 811.724634 437.700138 829.459578 444.566747 849.36585 448 871.444045 448 903.29456 448 930.439475 440.957429 952.87961 426.872077 975.319744 412.786724 991.968627 389.370177 1002.826752 356.621733L934.963782 356.621733C932.430221 365.072945 925.55351 373.083869 914.33344 380.654746 903.113376 388.225622 889.721882 392.011004 874.158566 392.011004 852.442304 392.011004 835.793421 386.553012 824.211418 375.636864 812.629414 364.720716 806.295597 347.114289 805.209786 322.817057ZM0 576 1024 576 1024 640 0 640 0 576ZM0 768 1024 768 1024 832 0 832 0 768ZM0 960 768 960 768 1024 0 1024 0 960Z\"  ></path></symbol><symbol id=\"icon-ai211\" viewBox=\"0 0 1024 1024\"><path d=\"M399.305959 805.068974l225.374779 0 0-270.477977-225.374779 0L399.305959 805.068974zM128.827982 805.068974l225.383988 0 0-586.069387-225.383988 0L128.827982 805.068974zM669.78496 805.068974l225.383988 0 0-270.477977-225.383988 0L669.78496 805.068974zM399.305959 489.478588l495.861966 0 0-270.477977-495.861966 0L399.305959 489.478588z\"  ></path></symbol><symbol id=\"icon-duoxuankuang1\" viewBox=\"0 0 1024 1024\"><path d=\"M732.09344 341.98528c-12.544-12.45184-32.82944-12.31872-45.24544 0.256L453.56544 578.048 350.30528 471.936c-12.35456-12.70272-32.60928-12.928-45.25056-0.64-12.672 12.31872-12.95872 32.60928-0.64 45.25056l126.01856 129.50528c0.06144 0.09728 0.19456 0.09728 0.256 0.18944 0.06656 0.06656 0.09728 0.18944 0.15872 0.256 2.01728 1.98656 4.51072 3.2 6.88128 4.54656 1.24928 0.67072 2.24256 1.792 3.52256 2.304 3.87072 1.60256 8.00256 2.40128 12.09856 2.40128 4.06016 0 8.12544-0.79872 11.96544-2.33472 1.24928-0.51712 2.20672-1.54112 3.39456-2.18112 2.40128-1.34144 4.89472-2.52416 6.94272-4.54144 0.06656-0.06656 0.09728-0.19456 0.19456-0.26112 0.06656-0.09728 0.15872-0.12288 0.256-0.18944l256.22528-259.00544C744.77056 374.68672 744.64256 354.432 732.09344 341.98528zM832 928l-640 0c-52.92544 0-96-43.06944-96-96l0-640c0-52.92544 43.07456-96 96-96l640 0c52.93056 0 96 43.07456 96 96l0 640C928 884.93056 884.93056 928 832 928zM192 160c-17.63328 0-32 14.36672-32 32l0 640c0 17.664 14.36672 32 32 32l640 0c17.664 0 32-14.336 32-32l0-640c0-17.63328-14.336-32-32-32L192 160z\"  ></path></symbol><symbol id=\"icon-tupianshangchuan\" viewBox=\"0 0 1024 1024\"><path d=\"M828.8 598.4c-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L694.4 688c-12.8 12.8-12.8 32 0 44.8 12.8 12.8 32 12.8 44.8 0l35.2-35.2V896c0 16 12.8 32 32 32s32-12.8 32-32V697.6l38.4 38.4c12.8 12.8 32 12.8 44.8 0 12.8-12.8 12.8-32 0-44.8l-92.8-92.8z m-419.2-240c16-35.2 6.4-76.8-19.2-105.6-28.8-28.8-73.6-35.2-108.8-22.4-35.2 16-57.6 54.4-57.6 92.8 0 51.2 41.6 92.8 92.8 92.8 38.4 0 76.8-22.4 92.8-57.6zM288 323.2c0-9.6 3.2-16 9.6-22.4 3.2-9.6 12.8-12.8 22.4-12.8 16 0 32 12.8 32 28.8s-12.8 32-28.8 35.2c-19.2 0-35.2-12.8-35.2-28.8z\" fill=\"#333333\" ></path><path d=\"M896 96H128c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h544v-64H160c-19.2 0-32-16-32-32V192c0-16 12.8-32 32-32h704c19.2 0 32 16 32 32v416h64V160c0-35.2-28.8-64-64-64z\" fill=\"#333333\" ></path><path d=\"M182.4 713.6c12.8 12.8 32 12.8 44.8 0l134.4-134.4 112 112c3.2 3.2 3.2 3.2 6.4 3.2 12.8 6.4 25.6 6.4 38.4-3.2l316.8-316.8c12.8-12.8 12.8-32 0-44.8-12.8-12.8-32-12.8-44.8 0L496 624 384 508.8l-3.2-3.2c-12.8-9.6-28.8-9.6-41.6 3.2l-160 160c-9.6 12.8-9.6 32 3.2 44.8z\" fill=\"#333333\" ></path></symbol><symbol id=\"icon-duohangwenben\" viewBox=\"0 0 1024 1024\"><path d=\"M118.784 778.24h778.24v-532.48h-778.24v532.48z m-40.96-573.44h860.16v614.4h-860.16v-614.4z m778.24 409.6l-122.88 122.88h122.88v-122.88zM194.56 358.4v204.8c0 12.288 8.192 20.48 20.48 20.48s20.48-8.192 20.48-20.48v-204.8c0-12.288-8.192-20.48-20.48-20.48s-20.48 8.192-20.48 20.48z\"  ></path></symbol><symbol id=\"icon-kaiguan\" viewBox=\"0 0 1024 1024\"><path d=\"M366 294.504c-132 0-240 107.104-240 238s108 238 240 238h304c132 0 240-107.104 240-238s-108-238-240-238h-304z m308 442.16c-111.28 0-201.504-91.408-201.504-204.168s90.224-204.16 201.504-204.16 201.504 91.408 201.504 204.168-90.224 204.16-201.504 204.16z\"  ></path></symbol><symbol id=\"icon-shijianxuanzeqi\" viewBox=\"0 0 1024 1024\"><path d=\"M942.4 476.8c-16-209.6-185.6-379.2-395.2-395.2C281.6 60.8 60.8 281.6 81.6 547.2c16 209.6 185.6 379.2 395.2 395.2 265.6 20.8 486.4-200 465.6-465.6z m-64 73.6c-17.6 172.8-156.8 312-328 328C316.8 900.8 123.2 707.2 145.6 473.6c17.6-172.8 156.8-312 328-328 233.6-22.4 427.2 171.2 404.8 404.8z\" fill=\"#4A576A\" ></path><path d=\"M544 483.2V241.6c0-14.4-8-27.2-20.8-32-22.4-6.4-43.2 9.6-43.2 30.4v262.4c0 1.6 0 1.6 1.6 3.2 0 1.6 0 1.6 1.6 3.2 0 1.6 1.6 1.6 1.6 3.2s0 1.6 1.6 3.2 3.2 3.2 3.2 4.8l134.4 134.4c9.6 9.6 25.6 14.4 38.4 6.4 20.8-11.2 24-36.8 8-51.2L544 483.2z\" fill=\"#4A576A\" ></path></symbol><symbol id=\"icon-danhangwenben\" viewBox=\"0 0 1024 1024\"><path d=\"M118.784 727.04h778.24V296.96h-778.24v430.08zM77.824 256h860.16v512H77.824V256zM194.56 409.6v204.8c0 12.288 8.192 20.48 20.48 20.48s20.48-8.192 20.48-20.48V409.6c0-12.288-8.192-20.48-20.48-20.48s-20.48 8.192-20.48 20.48z\"  ></path></symbol><symbol id=\"icon-xialaxuanze\" viewBox=\"0 0 1024 1024\"><path d=\"M960 213.3L512 810.7 64 213.3h896z\" fill=\"#2c2c2c\" ></path></symbol><symbol id=\"icon-jishubiaoqian\" viewBox=\"0 0 1024 1024\"><path d=\"M513.1 956.5c-60.2 0-118.6-11.8-173.6-35-53.1-22.5-100.8-54.6-141.7-95.6-40.9-40.9-73.1-88.6-95.6-141.7-23.3-55-35-113.4-35-173.6S79 392 102.2 337c22.5-53.1 54.6-100.8 95.6-141.7 40.9-40.9 88.6-73.1 141.7-95.6 55-23.3 113.4-35 173.6-35s118.6 11.8 173.6 35c53.1 22.5 100.8 54.6 141.7 95.6 40.9 40.9 73.1 88.6 95.6 141.7 23.3 55 35 113.4 35 173.6s-11.8 118.6-35 173.6c-22.5 53.1-54.6 100.8-95.6 141.7-40.9 40.9-88.6 73.1-141.7 95.6-55 23.2-113.4 35-173.6 35z m0-851.8c-223.8 0-405.9 182.1-405.9 405.9s182.1 405.9 405.9 405.9c223.8 0 405.9-182.1 405.9-405.9S736.9 104.7 513.1 104.7z\"  ></path><path d=\"M240 596h49.5V438.6h-40.6v-22.5c21.2-4 36.3-9.2 49.2-17.2h26.8V596h44.3v29.2H240V596zM433.2 604.7c66.7-59.1 101.2-103 101.2-140.3 0-24.6-13.2-41.5-38.4-41.5-17.8 0-32.6 11.4-44.6 25.2l-20-19.7c19.4-20.9 39.4-33.8 68.9-33.8 41.5 0 68.3 27.1 68.3 68 0 43.7-34.8 88.9-82.7 134.7 11.7-1.2 25.8-2.2 36.9-2.2h56.6v30.1H433.2v-20.5zM634.3 598.2l17.2-22.8c13.2 13.5 30.1 24.9 53.5 24.9 25.5 0 43.1-14.1 43.1-37.5 0-25.2-16-41.5-67.1-41.5v-26.1c44.6 0 59.4-16.9 59.4-39.7 0-20-13.2-32.6-34.8-32.9-17.5 0.3-32.3 8.9-45.2 21.5L642 422c17.8-16 38.8-27.4 64.9-27.4 40.6 0 69.2 20.9 69.2 58.4 0 26.1-15.1 44.3-39.1 53.2v1.5c26.1 6.5 46.8 26.1 46.8 56.6 0 40.9-34.1 64.9-75.7 64.9-35.6 0.1-58.7-14.1-73.8-31z\"  ></path></symbol></svg>',e=(t=document.getElementsByTagName(\"script\"))[t.length-1].getAttribute(\"data-injectcss\");if(e&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(t){console&&console.log(t)}}!function(t){if(document.addEventListener)if(~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState))setTimeout(t,0);else{var e=function(){document.removeEventListener(\"DOMContentLoaded\",e,!1),t()};document.addEventListener(\"DOMContentLoaded\",e,!1)}else document.attachEvent&&(n=t,i=a.document,o=!1,(l=function(){try{i.documentElement.doScroll(\"left\")}catch(t){return void setTimeout(l,50)}c()})(),i.onreadystatechange=function(){\"complete\"==i.readyState&&(i.onreadystatechange=null,c())});function c(){o||(o=!0,n())}var n,i,o,l}(function(){var t,e;(t=document.createElement(\"div\")).innerHTML=c,c=null,(e=t.getElementsByTagName(\"svg\")[0])&&(e.setAttribute(\"aria-hidden\",\"true\"),e.style.position=\"absolute\",e.style.width=0,e.style.height=0,e.style.overflow=\"hidden\",function(t,e){e.firstChild?function(t,e){e.parentNode.insertBefore(t,e)}(t,e.firstChild):e.appendChild(t)}(e,document.body))})}(window);"
  },
  {
    "path": "static/normalize.css",
    "content": "/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in\n *    IE on Windows Phone and in iOS.\n */\n\nhtml {\n  line-height: 1.15; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n  margin: 0;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n  display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\n\nfigcaption,\nfigure,\nmain { /* 1 */\n  display: block;\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  box-sizing: content-box; /* 1 */\n  height: 0; /* 1 */\n  overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n  background-color: transparent; /* 1 */\n  -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none; /* 1 */\n  text-decoration: underline; /* 2 */\n  text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n  font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\nvideo {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n  border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: sans-serif; /* 1 */\n  font-size: 100%; /* 1 */\n  line-height: 1.15; /* 1 */\n  margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n  padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n  box-sizing: border-box; /* 1 */\n  color: inherit; /* 2 */\n  display: table; /* 1 */\n  max-width: 100%; /* 1 */\n  padding: 0; /* 3 */\n  white-space: normal; /* 1 */\n}\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\n\ndetails, /* 1 */\nmenu {\n  display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n  display: list-item;\n}\n\n/* Scripting\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\ncanvas {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in IE.\n */\n\ntemplate {\n  display: none;\n}\n\n/* Hidden\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 10-.\n */\n\n[hidden] {\n  display: none;\n}"
  },
  {
    "path": "static/plugins/mock-1.0.0-beta3/mock-min.js",
    "content": "!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.Mock=e():t.Mock=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={exports:{},id:r,loaded:!1};return t[r].call(a.exports,a,a.exports,e),a.loaded=!0,a.exports}var n={};return e.m=t,e.c=n,e.p=\"\",e(0)}([function(t,e,n){var r,a=n(1),o=n(3),u=n(5),i=n(20),l=n(23),s=n(25);\"undefined\"!=typeof window&&(r=n(27));/*!\n\t    Mock - 模拟请求 & 模拟数据\n\t    https://github.com/nuysoft/Mock\n\t    墨智 mozhi.gyy@taobao.com nuysoft@gmail.com\n\t*/\nvar c={Handler:a,Random:u,Util:o,XHR:r,RE:i,toJSONSchema:l,valid:s,heredoc:o.heredoc,setup:function(t){return r.setup(t)},_mocked:{}};c.version=\"1.0.1-beta3\",r&&(r.Mock=c),c.mock=function(t,e,n){return 1===arguments.length?a.gen(t):(2===arguments.length&&(n=e,e=void 0),r&&(window.XMLHttpRequest=r),c._mocked[t+(e||\"\")]={rurl:t,rtype:e,template:n},c)},t.exports=c},function(module,exports,__webpack_require__){var Constant=__webpack_require__(2),Util=__webpack_require__(3),Parser=__webpack_require__(4),Random=__webpack_require__(5),RE=__webpack_require__(20),Handler={extend:Util.extend};Handler.gen=function(t,e,n){e=void 0==e?\"\":e+\"\",n=n||{},n={path:n.path||[Constant.GUID],templatePath:n.templatePath||[Constant.GUID++],currentContext:n.currentContext,templateCurrentContext:n.templateCurrentContext||t,root:n.root||n.currentContext,templateRoot:n.templateRoot||n.templateCurrentContext||t};var r,a=Parser.parse(e),o=Util.type(t);return Handler[o]?(r=Handler[o]({type:o,template:t,name:e,parsedName:e?e.replace(Constant.RE_KEY,\"$1\"):e,rule:a,context:n}),n.root||(n.root=r),r):t},Handler.extend({array:function(t){var e,n,r=[];if(0===t.template.length)return r;if(t.rule.parameters)if(1===t.rule.min&&void 0===t.rule.max)t.context.path.push(t.name),t.context.templatePath.push(t.name),r=Random.pick(Handler.gen(t.template,void 0,{path:t.context.path,templatePath:t.context.templatePath,currentContext:r,templateCurrentContext:t.template,root:t.context.root||r,templateRoot:t.context.templateRoot||t.template})),t.context.path.pop(),t.context.templatePath.pop();else if(t.rule.parameters[2])t.template.__order_index=t.template.__order_index||0,t.context.path.push(t.name),t.context.templatePath.push(t.name),r=Handler.gen(t.template,void 0,{path:t.context.path,templatePath:t.context.templatePath,currentContext:r,templateCurrentContext:t.template,root:t.context.root||r,templateRoot:t.context.templateRoot||t.template})[t.template.__order_index%t.template.length],t.template.__order_index+=+t.rule.parameters[2],t.context.path.pop(),t.context.templatePath.pop();else for(e=0;e<t.rule.count;e++)for(n=0;n<t.template.length;n++)t.context.path.push(r.length),t.context.templatePath.push(n),r.push(Handler.gen(t.template[n],r.length,{path:t.context.path,templatePath:t.context.templatePath,currentContext:r,templateCurrentContext:t.template,root:t.context.root||r,templateRoot:t.context.templateRoot||t.template})),t.context.path.pop(),t.context.templatePath.pop();else for(e=0;e<t.template.length;e++)t.context.path.push(e),t.context.templatePath.push(e),r.push(Handler.gen(t.template[e],e,{path:t.context.path,templatePath:t.context.templatePath,currentContext:r,templateCurrentContext:t.template,root:t.context.root||r,templateRoot:t.context.templateRoot||t.template})),t.context.path.pop(),t.context.templatePath.pop();return r},object:function(t){var e,n,r,a,o,u,i={};if(void 0!=t.rule.min)for(e=Util.keys(t.template),e=Random.shuffle(e),e=e.slice(0,t.rule.count),u=0;u<e.length;u++)r=e[u],a=r.replace(Constant.RE_KEY,\"$1\"),t.context.path.push(a),t.context.templatePath.push(r),i[a]=Handler.gen(t.template[r],r,{path:t.context.path,templatePath:t.context.templatePath,currentContext:i,templateCurrentContext:t.template,root:t.context.root||i,templateRoot:t.context.templateRoot||t.template}),t.context.path.pop(),t.context.templatePath.pop();else{e=[],n=[];for(r in t.template)(\"function\"==typeof t.template[r]?n:e).push(r);for(e=e.concat(n),u=0;u<e.length;u++)r=e[u],a=r.replace(Constant.RE_KEY,\"$1\"),t.context.path.push(a),t.context.templatePath.push(r),i[a]=Handler.gen(t.template[r],r,{path:t.context.path,templatePath:t.context.templatePath,currentContext:i,templateCurrentContext:t.template,root:t.context.root||i,templateRoot:t.context.templateRoot||t.template}),t.context.path.pop(),t.context.templatePath.pop(),o=r.match(Constant.RE_KEY),o&&o[2]&&\"number\"===Util.type(t.template[r])&&(t.template[r]+=parseInt(o[2],10))}return i},number:function(t){var e,n;if(t.rule.decimal){for(t.template+=\"\",n=t.template.split(\".\"),n[0]=t.rule.range?t.rule.count:n[0],n[1]=(n[1]||\"\").slice(0,t.rule.dcount);n[1].length<t.rule.dcount;)n[1]+=n[1].length<t.rule.dcount-1?Random.character(\"number\"):Random.character(\"123456789\");e=parseFloat(n.join(\".\"),10)}else e=t.rule.range&&!t.rule.parameters[2]?t.rule.count:t.template;return e},\"boolean\":function(t){var e;return e=t.rule.parameters?Random.bool(t.rule.min,t.rule.max,t.template):t.template},string:function(t){var e,n,r,a,o=\"\";if(t.template.length){for(void 0==t.rule.count&&(o+=t.template),e=0;e<t.rule.count;e++)o+=t.template;for(n=o.match(Constant.RE_PLACEHOLDER)||[],e=0;e<n.length;e++)if(r=n[e],/^\\\\/.test(r))n.splice(e--,1);else{if(a=Handler.placeholder(r,t.context.currentContext,t.context.templateCurrentContext,t),1===n.length&&r===o&&typeof a!=typeof o){o=a;break}o=o.replace(r,a)}}else o=t.rule.range?Random.string(t.rule.count):t.template;return o},\"function\":function(t){return t.template.call(t.context.currentContext,t)},regexp:function(t){var e=\"\";void 0==t.rule.count&&(e+=t.template.source);for(var n=0;n<t.rule.count;n++)e+=t.template.source;return RE.Handler.gen(RE.Parser.parse(e))}}),Handler.extend({_all:function(){var t={};for(var e in Random)t[e.toLowerCase()]=e;return t},placeholder:function(placeholder,obj,templateContext,options){Constant.RE_PLACEHOLDER.exec(\"\");var parts=Constant.RE_PLACEHOLDER.exec(placeholder),key=parts&&parts[1],lkey=key&&key.toLowerCase(),okey=this._all()[lkey],params=parts&&parts[2]||\"\",pathParts=this.splitPathToArray(key);try{params=eval(\"(function(){ return [].splice.call(arguments, 0 ) })(\"+params+\")\")}catch(error){params=parts[2].split(/,\\s*/)}if(obj&&key in obj)return obj[key];if(\"/\"===key.charAt(0)||pathParts.length>1)return this.getValueByKeyPath(key,options);if(templateContext&&\"object\"==typeof templateContext&&key in templateContext&&placeholder!==templateContext[key])return templateContext[key]=Handler.gen(templateContext[key],key,{currentContext:obj,templateCurrentContext:templateContext}),templateContext[key];if(!(key in Random||lkey in Random||okey in Random))return placeholder;for(var i=0;i<params.length;i++)Constant.RE_PLACEHOLDER.exec(\"\"),Constant.RE_PLACEHOLDER.test(params[i])&&(params[i]=Handler.placeholder(params[i],obj,templateContext,options));var handle=Random[key]||Random[lkey]||Random[okey];switch(Util.type(handle)){case\"array\":return Random.pick(handle);case\"function\":handle.options=options;var re=handle.apply(Random,params);return void 0===re&&(re=\"\"),delete handle.options,re}},getValueByKeyPath:function(t,e){var n=t,r=this.splitPathToArray(t),a=[];\"/\"===t.charAt(0)?a=[e.context.path[0]].concat(this.normalizePath(r)):r.length>1&&(a=e.context.path.slice(0),a.pop(),a=this.normalizePath(a.concat(r))),t=r[r.length-1];for(var o=e.context.root,u=e.context.templateRoot,i=1;i<a.length-1;i++)o=o[a[i]],u=u[a[i]];return o&&t in o?o[t]:u&&\"object\"==typeof u&&t in u&&n!==u[t]?(u[t]=Handler.gen(u[t],t,{currentContext:o,templateCurrentContext:u}),u[t]):void 0},normalizePath:function(t){for(var e=[],n=0;n<t.length;n++)switch(t[n]){case\"..\":e.pop();break;case\".\":break;default:e.push(t[n])}return e},splitPathToArray:function(t){var e=t.split(/\\/+/);return e[e.length-1]||(e=e.slice(0,-1)),e[0]||(e=e.slice(1)),e}}),module.exports=Handler},function(t,e){t.exports={GUID:1,RE_KEY:/(.+)\\|(?:\\+(\\d+)|([\\+\\-]?\\d+-?[\\+\\-]?\\d*)?(?:\\.(\\d+-?\\d*))?)/,RE_RANGE:/([\\+\\-]?\\d+)-?([\\+\\-]?\\d+)?/,RE_PLACEHOLDER:/\\\\*@([^@#%&()\\?\\s]+)(?:\\((.*?)\\))?/g}},function(t,e){var n={};n.extend=function(){var t,e,r,a,o,u=arguments[0]||{},i=1,l=arguments.length;for(1===l&&(u=this,i=0);l>i;i++)if(t=arguments[i])for(e in t)r=u[e],a=t[e],u!==a&&void 0!==a&&(n.isArray(a)||n.isObject(a)?(n.isArray(a)&&(o=r&&n.isArray(r)?r:[]),n.isObject(a)&&(o=r&&n.isObject(r)?r:{}),u[e]=n.extend(o,a)):u[e]=a);return u},n.each=function(t,e,n){var r,a;if(\"number\"===this.type(t))for(r=0;t>r;r++)e(r,r);else if(t.length===+t.length)for(r=0;r<t.length&&e.call(n,t[r],r,t)!==!1;r++);else for(a in t)if(e.call(n,t[a],a,t)===!1)break},n.type=function(t){return null===t||void 0===t?String(t):Object.prototype.toString.call(t).match(/\\[object (\\w+)\\]/)[1].toLowerCase()},n.each(\"String Object Array RegExp Function\".split(\" \"),function(t){n[\"is\"+t]=function(e){return n.type(e)===t.toLowerCase()}}),n.isObjectOrArray=function(t){return n.isObject(t)||n.isArray(t)},n.isNumeric=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},n.keys=function(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push(n);return e},n.values=function(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push(t[n]);return e},n.heredoc=function(t){return t.toString().replace(/^[^\\/]+\\/\\*!?/,\"\").replace(/\\*\\/[^\\/]+$/,\"\").replace(/^[\\s\\xA0]+/,\"\").replace(/[\\s\\xA0]+$/,\"\")},n.noop=function(){},t.exports=n},function(t,e,n){var r=n(2),a=n(5);t.exports={parse:function(t){t=void 0==t?\"\":t+\"\";var e=(t||\"\").match(r.RE_KEY),n=e&&e[3]&&e[3].match(r.RE_RANGE),o=n&&n[1]&&parseInt(n[1],10),u=n&&n[2]&&parseInt(n[2],10),i=n?n[2]?a.integer(o,u):parseInt(n[1],10):void 0,l=e&&e[4]&&e[4].match(r.RE_RANGE),s=l&&l[1]&&parseInt(l[1],10),c=l&&l[2]&&parseInt(l[2],10),h=l?!l[2]&&parseInt(l[1],10)||a.integer(s,c):void 0,p={parameters:e,range:n,min:o,max:u,count:i,decimal:l,dmin:s,dmax:c,dcount:h};for(var f in p)if(void 0!=p[f])return p;return{}}}},function(t,e,n){var r=n(3),a={extend:r.extend};a.extend(n(6)),a.extend(n(7)),a.extend(n(8)),a.extend(n(10)),a.extend(n(13)),a.extend(n(15)),a.extend(n(16)),a.extend(n(17)),a.extend(n(14)),a.extend(n(19)),t.exports=a},function(t,e){t.exports={\"boolean\":function(t,e,n){return void 0!==n?(t=\"undefined\"==typeof t||isNaN(t)?1:parseInt(t,10),e=\"undefined\"==typeof e||isNaN(e)?1:parseInt(e,10),Math.random()>1/(t+e)*t?!n:n):Math.random()>=.5},bool:function(t,e,n){return this[\"boolean\"](t,e,n)},natural:function(t,e){return t=\"undefined\"!=typeof t?parseInt(t,10):0,e=\"undefined\"!=typeof e?parseInt(e,10):9007199254740992,Math.round(Math.random()*(e-t))+t},integer:function(t,e){return t=\"undefined\"!=typeof t?parseInt(t,10):-9007199254740992,e=\"undefined\"!=typeof e?parseInt(e,10):9007199254740992,Math.round(Math.random()*(e-t))+t},\"int\":function(t,e){return this.integer(t,e)},\"float\":function(t,e,n,r){n=void 0===n?0:n,n=Math.max(Math.min(n,17),0),r=void 0===r?17:r,r=Math.max(Math.min(r,17),0);for(var a=this.integer(t,e)+\".\",o=0,u=this.natural(n,r);u>o;o++)a+=u-1>o?this.character(\"number\"):this.character(\"123456789\");return parseFloat(a,10)},character:function(t){var e={lower:\"abcdefghijklmnopqrstuvwxyz\",upper:\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",number:\"0123456789\",symbol:\"!@#$%^&*()[]\"};return e.alpha=e.lower+e.upper,e.undefined=e.lower+e.upper+e.number+e.symbol,t=e[(\"\"+t).toLowerCase()]||t,t.charAt(this.natural(0,t.length-1))},\"char\":function(t){return this.character(t)},string:function(t,e,n){var r;switch(arguments.length){case 0:r=this.natural(3,7);break;case 1:r=t,t=void 0;break;case 2:\"string\"==typeof arguments[0]?r=e:(r=this.natural(t,e),t=void 0);break;case 3:r=this.natural(e,n)}for(var a=\"\",o=0;r>o;o++)a+=this.character(t);return a},str:function(){return this.string.apply(this,arguments)},range:function(t,e,n){arguments.length<=1&&(e=t||0,t=0),n=arguments[2]||1,t=+t,e=+e,n=+n;for(var r=Math.max(Math.ceil((e-t)/n),0),a=0,o=new Array(r);r>a;)o[a++]=t,t+=n;return o}}},function(t,e){var n={yyyy:\"getFullYear\",yy:function(t){return(\"\"+t.getFullYear()).slice(2)},y:\"yy\",MM:function(t){var e=t.getMonth()+1;return 10>e?\"0\"+e:e},M:function(t){return t.getMonth()+1},dd:function(t){var e=t.getDate();return 10>e?\"0\"+e:e},d:\"getDate\",HH:function(t){var e=t.getHours();return 10>e?\"0\"+e:e},H:\"getHours\",hh:function(t){var e=t.getHours()%12;return 10>e?\"0\"+e:e},h:function(t){return t.getHours()%12},mm:function(t){var e=t.getMinutes();return 10>e?\"0\"+e:e},m:\"getMinutes\",ss:function(t){var e=t.getSeconds();return 10>e?\"0\"+e:e},s:\"getSeconds\",SS:function(t){var e=t.getMilliseconds();return 10>e&&\"00\"+e||100>e&&\"0\"+e||e},S:\"getMilliseconds\",A:function(t){return t.getHours()<12?\"AM\":\"PM\"},a:function(t){return t.getHours()<12?\"am\":\"pm\"},T:\"getTime\"};t.exports={_patternLetters:n,_rformat:new RegExp(function(){var t=[];for(var e in n)t.push(e);return\"(\"+t.join(\"|\")+\")\"}(),\"g\"),_formatDate:function(t,e){return e.replace(this._rformat,function r(e,a){return\"function\"==typeof n[a]?n[a](t):n[a]in n?r(e,n[a]):t[n[a]]()})},_randomDate:function(t,e){return t=void 0===t?new Date(0):t,e=void 0===e?new Date:e,new Date(Math.random()*(e.getTime()-t.getTime()))},date:function(t){return t=t||\"yyyy-MM-dd\",this._formatDate(this._randomDate(),t)},time:function(t){return t=t||\"HH:mm:ss\",this._formatDate(this._randomDate(),t)},datetime:function(t){return t=t||\"yyyy-MM-dd HH:mm:ss\",this._formatDate(this._randomDate(),t)},now:function(t,e){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(t)||(e=t,t=\"\")),t=(t||\"\").toLowerCase(),e=e||\"yyyy-MM-dd HH:mm:ss\";var n=new Date;switch(t){case\"year\":n.setMonth(0);case\"month\":n.setDate(1);case\"week\":case\"day\":n.setHours(0);case\"hour\":n.setMinutes(0);case\"minute\":n.setSeconds(0);case\"second\":n.setMilliseconds(0)}switch(t){case\"week\":n.setDate(n.getDate()-n.getDay())}return this._formatDate(n,e)}}},function(t,e,n){(function(t){t.exports={_adSize:[\"300x250\",\"250x250\",\"240x400\",\"336x280\",\"180x150\",\"720x300\",\"468x60\",\"234x60\",\"88x31\",\"120x90\",\"120x60\",\"120x240\",\"125x125\",\"728x90\",\"160x600\",\"120x600\",\"300x600\"],_screenSize:[\"320x200\",\"320x240\",\"640x480\",\"800x480\",\"800x480\",\"1024x600\",\"1024x768\",\"1280x800\",\"1440x900\",\"1920x1200\",\"2560x1600\"],_videoSize:[\"720x480\",\"768x576\",\"1280x720\",\"1920x1080\"],image:function(t,e,n,r,a){return 4===arguments.length&&(a=r,r=void 0),3===arguments.length&&(a=n,n=void 0),t||(t=this.pick(this._adSize)),e&&~e.indexOf(\"#\")&&(e=e.slice(1)),n&&~n.indexOf(\"#\")&&(n=n.slice(1)),\"http://dummyimage.com/\"+t+(e?\"/\"+e:\"\")+(n?\"/\"+n:\"\")+(r?\".\"+r:\"\")+(a?\"&text=\"+a:\"\")},img:function(){return this.image.apply(this,arguments)},_brandColors:{\"4ormat\":\"#fb0a2a\",\"500px\":\"#02adea\",\"About.me (blue)\":\"#00405d\",\"About.me (yellow)\":\"#ffcc33\",Addvocate:\"#ff6138\",Adobe:\"#ff0000\",Aim:\"#fcd20b\",Amazon:\"#e47911\",Android:\"#a4c639\",\"Angie's List\":\"#7fbb00\",AOL:\"#0060a3\",Atlassian:\"#003366\",Behance:\"#053eff\",\"Big Cartel\":\"#97b538\",bitly:\"#ee6123\",Blogger:\"#fc4f08\",Boeing:\"#0039a6\",\"Booking.com\":\"#003580\",Carbonmade:\"#613854\",Cheddar:\"#ff7243\",\"Code School\":\"#3d4944\",Delicious:\"#205cc0\",Dell:\"#3287c1\",Designmoo:\"#e54a4f\",Deviantart:\"#4e6252\",\"Designer News\":\"#2d72da\",Devour:\"#fd0001\",DEWALT:\"#febd17\",\"Disqus (blue)\":\"#59a3fc\",\"Disqus (orange)\":\"#db7132\",Dribbble:\"#ea4c89\",Dropbox:\"#3d9ae8\",Drupal:\"#0c76ab\",Dunked:\"#2a323a\",eBay:\"#89c507\",Ember:\"#f05e1b\",Engadget:\"#00bdf6\",Envato:\"#528036\",Etsy:\"#eb6d20\",Evernote:\"#5ba525\",\"Fab.com\":\"#dd0017\",Facebook:\"#3b5998\",Firefox:\"#e66000\",\"Flickr (blue)\":\"#0063dc\",\"Flickr (pink)\":\"#ff0084\",Forrst:\"#5b9a68\",Foursquare:\"#25a0ca\",Garmin:\"#007cc3\",GetGlue:\"#2d75a2\",Gimmebar:\"#f70078\",GitHub:\"#171515\",\"Google Blue\":\"#0140ca\",\"Google Green\":\"#16a61e\",\"Google Red\":\"#dd1812\",\"Google Yellow\":\"#fcca03\",\"Google+\":\"#dd4b39\",Grooveshark:\"#f77f00\",Groupon:\"#82b548\",\"Hacker News\":\"#ff6600\",HelloWallet:\"#0085ca\",\"Heroku (light)\":\"#c7c5e6\",\"Heroku (dark)\":\"#6567a5\",HootSuite:\"#003366\",Houzz:\"#73ba37\",HTML5:\"#ec6231\",IKEA:\"#ffcc33\",IMDb:\"#f3ce13\",Instagram:\"#3f729b\",Intel:\"#0071c5\",Intuit:\"#365ebf\",Kickstarter:\"#76cc1e\",kippt:\"#e03500\",Kodery:\"#00af81\",LastFM:\"#c3000d\",LinkedIn:\"#0e76a8\",Livestream:\"#cf0005\",Lumo:\"#576396\",Mixpanel:\"#a086d3\",Meetup:\"#e51937\",Nokia:\"#183693\",NVIDIA:\"#76b900\",Opera:\"#cc0f16\",Path:\"#e41f11\",\"PayPal (dark)\":\"#1e477a\",\"PayPal (light)\":\"#3b7bbf\",Pinboard:\"#0000e6\",Pinterest:\"#c8232c\",PlayStation:\"#665cbe\",Pocket:\"#ee4056\",Prezi:\"#318bff\",Pusha:\"#0f71b4\",Quora:\"#a82400\",\"QUOTE.fm\":\"#66ceff\",Rdio:\"#008fd5\",Readability:\"#9c0000\",\"Red Hat\":\"#cc0000\",Resource:\"#7eb400\",Rockpack:\"#0ba6ab\",Roon:\"#62b0d9\",RSS:\"#ee802f\",Salesforce:\"#1798c1\",Samsung:\"#0c4da2\",Shopify:\"#96bf48\",Skype:\"#00aff0\",Snagajob:\"#f47a20\",Softonic:\"#008ace\",SoundCloud:\"#ff7700\",\"Space Box\":\"#f86960\",Spotify:\"#81b71a\",Sprint:\"#fee100\",Squarespace:\"#121212\",StackOverflow:\"#ef8236\",Staples:\"#cc0000\",\"Status Chart\":\"#d7584f\",Stripe:\"#008cdd\",StudyBlue:\"#00afe1\",StumbleUpon:\"#f74425\",\"T-Mobile\":\"#ea0a8e\",Technorati:\"#40a800\",\"The Next Web\":\"#ef4423\",Treehouse:\"#5cb868\",Trulia:\"#5eab1f\",Tumblr:\"#34526f\",\"Twitch.tv\":\"#6441a5\",Twitter:\"#00acee\",TYPO3:\"#ff8700\",Ubuntu:\"#dd4814\",Ustream:\"#3388ff\",Verizon:\"#ef1d1d\",Vimeo:\"#86c9ef\",Vine:\"#00a478\",Virb:\"#06afd8\",\"Virgin Media\":\"#cc0000\",Wooga:\"#5b009c\",\"WordPress (blue)\":\"#21759b\",\"WordPress (orange)\":\"#d54e21\",\"WordPress (grey)\":\"#464646\",Wunderlist:\"#2b88d9\",XBOX:\"#9bc848\",XING:\"#126567\",\"Yahoo!\":\"#720e9e\",Yandex:\"#ffcc00\",Yelp:\"#c41200\",YouTube:\"#c4302b\",Zalongo:\"#5498dc\",Zendesk:\"#78a300\",Zerply:\"#9dcc7a\",Zootool:\"#5e8b1d\"},_brandNames:function(){var t=[];for(var e in this._brandColors)t.push(e);return t},dataImage:function(e,n){var r;if(\"undefined\"!=typeof document)r=document.createElement(\"canvas\");else{var a=t.require(\"canvas\");r=new a}var o=r&&r.getContext&&r.getContext(\"2d\");if(!r||!o)return\"\";e||(e=this.pick(this._adSize)),n=void 0!==n?n:e,e=e.split(\"x\");var u=parseInt(e[0],10),i=parseInt(e[1],10),l=this._brandColors[this.pick(this._brandNames())],s=\"#FFF\",c=14,h=\"sans-serif\";return r.width=u,r.height=i,o.textAlign=\"center\",o.textBaseline=\"middle\",o.fillStyle=l,o.fillRect(0,0,u,i),o.fillStyle=s,o.font=\"bold \"+c+\"px \"+h,o.fillText(n,u/2,i/2,u),r.toDataURL(\"image/png\")}}}).call(e,n(9)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e,n){var r=n(11),a=n(12);t.exports={color:function(t){return t||a[t]?a[t].nicer:this.hex()},hex:function(){var t=this._goldenRatioColor(),e=r.hsv2rgb(t),n=r.rgb2hex(e[0],e[1],e[2]);return n},rgb:function(){var t=this._goldenRatioColor(),e=r.hsv2rgb(t);return\"rgb(\"+parseInt(e[0],10)+\", \"+parseInt(e[1],10)+\", \"+parseInt(e[2],10)+\")\"},rgba:function(){var t=this._goldenRatioColor(),e=r.hsv2rgb(t);return\"rgba(\"+parseInt(e[0],10)+\", \"+parseInt(e[1],10)+\", \"+parseInt(e[2],10)+\", \"+Math.random().toFixed(2)+\")\"},hsl:function(){var t=this._goldenRatioColor(),e=r.hsv2hsl(t);return\"hsl(\"+parseInt(e[0],10)+\", \"+parseInt(e[1],10)+\", \"+parseInt(e[2],10)+\")\"},_goldenRatioColor:function(t,e){return this._goldenRatio=.618033988749895,this._hue=this._hue||Math.random(),this._hue+=this._goldenRatio,this._hue%=1,\"number\"!=typeof t&&(t=.5),\"number\"!=typeof e&&(e=.95),[360*this._hue,100*t,100*e]}}},function(t,e){t.exports={rgb2hsl:function(t){var e,n,r,a=t[0]/255,o=t[1]/255,u=t[2]/255,i=Math.min(a,o,u),l=Math.max(a,o,u),s=l-i;return l==i?e=0:a==l?e=(o-u)/s:o==l?e=2+(u-a)/s:u==l&&(e=4+(a-o)/s),e=Math.min(60*e,360),0>e&&(e+=360),r=(i+l)/2,n=l==i?0:.5>=r?s/(l+i):s/(2-l-i),[e,100*n,100*r]},rgb2hsv:function(t){var e,n,r,a=t[0],o=t[1],u=t[2],i=Math.min(a,o,u),l=Math.max(a,o,u),s=l-i;return n=0===l?0:s/l*1e3/10,l==i?e=0:a==l?e=(o-u)/s:o==l?e=2+(u-a)/s:u==l&&(e=4+(a-o)/s),e=Math.min(60*e,360),0>e&&(e+=360),r=l/255*1e3/10,[e,n,r]},hsl2rgb:function(t){var e,n,r,a,o,u=t[0]/360,i=t[1]/100,l=t[2]/100;if(0===i)return o=255*l,[o,o,o];n=.5>l?l*(1+i):l+i-l*i,e=2*l-n,a=[0,0,0];for(var s=0;3>s;s++)r=u+1/3*-(s-1),0>r&&r++,r>1&&r--,o=1>6*r?e+6*(n-e)*r:1>2*r?n:2>3*r?e+(n-e)*(2/3-r)*6:e,a[s]=255*o;return a},hsl2hsv:function(t){var e,n,r=t[0],a=t[1]/100,o=t[2]/100;return o*=2,a*=1>=o?o:2-o,n=(o+a)/2,e=2*a/(o+a),[r,100*e,100*n]},hsv2rgb:function(t){var e=t[0]/60,n=t[1]/100,r=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),u=255*r*(1-n),i=255*r*(1-n*o),l=255*r*(1-n*(1-o));switch(r=255*r,a){case 0:return[r,l,u];case 1:return[i,r,u];case 2:return[u,r,l];case 3:return[u,i,r];case 4:return[l,u,r];case 5:return[r,u,i]}},hsv2hsl:function(t){var e,n,r=t[0],a=t[1]/100,o=t[2]/100;return n=(2-a)*o,e=a*o,e/=1>=n?n:2-n,n/=2,[r,100*e,100*n]},rgb2hex:function(t,e,n){return\"#\"+((256+t<<8|e)<<8|n).toString(16).slice(1)},hex2rgb:function(t){return t=\"0x\"+t.slice(1).replace(t.length>4?t:/./g,\"$&$&\")|0,[t>>16,t>>8&255,255&t]}}},function(t,e){t.exports={navy:{value:\"#000080\",nicer:\"#001F3F\"},blue:{value:\"#0000ff\",nicer:\"#0074D9\"},aqua:{value:\"#00ffff\",nicer:\"#7FDBFF\"},teal:{value:\"#008080\",nicer:\"#39CCCC\"},olive:{value:\"#008000\",nicer:\"#3D9970\"},green:{value:\"#008000\",nicer:\"#2ECC40\"},lime:{value:\"#00ff00\",nicer:\"#01FF70\"},yellow:{value:\"#ffff00\",nicer:\"#FFDC00\"},orange:{value:\"#ffa500\",nicer:\"#FF851B\"},red:{value:\"#ff0000\",nicer:\"#FF4136\"},maroon:{value:\"#800000\",nicer:\"#85144B\"},fuchsia:{value:\"#ff00ff\",nicer:\"#F012BE\"},purple:{value:\"#800080\",nicer:\"#B10DC9\"},silver:{value:\"#c0c0c0\",nicer:\"#DDDDDD\"},gray:{value:\"#808080\",nicer:\"#AAAAAA\"},black:{value:\"#000000\",nicer:\"#111111\"},white:{value:\"#FFFFFF\",nicer:\"#FFFFFF\"}}},function(t,e,n){function r(t,e,n,r){return void 0===n?a.natural(t,e):void 0===r?n:a.natural(parseInt(n,10),parseInt(r,10))}var a=n(6),o=n(14);t.exports={paragraph:function(t,e){for(var n=r(3,7,t,e),a=[],o=0;n>o;o++)a.push(this.sentence());return a.join(\" \")},cparagraph:function(t,e){for(var n=r(3,7,t,e),a=[],o=0;n>o;o++)a.push(this.csentence());return a.join(\"\")},sentence:function(t,e){for(var n=r(12,18,t,e),a=[],u=0;n>u;u++)a.push(this.word());return o.capitalize(a.join(\" \"))+\".\"},csentence:function(t,e){for(var n=r(12,18,t,e),a=[],o=0;n>o;o++)a.push(this.cword());return a.join(\"\")+\"。\"},word:function(t,e){for(var n=r(3,10,t,e),o=\"\",u=0;n>u;u++)o+=a.character(\"lower\");return o},cword:function(t,e,n){var r,a=\"的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞\";switch(arguments.length){case 0:t=a,r=1;break;case 1:\"string\"==typeof arguments[0]?r=1:(r=t,t=a);break;case 2:\"string\"==typeof arguments[0]?r=e:(r=this.natural(t,e),t=a);break;case 3:r=this.natural(e,n)}for(var o=\"\",u=0;r>u;u++)o+=t.charAt(this.natural(0,t.length-1));return o},title:function(t,e){for(var n=r(3,7,t,e),a=[],o=0;n>o;o++)a.push(this.capitalize(this.word()));return a.join(\" \")},ctitle:function(t,e){for(var n=r(3,7,t,e),a=[],o=0;n>o;o++)a.push(this.cword());return a.join(\"\")}}},function(t,e,n){var r=n(3);t.exports={capitalize:function(t){return(t+\"\").charAt(0).toUpperCase()+(t+\"\").substr(1)},upper:function(t){return(t+\"\").toUpperCase()},lower:function(t){return(t+\"\").toLowerCase()},pick:function(t,e,n){return r.isArray(t)?(void 0===e&&(e=1),void 0===n&&(n=e)):(t=[].slice.call(arguments),e=1,n=1),1===e&&1===n?t[this.natural(0,t.length-1)]:this.shuffle(t,e,n)},shuffle:function(t,e,n){t=t||[];for(var r=t.slice(0),a=[],o=0,u=r.length,i=0;u>i;i++)o=this.natural(0,r.length-1),a.push(r[o]),r.splice(o,1);switch(arguments.length){case 0:case 1:return a;case 2:n=e;case 3:return e=parseInt(e,10),n=parseInt(n,10),a.slice(0,this.natural(e,n))}},order:function a(t){a.cache=a.cache||{},arguments.length>1&&(t=[].slice.call(arguments,0));var e=a.options,n=e.context.templatePath.join(\".\"),r=a.cache[n]=a.cache[n]||{index:0,array:t};return r.array[r.index++%r.array.length]}}},function(t,e){t.exports={first:function(){var t=[\"James\",\"John\",\"Robert\",\"Michael\",\"William\",\"David\",\"Richard\",\"Charles\",\"Joseph\",\"Thomas\",\"Christopher\",\"Daniel\",\"Paul\",\"Mark\",\"Donald\",\"George\",\"Kenneth\",\"Steven\",\"Edward\",\"Brian\",\"Ronald\",\"Anthony\",\"Kevin\",\"Jason\",\"Matthew\",\"Gary\",\"Timothy\",\"Jose\",\"Larry\",\"Jeffrey\",\"Frank\",\"Scott\",\"Eric\"].concat([\"Mary\",\"Patricia\",\"Linda\",\"Barbara\",\"Elizabeth\",\"Jennifer\",\"Maria\",\"Susan\",\"Margaret\",\"Dorothy\",\"Lisa\",\"Nancy\",\"Karen\",\"Betty\",\"Helen\",\"Sandra\",\"Donna\",\"Carol\",\"Ruth\",\"Sharon\",\"Michelle\",\"Laura\",\"Sarah\",\"Kimberly\",\"Deborah\",\"Jessica\",\"Shirley\",\"Cynthia\",\"Angela\",\"Melissa\",\"Brenda\",\"Amy\",\"Anna\"]);return this.pick(t)},last:function(){var t=[\"Smith\",\"Johnson\",\"Williams\",\"Brown\",\"Jones\",\"Miller\",\"Davis\",\"Garcia\",\"Rodriguez\",\"Wilson\",\"Martinez\",\"Anderson\",\"Taylor\",\"Thomas\",\"Hernandez\",\"Moore\",\"Martin\",\"Jackson\",\"Thompson\",\"White\",\"Lopez\",\"Lee\",\"Gonzalez\",\"Harris\",\"Clark\",\"Lewis\",\"Robinson\",\"Walker\",\"Perez\",\"Hall\",\"Young\",\"Allen\"];return this.pick(t)},name:function(t){return this.first()+\" \"+(t?this.first()+\" \":\"\")+this.last()},cfirst:function(){var t=\"王 李 张 刘 陈 杨 赵 黄 周 吴 徐 孙 胡 朱 高 林 何 郭 马 罗 梁 宋 郑 谢 韩 唐 冯 于 董 萧 程 曹 袁 邓 许 傅 沈 曾 彭 吕 苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 余 潘 杜 戴 夏 锺 汪 田 任 姜 范 方 石 姚 谭 廖 邹 熊 金 陆 郝 孔 白 崔 康 毛 邱 秦 江 史 顾 侯 邵 孟 龙 万 段 雷 钱 汤 尹 黎 易 常 武 乔 贺 赖 龚 文\".split(\" \");return this.pick(t)},clast:function(){var t=\"伟 芳 娜 秀英 敏 静 丽 强 磊 军 洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 平 刚 桂英\".split(\" \");return this.pick(t)},cname:function(){return this.cfirst()+this.clast()}}},function(t,e){t.exports={url:function(t,e){return(t||this.protocol())+\"://\"+(e||this.domain())+\"/\"+this.word()},protocol:function(){return this.pick(\"http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais\".split(\" \"))},domain:function(t){return this.word()+\".\"+(t||this.tld())},tld:function(){return this.pick(\"com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw\".split(\" \"))},email:function(t){return this.character(\"lower\")+\".\"+this.word()+\"@\"+(t||this.word()+\".\"+this.tld())},ip:function(){return this.natural(0,255)+\".\"+this.natural(0,255)+\".\"+this.natural(0,255)+\".\"+this.natural(0,255)}}},function(t,e,n){var r=n(18),a=[\"东北\",\"华北\",\"华东\",\"华中\",\"华南\",\"西南\",\"西北\"];t.exports={region:function(){return this.pick(a)},province:function(){return this.pick(r).name},city:function(t){var e=this.pick(r),n=this.pick(e.children);return t?[e.name,n.name].join(\" \"):n.name},county:function(t){var e=this.pick(r),n=this.pick(e.children),a=this.pick(n.children)||{name:\"-\"};return t?[e.name,n.name,a.name].join(\" \"):a.name},zip:function(t){for(var e=\"\",n=0;(t||6)>n;n++)e+=this.natural(0,9);return e}}},function(t,e){function n(t){for(var e,n={},r=0;r<t.length;r++)e=t[r],e&&e.id&&(n[e.id]=e);for(var a=[],o=0;o<t.length;o++)if(e=t[o])if(void 0!=e.pid||void 0!=e.parentId){var u=n[e.pid]||n[e.parentId];u&&(u.children||(u.children=[]),u.children.push(e))}else a.push(e);return a}var r={110000:\"北京\",110100:\"北京市\",110101:\"东城区\",110102:\"西城区\",110105:\"朝阳区\",110106:\"丰台区\",110107:\"石景山区\",110108:\"海淀区\",110109:\"门头沟区\",110111:\"房山区\",110112:\"通州区\",110113:\"顺义区\",110114:\"昌平区\",110115:\"大兴区\",110116:\"怀柔区\",110117:\"平谷区\",110228:\"密云县\",110229:\"延庆县\",110230:\"其它区\",120000:\"天津\",120100:\"天津市\",120101:\"和平区\",120102:\"河东区\",120103:\"河西区\",120104:\"南开区\",120105:\"河北区\",120106:\"红桥区\",120110:\"东丽区\",120111:\"西青区\",120112:\"津南区\",120113:\"北辰区\",120114:\"武清区\",120115:\"宝坻区\",120116:\"滨海新区\",120221:\"宁河县\",120223:\"静海县\",120225:\"蓟县\",120226:\"其它区\",130000:\"河北省\",130100:\"石家庄市\",130102:\"长安区\",130103:\"桥东区\",130104:\"桥西区\",130105:\"新华区\",130107:\"井陉矿区\",130108:\"裕华区\",130121:\"井陉县\",130123:\"正定县\",130124:\"栾城县\",130125:\"行唐县\",130126:\"灵寿县\",130127:\"高邑县\",130128:\"深泽县\",130129:\"赞皇县\",130130:\"无极县\",130131:\"平山县\",130132:\"元氏县\",130133:\"赵县\",130181:\"辛集市\",130182:\"藁城市\",130183:\"晋州市\",130184:\"新乐市\",130185:\"鹿泉市\",130186:\"其它区\",130200:\"唐山市\",130202:\"路南区\",130203:\"路北区\",130204:\"古冶区\",130205:\"开平区\",130207:\"丰南区\",130208:\"丰润区\",130223:\"滦县\",130224:\"滦南县\",130225:\"乐亭县\",130227:\"迁西县\",130229:\"玉田县\",130230:\"曹妃甸区\",130281:\"遵化市\",130283:\"迁安市\",130284:\"其它区\",130300:\"秦皇岛市\",130302:\"海港区\",130303:\"山海关区\",130304:\"北戴河区\",130321:\"青龙满族自治县\",130322:\"昌黎县\",130323:\"抚宁县\",130324:\"卢龙县\",130398:\"其它区\",130400:\"邯郸市\",130402:\"邯山区\",130403:\"丛台区\",130404:\"复兴区\",130406:\"峰峰矿区\",130421:\"邯郸县\",130423:\"临漳县\",130424:\"成安县\",130425:\"大名县\",130426:\"涉县\",130427:\"磁县\",130428:\"肥乡县\",130429:\"永年县\",130430:\"邱县\",130431:\"鸡泽县\",130432:\"广平县\",130433:\"馆陶县\",130434:\"魏县\",130435:\"曲周县\",130481:\"武安市\",130482:\"其它区\",130500:\"邢台市\",130502:\"桥东区\",130503:\"桥西区\",130521:\"邢台县\",130522:\"临城县\",130523:\"内丘县\",130524:\"柏乡县\",130525:\"隆尧县\",130526:\"任县\",130527:\"南和县\",130528:\"宁晋县\",130529:\"巨鹿县\",130530:\"新河县\",130531:\"广宗县\",130532:\"平乡县\",130533:\"威县\",130534:\"清河县\",130535:\"临西县\",130581:\"南宫市\",130582:\"沙河市\",130583:\"其它区\",130600:\"保定市\",130602:\"新市区\",130603:\"北市区\",130604:\"南市区\",130621:\"满城县\",130622:\"清苑县\",130623:\"涞水县\",130624:\"阜平县\",130625:\"徐水县\",130626:\"定兴县\",130627:\"唐县\",130628:\"高阳县\",130629:\"容城县\",130630:\"涞源县\",130631:\"望都县\",130632:\"安新县\",130633:\"易县\",130634:\"曲阳县\",130635:\"蠡县\",130636:\"顺平县\",130637:\"博野县\",130638:\"雄县\",130681:\"涿州市\",130682:\"定州市\",130683:\"安国市\",130684:\"高碑店市\",130699:\"其它区\",130700:\"张家口市\",130702:\"桥东区\",130703:\"桥西区\",130705:\"宣化区\",130706:\"下花园区\",130721:\"宣化县\",130722:\"张北县\",130723:\"康保县\",130724:\"沽源县\",130725:\"尚义县\",130726:\"蔚县\",130727:\"阳原县\",130728:\"怀安县\",130729:\"万全县\",130730:\"怀来县\",130731:\"涿鹿县\",130732:\"赤城县\",130733:\"崇礼县\",130734:\"其它区\",130800:\"承德市\",130802:\"双桥区\",130803:\"双滦区\",130804:\"鹰手营子矿区\",130821:\"承德县\",130822:\"兴隆县\",130823:\"平泉县\",130824:\"滦平县\",130825:\"隆化县\",130826:\"丰宁满族自治县\",130827:\"宽城满族自治县\",130828:\"围场满族蒙古族自治县\",130829:\"其它区\",130900:\"沧州市\",130902:\"新华区\",130903:\"运河区\",130921:\"沧县\",130922:\"青县\",130923:\"东光县\",130924:\"海兴县\",130925:\"盐山县\",130926:\"肃宁县\",130927:\"南皮县\",130928:\"吴桥县\",130929:\"献县\",130930:\"孟村回族自治县\",130981:\"泊头市\",130982:\"任丘市\",130983:\"黄骅市\",130984:\"河间市\",130985:\"其它区\",131000:\"廊坊市\",131002:\"安次区\",131003:\"广阳区\",131022:\"固安县\",131023:\"永清县\",131024:\"香河县\",131025:\"大城县\",131026:\"文安县\",131028:\"大厂回族自治县\",131081:\"霸州市\",131082:\"三河市\",131083:\"其它区\",131100:\"衡水市\",131102:\"桃城区\",131121:\"枣强县\",131122:\"武邑县\",131123:\"武强县\",131124:\"饶阳县\",131125:\"安平县\",131126:\"故城县\",131127:\"景县\",131128:\"阜城县\",131181:\"冀州市\",131182:\"深州市\",131183:\"其它区\",140000:\"山西省\",140100:\"太原市\",140105:\"小店区\",140106:\"迎泽区\",140107:\"杏花岭区\",140108:\"尖草坪区\",140109:\"万柏林区\",140110:\"晋源区\",140121:\"清徐县\",140122:\"阳曲县\",140123:\"娄烦县\",140181:\"古交市\",140182:\"其它区\",140200:\"大同市\",140202:\"城区\",140203:\"矿区\",140211:\"南郊区\",140212:\"新荣区\",140221:\"阳高县\",140222:\"天镇县\",140223:\"广灵县\",140224:\"灵丘县\",140225:\"浑源县\",140226:\"左云县\",140227:\"大同县\",140228:\"其它区\",140300:\"阳泉市\",140302:\"城区\",140303:\"矿区\",140311:\"郊区\",140321:\"平定县\",140322:\"盂县\",140323:\"其它区\",140400:\"长治市\",140421:\"长治县\",140423:\"襄垣县\",140424:\"屯留县\",140425:\"平顺县\",140426:\"黎城县\",140427:\"壶关县\",140428:\"长子县\",140429:\"武乡县\",140430:\"沁县\",140431:\"沁源县\",140481:\"潞城市\",140482:\"城区\",140483:\"郊区\",140485:\"其它区\",140500:\"晋城市\",140502:\"城区\",140521:\"沁水县\",140522:\"阳城县\",140524:\"陵川县\",140525:\"泽州县\",140581:\"高平市\",140582:\"其它区\",140600:\"朔州市\",140602:\"朔城区\",140603:\"平鲁区\",140621:\"山阴县\",140622:\"应县\",140623:\"右玉县\",140624:\"怀仁县\",140625:\"其它区\",140700:\"晋中市\",140702:\"榆次区\",140721:\"榆社县\",140722:\"左权县\",140723:\"和顺县\",140724:\"昔阳县\",140725:\"寿阳县\",140726:\"太谷县\",140727:\"祁县\",140728:\"平遥县\",140729:\"灵石县\",140781:\"介休市\",140782:\"其它区\",140800:\"运城市\",140802:\"盐湖区\",140821:\"临猗县\",140822:\"万荣县\",140823:\"闻喜县\",140824:\"稷山县\",140825:\"新绛县\",140826:\"绛县\",140827:\"垣曲县\",140828:\"夏县\",140829:\"平陆县\",140830:\"芮城县\",140881:\"永济市\",140882:\"河津市\",140883:\"其它区\",140900:\"忻州市\",140902:\"忻府区\",140921:\"定襄县\",140922:\"五台县\",140923:\"代县\",140924:\"繁峙县\",140925:\"宁武县\",140926:\"静乐县\",140927:\"神池县\",140928:\"五寨县\",140929:\"岢岚县\",140930:\"河曲县\",140931:\"保德县\",140932:\"偏关县\",140981:\"原平市\",140982:\"其它区\",141000:\"临汾市\",141002:\"尧都区\",141021:\"曲沃县\",141022:\"翼城县\",141023:\"襄汾县\",141024:\"洪洞县\",141025:\"古县\",141026:\"安泽县\",141027:\"浮山县\",141028:\"吉县\",141029:\"乡宁县\",141030:\"大宁县\",141031:\"隰县\",141032:\"永和县\",141033:\"蒲县\",141034:\"汾西县\",141081:\"侯马市\",141082:\"霍州市\",141083:\"其它区\",141100:\"吕梁市\",141102:\"离石区\",141121:\"文水县\",141122:\"交城县\",141123:\"兴县\",141124:\"临县\",141125:\"柳林县\",141126:\"石楼县\",141127:\"岚县\",141128:\"方山县\",141129:\"中阳县\",141130:\"交口县\",141181:\"孝义市\",141182:\"汾阳市\",141183:\"其它区\",150000:\"内蒙古自治区\",150100:\"呼和浩特市\",150102:\"新城区\",150103:\"回民区\",150104:\"玉泉区\",150105:\"赛罕区\",\n150121:\"土默特左旗\",150122:\"托克托县\",150123:\"和林格尔县\",150124:\"清水河县\",150125:\"武川县\",150126:\"其它区\",150200:\"包头市\",150202:\"东河区\",150203:\"昆都仑区\",150204:\"青山区\",150205:\"石拐区\",150206:\"白云鄂博矿区\",150207:\"九原区\",150221:\"土默特右旗\",150222:\"固阳县\",150223:\"达尔罕茂明安联合旗\",150224:\"其它区\",150300:\"乌海市\",150302:\"海勃湾区\",150303:\"海南区\",150304:\"乌达区\",150305:\"其它区\",150400:\"赤峰市\",150402:\"红山区\",150403:\"元宝山区\",150404:\"松山区\",150421:\"阿鲁科尔沁旗\",150422:\"巴林左旗\",150423:\"巴林右旗\",150424:\"林西县\",150425:\"克什克腾旗\",150426:\"翁牛特旗\",150428:\"喀喇沁旗\",150429:\"宁城县\",150430:\"敖汉旗\",150431:\"其它区\",150500:\"通辽市\",150502:\"科尔沁区\",150521:\"科尔沁左翼中旗\",150522:\"科尔沁左翼后旗\",150523:\"开鲁县\",150524:\"库伦旗\",150525:\"奈曼旗\",150526:\"扎鲁特旗\",150581:\"霍林郭勒市\",150582:\"其它区\",150600:\"鄂尔多斯市\",150602:\"东胜区\",150621:\"达拉特旗\",150622:\"准格尔旗\",150623:\"鄂托克前旗\",150624:\"鄂托克旗\",150625:\"杭锦旗\",150626:\"乌审旗\",150627:\"伊金霍洛旗\",150628:\"其它区\",150700:\"呼伦贝尔市\",150702:\"海拉尔区\",150703:\"扎赉诺尔区\",150721:\"阿荣旗\",150722:\"莫力达瓦达斡尔族自治旗\",150723:\"鄂伦春自治旗\",150724:\"鄂温克族自治旗\",150725:\"陈巴尔虎旗\",150726:\"新巴尔虎左旗\",150727:\"新巴尔虎右旗\",150781:\"满洲里市\",150782:\"牙克石市\",150783:\"扎兰屯市\",150784:\"额尔古纳市\",150785:\"根河市\",150786:\"其它区\",150800:\"巴彦淖尔市\",150802:\"临河区\",150821:\"五原县\",150822:\"磴口县\",150823:\"乌拉特前旗\",150824:\"乌拉特中旗\",150825:\"乌拉特后旗\",150826:\"杭锦后旗\",150827:\"其它区\",150900:\"乌兰察布市\",150902:\"集宁区\",150921:\"卓资县\",150922:\"化德县\",150923:\"商都县\",150924:\"兴和县\",150925:\"凉城县\",150926:\"察哈尔右翼前旗\",150927:\"察哈尔右翼中旗\",150928:\"察哈尔右翼后旗\",150929:\"四子王旗\",150981:\"丰镇市\",150982:\"其它区\",152200:\"兴安盟\",152201:\"乌兰浩特市\",152202:\"阿尔山市\",152221:\"科尔沁右翼前旗\",152222:\"科尔沁右翼中旗\",152223:\"扎赉特旗\",152224:\"突泉县\",152225:\"其它区\",152500:\"锡林郭勒盟\",152501:\"二连浩特市\",152502:\"锡林浩特市\",152522:\"阿巴嘎旗\",152523:\"苏尼特左旗\",152524:\"苏尼特右旗\",152525:\"东乌珠穆沁旗\",152526:\"西乌珠穆沁旗\",152527:\"太仆寺旗\",152528:\"镶黄旗\",152529:\"正镶白旗\",152530:\"正蓝旗\",152531:\"多伦县\",152532:\"其它区\",152900:\"阿拉善盟\",152921:\"阿拉善左旗\",152922:\"阿拉善右旗\",152923:\"额济纳旗\",152924:\"其它区\",210000:\"辽宁省\",210100:\"沈阳市\",210102:\"和平区\",210103:\"沈河区\",210104:\"大东区\",210105:\"皇姑区\",210106:\"铁西区\",210111:\"苏家屯区\",210112:\"东陵区\",210113:\"新城子区\",210114:\"于洪区\",210122:\"辽中县\",210123:\"康平县\",210124:\"法库县\",210181:\"新民市\",210184:\"沈北新区\",210185:\"其它区\",210200:\"大连市\",210202:\"中山区\",210203:\"西岗区\",210204:\"沙河口区\",210211:\"甘井子区\",210212:\"旅顺口区\",210213:\"金州区\",210224:\"长海县\",210281:\"瓦房店市\",210282:\"普兰店市\",210283:\"庄河市\",210298:\"其它区\",210300:\"鞍山市\",210302:\"铁东区\",210303:\"铁西区\",210304:\"立山区\",210311:\"千山区\",210321:\"台安县\",210323:\"岫岩满族自治县\",210381:\"海城市\",210382:\"其它区\",210400:\"抚顺市\",210402:\"新抚区\",210403:\"东洲区\",210404:\"望花区\",210411:\"顺城区\",210421:\"抚顺县\",210422:\"新宾满族自治县\",210423:\"清原满族自治县\",210424:\"其它区\",210500:\"本溪市\",210502:\"平山区\",210503:\"溪湖区\",210504:\"明山区\",210505:\"南芬区\",210521:\"本溪满族自治县\",210522:\"桓仁满族自治县\",210523:\"其它区\",210600:\"丹东市\",210602:\"元宝区\",210603:\"振兴区\",210604:\"振安区\",210624:\"宽甸满族自治县\",210681:\"东港市\",210682:\"凤城市\",210683:\"其它区\",210700:\"锦州市\",210702:\"古塔区\",210703:\"凌河区\",210711:\"太和区\",210726:\"黑山县\",210727:\"义县\",210781:\"凌海市\",210782:\"北镇市\",210783:\"其它区\",210800:\"营口市\",210802:\"站前区\",210803:\"西市区\",210804:\"鲅鱼圈区\",210811:\"老边区\",210881:\"盖州市\",210882:\"大石桥市\",210883:\"其它区\",210900:\"阜新市\",210902:\"海州区\",210903:\"新邱区\",210904:\"太平区\",210905:\"清河门区\",210911:\"细河区\",210921:\"阜新蒙古族自治县\",210922:\"彰武县\",210923:\"其它区\",211000:\"辽阳市\",211002:\"白塔区\",211003:\"文圣区\",211004:\"宏伟区\",211005:\"弓长岭区\",211011:\"太子河区\",211021:\"辽阳县\",211081:\"灯塔市\",211082:\"其它区\",211100:\"盘锦市\",211102:\"双台子区\",211103:\"兴隆台区\",211121:\"大洼县\",211122:\"盘山县\",211123:\"其它区\",211200:\"铁岭市\",211202:\"银州区\",211204:\"清河区\",211221:\"铁岭县\",211223:\"西丰县\",211224:\"昌图县\",211281:\"调兵山市\",211282:\"开原市\",211283:\"其它区\",211300:\"朝阳市\",211302:\"双塔区\",211303:\"龙城区\",211321:\"朝阳县\",211322:\"建平县\",211324:\"喀喇沁左翼蒙古族自治县\",211381:\"北票市\",211382:\"凌源市\",211383:\"其它区\",211400:\"葫芦岛市\",211402:\"连山区\",211403:\"龙港区\",211404:\"南票区\",211421:\"绥中县\",211422:\"建昌县\",211481:\"兴城市\",211482:\"其它区\",220000:\"吉林省\",220100:\"长春市\",220102:\"南关区\",220103:\"宽城区\",220104:\"朝阳区\",220105:\"二道区\",220106:\"绿园区\",220112:\"双阳区\",220122:\"农安县\",220181:\"九台市\",220182:\"榆树市\",220183:\"德惠市\",220188:\"其它区\",220200:\"吉林市\",220202:\"昌邑区\",220203:\"龙潭区\",220204:\"船营区\",220211:\"丰满区\",220221:\"永吉县\",220281:\"蛟河市\",220282:\"桦甸市\",220283:\"舒兰市\",220284:\"磐石市\",220285:\"其它区\",220300:\"四平市\",220302:\"铁西区\",220303:\"铁东区\",220322:\"梨树县\",220323:\"伊通满族自治县\",220381:\"公主岭市\",220382:\"双辽市\",220383:\"其它区\",220400:\"辽源市\",220402:\"龙山区\",220403:\"西安区\",220421:\"东丰县\",220422:\"东辽县\",220423:\"其它区\",220500:\"通化市\",220502:\"东昌区\",220503:\"二道江区\",220521:\"通化县\",220523:\"辉南县\",220524:\"柳河县\",220581:\"梅河口市\",220582:\"集安市\",220583:\"其它区\",220600:\"白山市\",220602:\"浑江区\",220621:\"抚松县\",220622:\"靖宇县\",220623:\"长白朝鲜族自治县\",220625:\"江源区\",220681:\"临江市\",220682:\"其它区\",220700:\"松原市\",220702:\"宁江区\",220721:\"前郭尔罗斯蒙古族自治县\",220722:\"长岭县\",220723:\"乾安县\",220724:\"扶余市\",220725:\"其它区\",220800:\"白城市\",220802:\"洮北区\",220821:\"镇赉县\",220822:\"通榆县\",220881:\"洮南市\",220882:\"大安市\",220883:\"其它区\",222400:\"延边朝鲜族自治州\",222401:\"延吉市\",222402:\"图们市\",222403:\"敦化市\",222404:\"珲春市\",222405:\"龙井市\",222406:\"和龙市\",222424:\"汪清县\",222426:\"安图县\",222427:\"其它区\",230000:\"黑龙江省\",230100:\"哈尔滨市\",230102:\"道里区\",230103:\"南岗区\",230104:\"道外区\",230106:\"香坊区\",230108:\"平房区\",230109:\"松北区\",230111:\"呼兰区\",230123:\"依兰县\",230124:\"方正县\",230125:\"宾县\",230126:\"巴彦县\",230127:\"木兰县\",230128:\"通河县\",230129:\"延寿县\",230181:\"阿城区\",230182:\"双城市\",230183:\"尚志市\",230184:\"五常市\",230186:\"其它区\",230200:\"齐齐哈尔市\",230202:\"龙沙区\",230203:\"建华区\",230204:\"铁锋区\",230205:\"昂昂溪区\",230206:\"富拉尔基区\",230207:\"碾子山区\",230208:\"梅里斯达斡尔族区\",230221:\"龙江县\",230223:\"依安县\",230224:\"泰来县\",230225:\"甘南县\",230227:\"富裕县\",230229:\"克山县\",230230:\"克东县\",230231:\"拜泉县\",230281:\"讷河市\",230282:\"其它区\",230300:\"鸡西市\",230302:\"鸡冠区\",230303:\"恒山区\",230304:\"滴道区\",230305:\"梨树区\",230306:\"城子河区\",230307:\"麻山区\",230321:\"鸡东县\",230381:\"虎林市\",230382:\"密山市\",230383:\"其它区\",230400:\"鹤岗市\",230402:\"向阳区\",230403:\"工农区\",230404:\"南山区\",230405:\"兴安区\",230406:\"东山区\",230407:\"兴山区\",230421:\"萝北县\",230422:\"绥滨县\",230423:\"其它区\",230500:\"双鸭山市\",230502:\"尖山区\",230503:\"岭东区\",230505:\"四方台区\",230506:\"宝山区\",230521:\"集贤县\",230522:\"友谊县\",230523:\"宝清县\",230524:\"饶河县\",230525:\"其它区\",230600:\"大庆市\",230602:\"萨尔图区\",230603:\"龙凤区\",230604:\"让胡路区\",230605:\"红岗区\",230606:\"大同区\",230621:\"肇州县\",230622:\"肇源县\",230623:\"林甸县\",230624:\"杜尔伯特蒙古族自治县\",230625:\"其它区\",230700:\"伊春市\",230702:\"伊春区\",230703:\"南岔区\",230704:\"友好区\",230705:\"西林区\",230706:\"翠峦区\",230707:\"新青区\",230708:\"美溪区\",230709:\"金山屯区\",230710:\"五营区\",230711:\"乌马河区\",230712:\"汤旺河区\",230713:\"带岭区\",230714:\"乌伊岭区\",230715:\"红星区\",230716:\"上甘岭区\",230722:\"嘉荫县\",230781:\"铁力市\",230782:\"其它区\",230800:\"佳木斯市\",230803:\"向阳区\",230804:\"前进区\",230805:\"东风区\",230811:\"郊区\",230822:\"桦南县\",230826:\"桦川县\",230828:\"汤原县\",230833:\"抚远县\",230881:\"同江市\",230882:\"富锦市\",230883:\"其它区\",230900:\"七台河市\",230902:\"新兴区\",230903:\"桃山区\",230904:\"茄子河区\",230921:\"勃利县\",230922:\"其它区\",231000:\"牡丹江市\",231002:\"东安区\",231003:\"阳明区\",231004:\"爱民区\",231005:\"西安区\",231024:\"东宁县\",231025:\"林口县\",231081:\"绥芬河市\",231083:\"海林市\",231084:\"宁安市\",231085:\"穆棱市\",231086:\"其它区\",231100:\"黑河市\",231102:\"爱辉区\",231121:\"嫩江县\",231123:\"逊克县\",231124:\"孙吴县\",231181:\"北安市\",231182:\"五大连池市\",231183:\"其它区\",231200:\"绥化市\",231202:\"北林区\",231221:\"望奎县\",231222:\"兰西县\",231223:\"青冈县\",231224:\"庆安县\",231225:\"明水县\",231226:\"绥棱县\",231281:\"安达市\",231282:\"肇东市\",231283:\"海伦市\",231284:\"其它区\",232700:\"大兴安岭地区\",232702:\"松岭区\",232703:\"新林区\",232704:\"呼中区\",232721:\"呼玛县\",232722:\"塔河县\",232723:\"漠河县\",232724:\"加格达奇区\",232725:\"其它区\",310000:\"上海\",310100:\"上海市\",310101:\"黄浦区\",310104:\"徐汇区\",310105:\"长宁区\",310106:\"静安区\",310107:\"普陀区\",310108:\"闸北区\",310109:\"虹口区\",310110:\"杨浦区\",310112:\"闵行区\",310113:\"宝山区\",310114:\"嘉定区\",310115:\"浦东新区\",310116:\"金山区\",310117:\"松江区\",310118:\"青浦区\",310120:\"奉贤区\",310230:\"崇明县\",310231:\"其它区\",320000:\"江苏省\",320100:\"南京市\",320102:\"玄武区\",320104:\"秦淮区\",320105:\"建邺区\",320106:\"鼓楼区\",320111:\"浦口区\",320113:\"栖霞区\",320114:\"雨花台区\",320115:\"江宁区\",320116:\"六合区\",320124:\"溧水区\",320125:\"高淳区\",320126:\"其它区\",320200:\"无锡市\",320202:\"崇安区\",320203:\"南长区\",320204:\"北塘区\",320205:\"锡山区\",320206:\"惠山区\",320211:\"滨湖区\",320281:\"江阴市\",320282:\"宜兴市\",320297:\"其它区\",320300:\"徐州市\",320302:\"鼓楼区\",320303:\"云龙区\",320305:\"贾汪区\",320311:\"泉山区\",320321:\"丰县\",320322:\"沛县\",320323:\"铜山区\",320324:\"睢宁县\",320381:\"新沂市\",320382:\"邳州市\",320383:\"其它区\",320400:\"常州市\",320402:\"天宁区\",320404:\"钟楼区\",320405:\"戚墅堰区\",320411:\"新北区\",320412:\"武进区\",320481:\"溧阳市\",320482:\"金坛市\",320483:\"其它区\",320500:\"苏州市\",320505:\"虎丘区\",320506:\"吴中区\",320507:\"相城区\",320508:\"姑苏区\",320581:\"常熟市\",320582:\"张家港市\",320583:\"昆山市\",320584:\"吴江区\",320585:\"太仓市\",320596:\"其它区\",320600:\"南通市\",320602:\"崇川区\",320611:\"港闸区\",320612:\"通州区\",320621:\"海安县\",320623:\"如东县\",320681:\"启东市\",320682:\"如皋市\",320684:\"海门市\",320694:\"其它区\",320700:\"连云港市\",320703:\"连云区\",320705:\"新浦区\",320706:\"海州区\",320721:\"赣榆县\",320722:\"东海县\",320723:\"灌云县\",320724:\"灌南县\",320725:\"其它区\",320800:\"淮安市\",320802:\"清河区\",320803:\"淮安区\",320804:\"淮阴区\",320811:\"清浦区\",320826:\"涟水县\",320829:\"洪泽县\",320830:\"盱眙县\",320831:\"金湖县\",320832:\"其它区\",320900:\"盐城市\",320902:\"亭湖区\",320903:\"盐都区\",320921:\"响水县\",320922:\"滨海县\",320923:\"阜宁县\",320924:\"射阳县\",320925:\"建湖县\",320981:\"东台市\",320982:\"大丰市\",320983:\"其它区\",321000:\"扬州市\",321002:\"广陵区\",321003:\"邗江区\",321023:\"宝应县\",321081:\"仪征市\",321084:\"高邮市\",321088:\"江都区\",321093:\"其它区\",321100:\"镇江市\",321102:\"京口区\",321111:\"润州区\",321112:\"丹徒区\",321181:\"丹阳市\",321182:\"扬中市\",321183:\"句容市\",321184:\"其它区\",321200:\"泰州市\",321202:\"海陵区\",321203:\"高港区\",321281:\"兴化市\",321282:\"靖江市\",321283:\"泰兴市\",321284:\"姜堰区\",321285:\"其它区\",321300:\"宿迁市\",321302:\"宿城区\",321311:\"宿豫区\",321322:\"沭阳县\",321323:\"泗阳县\",321324:\"泗洪县\",321325:\"其它区\",330000:\"浙江省\",330100:\"杭州市\",330102:\"上城区\",330103:\"下城区\",330104:\"江干区\",330105:\"拱墅区\",330106:\"西湖区\",330108:\"滨江区\",330109:\"萧山区\",330110:\"余杭区\",330122:\"桐庐县\",330127:\"淳安县\",330182:\"建德市\",330183:\"富阳市\",330185:\"临安市\",330186:\"其它区\",330200:\"宁波市\",330203:\"海曙区\",330204:\"江东区\",330205:\"江北区\",330206:\"北仑区\",330211:\"镇海区\",330212:\"鄞州区\",330225:\"象山县\",330226:\"宁海县\",330281:\"余姚市\",330282:\"慈溪市\",330283:\"奉化市\",330284:\"其它区\",330300:\"温州市\",330302:\"鹿城区\",330303:\"龙湾区\",330304:\"瓯海区\",330322:\"洞头县\",330324:\"永嘉县\",330326:\"平阳县\",330327:\"苍南县\",330328:\"文成县\",330329:\"泰顺县\",330381:\"瑞安市\",330382:\"乐清市\",330383:\"其它区\",330400:\"嘉兴市\",330402:\"南湖区\",330411:\"秀洲区\",330421:\"嘉善县\",330424:\"海盐县\",330481:\"海宁市\",330482:\"平湖市\",330483:\"桐乡市\",330484:\"其它区\",330500:\"湖州市\",330502:\"吴兴区\",330503:\"南浔区\",330521:\"德清县\",330522:\"长兴县\",330523:\"安吉县\",330524:\"其它区\",330600:\"绍兴市\",330602:\"越城区\",330621:\"绍兴县\",330624:\"新昌县\",330681:\"诸暨市\",330682:\"上虞市\",330683:\"嵊州市\",330684:\"其它区\",330700:\"金华市\",330702:\"婺城区\",330703:\"金东区\",330723:\"武义县\",330726:\"浦江县\",330727:\"磐安县\",330781:\"兰溪市\",330782:\"义乌市\",330783:\"东阳市\",330784:\"永康市\",330785:\"其它区\",330800:\"衢州市\",330802:\"柯城区\",330803:\"衢江区\",330822:\"常山县\",330824:\"开化县\",330825:\"龙游县\",330881:\"江山市\",330882:\"其它区\",330900:\"舟山市\",330902:\"定海区\",330903:\"普陀区\",330921:\"岱山县\",330922:\"嵊泗县\",330923:\"其它区\",331000:\"台州市\",331002:\"椒江区\",331003:\"黄岩区\",331004:\"路桥区\",331021:\"玉环县\",331022:\"三门县\",331023:\"天台县\",331024:\"仙居县\",331081:\"温岭市\",331082:\"临海市\",331083:\"其它区\",331100:\"丽水市\",331102:\"莲都区\",331121:\"青田县\",331122:\"缙云县\",331123:\"遂昌县\",331124:\"松阳县\",331125:\"云和县\",331126:\"庆元县\",331127:\"景宁畲族自治县\",331181:\"龙泉市\",331182:\"其它区\",340000:\"安徽省\",340100:\"合肥市\",340102:\"瑶海区\",340103:\"庐阳区\",340104:\"蜀山区\",340111:\"包河区\",340121:\"长丰县\",340122:\"肥东县\",340123:\"肥西县\",340192:\"其它区\",340200:\"芜湖市\",340202:\"镜湖区\",340203:\"弋江区\",340207:\"鸠江区\",340208:\"三山区\",340221:\"芜湖县\",340222:\"繁昌县\",340223:\"南陵县\",340224:\"其它区\",340300:\"蚌埠市\",340302:\"龙子湖区\",340303:\"蚌山区\",340304:\"禹会区\",340311:\"淮上区\",340321:\"怀远县\",340322:\"五河县\",340323:\"固镇县\",340324:\"其它区\",340400:\"淮南市\",340402:\"大通区\",340403:\"田家庵区\",340404:\"谢家集区\",340405:\"八公山区\",340406:\"潘集区\",340421:\"凤台县\",340422:\"其它区\",340500:\"马鞍山市\",340503:\"花山区\",340504:\"雨山区\",340506:\"博望区\",340521:\"当涂县\",340522:\"其它区\",340600:\"淮北市\",340602:\"杜集区\",340603:\"相山区\",340604:\"烈山区\",340621:\"濉溪县\",340622:\"其它区\",340700:\"铜陵市\",340702:\"铜官山区\",340703:\"狮子山区\",340711:\"郊区\",340721:\"铜陵县\",340722:\"其它区\",340800:\"安庆市\",340802:\"迎江区\",340803:\"大观区\",340811:\"宜秀区\",340822:\"怀宁县\",340823:\"枞阳县\",340824:\"潜山县\",340825:\"太湖县\",340826:\"宿松县\",340827:\"望江县\",340828:\"岳西县\",340881:\"桐城市\",340882:\"其它区\",341000:\"黄山市\",341002:\"屯溪区\",341003:\"黄山区\",341004:\"徽州区\",341021:\"歙县\",341022:\"休宁县\",341023:\"黟县\",341024:\"祁门县\",341025:\"其它区\",341100:\"滁州市\",341102:\"琅琊区\",341103:\"南谯区\",341122:\"来安县\",341124:\"全椒县\",341125:\"定远县\",341126:\"凤阳县\",341181:\"天长市\",341182:\"明光市\",341183:\"其它区\",341200:\"阜阳市\",341202:\"颍州区\",341203:\"颍东区\",341204:\"颍泉区\",341221:\"临泉县\",341222:\"太和县\",341225:\"阜南县\",341226:\"颍上县\",341282:\"界首市\",341283:\"其它区\",341300:\"宿州市\",341302:\"埇桥区\",341321:\"砀山县\",341322:\"萧县\",341323:\"灵璧县\",341324:\"泗县\",341325:\"其它区\",341400:\"巢湖市\",341421:\"庐江县\",341422:\"无为县\",341423:\"含山县\",341424:\"和县\",341500:\"六安市\",341502:\"金安区\",341503:\"裕安区\",341521:\"寿县\",341522:\"霍邱县\",341523:\"舒城县\",341524:\"金寨县\",341525:\"霍山县\",341526:\"其它区\",341600:\"亳州市\",341602:\"谯城区\",341621:\"涡阳县\",341622:\"蒙城县\",341623:\"利辛县\",341624:\"其它区\",341700:\"池州市\",341702:\"贵池区\",341721:\"东至县\",341722:\"石台县\",341723:\"青阳县\",341724:\"其它区\",341800:\"宣城市\",341802:\"宣州区\",341821:\"郎溪县\",341822:\"广德县\",341823:\"泾县\",341824:\"绩溪县\",341825:\"旌德县\",341881:\"宁国市\",341882:\"其它区\",350000:\"福建省\",350100:\"福州市\",350102:\"鼓楼区\",350103:\"台江区\",350104:\"仓山区\",350105:\"马尾区\",350111:\"晋安区\",350121:\"闽侯县\",350122:\"连江县\",350123:\"罗源县\",350124:\"闽清县\",350125:\"永泰县\",350128:\"平潭县\",350181:\"福清市\",350182:\"长乐市\",350183:\"其它区\",350200:\"厦门市\",350203:\"思明区\",350205:\"海沧区\",350206:\"湖里区\",350211:\"集美区\",350212:\"同安区\",350213:\"翔安区\",350214:\"其它区\",350300:\"莆田市\",350302:\"城厢区\",350303:\"涵江区\",350304:\"荔城区\",350305:\"秀屿区\",350322:\"仙游县\",350323:\"其它区\",350400:\"三明市\",350402:\"梅列区\",350403:\"三元区\",350421:\"明溪县\",350423:\"清流县\",350424:\"宁化县\",350425:\"大田县\",350426:\"尤溪县\",350427:\"沙县\",350428:\"将乐县\",350429:\"泰宁县\",350430:\"建宁县\",350481:\"永安市\",350482:\"其它区\",350500:\"泉州市\",350502:\"鲤城区\",350503:\"丰泽区\",350504:\"洛江区\",350505:\"泉港区\",350521:\"惠安县\",350524:\"安溪县\",350525:\"永春县\",350526:\"德化县\",350527:\"金门县\",350581:\"石狮市\",350582:\"晋江市\",350583:\"南安市\",350584:\"其它区\",350600:\"漳州市\",350602:\"芗城区\",350603:\"龙文区\",350622:\"云霄县\",350623:\"漳浦县\",350624:\"诏安县\",350625:\"长泰县\",350626:\"东山县\",350627:\"南靖县\",350628:\"平和县\",350629:\"华安县\",350681:\"龙海市\",350682:\"其它区\",350700:\"南平市\",350702:\"延平区\",350721:\"顺昌县\",350722:\"浦城县\",350723:\"光泽县\",350724:\"松溪县\",350725:\"政和县\",350781:\"邵武市\",350782:\"武夷山市\",350783:\"建瓯市\",350784:\"建阳市\",350785:\"其它区\",350800:\"龙岩市\",350802:\"新罗区\",350821:\"长汀县\",350822:\"永定县\",350823:\"上杭县\",350824:\"武平县\",350825:\"连城县\",350881:\"漳平市\",350882:\"其它区\",350900:\"宁德市\",350902:\"蕉城区\",350921:\"霞浦县\",350922:\"古田县\",350923:\"屏南县\",350924:\"寿宁县\",350925:\"周宁县\",350926:\"柘荣县\",350981:\"福安市\",350982:\"福鼎市\",350983:\"其它区\",360000:\"江西省\",360100:\"南昌市\",360102:\"东湖区\",360103:\"西湖区\",360104:\"青云谱区\",360105:\"湾里区\",360111:\"青山湖区\",360121:\"南昌县\",360122:\"新建县\",360123:\"安义县\",360124:\"进贤县\",360128:\"其它区\",360200:\"景德镇市\",360202:\"昌江区\",360203:\"珠山区\",360222:\"浮梁县\",360281:\"乐平市\",360282:\"其它区\",360300:\"萍乡市\",360302:\"安源区\",360313:\"湘东区\",360321:\"莲花县\",360322:\"上栗县\",360323:\"芦溪县\",360324:\"其它区\",360400:\"九江市\",360402:\"庐山区\",360403:\"浔阳区\",360421:\"九江县\",360423:\"武宁县\",360424:\"修水县\",360425:\"永修县\",360426:\"德安县\",360427:\"星子县\",360428:\"都昌县\",360429:\"湖口县\",360430:\"彭泽县\",360481:\"瑞昌市\",360482:\"其它区\",360483:\"共青城市\",360500:\"新余市\",360502:\"渝水区\",360521:\"分宜县\",360522:\"其它区\",360600:\"鹰潭市\",360602:\"月湖区\",360622:\"余江县\",360681:\"贵溪市\",360682:\"其它区\",360700:\"赣州市\",360702:\"章贡区\",360721:\"赣县\",360722:\"信丰县\",360723:\"大余县\",360724:\"上犹县\",360725:\"崇义县\",360726:\"安远县\",360727:\"龙南县\",360728:\"定南县\",360729:\"全南县\",360730:\"宁都县\",360731:\"于都县\",360732:\"兴国县\",360733:\"会昌县\",360734:\"寻乌县\",360735:\"石城县\",360781:\"瑞金市\",360782:\"南康市\",360783:\"其它区\",360800:\"吉安市\",360802:\"吉州区\",360803:\"青原区\",360821:\"吉安县\",360822:\"吉水县\",360823:\"峡江县\",360824:\"新干县\",360825:\"永丰县\",360826:\"泰和县\",360827:\"遂川县\",360828:\"万安县\",360829:\"安福县\",360830:\"永新县\",360881:\"井冈山市\",360882:\"其它区\",360900:\"宜春市\",360902:\"袁州区\",360921:\"奉新县\",360922:\"万载县\",360923:\"上高县\",360924:\"宜丰县\",360925:\"靖安县\",360926:\"铜鼓县\",360981:\"丰城市\",360982:\"樟树市\",360983:\"高安市\",360984:\"其它区\",361000:\"抚州市\",361002:\"临川区\",361021:\"南城县\",361022:\"黎川县\",361023:\"南丰县\",361024:\"崇仁县\",361025:\"乐安县\",361026:\"宜黄县\",361027:\"金溪县\",361028:\"资溪县\",361029:\"东乡县\",361030:\"广昌县\",361031:\"其它区\",361100:\"上饶市\",361102:\"信州区\",361121:\"上饶县\",361122:\"广丰县\",361123:\"玉山县\",361124:\"铅山县\",361125:\"横峰县\",361126:\"弋阳县\",361127:\"余干县\",361128:\"鄱阳县\",361129:\"万年县\",361130:\"婺源县\",361181:\"德兴市\",361182:\"其它区\",370000:\"山东省\",370100:\"济南市\",370102:\"历下区\",370103:\"市中区\",370104:\"槐荫区\",370105:\"天桥区\",370112:\"历城区\",370113:\"长清区\",370124:\"平阴县\",370125:\"济阳县\",370126:\"商河县\",370181:\"章丘市\",370182:\"其它区\",370200:\"青岛市\",370202:\"市南区\",370203:\"市北区\",370211:\"黄岛区\",370212:\"崂山区\",370213:\"李沧区\",370214:\"城阳区\",370281:\"胶州市\",370282:\"即墨市\",370283:\"平度市\",370285:\"莱西市\",370286:\"其它区\",370300:\"淄博市\",370302:\"淄川区\",370303:\"张店区\",370304:\"博山区\",370305:\"临淄区\",370306:\"周村区\",370321:\"桓台县\",370322:\"高青县\",370323:\"沂源县\",370324:\"其它区\",370400:\"枣庄市\",370402:\"市中区\",370403:\"薛城区\",370404:\"峄城区\",370405:\"台儿庄区\",370406:\"山亭区\",370481:\"滕州市\",370482:\"其它区\",370500:\"东营市\",370502:\"东营区\",370503:\"河口区\",370521:\"垦利县\",370522:\"利津县\",370523:\"广饶县\",370591:\"其它区\",370600:\"烟台市\",370602:\"芝罘区\",370611:\"福山区\",370612:\"牟平区\",370613:\"莱山区\",370634:\"长岛县\",370681:\"龙口市\",370682:\"莱阳市\",370683:\"莱州市\",370684:\"蓬莱市\",370685:\"招远市\",370686:\"栖霞市\",370687:\"海阳市\",370688:\"其它区\",370700:\"潍坊市\",370702:\"潍城区\",370703:\"寒亭区\",370704:\"坊子区\",370705:\"奎文区\",370724:\"临朐县\",370725:\"昌乐县\",370781:\"青州市\",370782:\"诸城市\",370783:\"寿光市\",370784:\"安丘市\",370785:\"高密市\",370786:\"昌邑市\",370787:\"其它区\",370800:\"济宁市\",370802:\"市中区\",370811:\"任城区\",370826:\"微山县\",370827:\"鱼台县\",370828:\"金乡县\",370829:\"嘉祥县\",370830:\"汶上县\",370831:\"泗水县\",370832:\"梁山县\",370881:\"曲阜市\",370882:\"兖州市\",370883:\"邹城市\",370884:\"其它区\",370900:\"泰安市\",370902:\"泰山区\",370903:\"岱岳区\",370921:\"宁阳县\",370923:\"东平县\",370982:\"新泰市\",370983:\"肥城市\",370984:\"其它区\",371000:\"威海市\",371002:\"环翠区\",371081:\"文登市\",371082:\"荣成市\",371083:\"乳山市\",371084:\"其它区\",371100:\"日照市\",371102:\"东港区\",371103:\"岚山区\",371121:\"五莲县\",371122:\"莒县\",371123:\"其它区\",371200:\"莱芜市\",371202:\"莱城区\",371203:\"钢城区\",371204:\"其它区\",371300:\"临沂市\",371302:\"兰山区\",371311:\"罗庄区\",371312:\"河东区\",371321:\"沂南县\",371322:\"郯城县\",371323:\"沂水县\",371324:\"苍山县\",371325:\"费县\",371326:\"平邑县\",371327:\"莒南县\",371328:\"蒙阴县\",371329:\"临沭县\",371330:\"其它区\",371400:\"德州市\",371402:\"德城区\",371421:\"陵县\",371422:\"宁津县\",371423:\"庆云县\",371424:\"临邑县\",371425:\"齐河县\",371426:\"平原县\",371427:\"夏津县\",371428:\"武城县\",371481:\"乐陵市\",371482:\"禹城市\",371483:\"其它区\",371500:\"聊城市\",371502:\"东昌府区\",371521:\"阳谷县\",371522:\"莘县\",371523:\"茌平县\",371524:\"东阿县\",371525:\"冠县\",371526:\"高唐县\",371581:\"临清市\",371582:\"其它区\",371600:\"滨州市\",371602:\"滨城区\",371621:\"惠民县\",371622:\"阳信县\",371623:\"无棣县\",371624:\"沾化县\",371625:\"博兴县\",371626:\"邹平县\",371627:\"其它区\",371700:\"菏泽市\",371702:\"牡丹区\",371721:\"曹县\",371722:\"单县\",371723:\"成武县\",371724:\"巨野县\",371725:\"郓城县\",371726:\"鄄城县\",371727:\"定陶县\",371728:\"东明县\",371729:\"其它区\",410000:\"河南省\",410100:\"郑州市\",410102:\"中原区\",410103:\"二七区\",410104:\"管城回族区\",410105:\"金水区\",410106:\"上街区\",410108:\"惠济区\",410122:\"中牟县\",410181:\"巩义市\",410182:\"荥阳市\",410183:\"新密市\",410184:\"新郑市\",410185:\"登封市\",410188:\"其它区\",410200:\"开封市\",410202:\"龙亭区\",410203:\"顺河回族区\",410204:\"鼓楼区\",410205:\"禹王台区\",410211:\"金明区\",410221:\"杞县\",410222:\"通许县\",410223:\"尉氏县\",410224:\"开封县\",410225:\"兰考县\",410226:\"其它区\",410300:\"洛阳市\",410302:\"老城区\",410303:\"西工区\",410304:\"瀍河回族区\",410305:\"涧西区\",410306:\"吉利区\",410307:\"洛龙区\",410322:\"孟津县\",410323:\"新安县\",410324:\"栾川县\",410325:\"嵩县\",410326:\"汝阳县\",410327:\"宜阳县\",410328:\"洛宁县\",410329:\"伊川县\",410381:\"偃师市\",410400:\"平顶山市\",410402:\"新华区\",410403:\"卫东区\",410404:\"石龙区\",410411:\"湛河区\",410421:\"宝丰县\",410422:\"叶县\",410423:\"鲁山县\",410425:\"郏县\",410481:\"舞钢市\",410482:\"汝州市\",410483:\"其它区\",410500:\"安阳市\",410502:\"文峰区\",410503:\"北关区\",410505:\"殷都区\",410506:\"龙安区\",410522:\"安阳县\",410523:\"汤阴县\",410526:\"滑县\",410527:\"内黄县\",410581:\"林州市\",410582:\"其它区\",410600:\"鹤壁市\",410602:\"鹤山区\",410603:\"山城区\",410611:\"淇滨区\",410621:\"浚县\",410622:\"淇县\",410623:\"其它区\",410700:\"新乡市\",410702:\"红旗区\",410703:\"卫滨区\",410704:\"凤泉区\",410711:\"牧野区\",410721:\"新乡县\",410724:\"获嘉县\",410725:\"原阳县\",410726:\"延津县\",410727:\"封丘县\",410728:\"长垣县\",410781:\"卫辉市\",410782:\"辉县市\",410783:\"其它区\",410800:\"焦作市\",410802:\"解放区\",410803:\"中站区\",410804:\"马村区\",410811:\"山阳区\",410821:\"修武县\",410822:\"博爱县\",410823:\"武陟县\",410825:\"温县\",410881:\"济源市\",410882:\"沁阳市\",410883:\"孟州市\",410884:\"其它区\",410900:\"濮阳市\",410902:\"华龙区\",410922:\"清丰县\",410923:\"南乐县\",410926:\"范县\",410927:\"台前县\",410928:\"濮阳县\",410929:\"其它区\",411000:\"许昌市\",411002:\"魏都区\",411023:\"许昌县\",411024:\"鄢陵县\",411025:\"襄城县\",411081:\"禹州市\",411082:\"长葛市\",411083:\"其它区\",411100:\"漯河市\",411102:\"源汇区\",411103:\"郾城区\",411104:\"召陵区\",411121:\"舞阳县\",411122:\"临颍县\",411123:\"其它区\",411200:\"三门峡市\",411202:\"湖滨区\",411221:\"渑池县\",411222:\"陕县\",411224:\"卢氏县\",411281:\"义马市\",411282:\"灵宝市\",411283:\"其它区\",411300:\"南阳市\",411302:\"宛城区\",411303:\"卧龙区\",411321:\"南召县\",411322:\"方城县\",411323:\"西峡县\",411324:\"镇平县\",411325:\"内乡县\",411326:\"淅川县\",411327:\"社旗县\",411328:\"唐河县\",411329:\"新野县\",411330:\"桐柏县\",411381:\"邓州市\",411382:\"其它区\",411400:\"商丘市\",411402:\"梁园区\",411403:\"睢阳区\",411421:\"民权县\",411422:\"睢县\",411423:\"宁陵县\",411424:\"柘城县\",411425:\"虞城县\",411426:\"夏邑县\",411481:\"永城市\",411482:\"其它区\",411500:\"信阳市\",411502:\"浉河区\",411503:\"平桥区\",411521:\"罗山县\",411522:\"光山县\",411523:\"新县\",411524:\"商城县\",411525:\"固始县\",411526:\"潢川县\",411527:\"淮滨县\",411528:\"息县\",411529:\"其它区\",411600:\"周口市\",411602:\"川汇区\",411621:\"扶沟县\",411622:\"西华县\",411623:\"商水县\",411624:\"沈丘县\",411625:\"郸城县\",411626:\"淮阳县\",411627:\"太康县\",411628:\"鹿邑县\",411681:\"项城市\",411682:\"其它区\",411700:\"驻马店市\",411702:\"驿城区\",411721:\"西平县\",411722:\"上蔡县\",411723:\"平舆县\",411724:\"正阳县\",411725:\"确山县\",411726:\"泌阳县\",411727:\"汝南县\",411728:\"遂平县\",411729:\"新蔡县\",411730:\"其它区\",420000:\"湖北省\",420100:\"武汉市\",420102:\"江岸区\",420103:\"江汉区\",420104:\"硚口区\",420105:\"汉阳区\",420106:\"武昌区\",420107:\"青山区\",420111:\"洪山区\",420112:\"东西湖区\",420113:\"汉南区\",420114:\"蔡甸区\",420115:\"江夏区\",420116:\"黄陂区\",420117:\"新洲区\",420118:\"其它区\",420200:\"黄石市\",420202:\"黄石港区\",420203:\"西塞山区\",420204:\"下陆区\",420205:\"铁山区\",420222:\"阳新县\",420281:\"大冶市\",420282:\"其它区\",420300:\"十堰市\",420302:\"茅箭区\",420303:\"张湾区\",420321:\"郧县\",420322:\"郧西县\",420323:\"竹山县\",420324:\"竹溪县\",420325:\"房县\",420381:\"丹江口市\",420383:\"其它区\",420500:\"宜昌市\",420502:\"西陵区\",420503:\"伍家岗区\",420504:\"点军区\",420505:\"猇亭区\",420506:\"夷陵区\",420525:\"远安县\",420526:\"兴山县\",420527:\"秭归县\",420528:\"长阳土家族自治县\",420529:\"五峰土家族自治县\",420581:\"宜都市\",420582:\"当阳市\",420583:\"枝江市\",420584:\"其它区\",420600:\"襄阳市\",420602:\"襄城区\",420606:\"樊城区\",420607:\"襄州区\",420624:\"南漳县\",420625:\"谷城县\",420626:\"保康县\",420682:\"老河口市\",420683:\"枣阳市\",420684:\"宜城市\",420685:\"其它区\",420700:\"鄂州市\",420702:\"梁子湖区\",420703:\"华容区\",420704:\"鄂城区\",420705:\"其它区\",420800:\"荆门市\",420802:\"东宝区\",420804:\"掇刀区\",420821:\"京山县\",420822:\"沙洋县\",420881:\"钟祥市\",420882:\"其它区\",420900:\"孝感市\",420902:\"孝南区\",420921:\"孝昌县\",420922:\"大悟县\",420923:\"云梦县\",420981:\"应城市\",420982:\"安陆市\",420984:\"汉川市\",420985:\"其它区\",421000:\"荆州市\",421002:\"沙市区\",421003:\"荆州区\",421022:\"公安县\",421023:\"监利县\",421024:\"江陵县\",421081:\"石首市\",421083:\"洪湖市\",421087:\"松滋市\",421088:\"其它区\",421100:\"黄冈市\",421102:\"黄州区\",421121:\"团风县\",421122:\"红安县\",421123:\"罗田县\",421124:\"英山县\",421125:\"浠水县\",421126:\"蕲春县\",421127:\"黄梅县\",421181:\"麻城市\",421182:\"武穴市\",421183:\"其它区\",421200:\"咸宁市\",421202:\"咸安区\",421221:\"嘉鱼县\",421222:\"通城县\",421223:\"崇阳县\",421224:\"通山县\",421281:\"赤壁市\",421283:\"其它区\",421300:\"随州市\",421302:\"曾都区\",421321:\"随县\",421381:\"广水市\",421382:\"其它区\",422800:\"恩施土家族苗族自治州\",422801:\"恩施市\",422802:\"利川市\",422822:\"建始县\",422823:\"巴东县\",422825:\"宣恩县\",422826:\"咸丰县\",422827:\"来凤县\",422828:\"鹤峰县\",422829:\"其它区\",429004:\"仙桃市\",429005:\"潜江市\",429006:\"天门市\",429021:\"神农架林区\",430000:\"湖南省\",430100:\"长沙市\",430102:\"芙蓉区\",430103:\"天心区\",430104:\"岳麓区\",430105:\"开福区\",430111:\"雨花区\",430121:\"长沙县\",430122:\"望城区\",430124:\"宁乡县\",430181:\"浏阳市\",430182:\"其它区\",430200:\"株洲市\",430202:\"荷塘区\",430203:\"芦淞区\",430204:\"石峰区\",430211:\"天元区\",430221:\"株洲县\",430223:\"攸县\",430224:\"茶陵县\",430225:\"炎陵县\",430281:\"醴陵市\",430282:\"其它区\",430300:\"湘潭市\",430302:\"雨湖区\",430304:\"岳塘区\",430321:\"湘潭县\",430381:\"湘乡市\",430382:\"韶山市\",430383:\"其它区\",430400:\"衡阳市\",430405:\"珠晖区\",430406:\"雁峰区\",430407:\"石鼓区\",430408:\"蒸湘区\",430412:\"南岳区\",430421:\"衡阳县\",430422:\"衡南县\",430423:\"衡山县\",430424:\"衡东县\",430426:\"祁东县\",430481:\"耒阳市\",430482:\"常宁市\",430483:\"其它区\",430500:\"邵阳市\",430502:\"双清区\",430503:\"大祥区\",430511:\"北塔区\",430521:\"邵东县\",430522:\"新邵县\",430523:\"邵阳县\",430524:\"隆回县\",430525:\"洞口县\",430527:\"绥宁县\",430528:\"新宁县\",430529:\"城步苗族自治县\",430581:\"武冈市\",430582:\"其它区\",430600:\"岳阳市\",430602:\"岳阳楼区\",430603:\"云溪区\",430611:\"君山区\",430621:\"岳阳县\",430623:\"华容县\",430624:\"湘阴县\",430626:\"平江县\",430681:\"汨罗市\",430682:\"临湘市\",430683:\"其它区\",430700:\"常德市\",430702:\"武陵区\",430703:\"鼎城区\",430721:\"安乡县\",430722:\"汉寿县\",430723:\"澧县\",430724:\"临澧县\",430725:\"桃源县\",430726:\"石门县\",430781:\"津市市\",430782:\"其它区\",430800:\"张家界市\",430802:\"永定区\",430811:\"武陵源区\",430821:\"慈利县\",430822:\"桑植县\",430823:\"其它区\",430900:\"益阳市\",430902:\"资阳区\",430903:\"赫山区\",430921:\"南县\",430922:\"桃江县\",430923:\"安化县\",430981:\"沅江市\",430982:\"其它区\",431000:\"郴州市\",431002:\"北湖区\",431003:\"苏仙区\",431021:\"桂阳县\",431022:\"宜章县\",431023:\"永兴县\",431024:\"嘉禾县\",431025:\"临武县\",431026:\"汝城县\",431027:\"桂东县\",431028:\"安仁县\",431081:\"资兴市\",431082:\"其它区\",431100:\"永州市\",431102:\"零陵区\",431103:\"冷水滩区\",431121:\"祁阳县\",431122:\"东安县\",431123:\"双牌县\",431124:\"道县\",431125:\"江永县\",431126:\"宁远县\",431127:\"蓝山县\",431128:\"新田县\",431129:\"江华瑶族自治县\",431130:\"其它区\",431200:\"怀化市\",431202:\"鹤城区\",431221:\"中方县\",431222:\"沅陵县\",431223:\"辰溪县\",431224:\"溆浦县\",431225:\"会同县\",431226:\"麻阳苗族自治县\",431227:\"新晃侗族自治县\",431228:\"芷江侗族自治县\",431229:\"靖州苗族侗族自治县\",431230:\"通道侗族自治县\",431281:\"洪江市\",431282:\"其它区\",431300:\"娄底市\",431302:\"娄星区\",431321:\"双峰县\",431322:\"新化县\",431381:\"冷水江市\",431382:\"涟源市\",431383:\"其它区\",433100:\"湘西土家族苗族自治州\",433101:\"吉首市\",433122:\"泸溪县\",433123:\"凤凰县\",433124:\"花垣县\",433125:\"保靖县\",433126:\"古丈县\",433127:\"永顺县\",433130:\"龙山县\",433131:\"其它区\",440000:\"广东省\",440100:\"广州市\",440103:\"荔湾区\",440104:\"越秀区\",440105:\"海珠区\",440106:\"天河区\",440111:\"白云区\",440112:\"黄埔区\",440113:\"番禺区\",440114:\"花都区\",440115:\"南沙区\",440116:\"萝岗区\",440183:\"增城市\",440184:\"从化市\",440189:\"其它区\",440200:\"韶关市\",440203:\"武江区\",440204:\"浈江区\",440205:\"曲江区\",440222:\"始兴县\",440224:\"仁化县\",440229:\"翁源县\",440232:\"乳源瑶族自治县\",440233:\"新丰县\",440281:\"乐昌市\",440282:\"南雄市\",440283:\"其它区\",440300:\"深圳市\",440303:\"罗湖区\",440304:\"福田区\",440305:\"南山区\",440306:\"宝安区\",440307:\"龙岗区\",440308:\"盐田区\",440309:\"其它区\",440320:\"光明新区\",440321:\"坪山新区\",440322:\"大鹏新区\",440323:\"龙华新区\",440400:\"珠海市\",440402:\"香洲区\",440403:\"斗门区\",440404:\"金湾区\",440488:\"其它区\",440500:\"汕头市\",440507:\"龙湖区\",440511:\"金平区\",440512:\"濠江区\",440513:\"潮阳区\",440514:\"潮南区\",440515:\"澄海区\",440523:\"南澳县\",440524:\"其它区\",440600:\"佛山市\",440604:\"禅城区\",440605:\"南海区\",440606:\"顺德区\",440607:\"三水区\",440608:\"高明区\",440609:\"其它区\",440700:\"江门市\",440703:\"蓬江区\",440704:\"江海区\",440705:\"新会区\",440781:\"台山市\",440783:\"开平市\",440784:\"鹤山市\",440785:\"恩平市\",440786:\"其它区\",440800:\"湛江市\",440802:\"赤坎区\",440803:\"霞山区\",440804:\"坡头区\",440811:\"麻章区\",440823:\"遂溪县\",440825:\"徐闻县\",440881:\"廉江市\",440882:\"雷州市\",440883:\"吴川市\",440884:\"其它区\",440900:\"茂名市\",440902:\"茂南区\",440903:\"茂港区\",440923:\"电白县\",440981:\"高州市\",440982:\"化州市\",440983:\"信宜市\",440984:\"其它区\",441200:\"肇庆市\",441202:\"端州区\",441203:\"鼎湖区\",441223:\"广宁县\",441224:\"怀集县\",441225:\"封开县\",441226:\"德庆县\",441283:\"高要市\",441284:\"四会市\",441285:\"其它区\",441300:\"惠州市\",441302:\"惠城区\",441303:\"惠阳区\",441322:\"博罗县\",441323:\"惠东县\",441324:\"龙门县\",441325:\"其它区\",441400:\"梅州市\",441402:\"梅江区\",441421:\"梅县\",441422:\"大埔县\",441423:\"丰顺县\",441424:\"五华县\",441426:\"平远县\",441427:\"蕉岭县\",441481:\"兴宁市\",441482:\"其它区\",441500:\"汕尾市\",441502:\"城区\",441521:\"海丰县\",441523:\"陆河县\",441581:\"陆丰市\",441582:\"其它区\",441600:\"河源市\",441602:\"源城区\",441621:\"紫金县\",441622:\"龙川县\",441623:\"连平县\",441624:\"和平县\",441625:\"东源县\",441626:\"其它区\",441700:\"阳江市\",441702:\"江城区\",441721:\"阳西县\",441723:\"阳东县\",441781:\"阳春市\",441782:\"其它区\",441800:\"清远市\",441802:\"清城区\",441821:\"佛冈县\",441823:\"阳山县\",441825:\"连山壮族瑶族自治县\",441826:\"连南瑶族自治县\",441827:\"清新区\",441881:\"英德市\",441882:\"连州市\",441883:\"其它区\",441900:\"东莞市\",442000:\"中山市\",442101:\"东沙群岛\",445100:\"潮州市\",445102:\"湘桥区\",445121:\"潮安区\",445122:\"饶平县\",445186:\"其它区\",445200:\"揭阳市\",445202:\"榕城区\",445221:\"揭东区\",445222:\"揭西县\",445224:\"惠来县\",445281:\"普宁市\",445285:\"其它区\",445300:\"云浮市\",445302:\"云城区\",445321:\"新兴县\",445322:\"郁南县\",445323:\"云安县\",445381:\"罗定市\",445382:\"其它区\",450000:\"广西壮族自治区\",450100:\"南宁市\",450102:\"兴宁区\",450103:\"青秀区\",450105:\"江南区\",450107:\"西乡塘区\",450108:\"良庆区\",450109:\"邕宁区\",450122:\"武鸣县\",450123:\"隆安县\",450124:\"马山县\",450125:\"上林县\",450126:\"宾阳县\",450127:\"横县\",450128:\"其它区\",450200:\"柳州市\",450202:\"城中区\",450203:\"鱼峰区\",450204:\"柳南区\",450205:\"柳北区\",450221:\"柳江县\",450222:\"柳城县\",450223:\"鹿寨县\",450224:\"融安县\",450225:\"融水苗族自治县\",450226:\"三江侗族自治县\",450227:\"其它区\",450300:\"桂林市\",450302:\"秀峰区\",450303:\"叠彩区\",450304:\"象山区\",450305:\"七星区\",450311:\"雁山区\",450321:\"阳朔县\",450322:\"临桂区\",450323:\"灵川县\",450324:\"全州县\",450325:\"兴安县\",450326:\"永福县\",450327:\"灌阳县\",450328:\"龙胜各族自治县\",450329:\"资源县\",450330:\"平乐县\",450331:\"荔浦县\",450332:\"恭城瑶族自治县\",450333:\"其它区\",450400:\"梧州市\",450403:\"万秀区\",450405:\"长洲区\",450406:\"龙圩区\",450421:\"苍梧县\",450422:\"藤县\",450423:\"蒙山县\",450481:\"岑溪市\",450482:\"其它区\",450500:\"北海市\",450502:\"海城区\",450503:\"银海区\",450512:\"铁山港区\",450521:\"合浦县\",450522:\"其它区\",450600:\"防城港市\",450602:\"港口区\",450603:\"防城区\",450621:\"上思县\",450681:\"东兴市\",450682:\"其它区\",450700:\"钦州市\",450702:\"钦南区\",450703:\"钦北区\",450721:\"灵山县\",450722:\"浦北县\",450723:\"其它区\",450800:\"贵港市\",450802:\"港北区\",450803:\"港南区\",450804:\"覃塘区\",450821:\"平南县\",450881:\"桂平市\",450882:\"其它区\",450900:\"玉林市\",450902:\"玉州区\",450903:\"福绵区\",450921:\"容县\",450922:\"陆川县\",450923:\"博白县\",450924:\"兴业县\",450981:\"北流市\",450982:\"其它区\",451000:\"百色市\",451002:\"右江区\",451021:\"田阳县\",451022:\"田东县\",451023:\"平果县\",451024:\"德保县\",451025:\"靖西县\",451026:\"那坡县\",451027:\"凌云县\",451028:\"乐业县\",451029:\"田林县\",451030:\"西林县\",451031:\"隆林各族自治县\",451032:\"其它区\",451100:\"贺州市\",451102:\"八步区\",451119:\"平桂管理区\",451121:\"昭平县\",451122:\"钟山县\",451123:\"富川瑶族自治县\",451124:\"其它区\",451200:\"河池市\",451202:\"金城江区\",451221:\"南丹县\",451222:\"天峨县\",451223:\"凤山县\",451224:\"东兰县\",451225:\"罗城仫佬族自治县\",451226:\"环江毛南族自治县\",451227:\"巴马瑶族自治县\",451228:\"都安瑶族自治县\",451229:\"大化瑶族自治县\",451281:\"宜州市\",451282:\"其它区\",451300:\"来宾市\",451302:\"兴宾区\",451321:\"忻城县\",451322:\"象州县\",451323:\"武宣县\",451324:\"金秀瑶族自治县\",451381:\"合山市\",451382:\"其它区\",451400:\"崇左市\",451402:\"江州区\",451421:\"扶绥县\",451422:\"宁明县\",451423:\"龙州县\",451424:\"大新县\",451425:\"天等县\",451481:\"凭祥市\",451482:\"其它区\",460000:\"海南省\",460100:\"海口市\",460105:\"秀英区\",460106:\"龙华区\",460107:\"琼山区\",460108:\"美兰区\",460109:\"其它区\",460200:\"三亚市\",460300:\"三沙市\",460321:\"西沙群岛\",460322:\"南沙群岛\",460323:\"中沙群岛的岛礁及其海域\",469001:\"五指山市\",469002:\"琼海市\",469003:\"儋州市\",469005:\"文昌市\",469006:\"万宁市\",469007:\"东方市\",469025:\"定安县\",469026:\"屯昌县\",469027:\"澄迈县\",469028:\"临高县\",469030:\"白沙黎族自治县\",469031:\"昌江黎族自治县\",469033:\"乐东黎族自治县\",469034:\"陵水黎族自治县\",469035:\"保亭黎族苗族自治县\",469036:\"琼中黎族苗族自治县\",471005:\"其它区\",500000:\"重庆\",500100:\"重庆市\",500101:\"万州区\",500102:\"涪陵区\",500103:\"渝中区\",500104:\"大渡口区\",500105:\"江北区\",500106:\"沙坪坝区\",500107:\"九龙坡区\",500108:\"南岸区\",500109:\"北碚区\",500110:\"万盛区\",500111:\"双桥区\",500112:\"渝北区\",500113:\"巴南区\",500114:\"黔江区\",500115:\"长寿区\",500222:\"綦江区\",500223:\"潼南县\",500224:\"铜梁县\",500225:\"大足区\",500226:\"荣昌县\",500227:\"璧山县\",500228:\"梁平县\",500229:\"城口县\",500230:\"丰都县\",500231:\"垫江县\",500232:\"武隆县\",500233:\"忠县\",500234:\"开县\",500235:\"云阳县\",500236:\"奉节县\",500237:\"巫山县\",500238:\"巫溪县\",500240:\"石柱土家族自治县\",500241:\"秀山土家族苗族自治县\",500242:\"酉阳土家族苗族自治县\",500243:\"彭水苗族土家族自治县\",500381:\"江津区\",500382:\"合川区\",500383:\"永川区\",500384:\"南川区\",500385:\"其它区\",510000:\"四川省\",510100:\"成都市\",510104:\"锦江区\",510105:\"青羊区\",510106:\"金牛区\",510107:\"武侯区\",510108:\"成华区\",510112:\"龙泉驿区\",510113:\"青白江区\",510114:\"新都区\",510115:\"温江区\",510121:\"金堂县\",510122:\"双流县\",510124:\"郫县\",510129:\"大邑县\",510131:\"蒲江县\",510132:\"新津县\",510181:\"都江堰市\",510182:\"彭州市\",510183:\"邛崃市\",510184:\"崇州市\",510185:\"其它区\",510300:\"自贡市\",510302:\"自流井区\",510303:\"贡井区\",510304:\"大安区\",510311:\"沿滩区\",510321:\"荣县\",510322:\"富顺县\",510323:\"其它区\",510400:\"攀枝花市\",510402:\"东区\",510403:\"西区\",510411:\"仁和区\",510421:\"米易县\",510422:\"盐边县\",510423:\"其它区\",510500:\"泸州市\",510502:\"江阳区\",510503:\"纳溪区\",510504:\"龙马潭区\",510521:\"泸县\",510522:\"合江县\",510524:\"叙永县\",510525:\"古蔺县\",510526:\"其它区\",510600:\"德阳市\",510603:\"旌阳区\",510623:\"中江县\",510626:\"罗江县\",510681:\"广汉市\",510682:\"什邡市\",510683:\"绵竹市\",510684:\"其它区\",510700:\"绵阳市\",510703:\"涪城区\",510704:\"游仙区\",510722:\"三台县\",510723:\"盐亭县\",510724:\"安县\",510725:\"梓潼县\",510726:\"北川羌族自治县\",510727:\"平武县\",510781:\"江油市\",510782:\"其它区\",510800:\"广元市\",510802:\"利州区\",510811:\"昭化区\",510812:\"朝天区\",510821:\"旺苍县\",510822:\"青川县\",510823:\"剑阁县\",510824:\"苍溪县\",510825:\"其它区\",510900:\"遂宁市\",510903:\"船山区\",510904:\"安居区\",510921:\"蓬溪县\",510922:\"射洪县\",510923:\"大英县\",510924:\"其它区\",511000:\"内江市\",511002:\"市中区\",511011:\"东兴区\",511024:\"威远县\",511025:\"资中县\",511028:\"隆昌县\",511029:\"其它区\",511100:\"乐山市\",511102:\"市中区\",511111:\"沙湾区\",511112:\"五通桥区\",511113:\"金口河区\",511123:\"犍为县\",511124:\"井研县\",511126:\"夹江县\",511129:\"沐川县\",511132:\"峨边彝族自治县\",511133:\"马边彝族自治县\",511181:\"峨眉山市\",511182:\"其它区\",511300:\"南充市\",511302:\"顺庆区\",511303:\"高坪区\",511304:\"嘉陵区\",511321:\"南部县\",511322:\"营山县\",511323:\"蓬安县\",511324:\"仪陇县\",511325:\"西充县\",511381:\"阆中市\",511382:\"其它区\",511400:\"眉山市\",511402:\"东坡区\",511421:\"仁寿县\",511422:\"彭山县\",511423:\"洪雅县\",511424:\"丹棱县\",511425:\"青神县\",511426:\"其它区\",511500:\"宜宾市\",511502:\"翠屏区\",511521:\"宜宾县\",511522:\"南溪区\",511523:\"江安县\",511524:\"长宁县\",511525:\"高县\",511526:\"珙县\",511527:\"筠连县\",511528:\"兴文县\",511529:\"屏山县\",511530:\"其它区\",511600:\"广安市\",511602:\"广安区\",511603:\"前锋区\",511621:\"岳池县\",511622:\"武胜县\",511623:\"邻水县\",511681:\"华蓥市\",511683:\"其它区\",511700:\"达州市\",511702:\"通川区\",511721:\"达川区\",511722:\"宣汉县\",511723:\"开江县\",511724:\"大竹县\",511725:\"渠县\",511781:\"万源市\",511782:\"其它区\",511800:\"雅安市\",511802:\"雨城区\",511821:\"名山区\",511822:\"荥经县\",511823:\"汉源县\",511824:\"石棉县\",511825:\"天全县\",511826:\"芦山县\",511827:\"宝兴县\",511828:\"其它区\",511900:\"巴中市\",511902:\"巴州区\",511903:\"恩阳区\",511921:\"通江县\",511922:\"南江县\",511923:\"平昌县\",511924:\"其它区\",512000:\"资阳市\",512002:\"雁江区\",512021:\"安岳县\",512022:\"乐至县\",512081:\"简阳市\",512082:\"其它区\",513200:\"阿坝藏族羌族自治州\",513221:\"汶川县\",513222:\"理县\",513223:\"茂县\",513224:\"松潘县\",513225:\"九寨沟县\",513226:\"金川县\",513227:\"小金县\",513228:\"黑水县\",513229:\"马尔康县\",513230:\"壤塘县\",513231:\"阿坝县\",513232:\"若尔盖县\",513233:\"红原县\",513234:\"其它区\",513300:\"甘孜藏族自治州\",513321:\"康定县\",513322:\"泸定县\",513323:\"丹巴县\",513324:\"九龙县\",513325:\"雅江县\",513326:\"道孚县\",513327:\"炉霍县\",513328:\"甘孜县\",513329:\"新龙县\",513330:\"德格县\",513331:\"白玉县\",513332:\"石渠县\",513333:\"色达县\",513334:\"理塘县\",513335:\"巴塘县\",513336:\"乡城县\",513337:\"稻城县\",513338:\"得荣县\",513339:\"其它区\",513400:\"凉山彝族自治州\",513401:\"西昌市\",513422:\"木里藏族自治县\",513423:\"盐源县\",513424:\"德昌县\",513425:\"会理县\",513426:\"会东县\",513427:\"宁南县\",513428:\"普格县\",513429:\"布拖县\",513430:\"金阳县\",513431:\"昭觉县\",513432:\"喜德县\",513433:\"冕宁县\",513434:\"越西县\",513435:\"甘洛县\",513436:\"美姑县\",513437:\"雷波县\",513438:\"其它区\",520000:\"贵州省\",520100:\"贵阳市\",520102:\"南明区\",520103:\"云岩区\",520111:\"花溪区\",520112:\"乌当区\",520113:\"白云区\",520121:\"开阳县\",520122:\"息烽县\",520123:\"修文县\",520151:\"观山湖区\",520181:\"清镇市\",520182:\"其它区\",520200:\"六盘水市\",520201:\"钟山区\",520203:\"六枝特区\",520221:\"水城县\",520222:\"盘县\",520223:\"其它区\",520300:\"遵义市\",520302:\"红花岗区\",520303:\"汇川区\",520321:\"遵义县\",520322:\"桐梓县\",520323:\"绥阳县\",520324:\"正安县\",520325:\"道真仡佬族苗族自治县\",520326:\"务川仡佬族苗族自治县\",520327:\"凤冈县\",520328:\"湄潭县\",520329:\"余庆县\",520330:\"习水县\",520381:\"赤水市\",520382:\"仁怀市\",520383:\"其它区\",520400:\"安顺市\",520402:\"西秀区\",520421:\"平坝县\",520422:\"普定县\",520423:\"镇宁布依族苗族自治县\",520424:\"关岭布依族苗族自治县\",520425:\"紫云苗族布依族自治县\",520426:\"其它区\",522200:\"铜仁市\",522201:\"碧江区\",522222:\"江口县\",522223:\"玉屏侗族自治县\",522224:\"石阡县\",522225:\"思南县\",522226:\"印江土家族苗族自治县\",522227:\"德江县\",522228:\"沿河土家族自治县\",522229:\"松桃苗族自治县\",522230:\"万山区\",\n522231:\"其它区\",522300:\"黔西南布依族苗族自治州\",522301:\"兴义市\",522322:\"兴仁县\",522323:\"普安县\",522324:\"晴隆县\",522325:\"贞丰县\",522326:\"望谟县\",522327:\"册亨县\",522328:\"安龙县\",522329:\"其它区\",522400:\"毕节市\",522401:\"七星关区\",522422:\"大方县\",522423:\"黔西县\",522424:\"金沙县\",522425:\"织金县\",522426:\"纳雍县\",522427:\"威宁彝族回族苗族自治县\",522428:\"赫章县\",522429:\"其它区\",522600:\"黔东南苗族侗族自治州\",522601:\"凯里市\",522622:\"黄平县\",522623:\"施秉县\",522624:\"三穗县\",522625:\"镇远县\",522626:\"岑巩县\",522627:\"天柱县\",522628:\"锦屏县\",522629:\"剑河县\",522630:\"台江县\",522631:\"黎平县\",522632:\"榕江县\",522633:\"从江县\",522634:\"雷山县\",522635:\"麻江县\",522636:\"丹寨县\",522637:\"其它区\",522700:\"黔南布依族苗族自治州\",522701:\"都匀市\",522702:\"福泉市\",522722:\"荔波县\",522723:\"贵定县\",522725:\"瓮安县\",522726:\"独山县\",522727:\"平塘县\",522728:\"罗甸县\",522729:\"长顺县\",522730:\"龙里县\",522731:\"惠水县\",522732:\"三都水族自治县\",522733:\"其它区\",530000:\"云南省\",530100:\"昆明市\",530102:\"五华区\",530103:\"盘龙区\",530111:\"官渡区\",530112:\"西山区\",530113:\"东川区\",530121:\"呈贡区\",530122:\"晋宁县\",530124:\"富民县\",530125:\"宜良县\",530126:\"石林彝族自治县\",530127:\"嵩明县\",530128:\"禄劝彝族苗族自治县\",530129:\"寻甸回族彝族自治县\",530181:\"安宁市\",530182:\"其它区\",530300:\"曲靖市\",530302:\"麒麟区\",530321:\"马龙县\",530322:\"陆良县\",530323:\"师宗县\",530324:\"罗平县\",530325:\"富源县\",530326:\"会泽县\",530328:\"沾益县\",530381:\"宣威市\",530382:\"其它区\",530400:\"玉溪市\",530402:\"红塔区\",530421:\"江川县\",530422:\"澄江县\",530423:\"通海县\",530424:\"华宁县\",530425:\"易门县\",530426:\"峨山彝族自治县\",530427:\"新平彝族傣族自治县\",530428:\"元江哈尼族彝族傣族自治县\",530429:\"其它区\",530500:\"保山市\",530502:\"隆阳区\",530521:\"施甸县\",530522:\"腾冲县\",530523:\"龙陵县\",530524:\"昌宁县\",530525:\"其它区\",530600:\"昭通市\",530602:\"昭阳区\",530621:\"鲁甸县\",530622:\"巧家县\",530623:\"盐津县\",530624:\"大关县\",530625:\"永善县\",530626:\"绥江县\",530627:\"镇雄县\",530628:\"彝良县\",530629:\"威信县\",530630:\"水富县\",530631:\"其它区\",530700:\"丽江市\",530702:\"古城区\",530721:\"玉龙纳西族自治县\",530722:\"永胜县\",530723:\"华坪县\",530724:\"宁蒗彝族自治县\",530725:\"其它区\",530800:\"普洱市\",530802:\"思茅区\",530821:\"宁洱哈尼族彝族自治县\",530822:\"墨江哈尼族自治县\",530823:\"景东彝族自治县\",530824:\"景谷傣族彝族自治县\",530825:\"镇沅彝族哈尼族拉祜族自治县\",530826:\"江城哈尼族彝族自治县\",530827:\"孟连傣族拉祜族佤族自治县\",530828:\"澜沧拉祜族自治县\",530829:\"西盟佤族自治县\",530830:\"其它区\",530900:\"临沧市\",530902:\"临翔区\",530921:\"凤庆县\",530922:\"云县\",530923:\"永德县\",530924:\"镇康县\",530925:\"双江拉祜族佤族布朗族傣族自治县\",530926:\"耿马傣族佤族自治县\",530927:\"沧源佤族自治县\",530928:\"其它区\",532300:\"楚雄彝族自治州\",532301:\"楚雄市\",532322:\"双柏县\",532323:\"牟定县\",532324:\"南华县\",532325:\"姚安县\",532326:\"大姚县\",532327:\"永仁县\",532328:\"元谋县\",532329:\"武定县\",532331:\"禄丰县\",532332:\"其它区\",532500:\"红河哈尼族彝族自治州\",532501:\"个旧市\",532502:\"开远市\",532522:\"蒙自市\",532523:\"屏边苗族自治县\",532524:\"建水县\",532525:\"石屏县\",532526:\"弥勒市\",532527:\"泸西县\",532528:\"元阳县\",532529:\"红河县\",532530:\"金平苗族瑶族傣族自治县\",532531:\"绿春县\",532532:\"河口瑶族自治县\",532533:\"其它区\",532600:\"文山壮族苗族自治州\",532621:\"文山市\",532622:\"砚山县\",532623:\"西畴县\",532624:\"麻栗坡县\",532625:\"马关县\",532626:\"丘北县\",532627:\"广南县\",532628:\"富宁县\",532629:\"其它区\",532800:\"西双版纳傣族自治州\",532801:\"景洪市\",532822:\"勐海县\",532823:\"勐腊县\",532824:\"其它区\",532900:\"大理白族自治州\",532901:\"大理市\",532922:\"漾濞彝族自治县\",532923:\"祥云县\",532924:\"宾川县\",532925:\"弥渡县\",532926:\"南涧彝族自治县\",532927:\"巍山彝族回族自治县\",532928:\"永平县\",532929:\"云龙县\",532930:\"洱源县\",532931:\"剑川县\",532932:\"鹤庆县\",532933:\"其它区\",533100:\"德宏傣族景颇族自治州\",533102:\"瑞丽市\",533103:\"芒市\",533122:\"梁河县\",533123:\"盈江县\",533124:\"陇川县\",533125:\"其它区\",533300:\"怒江傈僳族自治州\",533321:\"泸水县\",533323:\"福贡县\",533324:\"贡山独龙族怒族自治县\",533325:\"兰坪白族普米族自治县\",533326:\"其它区\",533400:\"迪庆藏族自治州\",533421:\"香格里拉县\",533422:\"德钦县\",533423:\"维西傈僳族自治县\",533424:\"其它区\",540000:\"西藏自治区\",540100:\"拉萨市\",540102:\"城关区\",540121:\"林周县\",540122:\"当雄县\",540123:\"尼木县\",540124:\"曲水县\",540125:\"堆龙德庆县\",540126:\"达孜县\",540127:\"墨竹工卡县\",540128:\"其它区\",542100:\"昌都地区\",542121:\"昌都县\",542122:\"江达县\",542123:\"贡觉县\",542124:\"类乌齐县\",542125:\"丁青县\",542126:\"察雅县\",542127:\"八宿县\",542128:\"左贡县\",542129:\"芒康县\",542132:\"洛隆县\",542133:\"边坝县\",542134:\"其它区\",542200:\"山南地区\",542221:\"乃东县\",542222:\"扎囊县\",542223:\"贡嘎县\",542224:\"桑日县\",542225:\"琼结县\",542226:\"曲松县\",542227:\"措美县\",542228:\"洛扎县\",542229:\"加查县\",542231:\"隆子县\",542232:\"错那县\",542233:\"浪卡子县\",542234:\"其它区\",542300:\"日喀则地区\",542301:\"日喀则市\",542322:\"南木林县\",542323:\"江孜县\",542324:\"定日县\",542325:\"萨迦县\",542326:\"拉孜县\",542327:\"昂仁县\",542328:\"谢通门县\",542329:\"白朗县\",542330:\"仁布县\",542331:\"康马县\",542332:\"定结县\",542333:\"仲巴县\",542334:\"亚东县\",542335:\"吉隆县\",542336:\"聂拉木县\",542337:\"萨嘎县\",542338:\"岗巴县\",542339:\"其它区\",542400:\"那曲地区\",542421:\"那曲县\",542422:\"嘉黎县\",542423:\"比如县\",542424:\"聂荣县\",542425:\"安多县\",542426:\"申扎县\",542427:\"索县\",542428:\"班戈县\",542429:\"巴青县\",542430:\"尼玛县\",542431:\"其它区\",542432:\"双湖县\",542500:\"阿里地区\",542521:\"普兰县\",542522:\"札达县\",542523:\"噶尔县\",542524:\"日土县\",542525:\"革吉县\",542526:\"改则县\",542527:\"措勤县\",542528:\"其它区\",542600:\"林芝地区\",542621:\"林芝县\",542622:\"工布江达县\",542623:\"米林县\",542624:\"墨脱县\",542625:\"波密县\",542626:\"察隅县\",542627:\"朗县\",542628:\"其它区\",610000:\"陕西省\",610100:\"西安市\",610102:\"新城区\",610103:\"碑林区\",610104:\"莲湖区\",610111:\"灞桥区\",610112:\"未央区\",610113:\"雁塔区\",610114:\"阎良区\",610115:\"临潼区\",610116:\"长安区\",610122:\"蓝田县\",610124:\"周至县\",610125:\"户县\",610126:\"高陵县\",610127:\"其它区\",610200:\"铜川市\",610202:\"王益区\",610203:\"印台区\",610204:\"耀州区\",610222:\"宜君县\",610223:\"其它区\",610300:\"宝鸡市\",610302:\"渭滨区\",610303:\"金台区\",610304:\"陈仓区\",610322:\"凤翔县\",610323:\"岐山县\",610324:\"扶风县\",610326:\"眉县\",610327:\"陇县\",610328:\"千阳县\",610329:\"麟游县\",610330:\"凤县\",610331:\"太白县\",610332:\"其它区\",610400:\"咸阳市\",610402:\"秦都区\",610403:\"杨陵区\",610404:\"渭城区\",610422:\"三原县\",610423:\"泾阳县\",610424:\"乾县\",610425:\"礼泉县\",610426:\"永寿县\",610427:\"彬县\",610428:\"长武县\",610429:\"旬邑县\",610430:\"淳化县\",610431:\"武功县\",610481:\"兴平市\",610482:\"其它区\",610500:\"渭南市\",610502:\"临渭区\",610521:\"华县\",610522:\"潼关县\",610523:\"大荔县\",610524:\"合阳县\",610525:\"澄城县\",610526:\"蒲城县\",610527:\"白水县\",610528:\"富平县\",610581:\"韩城市\",610582:\"华阴市\",610583:\"其它区\",610600:\"延安市\",610602:\"宝塔区\",610621:\"延长县\",610622:\"延川县\",610623:\"子长县\",610624:\"安塞县\",610625:\"志丹县\",610626:\"吴起县\",610627:\"甘泉县\",610628:\"富县\",610629:\"洛川县\",610630:\"宜川县\",610631:\"黄龙县\",610632:\"黄陵县\",610633:\"其它区\",610700:\"汉中市\",610702:\"汉台区\",610721:\"南郑县\",610722:\"城固县\",610723:\"洋县\",610724:\"西乡县\",610725:\"勉县\",610726:\"宁强县\",610727:\"略阳县\",610728:\"镇巴县\",610729:\"留坝县\",610730:\"佛坪县\",610731:\"其它区\",610800:\"榆林市\",610802:\"榆阳区\",610821:\"神木县\",610822:\"府谷县\",610823:\"横山县\",610824:\"靖边县\",610825:\"定边县\",610826:\"绥德县\",610827:\"米脂县\",610828:\"佳县\",610829:\"吴堡县\",610830:\"清涧县\",610831:\"子洲县\",610832:\"其它区\",610900:\"安康市\",610902:\"汉滨区\",610921:\"汉阴县\",610922:\"石泉县\",610923:\"宁陕县\",610924:\"紫阳县\",610925:\"岚皋县\",610926:\"平利县\",610927:\"镇坪县\",610928:\"旬阳县\",610929:\"白河县\",610930:\"其它区\",611000:\"商洛市\",611002:\"商州区\",611021:\"洛南县\",611022:\"丹凤县\",611023:\"商南县\",611024:\"山阳县\",611025:\"镇安县\",611026:\"柞水县\",611027:\"其它区\",620000:\"甘肃省\",620100:\"兰州市\",620102:\"城关区\",620103:\"七里河区\",620104:\"西固区\",620105:\"安宁区\",620111:\"红古区\",620121:\"永登县\",620122:\"皋兰县\",620123:\"榆中县\",620124:\"其它区\",620200:\"嘉峪关市\",620300:\"金昌市\",620302:\"金川区\",620321:\"永昌县\",620322:\"其它区\",620400:\"白银市\",620402:\"白银区\",620403:\"平川区\",620421:\"靖远县\",620422:\"会宁县\",620423:\"景泰县\",620424:\"其它区\",620500:\"天水市\",620502:\"秦州区\",620503:\"麦积区\",620521:\"清水县\",620522:\"秦安县\",620523:\"甘谷县\",620524:\"武山县\",620525:\"张家川回族自治县\",620526:\"其它区\",620600:\"武威市\",620602:\"凉州区\",620621:\"民勤县\",620622:\"古浪县\",620623:\"天祝藏族自治县\",620624:\"其它区\",620700:\"张掖市\",620702:\"甘州区\",620721:\"肃南裕固族自治县\",620722:\"民乐县\",620723:\"临泽县\",620724:\"高台县\",620725:\"山丹县\",620726:\"其它区\",620800:\"平凉市\",620802:\"崆峒区\",620821:\"泾川县\",620822:\"灵台县\",620823:\"崇信县\",620824:\"华亭县\",620825:\"庄浪县\",620826:\"静宁县\",620827:\"其它区\",620900:\"酒泉市\",620902:\"肃州区\",620921:\"金塔县\",620922:\"瓜州县\",620923:\"肃北蒙古族自治县\",620924:\"阿克塞哈萨克族自治县\",620981:\"玉门市\",620982:\"敦煌市\",620983:\"其它区\",621000:\"庆阳市\",621002:\"西峰区\",621021:\"庆城县\",621022:\"环县\",621023:\"华池县\",621024:\"合水县\",621025:\"正宁县\",621026:\"宁县\",621027:\"镇原县\",621028:\"其它区\",621100:\"定西市\",621102:\"安定区\",621121:\"通渭县\",621122:\"陇西县\",621123:\"渭源县\",621124:\"临洮县\",621125:\"漳县\",621126:\"岷县\",621127:\"其它区\",621200:\"陇南市\",621202:\"武都区\",621221:\"成县\",621222:\"文县\",621223:\"宕昌县\",621224:\"康县\",621225:\"西和县\",621226:\"礼县\",621227:\"徽县\",621228:\"两当县\",621229:\"其它区\",622900:\"临夏回族自治州\",622901:\"临夏市\",622921:\"临夏县\",622922:\"康乐县\",622923:\"永靖县\",622924:\"广河县\",622925:\"和政县\",622926:\"东乡族自治县\",622927:\"积石山保安族东乡族撒拉族自治县\",622928:\"其它区\",623000:\"甘南藏族自治州\",623001:\"合作市\",623021:\"临潭县\",623022:\"卓尼县\",623023:\"舟曲县\",623024:\"迭部县\",623025:\"玛曲县\",623026:\"碌曲县\",623027:\"夏河县\",623028:\"其它区\",630000:\"青海省\",630100:\"西宁市\",630102:\"城东区\",630103:\"城中区\",630104:\"城西区\",630105:\"城北区\",630121:\"大通回族土族自治县\",630122:\"湟中县\",630123:\"湟源县\",630124:\"其它区\",632100:\"海东市\",632121:\"平安县\",632122:\"民和回族土族自治县\",632123:\"乐都区\",632126:\"互助土族自治县\",632127:\"化隆回族自治县\",632128:\"循化撒拉族自治县\",632129:\"其它区\",632200:\"海北藏族自治州\",632221:\"门源回族自治县\",632222:\"祁连县\",632223:\"海晏县\",632224:\"刚察县\",632225:\"其它区\",632300:\"黄南藏族自治州\",632321:\"同仁县\",632322:\"尖扎县\",632323:\"泽库县\",632324:\"河南蒙古族自治县\",632325:\"其它区\",632500:\"海南藏族自治州\",632521:\"共和县\",632522:\"同德县\",632523:\"贵德县\",632524:\"兴海县\",632525:\"贵南县\",632526:\"其它区\",632600:\"果洛藏族自治州\",632621:\"玛沁县\",632622:\"班玛县\",632623:\"甘德县\",632624:\"达日县\",632625:\"久治县\",632626:\"玛多县\",632627:\"其它区\",632700:\"玉树藏族自治州\",632721:\"玉树市\",632722:\"杂多县\",632723:\"称多县\",632724:\"治多县\",632725:\"囊谦县\",632726:\"曲麻莱县\",632727:\"其它区\",632800:\"海西蒙古族藏族自治州\",632801:\"格尔木市\",632802:\"德令哈市\",632821:\"乌兰县\",632822:\"都兰县\",632823:\"天峻县\",632824:\"其它区\",640000:\"宁夏回族自治区\",640100:\"银川市\",640104:\"兴庆区\",640105:\"西夏区\",640106:\"金凤区\",640121:\"永宁县\",640122:\"贺兰县\",640181:\"灵武市\",640182:\"其它区\",640200:\"石嘴山市\",640202:\"大武口区\",640205:\"惠农区\",640221:\"平罗县\",640222:\"其它区\",640300:\"吴忠市\",640302:\"利通区\",640303:\"红寺堡区\",640323:\"盐池县\",640324:\"同心县\",640381:\"青铜峡市\",640382:\"其它区\",640400:\"固原市\",640402:\"原州区\",640422:\"西吉县\",640423:\"隆德县\",640424:\"泾源县\",640425:\"彭阳县\",640426:\"其它区\",640500:\"中卫市\",640502:\"沙坡头区\",640521:\"中宁县\",640522:\"海原县\",640523:\"其它区\",650000:\"新疆维吾尔自治区\",650100:\"乌鲁木齐市\",650102:\"天山区\",650103:\"沙依巴克区\",650104:\"新市区\",650105:\"水磨沟区\",650106:\"头屯河区\",650107:\"达坂城区\",650109:\"米东区\",650121:\"乌鲁木齐县\",650122:\"其它区\",650200:\"克拉玛依市\",650202:\"独山子区\",650203:\"克拉玛依区\",650204:\"白碱滩区\",650205:\"乌尔禾区\",650206:\"其它区\",652100:\"吐鲁番地区\",652101:\"吐鲁番市\",652122:\"鄯善县\",652123:\"托克逊县\",652124:\"其它区\",652200:\"哈密地区\",652201:\"哈密市\",652222:\"巴里坤哈萨克自治县\",652223:\"伊吾县\",652224:\"其它区\",652300:\"昌吉回族自治州\",652301:\"昌吉市\",652302:\"阜康市\",652323:\"呼图壁县\",652324:\"玛纳斯县\",652325:\"奇台县\",652327:\"吉木萨尔县\",652328:\"木垒哈萨克自治县\",652329:\"其它区\",652700:\"博尔塔拉蒙古自治州\",652701:\"博乐市\",652702:\"阿拉山口市\",652722:\"精河县\",652723:\"温泉县\",652724:\"其它区\",652800:\"巴音郭楞蒙古自治州\",652801:\"库尔勒市\",652822:\"轮台县\",652823:\"尉犁县\",652824:\"若羌县\",652825:\"且末县\",652826:\"焉耆回族自治县\",652827:\"和静县\",652828:\"和硕县\",652829:\"博湖县\",652830:\"其它区\",652900:\"阿克苏地区\",652901:\"阿克苏市\",652922:\"温宿县\",652923:\"库车县\",652924:\"沙雅县\",652925:\"新和县\",652926:\"拜城县\",652927:\"乌什县\",652928:\"阿瓦提县\",652929:\"柯坪县\",652930:\"其它区\",653000:\"克孜勒苏柯尔克孜自治州\",653001:\"阿图什市\",653022:\"阿克陶县\",653023:\"阿合奇县\",653024:\"乌恰县\",653025:\"其它区\",653100:\"喀什地区\",653101:\"喀什市\",653121:\"疏附县\",653122:\"疏勒县\",653123:\"英吉沙县\",653124:\"泽普县\",653125:\"莎车县\",653126:\"叶城县\",653127:\"麦盖提县\",653128:\"岳普湖县\",653129:\"伽师县\",653130:\"巴楚县\",653131:\"塔什库尔干塔吉克自治县\",653132:\"其它区\",653200:\"和田地区\",653201:\"和田市\",653221:\"和田县\",653222:\"墨玉县\",653223:\"皮山县\",653224:\"洛浦县\",653225:\"策勒县\",653226:\"于田县\",653227:\"民丰县\",653228:\"其它区\",654000:\"伊犁哈萨克自治州\",654002:\"伊宁市\",654003:\"奎屯市\",654021:\"伊宁县\",654022:\"察布查尔锡伯自治县\",654023:\"霍城县\",654024:\"巩留县\",654025:\"新源县\",654026:\"昭苏县\",654027:\"特克斯县\",654028:\"尼勒克县\",654029:\"其它区\",654200:\"塔城地区\",654201:\"塔城市\",654202:\"乌苏市\",654221:\"额敏县\",654223:\"沙湾县\",654224:\"托里县\",654225:\"裕民县\",654226:\"和布克赛尔蒙古自治县\",654227:\"其它区\",654300:\"阿勒泰地区\",654301:\"阿勒泰市\",654321:\"布尔津县\",654322:\"富蕴县\",654323:\"福海县\",654324:\"哈巴河县\",654325:\"青河县\",654326:\"吉木乃县\",654327:\"其它区\",659001:\"石河子市\",659002:\"阿拉尔市\",659003:\"图木舒克市\",659004:\"五家渠市\",710000:\"台湾\",710100:\"台北市\",710101:\"中正区\",710102:\"大同区\",710103:\"中山区\",710104:\"松山区\",710105:\"大安区\",710106:\"万华区\",710107:\"信义区\",710108:\"士林区\",710109:\"北投区\",710110:\"内湖区\",710111:\"南港区\",710112:\"文山区\",710113:\"其它区\",710200:\"高雄市\",710201:\"新兴区\",710202:\"前金区\",710203:\"芩雅区\",710204:\"盐埕区\",710205:\"鼓山区\",710206:\"旗津区\",710207:\"前镇区\",710208:\"三民区\",710209:\"左营区\",710210:\"楠梓区\",710211:\"小港区\",710212:\"其它区\",710241:\"苓雅区\",710242:\"仁武区\",710243:\"大社区\",710244:\"冈山区\",710245:\"路竹区\",710246:\"阿莲区\",710247:\"田寮区\",710248:\"燕巢区\",710249:\"桥头区\",710250:\"梓官区\",710251:\"弥陀区\",710252:\"永安区\",710253:\"湖内区\",710254:\"凤山区\",710255:\"大寮区\",710256:\"林园区\",710257:\"鸟松区\",710258:\"大树区\",710259:\"旗山区\",710260:\"美浓区\",710261:\"六龟区\",710262:\"内门区\",710263:\"杉林区\",710264:\"甲仙区\",710265:\"桃源区\",710266:\"那玛夏区\",710267:\"茂林区\",710268:\"茄萣区\",710300:\"台南市\",710301:\"中西区\",710302:\"东区\",710303:\"南区\",710304:\"北区\",710305:\"安平区\",710306:\"安南区\",710307:\"其它区\",710339:\"永康区\",710340:\"归仁区\",710341:\"新化区\",710342:\"左镇区\",710343:\"玉井区\",710344:\"楠西区\",710345:\"南化区\",710346:\"仁德区\",710347:\"关庙区\",710348:\"龙崎区\",710349:\"官田区\",710350:\"麻豆区\",710351:\"佳里区\",710352:\"西港区\",710353:\"七股区\",710354:\"将军区\",710355:\"学甲区\",710356:\"北门区\",710357:\"新营区\",710358:\"后壁区\",710359:\"白河区\",710360:\"东山区\",710361:\"六甲区\",710362:\"下营区\",710363:\"柳营区\",710364:\"盐水区\",710365:\"善化区\",710366:\"大内区\",710367:\"山上区\",710368:\"新市区\",710369:\"安定区\",710400:\"台中市\",710401:\"中区\",710402:\"东区\",710403:\"南区\",710404:\"西区\",710405:\"北区\",710406:\"北屯区\",710407:\"西屯区\",710408:\"南屯区\",710409:\"其它区\",710431:\"太平区\",710432:\"大里区\",710433:\"雾峰区\",710434:\"乌日区\",710435:\"丰原区\",710436:\"后里区\",710437:\"石冈区\",710438:\"东势区\",710439:\"和平区\",710440:\"新社区\",710441:\"潭子区\",710442:\"大雅区\",710443:\"神冈区\",710444:\"大肚区\",710445:\"沙鹿区\",710446:\"龙井区\",710447:\"梧栖区\",710448:\"清水区\",710449:\"大甲区\",710450:\"外埔区\",710451:\"大安区\",710500:\"金门县\",710507:\"金沙镇\",710508:\"金湖镇\",710509:\"金宁乡\",710510:\"金城镇\",710511:\"烈屿乡\",710512:\"乌坵乡\",710600:\"南投县\",710614:\"南投市\",710615:\"中寮乡\",710616:\"草屯镇\",710617:\"国姓乡\",710618:\"埔里镇\",710619:\"仁爱乡\",710620:\"名间乡\",710621:\"集集镇\",710622:\"水里乡\",710623:\"鱼池乡\",710624:\"信义乡\",710625:\"竹山镇\",710626:\"鹿谷乡\",710700:\"基隆市\",710701:\"仁爱区\",710702:\"信义区\",710703:\"中正区\",710704:\"中山区\",710705:\"安乐区\",710706:\"暖暖区\",710707:\"七堵区\",710708:\"其它区\",710800:\"新竹市\",710801:\"东区\",710802:\"北区\",710803:\"香山区\",710804:\"其它区\",710900:\"嘉义市\",710901:\"东区\",710902:\"西区\",710903:\"其它区\",711100:\"新北市\",711130:\"万里区\",711131:\"金山区\",711132:\"板桥区\",711133:\"汐止区\",711134:\"深坑区\",711135:\"石碇区\",711136:\"瑞芳区\",711137:\"平溪区\",711138:\"双溪区\",711139:\"贡寮区\",711140:\"新店区\",711141:\"坪林区\",711142:\"乌来区\",711143:\"永和区\",711144:\"中和区\",711145:\"土城区\",711146:\"三峡区\",711147:\"树林区\",711148:\"莺歌区\",711149:\"三重区\",711150:\"新庄区\",711151:\"泰山区\",711152:\"林口区\",711153:\"芦洲区\",711154:\"五股区\",711155:\"八里区\",711156:\"淡水区\",711157:\"三芝区\",711158:\"石门区\",711200:\"宜兰县\",711214:\"宜兰市\",711215:\"头城镇\",711216:\"礁溪乡\",711217:\"壮围乡\",711218:\"员山乡\",711219:\"罗东镇\",711220:\"三星乡\",711221:\"大同乡\",711222:\"五结乡\",711223:\"冬山乡\",711224:\"苏澳镇\",711225:\"南澳乡\",711226:\"钓鱼台\",711300:\"新竹县\",711314:\"竹北市\",711315:\"湖口乡\",711316:\"新丰乡\",711317:\"新埔镇\",711318:\"关西镇\",711319:\"芎林乡\",711320:\"宝山乡\",711321:\"竹东镇\",711322:\"五峰乡\",711323:\"横山乡\",711324:\"尖石乡\",711325:\"北埔乡\",711326:\"峨眉乡\",711400:\"桃园县\",711414:\"中坜市\",711415:\"平镇市\",711416:\"龙潭乡\",711417:\"杨梅市\",711418:\"新屋乡\",711419:\"观音乡\",711420:\"桃园市\",711421:\"龟山乡\",711422:\"八德市\",711423:\"大溪镇\",711424:\"复兴乡\",711425:\"大园乡\",711426:\"芦竹乡\",711500:\"苗栗县\",711519:\"竹南镇\",711520:\"头份镇\",711521:\"三湾乡\",711522:\"南庄乡\",711523:\"狮潭乡\",711524:\"后龙镇\",711525:\"通霄镇\",711526:\"苑里镇\",711527:\"苗栗市\",711528:\"造桥乡\",711529:\"头屋乡\",711530:\"公馆乡\",711531:\"大湖乡\",711532:\"泰安乡\",711533:\"铜锣乡\",711534:\"三义乡\",711535:\"西湖乡\",711536:\"卓兰镇\",711700:\"彰化县\",711727:\"彰化市\",711728:\"芬园乡\",711729:\"花坛乡\",711730:\"秀水乡\",711731:\"鹿港镇\",711732:\"福兴乡\",711733:\"线西乡\",711734:\"和美镇\",711735:\"伸港乡\",711736:\"员林镇\",711737:\"社头乡\",711738:\"永靖乡\",711739:\"埔心乡\",711740:\"溪湖镇\",711741:\"大村乡\",711742:\"埔盐乡\",711743:\"田中镇\",711744:\"北斗镇\",711745:\"田尾乡\",711746:\"埤头乡\",711747:\"溪州乡\",711748:\"竹塘乡\",711749:\"二林镇\",711750:\"大城乡\",711751:\"芳苑乡\",711752:\"二水乡\",711900:\"嘉义县\",711919:\"番路乡\",711920:\"梅山乡\",711921:\"竹崎乡\",711922:\"阿里山乡\",711923:\"中埔乡\",711924:\"大埔乡\",711925:\"水上乡\",711926:\"鹿草乡\",711927:\"太保市\",711928:\"朴子市\",711929:\"东石乡\",711930:\"六脚乡\",711931:\"新港乡\",711932:\"民雄乡\",711933:\"大林镇\",711934:\"溪口乡\",711935:\"义竹乡\",711936:\"布袋镇\",712100:\"云林县\",712121:\"斗南镇\",712122:\"大埤乡\",712123:\"虎尾镇\",712124:\"土库镇\",712125:\"褒忠乡\",712126:\"东势乡\",712127:\"台西乡\",712128:\"仑背乡\",712129:\"麦寮乡\",712130:\"斗六市\",712131:\"林内乡\",712132:\"古坑乡\",712133:\"莿桐乡\",712134:\"西螺镇\",712135:\"二仑乡\",712136:\"北港镇\",712137:\"水林乡\",712138:\"口湖乡\",712139:\"四湖乡\",712140:\"元长乡\",712400:\"屏东县\",712434:\"屏东市\",712435:\"三地门乡\",712436:\"雾台乡\",712437:\"玛家乡\",712438:\"九如乡\",712439:\"里港乡\",712440:\"高树乡\",712441:\"盐埔乡\",712442:\"长治乡\",712443:\"麟洛乡\",712444:\"竹田乡\",712445:\"内埔乡\",712446:\"万丹乡\",712447:\"潮州镇\",712448:\"泰武乡\",712449:\"来义乡\",712450:\"万峦乡\",712451:\"崁顶乡\",712452:\"新埤乡\",712453:\"南州乡\",712454:\"林边乡\",712455:\"东港镇\",712456:\"琉球乡\",712457:\"佳冬乡\",712458:\"新园乡\",712459:\"枋寮乡\",712460:\"枋山乡\",712461:\"春日乡\",712462:\"狮子乡\",712463:\"车城乡\",712464:\"牡丹乡\",712465:\"恒春镇\",712466:\"满州乡\",712500:\"台东县\",712517:\"台东市\",712518:\"绿岛乡\",712519:\"兰屿乡\",712520:\"延平乡\",712521:\"卑南乡\",712522:\"鹿野乡\",712523:\"关山镇\",712524:\"海端乡\",712525:\"池上乡\",712526:\"东河乡\",712527:\"成功镇\",712528:\"长滨乡\",712529:\"金峰乡\",712530:\"大武乡\",712531:\"达仁乡\",712532:\"太麻里乡\",712600:\"花莲县\",712615:\"花莲市\",712616:\"新城乡\",712617:\"太鲁阁\",712618:\"秀林乡\",712619:\"吉安乡\",712620:\"寿丰乡\",712621:\"凤林镇\",712622:\"光复乡\",712623:\"丰滨乡\",712624:\"瑞穗乡\",712625:\"万荣乡\",712626:\"玉里镇\",712627:\"卓溪乡\",712628:\"富里乡\",712700:\"澎湖县\",712707:\"马公市\",712708:\"西屿乡\",712709:\"望安乡\",712710:\"七美乡\",712711:\"白沙乡\",712712:\"湖西乡\",712800:\"连江县\",712805:\"南竿乡\",712806:\"北竿乡\",712807:\"莒光乡\",712808:\"东引乡\",810000:\"香港特别行政区\",810100:\"香港岛\",810101:\"中西区\",810102:\"湾仔\",810103:\"东区\",810104:\"南区\",810200:\"九龙\",810201:\"九龙城区\",810202:\"油尖旺区\",810203:\"深水埗区\",810204:\"黄大仙区\",810205:\"观塘区\",810300:\"新界\",810301:\"北区\",810302:\"大埔区\",810303:\"沙田区\",810304:\"西贡区\",810305:\"元朗区\",810306:\"屯门区\",810307:\"荃湾区\",810308:\"葵青区\",810309:\"离岛区\",820000:\"澳门特别行政区\",820100:\"澳门半岛\",820200:\"离岛\",990000:\"海外\",990100:\"海外\"},a=function(){var t=[];for(var e in r){var a=\"0000\"===e.slice(2,6)?void 0:\"00\"==e.slice(4,6)?e.slice(0,2)+\"0000\":e.slice(0,4)+\"00\";t.push({id:e,pid:a,name:r[e]})}return n(t)}();t.exports=a},function(t,e,n){var r=n(18);t.exports={d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){var t=\"abcdefABCDEF1234567890\",e=this.string(t,8)+\"-\"+this.string(t,4)+\"-\"+this.string(t,4)+\"-\"+this.string(t,4)+\"-\"+this.string(t,12);return e},uuid:function(){return this.guid()},id:function(){var t,e=0,n=[\"7\",\"9\",\"10\",\"5\",\"8\",\"4\",\"2\",\"1\",\"6\",\"3\",\"7\",\"9\",\"10\",\"5\",\"8\",\"4\",\"2\"],a=[\"1\",\"0\",\"X\",\"9\",\"8\",\"7\",\"6\",\"5\",\"4\",\"3\",\"2\"];t=this.pick(r).id+this.date(\"yyyyMMdd\")+this.string(\"number\",3);for(var o=0;o<t.length;o++)e+=t[o]*n[o];return t+=a[e%11]},increment:function(){var t=0;return function(e){return t+=+e||1}}(),inc:function(t){return this.increment(t)}}},function(t,e,n){var r=n(21),a=n(22);t.exports={Parser:r,Handler:a}},function(t,e){function n(t){this.type=t,this.offset=n.offset(),this.text=n.text()}function r(t,e){n.call(this,\"alternate\"),this.left=t,this.right=e}function a(t){n.call(this,\"match\"),this.body=t.filter(Boolean)}function o(t,e){n.call(this,t),this.body=e}function u(t){o.call(this,\"capture-group\"),this.index=y[this.offset]||(y[this.offset]=x++),this.body=t}function i(t,e){n.call(this,\"quantified\"),this.body=t,this.quantifier=e}function l(t,e){n.call(this,\"quantifier\"),this.min=t,this.max=e,this.greedy=!0}function s(t,e){n.call(this,\"charset\"),this.invert=t,this.body=e}function c(t,e){n.call(this,\"range\"),this.start=t,this.end=e}function h(t){n.call(this,\"literal\"),this.body=t,this.escaped=this.body!=this.text}function p(t){n.call(this,\"unicode\"),this.code=t.toUpperCase()}function f(t){n.call(this,\"hex\"),this.code=t.toUpperCase()}function d(t){n.call(this,\"octal\"),this.code=t.toUpperCase()}function m(t){n.call(this,\"back-reference\"),this.code=t.toUpperCase()}function g(t){n.call(this,\"control-character\"),this.code=t.toUpperCase()}var v=function(){function t(t,e){function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n}function e(t,e,n,r,a){function o(t,e){function n(t){function e(t){return t.charCodeAt(0).toString(16).toUpperCase()}return t.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\x08/g,\"\\\\b\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\f/g,\"\\\\f\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g,function(t){return\"\\\\x0\"+e(t)}).replace(/[\\x10-\\x1F\\x80-\\xFF]/g,function(t){return\"\\\\x\"+e(t)}).replace(/[\\u0180-\\u0FFF]/g,function(t){return\"\\\\u0\"+e(t)}).replace(/[\\u1080-\\uFFFF]/g,function(t){return\"\\\\u\"+e(t)})}var r,a;switch(t.length){case 0:r=\"end of input\";break;case 1:r=t[0];break;default:r=t.slice(0,-1).join(\", \")+\" or \"+t[t.length-1]}return a=e?'\"'+n(e)+'\"':\"end of input\",\"Expected \"+r+\" but \"+a+\" found.\"}this.expected=t,this.found=e,this.offset=n,this.line=r,this.column=a,this.name=\"SyntaxError\",this.message=o(t,e)}function v(t){function v(){return t.substring(Qn,Zn)}function x(){return Qn}function y(e){function n(e,n,r){var a,o;for(a=n;r>a;a++)o=t.charAt(a),\"\\n\"===o?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):\"\\r\"===o||\"\\u2028\"===o||\"\\u2029\"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}return tr!==e&&(tr>e&&(tr=0,er={line:1,column:1,seenCR:!1}),n(er,tr,e),tr=e),er}function b(t){nr>Zn||(Zn>nr&&(nr=Zn,rr=[]),rr.push(t))}function w(t){var e=0;for(t.sort();e<t.length;)t[e-1]===t[e]?t.splice(e,1):e++}function C(){var e,n,r,a,o;return e=Zn,n=k(),null!==n?(r=Zn,124===t.charCodeAt(Zn)?(a=Rt,Zn++):(a=null,0===ar&&b(At)),null!==a?(o=C(),null!==o?(a=[a,o],r=a):(Zn=r,r=kt)):(Zn=r,r=kt),null===r&&(r=Et),null!==r?(Qn=e,n=_t(n,r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function k(){var t,e,n,r,a;if(t=Zn,e=R(),null===e&&(e=Et),null!==e)if(n=Zn,ar++,r=M(),ar--,null===r?n=Et:(Zn=n,n=kt),null!==n){for(r=[],a=_(),null===a&&(a=E());null!==a;)r.push(a),a=_(),null===a&&(a=E());null!==r?(a=A(),null===a&&(a=Et),null!==a?(Qn=t,e=Mt(e,r,a),null===e?(Zn=t,t=e):t=e):(Zn=t,t=kt)):(Zn=t,t=kt)}else Zn=t,t=kt;else Zn=t,t=kt;return t}function E(){var t;return t=I(),null===t&&(t=B(),null===t&&(t=Y())),t}function R(){var e,n;return e=Zn,94===t.charCodeAt(Zn)?(n=Pt,Zn++):(n=null,0===ar&&b(Tt)),null!==n&&(Qn=e,n=Ht()),null===n?(Zn=e,e=n):e=n,e}function A(){var e,n;return e=Zn,36===t.charCodeAt(Zn)?(n=St,Zn++):(n=null,0===ar&&b(Dt)),null!==n&&(Qn=e,n=qt()),null===n?(Zn=e,e=n):e=n,e}function _(){var t,e,n;return t=Zn,e=E(),null!==e?(n=M(),null!==n?(Qn=t,e=Ft(e,n),null===e?(Zn=t,t=e):t=e):(Zn=t,t=kt)):(Zn=t,t=kt),t}function M(){var t,e,n;return ar++,t=Zn,e=P(),null!==e?(n=L(),null===n&&(n=Et),null!==n?(Qn=t,e=Ot(e,n),null===e?(Zn=t,t=e):t=e):(Zn=t,t=kt)):(Zn=t,t=kt),ar--,null===t&&(e=null,0===ar&&b(Lt)),t}function P(){var t;return t=T(),null===t&&(t=H(),null===t&&(t=S(),null===t&&(t=D(),null===t&&(t=q(),null===t&&(t=F()))))),t}function T(){var e,n,r,a,o,u;return e=Zn,123===t.charCodeAt(Zn)?(n=It,Zn++):(n=null,0===ar&&b(jt)),null!==n?(r=O(),null!==r?(44===t.charCodeAt(Zn)?(a=Nt,Zn++):(a=null,0===ar&&b(zt)),null!==a?(o=O(),null!==o?(125===t.charCodeAt(Zn)?(u=Ut,Zn++):(u=null,0===ar&&b(Bt)),null!==u?(Qn=e,n=Gt(r,o),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt),e}function H(){var e,n,r,a;return e=Zn,123===t.charCodeAt(Zn)?(n=It,Zn++):(n=null,0===ar&&b(jt)),null!==n?(r=O(),null!==r?(t.substr(Zn,2)===Xt?(a=Xt,Zn+=2):(a=null,0===ar&&b(Kt)),null!==a?(Qn=e,n=Wt(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt),e}function S(){var e,n,r,a;return e=Zn,123===t.charCodeAt(Zn)?(n=It,Zn++):(n=null,0===ar&&b(jt)),null!==n?(r=O(),null!==r?(125===t.charCodeAt(Zn)?(a=Ut,Zn++):(a=null,0===ar&&b(Bt)),null!==a?(Qn=e,n=Yt(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt),e}function D(){var e,n;return e=Zn,43===t.charCodeAt(Zn)?(n=$t,Zn++):(n=null,0===ar&&b(Jt)),null!==n&&(Qn=e,n=Vt()),null===n?(Zn=e,e=n):e=n,e}function q(){var e,n;return e=Zn,42===t.charCodeAt(Zn)?(n=Zt,Zn++):(n=null,0===ar&&b(Qt)),null!==n&&(Qn=e,n=te()),null===n?(Zn=e,e=n):e=n,e}function F(){var e,n;return e=Zn,63===t.charCodeAt(Zn)?(n=ee,Zn++):(n=null,0===ar&&b(ne)),null!==n&&(Qn=e,n=re()),null===n?(Zn=e,e=n):e=n,e}function L(){var e;return 63===t.charCodeAt(Zn)?(e=ee,Zn++):(e=null,0===ar&&b(ne)),e}function O(){var e,n,r;if(e=Zn,n=[],ae.test(t.charAt(Zn))?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(oe)),null!==r)for(;null!==r;)n.push(r),ae.test(t.charAt(Zn))?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(oe));else n=kt;return null!==n&&(Qn=e,n=ue(n)),null===n?(Zn=e,e=n):e=n,e}function I(){var e,n,r,a;return e=Zn,40===t.charCodeAt(Zn)?(n=ie,Zn++):(n=null,0===ar&&b(le)),null!==n?(r=z(),null===r&&(r=U(),null===r&&(r=N(),null===r&&(r=j()))),null!==r?(41===t.charCodeAt(Zn)?(a=se,Zn++):(a=null,0===ar&&b(ce)),null!==a?(Qn=e,n=he(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt),e}function j(){var t,e;return t=Zn,e=C(),null!==e&&(Qn=t,e=pe(e)),null===e?(Zn=t,t=e):t=e,t}function N(){var e,n,r;return e=Zn,t.substr(Zn,2)===fe?(n=fe,Zn+=2):(n=null,0===ar&&b(de)),null!==n?(r=C(),null!==r?(Qn=e,n=me(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function z(){var e,n,r;return e=Zn,t.substr(Zn,2)===ge?(n=ge,Zn+=2):(n=null,0===ar&&b(ve)),null!==n?(r=C(),null!==r?(Qn=e,n=xe(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function U(){var e,n,r;return e=Zn,t.substr(Zn,2)===ye?(n=ye,Zn+=2):(n=null,0===ar&&b(be)),null!==n?(r=C(),null!==r?(Qn=e,n=we(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function B(){var e,n,r,a,o;if(ar++,e=Zn,91===t.charCodeAt(Zn)?(n=ke,Zn++):(n=null,0===ar&&b(Ee)),null!==n)if(94===t.charCodeAt(Zn)?(r=Pt,Zn++):(r=null,0===ar&&b(Tt)),null===r&&(r=Et),null!==r){for(a=[],o=G(),null===o&&(o=X());null!==o;)a.push(o),o=G(),null===o&&(o=X());null!==a?(93===t.charCodeAt(Zn)?(o=Re,Zn++):(o=null,0===ar&&b(Ae)),null!==o?(Qn=e,n=_e(r,a),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)}else Zn=e,e=kt;else Zn=e,e=kt;return ar--,null===e&&(n=null,0===ar&&b(Ce)),e}function G(){var e,n,r,a;return ar++,e=Zn,n=X(),null!==n?(45===t.charCodeAt(Zn)?(r=Pe,Zn++):(r=null,0===ar&&b(Te)),null!==r?(a=X(),null!==a?(Qn=e,n=He(n,a),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt)):(Zn=e,e=kt),ar--,null===e&&(n=null,0===ar&&b(Me)),e}function X(){var t,e;return ar++,t=W(),null===t&&(t=K()),ar--,null===t&&(e=null,0===ar&&b(Se)),t}function K(){var e,n;return e=Zn,De.test(t.charAt(Zn))?(n=t.charAt(Zn),Zn++):(n=null,0===ar&&b(qe)),null!==n&&(Qn=e,n=Fe(n)),null===n?(Zn=e,e=n):e=n,e}function W(){var t;return t=Z(),null===t&&(t=pt(),null===t&&(t=et(),null===t&&(t=nt(),null===t&&(t=rt(),null===t&&(t=at(),null===t&&(t=ot(),null===t&&(t=ut(),null===t&&(t=it(),null===t&&(t=lt(),null===t&&(t=st(),null===t&&(t=ct(),null===t&&(t=ht(),null===t&&(t=dt(),null===t&&(t=mt(),null===t&&(t=gt(),null===t&&(t=vt(),null===t&&(t=xt()))))))))))))))))),t}function Y(){var t;return t=$(),null===t&&(t=V(),null===t&&(t=J())),t}function $(){var e,n;return e=Zn,46===t.charCodeAt(Zn)?(n=Le,Zn++):(n=null,0===ar&&b(Oe)),null!==n&&(Qn=e,n=Ie()),null===n?(Zn=e,e=n):e=n,e}function J(){var e,n;return ar++,e=Zn,Ne.test(t.charAt(Zn))?(n=t.charAt(Zn),Zn++):(n=null,0===ar&&b(ze)),null!==n&&(Qn=e,n=Fe(n)),null===n?(Zn=e,e=n):e=n,ar--,null===e&&(n=null,0===ar&&b(je)),e}function V(){var t;return t=Q(),null===t&&(t=tt(),null===t&&(t=pt(),null===t&&(t=et(),null===t&&(t=nt(),null===t&&(t=rt(),null===t&&(t=at(),null===t&&(t=ot(),null===t&&(t=ut(),null===t&&(t=it(),null===t&&(t=lt(),null===t&&(t=st(),null===t&&(t=ct(),null===t&&(t=ht(),null===t&&(t=ft(),null===t&&(t=dt(),null===t&&(t=mt(),null===t&&(t=gt(),null===t&&(t=vt(),null===t&&(t=xt()))))))))))))))))))),t}function Z(){var e,n;return e=Zn,t.substr(Zn,2)===Ue?(n=Ue,Zn+=2):(n=null,0===ar&&b(Be)),null!==n&&(Qn=e,n=Ge()),null===n?(Zn=e,e=n):e=n,e}function Q(){var e,n;return e=Zn,t.substr(Zn,2)===Ue?(n=Ue,Zn+=2):(n=null,0===ar&&b(Be)),null!==n&&(Qn=e,n=Xe()),null===n?(Zn=e,e=n):e=n,e}function tt(){var e,n;return e=Zn,t.substr(Zn,2)===Ke?(n=Ke,Zn+=2):(n=null,0===ar&&b(We)),null!==n&&(Qn=e,n=Ye()),null===n?(Zn=e,e=n):e=n,e}function et(){var e,n;return e=Zn,t.substr(Zn,2)===$e?(n=$e,Zn+=2):(n=null,0===ar&&b(Je)),null!==n&&(Qn=e,n=Ve()),null===n?(Zn=e,e=n):e=n,e}function nt(){var e,n;return e=Zn,t.substr(Zn,2)===Ze?(n=Ze,Zn+=2):(n=null,0===ar&&b(Qe)),null!==n&&(Qn=e,n=tn()),null===n?(Zn=e,e=n):e=n,e}function rt(){var e,n;return e=Zn,t.substr(Zn,2)===en?(n=en,Zn+=2):(n=null,0===ar&&b(nn)),null!==n&&(Qn=e,n=rn()),null===n?(Zn=e,e=n):e=n,e}function at(){var e,n;return e=Zn,t.substr(Zn,2)===an?(n=an,Zn+=2):(n=null,0===ar&&b(on)),null!==n&&(Qn=e,n=un()),null===n?(Zn=e,e=n):e=n,e}function ot(){var e,n;return e=Zn,t.substr(Zn,2)===ln?(n=ln,Zn+=2):(n=null,0===ar&&b(sn)),null!==n&&(Qn=e,n=cn()),null===n?(Zn=e,e=n):e=n,e}function ut(){var e,n;return e=Zn,t.substr(Zn,2)===hn?(n=hn,Zn+=2):(n=null,0===ar&&b(pn)),null!==n&&(Qn=e,n=fn()),null===n?(Zn=e,e=n):e=n,e}function it(){var e,n;return e=Zn,t.substr(Zn,2)===dn?(n=dn,Zn+=2):(n=null,0===ar&&b(mn)),null!==n&&(Qn=e,n=gn()),null===n?(Zn=e,e=n):e=n,e}function lt(){var e,n;return e=Zn,t.substr(Zn,2)===vn?(n=vn,Zn+=2):(n=null,0===ar&&b(xn)),null!==n&&(Qn=e,n=yn()),null===n?(Zn=e,e=n):e=n,e}function st(){var e,n;return e=Zn,t.substr(Zn,2)===bn?(n=bn,Zn+=2):(n=null,0===ar&&b(wn)),null!==n&&(Qn=e,n=Cn()),null===n?(Zn=e,e=n):e=n,e}function ct(){var e,n;return e=Zn,t.substr(Zn,2)===kn?(n=kn,Zn+=2):(n=null,0===ar&&b(En)),null!==n&&(Qn=e,n=Rn()),null===n?(Zn=e,e=n):e=n,e}function ht(){var e,n;return e=Zn,t.substr(Zn,2)===An?(n=An,Zn+=2):(n=null,0===ar&&b(_n)),null!==n&&(Qn=e,n=Mn()),null===n?(Zn=e,e=n):e=n,e}function pt(){var e,n,r;return e=Zn,t.substr(Zn,2)===Pn?(n=Pn,Zn+=2):(n=null,0===ar&&b(Tn)),null!==n?(t.length>Zn?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(Hn)),null!==r?(Qn=e,n=Sn(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function ft(){var e,n,r;return e=Zn,92===t.charCodeAt(Zn)?(n=Dn,Zn++):(n=null,0===ar&&b(qn)),null!==n?(Fn.test(t.charAt(Zn))?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(Ln)),null!==r?(Qn=e,n=On(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function dt(){var e,n,r,a;if(e=Zn,t.substr(Zn,2)===In?(n=In,Zn+=2):(n=null,0===ar&&b(jn)),null!==n){if(r=[],Nn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(zn)),null!==a)for(;null!==a;)r.push(a),Nn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(zn));else r=kt;null!==r?(Qn=e,n=Un(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)}else Zn=e,e=kt;return e}function mt(){var e,n,r,a;if(e=Zn,t.substr(Zn,2)===Bn?(n=Bn,Zn+=2):(n=null,0===ar&&b(Gn)),null!==n){if(r=[],Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn)),null!==a)for(;null!==a;)r.push(a),Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn));else r=kt;null!==r?(Qn=e,n=Wn(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)}else Zn=e,e=kt;return e}function gt(){var e,n,r,a;if(e=Zn,t.substr(Zn,2)===Yn?(n=Yn,Zn+=2):(n=null,0===ar&&b($n)),null!==n){if(r=[],Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn)),null!==a)for(;null!==a;)r.push(a),Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn));else r=kt;null!==r?(Qn=e,n=Jn(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)}else Zn=e,e=kt;return e}function vt(){var e,n;return e=Zn,t.substr(Zn,2)===In?(n=In,Zn+=2):(n=null,0===ar&&b(jn)),null!==n&&(Qn=e,n=Vn()),null===n?(Zn=e,e=n):e=n,e}function xt(){var e,n,r;return e=Zn,92===t.charCodeAt(Zn)?(n=Dn,Zn++):(n=null,0===ar&&b(qn)),null!==n?(t.length>Zn?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(Hn)),null!==r?(Qn=e,n=Fe(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}var yt,bt=arguments.length>1?arguments[1]:{},wt={regexp:C},Ct=C,kt=null,Et=\"\",Rt=\"|\",At='\"|\"',_t=function(t,e){return e?new r(t,e[1]):t},Mt=function(t,e,n){return new a([t].concat(e).concat([n]))},Pt=\"^\",Tt='\"^\"',Ht=function(){return new n(\"start\")},St=\"$\",Dt='\"$\"',qt=function(){return new n(\"end\")},Ft=function(t,e){return new i(t,e)},Lt=\"Quantifier\",Ot=function(t,e){return e&&(t.greedy=!1),t},It=\"{\",jt='\"{\"',Nt=\",\",zt='\",\"',Ut=\"}\",Bt='\"}\"',Gt=function(t,e){return new l(t,e)},Xt=\",}\",Kt='\",}\"',Wt=function(t){return new l(t,1/0)},Yt=function(t){return new l(t,t)},$t=\"+\",Jt='\"+\"',Vt=function(){return new l(1,1/0)},Zt=\"*\",Qt='\"*\"',te=function(){return new l(0,1/0)},ee=\"?\",ne='\"?\"',re=function(){return new l(0,1)},ae=/^[0-9]/,oe=\"[0-9]\",ue=function(t){return+t.join(\"\")},ie=\"(\",le='\"(\"',se=\")\",ce='\")\"',he=function(t){return t},pe=function(t){return new u(t)},fe=\"?:\",de='\"?:\"',me=function(t){return new o(\"non-capture-group\",t)},ge=\"?=\",ve='\"?=\"',xe=function(t){return new o(\"positive-lookahead\",t)},ye=\"?!\",be='\"?!\"',we=function(t){return new o(\"negative-lookahead\",t)},Ce=\"CharacterSet\",ke=\"[\",Ee='\"[\"',Re=\"]\",Ae='\"]\"',_e=function(t,e){return new s(!!t,e)},Me=\"CharacterRange\",Pe=\"-\",Te='\"-\"',He=function(t,e){return new c(t,e)},Se=\"Character\",De=/^[^\\\\\\]]/,qe=\"[^\\\\\\\\\\\\]]\",Fe=function(t){return new h(t)},Le=\".\",Oe='\".\"',Ie=function(){return new n(\"any-character\")},je=\"Literal\",Ne=/^[^|\\\\\\/.[()?+*$\\^]/,ze=\"[^|\\\\\\\\\\\\/.[()?+*$\\\\^]\",Ue=\"\\\\b\",Be='\"\\\\\\\\b\"',Ge=function(){return new n(\"backspace\")},Xe=function(){return new n(\"word-boundary\")},Ke=\"\\\\B\",We='\"\\\\\\\\B\"',Ye=function(){return new n(\"non-word-boundary\")},$e=\"\\\\d\",Je='\"\\\\\\\\d\"',Ve=function(){return new n(\"digit\")},Ze=\"\\\\D\",Qe='\"\\\\\\\\D\"',tn=function(){return new n(\"non-digit\")},en=\"\\\\f\",nn='\"\\\\\\\\f\"',rn=function(){return new n(\"form-feed\")},an=\"\\\\n\",on='\"\\\\\\\\n\"',un=function(){return new n(\"line-feed\")},ln=\"\\\\r\",sn='\"\\\\\\\\r\"',cn=function(){return new n(\"carriage-return\")},hn=\"\\\\s\",pn='\"\\\\\\\\s\"',fn=function(){return new n(\"white-space\")},dn=\"\\\\S\",mn='\"\\\\\\\\S\"',gn=function(){return new n(\"non-white-space\")},vn=\"\\\\t\",xn='\"\\\\\\\\t\"',yn=function(){return new n(\"tab\")},bn=\"\\\\v\",wn='\"\\\\\\\\v\"',Cn=function(){return new n(\"vertical-tab\")},kn=\"\\\\w\",En='\"\\\\\\\\w\"',Rn=function(){\nreturn new n(\"word\")},An=\"\\\\W\",_n='\"\\\\\\\\W\"',Mn=function(){return new n(\"non-word\")},Pn=\"\\\\c\",Tn='\"\\\\\\\\c\"',Hn=\"any character\",Sn=function(t){return new g(t)},Dn=\"\\\\\",qn='\"\\\\\\\\\"',Fn=/^[1-9]/,Ln=\"[1-9]\",On=function(t){return new m(t)},In=\"\\\\0\",jn='\"\\\\\\\\0\"',Nn=/^[0-7]/,zn=\"[0-7]\",Un=function(t){return new d(t.join(\"\"))},Bn=\"\\\\x\",Gn='\"\\\\\\\\x\"',Xn=/^[0-9a-fA-F]/,Kn=\"[0-9a-fA-F]\",Wn=function(t){return new f(t.join(\"\"))},Yn=\"\\\\u\",$n='\"\\\\\\\\u\"',Jn=function(t){return new p(t.join(\"\"))},Vn=function(){return new n(\"null-character\")},Zn=0,Qn=0,tr=0,er={line:1,column:1,seenCR:!1},nr=0,rr=[],ar=0;if(\"startRule\"in bt){if(!(bt.startRule in wt))throw new Error(\"Can't start parsing from rule \\\"\"+bt.startRule+'\".');Ct=wt[bt.startRule]}if(n.offset=x,n.text=v,yt=Ct(),null!==yt&&Zn===t.length)return yt;throw w(rr),Qn=Math.max(Zn,nr),new e(rr,Qn<t.length?t.charAt(Qn):null,Qn,y(Qn).line,y(Qn).column)}return t(e,Error),{SyntaxError:e,parse:v}}(),x=1,y={};t.exports=v},function(t,e,n){function r(t,e){for(var n=\"\",r=t;e>=r;r++)n+=String.fromCharCode(r);return n}var a=n(3),o=n(5),u={extend:a.extend},i=r(97,122),l=r(65,90),s=r(48,57),c=r(32,47)+r(58,64)+r(91,96)+r(123,126),h=r(32,126),p=\" \\f\\n\\r\t\\x0B \\u2028\\u2029\",f={\"\\\\w\":i+l+s+\"_\",\"\\\\W\":c.replace(\"_\",\"\"),\"\\\\s\":p,\"\\\\S\":function(){for(var t=h,e=0;e<p.length;e++)t=t.replace(p[e],\"\");return t}(),\"\\\\d\":s,\"\\\\D\":i+l+c};u.gen=function(t,e,n){return n=n||{guid:1},u[t.type]?u[t.type](t,e,n):u.token(t,e,n)},u.extend({token:function(t,e,n){switch(t.type){case\"start\":case\"end\":return\"\";case\"any-character\":return o.character();case\"backspace\":return\"\";case\"word-boundary\":return\"\";case\"non-word-boundary\":break;case\"digit\":return o.pick(s.split(\"\"));case\"non-digit\":return o.pick((i+l+c).split(\"\"));case\"form-feed\":break;case\"line-feed\":return t.body||t.text;case\"carriage-return\":break;case\"white-space\":return o.pick(p.split(\"\"));case\"non-white-space\":return o.pick((i+l+s).split(\"\"));case\"tab\":break;case\"vertical-tab\":break;case\"word\":return o.pick((i+l+s).split(\"\"));case\"non-word\":return o.pick(c.replace(\"_\",\"\").split(\"\"));case\"null-character\":}return t.body||t.text},alternate:function(t,e,n){return this.gen(o[\"boolean\"]()?t.left:t.right,e,n)},match:function(t,e,n){e=\"\";for(var r=0;r<t.body.length;r++)e+=this.gen(t.body[r],e,n);return e},\"capture-group\":function(t,e,n){return e=this.gen(t.body,e,n),n[n.guid++]=e,e},\"non-capture-group\":function(t,e,n){return this.gen(t.body,e,n)},\"positive-lookahead\":function(t,e,n){return this.gen(t.body,e,n)},\"negative-lookahead\":function(t,e,n){return\"\"},quantified:function(t,e,n){e=\"\";for(var r=this.quantifier(t.quantifier),a=0;r>a;a++)e+=this.gen(t.body,e,n);return e},quantifier:function(t,e,n){var r=Math.max(t.min,0),a=isFinite(t.max)?t.max:r+o.integer(3,7);return o.integer(r,a)},charset:function(t,e,n){if(t.invert)return this[\"invert-charset\"](t,e,n);var r=o.pick(t.body);return this.gen(r,e,n)},\"invert-charset\":function(t,e,n){for(var r,a=h,u=0;u<t.body.length;u++)switch(r=t.body[u],r.type){case\"literal\":a=a.replace(r.body,\"\");break;case\"range\":for(var i=this.gen(r.start,e,n).charCodeAt(),l=this.gen(r.end,e,n).charCodeAt(),s=i;l>=s;s++)a=a.replace(String.fromCharCode(s),\"\");default:var c=f[r.text];if(c)for(var p=0;p<=c.length;p++)a=a.replace(c[p],\"\")}return o.pick(a.split(\"\"))},range:function(t,e,n){var r=this.gen(t.start,e,n).charCodeAt(),a=this.gen(t.end,e,n).charCodeAt();return String.fromCharCode(o.integer(r,a))},literal:function(t,e,n){return t.escaped?t.body:t.text},unicode:function(t,e,n){return String.fromCharCode(parseInt(t.code,16))},hex:function(t,e,n){return String.fromCharCode(parseInt(t.code,16))},octal:function(t,e,n){return String.fromCharCode(parseInt(t.code,8))},\"back-reference\":function(t,e,n){return n[t.code]||\"\"},CONTROL_CHARACTER_MAP:function(){for(var t=\"@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\\\ ] ^ _\".split(\" \"),e=\"\\x00 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \\b \t \\n \\x0B \\f \\r \u000e \u000f \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001a \u001b \u001c \u001d \u001e \u001f\".split(\" \"),n={},r=0;r<t.length;r++)n[t[r]]=e[r];return n}(),\"control-character\":function(t,e,n){return this.CONTROL_CHARACTER_MAP[t.code]}}),t.exports=u},function(t,e,n){t.exports=n(24)},function(t,e,n){function r(t,e,n){n=n||[];var i={name:\"string\"==typeof e?e.replace(a.RE_KEY,\"$1\"):e,template:t,type:o.type(t),rule:u.parse(e)};switch(i.path=n.slice(0),i.path.push(void 0===e?\"ROOT\":i.name),i.type){case\"array\":i.items=[],o.each(t,function(t,e){i.items.push(r(t,e,i.path))});break;case\"object\":i.properties=[],o.each(t,function(t,e){i.properties.push(r(t,e,i.path))})}return i}var a=n(2),o=n(3),u=n(4);t.exports=r},function(t,e,n){t.exports=n(26)},function(t,e,n){function r(t,e){for(var n=u(t),r=i.diff(n,e),a=0;a<r.length;a++);return r}var a=n(2),o=n(3),u=n(23),i={diff:function(t,e,n){var r=[];return this.name(t,e,n,r)&&this.type(t,e,n,r)&&(this.value(t,e,n,r),this.properties(t,e,n,r),this.items(t,e,n,r)),r},name:function(t,e,n,r){var a=r.length;return l.equal(\"name\",t.path,n+\"\",t.name+\"\",r),r.length===a},type:function(t,e,n,r){var u=r.length;switch(t.type){case\"string\":if(t.template.match(a.RE_PLACEHOLDER))return!0;break;case\"array\":if(t.rule.parameters){if(void 0!==t.rule.min&&void 0===t.rule.max&&1===t.rule.count)return!0;if(t.rule.parameters[2])return!0}break;case\"function\":return!0}return l.equal(\"type\",t.path,o.type(e),t.type,r),r.length===u},value:function(t,e,n,r){var o=r.length,u=t.rule,i=t.type;if(\"object\"===i||\"array\"===i||\"function\"===i)return!0;if(!u.parameters){switch(i){case\"regexp\":return l.match(\"value\",t.path,e,t.template,r),r.length===o;case\"string\":if(t.template.match(a.RE_PLACEHOLDER))return r.length===o}return l.equal(\"value\",t.path,e,t.template,r),r.length===o}var s;switch(i){case\"number\":var c=(e+\"\").split(\".\");c[0]=+c[0],void 0!==u.min&&void 0!==u.max&&(l.greaterThanOrEqualTo(\"value\",t.path,c[0],Math.min(u.min,u.max),r),l.lessThanOrEqualTo(\"value\",t.path,c[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&l.equal(\"value\",t.path,c[0],u.min,r,\"[value] \"+n),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(l.greaterThanOrEqualTo(\"value\",t.path,c[1].length,u.dmin,r),l.lessThanOrEqualTo(\"value\",t.path,c[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&l.equal(\"value\",t.path,c[1].length,u.dmin,r));break;case\"boolean\":break;case\"string\":s=e.match(new RegExp(t.template,\"g\")),s=s?s.length:0,void 0!==u.min&&void 0!==u.max&&(l.greaterThanOrEqualTo(\"repeat count\",t.path,s,u.min,r),l.lessThanOrEqualTo(\"repeat count\",t.path,s,u.max,r)),void 0!==u.min&&void 0===u.max&&l.equal(\"repeat count\",t.path,s,u.min,r);break;case\"regexp\":s=e.match(new RegExp(t.template.source.replace(/^\\^|\\$$/g,\"\"),\"g\")),s=s?s.length:0,void 0!==u.min&&void 0!==u.max&&(l.greaterThanOrEqualTo(\"repeat count\",t.path,s,u.min,r),l.lessThanOrEqualTo(\"repeat count\",t.path,s,u.max,r)),void 0!==u.min&&void 0===u.max&&l.equal(\"repeat count\",t.path,s,u.min,r)}return r.length===o},properties:function(t,e,n,r){var a=r.length,u=t.rule,i=o.keys(e);if(t.properties){if(t.rule.parameters?(void 0!==u.min&&void 0!==u.max&&(l.greaterThanOrEqualTo(\"properties length\",t.path,i.length,Math.min(u.min,u.max),r),l.lessThanOrEqualTo(\"properties length\",t.path,i.length,Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&1!==u.count&&l.equal(\"properties length\",t.path,i.length,u.min,r)):l.equal(\"properties length\",t.path,i.length,t.properties.length,r),r.length!==a)return!1;for(var s=0;s<i.length;s++)r.push.apply(r,this.diff(function(){var e;return o.each(t.properties,function(t){t.name===i[s]&&(e=t)}),e||t.properties[s]}(),e[i[s]],i[s]));return r.length===a}},items:function(t,e,n,r){var a=r.length;if(t.items){var o=t.rule;if(t.rule.parameters){if(void 0!==o.min&&void 0!==o.max&&(l.greaterThanOrEqualTo(\"items\",t.path,e.length,Math.min(o.min,o.max)*t.items.length,r,\"[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements\"),l.lessThanOrEqualTo(\"items\",t.path,e.length,Math.max(o.min,o.max)*t.items.length,r,\"[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements\")),void 0!==o.min&&void 0===o.max){if(1===o.count)return r.length===a;l.equal(\"items length\",t.path,e.length,o.min*t.items.length,r)}if(o.parameters[2])return r.length===a}else l.equal(\"items length\",t.path,e.length,t.items.length,r);if(r.length!==a)return!1;for(var u=0;u<e.length;u++)r.push.apply(r,this.diff(t.items[u%t.items.length],e[u],u%t.items.length));return r.length===a}}},l={message:function(t){return(t.message||\"[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}\").replace(\"{utype}\",t.type.toUpperCase()).replace(\"{ltype}\",t.type.toLowerCase()).replace(\"{path}\",o.isArray(t.path)&&t.path.join(\".\")||t.path).replace(\"{action}\",t.action).replace(\"{expected}\",t.expected).replace(\"{actual}\",t.actual)},equal:function(t,e,n,r,a,o){if(n===r)return!0;switch(t){case\"type\":if(\"regexp\"===r&&\"string\"===n)return!0}var u={path:e,type:t,actual:n,expected:r,action:\"is equal to\",message:o};return u.message=l.message(u),a.push(u),!1},match:function(t,e,n,r,a,o){if(r.test(n))return!0;var u={path:e,type:t,actual:n,expected:r,action:\"matches\",message:o};return u.message=l.message(u),a.push(u),!1},notEqual:function(t,e,n,r,a,o){if(n!==r)return!0;var u={path:e,type:t,actual:n,expected:r,action:\"is not equal to\",message:o};return u.message=l.message(u),a.push(u),!1},greaterThan:function(t,e,n,r,a,o){if(n>r)return!0;var u={path:e,type:t,actual:n,expected:r,action:\"is greater than\",message:o};return u.message=l.message(u),a.push(u),!1},lessThan:function(t,e,n,r,a,o){if(r>n)return!0;var u={path:e,type:t,actual:n,expected:r,action:\"is less to\",message:o};return u.message=l.message(u),a.push(u),!1},greaterThanOrEqualTo:function(t,e,n,r,a,o){if(n>=r)return!0;var u={path:e,type:t,actual:n,expected:r,action:\"is greater than or equal to\",message:o};return u.message=l.message(u),a.push(u),!1},lessThanOrEqualTo:function(t,e,n,r,a,o){if(r>=n)return!0;var u={path:e,type:t,actual:n,expected:r,action:\"is less than or equal to\",message:o};return u.message=l.message(u),a.push(u),!1}};r.Diff=i,r.Assert=l,t.exports=r},function(t,e,n){t.exports=n(28)},function(t,e,n){function r(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}function a(){function t(){try{return new window._XMLHttpRequest}catch(t){}}function e(){try{return new window._ActiveXObject(\"Microsoft.XMLHTTP\")}catch(t){}}var n=function(){var t=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,e=/^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,n=location.href,r=e.exec(n.toLowerCase())||[];return t.test(r[1])}();return window.ActiveXObject?!n&&t()||e():t()}function o(t){function e(t,e){return\"string\"===i.type(t)?t===e:\"regexp\"===i.type(t)?t.test(e):void 0}for(var n in r.Mock._mocked){var a=r.Mock._mocked[n];if((!a.rurl||e(a.rurl,t.url))&&(!a.rtype||e(a.rtype,t.type.toLowerCase())))return a}}function u(t,e){return i.isFunction(t.template)?t.template(e):r.Mock.mock(t.template)}var i=n(3);window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event(\"custom\")}catch(l){window.Event=function(t,e,n,r){var a=document.createEvent(\"CustomEvent\");return a.initCustomEvent(t,e,n,r),a}}var s={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},c=\"readystatechange loadstart progress abort error load timeout loadend\".split(\" \"),h=\"timeout withCredentials\".split(\" \"),p=\"readyState responseURL status statusText responseType response responseText responseXML\".split(\" \"),f={100:\"Continue\",101:\"Switching Protocols\",200:\"OK\",201:\"Created\",202:\"Accepted\",203:\"Non-Authoritative Information\",204:\"No Content\",205:\"Reset Content\",206:\"Partial Content\",300:\"Multiple Choice\",301:\"Moved Permanently\",302:\"Found\",303:\"See Other\",304:\"Not Modified\",305:\"Use Proxy\",307:\"Temporary Redirect\",400:\"Bad Request\",401:\"Unauthorized\",402:\"Payment Required\",403:\"Forbidden\",404:\"Not Found\",405:\"Method Not Allowed\",406:\"Not Acceptable\",407:\"Proxy Authentication Required\",408:\"Request Timeout\",409:\"Conflict\",410:\"Gone\",411:\"Length Required\",412:\"Precondition Failed\",413:\"Request Entity Too Large\",414:\"Request-URI Too Long\",415:\"Unsupported Media Type\",416:\"Requested Range Not Satisfiable\",417:\"Expectation Failed\",422:\"Unprocessable Entity\",500:\"Internal Server Error\",501:\"Not Implemented\",502:\"Bad Gateway\",503:\"Service Unavailable\",504:\"Gateway Timeout\",505:\"HTTP Version Not Supported\"};r._settings={timeout:\"10-100\"},r.setup=function(t){return i.extend(r._settings,t),r._settings},i.extend(r,s),i.extend(r.prototype,s),r.prototype.mock=!0,r.prototype.match=!1,i.extend(r.prototype,{open:function(t,e,n,u,l){function s(t){for(var e=0;e<p.length;e++)try{f[p[e]]=m[p[e]]}catch(n){}f.dispatchEvent(new Event(t.type))}var f=this;i.extend(this.custom,{method:t,url:e,async:\"boolean\"==typeof n?n:!0,username:u,password:l,options:{url:e,type:t}}),this.custom.timeout=function(t){if(\"number\"==typeof t)return t;if(\"string\"==typeof t&&!~t.indexOf(\"-\"))return parseInt(t,10);if(\"string\"==typeof t&&~t.indexOf(\"-\")){var e=t.split(\"-\"),n=parseInt(e[0],10),r=parseInt(e[1],10);return Math.round(Math.random()*(r-n))+n}}(r._settings.timeout);var d=o(this.custom.options);if(d)this.match=!0,this.custom.template=d,this.readyState=r.OPENED,this.dispatchEvent(new Event(\"readystatechange\"));else{var m=a();this.custom.xhr=m;for(var g=0;g<c.length;g++)m.addEventListener(c[g],s);u?m.open(t,e,n,u,l):m.open(t,e,n);for(var v=0;v<h.length;v++)try{m[h[v]]=f[h[v]]}catch(x){}}},setRequestHeader:function(t,e){if(!this.match)return void this.custom.xhr.setRequestHeader(t,e);var n=this.custom.requestHeaders;n[t]?n[t]+=\",\"+e:n[t]=e},timeout:0,withCredentials:!1,upload:{},send:function(t){function e(){n.readyState=r.HEADERS_RECEIVED,n.dispatchEvent(new Event(\"readystatechange\")),n.readyState=r.LOADING,n.dispatchEvent(new Event(\"readystatechange\")),n.status=200,n.statusText=f[200],n.response=n.responseText=JSON.stringify(u(n.custom.template,n.custom.options),null,4),n.readyState=r.DONE,n.dispatchEvent(new Event(\"readystatechange\")),n.dispatchEvent(new Event(\"load\")),n.dispatchEvent(new Event(\"loadend\"))}var n=this;return this.custom.options.body=t,this.match?(this.setRequestHeader(\"X-Requested-With\",\"MockXMLHttpRequest\"),this.dispatchEvent(new Event(\"loadstart\")),void(this.custom.async?setTimeout(e,this.custom.timeout):e())):void this.custom.xhr.send(t)},abort:function(){return this.match?(this.readyState=r.UNSENT,this.dispatchEvent(new Event(\"abort\",!1,!1,this)),void this.dispatchEvent(new Event(\"error\",!1,!1,this))):void this.custom.xhr.abort()}}),i.extend(r.prototype,{responseURL:\"\",status:r.UNSENT,statusText:\"\",getResponseHeader:function(t){return this.match?this.custom.responseHeaders[t.toLowerCase()]:this.custom.xhr.getResponseHeader(t)},getAllResponseHeaders:function(){if(!this.match)return this.custom.xhr.getAllResponseHeaders();var t=this.custom.responseHeaders,e=\"\";for(var n in t)t.hasOwnProperty(n)&&(e+=n+\": \"+t[n]+\"\\r\\n\");return e},overrideMimeType:function(){},responseType:\"\",response:null,responseText:\"\",responseXML:null}),i.extend(r.prototype,{addEventListener:function(t,e){var n=this.custom.events;n[t]||(n[t]=[]),n[t].push(e)},removeEventListener:function(t,e){for(var n=this.custom.events[t]||[],r=0;r<n.length;r++)n[r]===e&&n.splice(r--,1)},dispatchEvent:function(t){for(var e=this.custom.events[t.type]||[],n=0;n<e.length;n++)e[n].call(this,t);var r=\"on\"+t.type;this[r]&&this[r](t)}}),t.exports=r}])});\n//# sourceMappingURL=mock-min.js.map"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/anchor/anchor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n        <title></title>\n        <style type=\"text/css\">\n            *{color: #838383;margin: 0;padding: 0}\n            html,body {font-size: 12px;overflow: hidden; }\n            .content{padding:5px 0 0 15px;}\n            input{width:210px;height:21px;line-height:21px;margin-left: 4px;}\n        </style>\n    </head>\n    <body>\n        <div class=\"content\">\n            <span><var id=\"lang_input_anchorName\"></var></span><input id=\"anchorName\"  value=\"\" />\n        </div>\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n        <script type=\"text/javascript\">\n            var anchorInput = $G('anchorName'),\n                node = editor.selection.getRange().getClosedNode();\n            if(node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))){\n                anchorInput.value = node;\n            }\n            anchorInput.onkeydown = function(evt){\n                evt = evt || window.event;\n                if(evt.keyCode == 13){\n                    editor.execCommand('anchor', anchorInput.value);\n                    dialog.close();\n                    domUtils.preventDefault(evt)\n                }\n            };\n            dialog.onok = function (){\n                editor.execCommand('anchor', anchorInput.value);\n                dialog.close();\n            };\n            $focus(anchorInput);\n        </script>\n    </body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/attachment/attachment.css",
    "content": "@charset \"utf-8\";\n/* dialog样式 */\n.wrapper {\n    zoom: 1;\n    width: 630px;\n    *width: 626px;\n    height: 380px;\n    margin: 0 auto;\n    padding: 10px;\n    position: relative;\n    font-family: sans-serif;\n}\n\n/*tab样式框大小*/\n.tabhead {\n    float:left;\n}\n.tabbody {\n    width: 100%;\n    height: 346px;\n    position: relative;\n    clear: both;\n}\n\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n\n.tabbody .panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n}\n\n/* 上传附件 */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n    clip: auto;\n}\n\n#upload .queueList {\n    margin: 0;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 172px;\n    padding-top: 150px;\n    text-align: center;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top:0;\n    *top: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 300px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 9px 0 0 9px;\n    *margin: 6px 0 0 6px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n#upload .filelist li p.imgWrap.notimage {\n    margin-top: 0;\n    width: 111px;\n    height: 111px;\n    border: 1px #eeeeee solid;\n}\n#upload .filelist li p.imgWrap.notimage i.file-preview {\n    margin-top: 15px;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display:none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background-image: url(./images/success.gif) \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n#upload .filelist li.filePickerBlock div.webuploader-pick  {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display:none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display:none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused{\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover{\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter:alpha(opacity=60);\n    -moz-opacity:0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n\n/* 图片管理样式 */\n#online {\n    width: 100%;\n    height: 336px;\n    padding: 10px 0 0 0;\n}\n#online #fileList{\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n}\n#online ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n#online li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 0 0 9px 9px;\n    *margin: 0 0 6px 6px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n#online li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width:0;\n    height:0;\n    margin: 0;\n    padding: 0;\n}\n#online li img {\n    cursor: pointer;\n}\n#online li div.file-wrapper {\n    cursor: pointer;\n    position: absolute;\n    display: block;\n    width: 111px;\n    height: 111px;\n    border: 1px solid #eee;\n    background: url(\"./images/bg.png\") repeat;\n}\n#online li div span.file-title{\n    display: block;\n    padding: 0 3px;\n    margin: 3px 0 0 0;\n    font-size: 12px;\n    height: 13px;\n    color: #555555;\n    text-align: center;\n    width: 107px;\n    white-space: nowrap;\n    word-break: break-all;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n#online li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n#online li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n#online li.selected .icon {\n    background-image: url(images/success.png);\n    background-image: url(images/success.gif) \\9;\n    background-position: 75px 75px;\n}\n#online li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}\n\n\n/* 在线文件的文件预览图标 */\ni.file-preview {\n    display: block;\n    margin: 10px auto;\n    width: 70px;\n    height: 70px;\n    background-image: url(\"./images/file-icons.png\");\n    background-image: url(\"./images/file-icons.gif\") \\9;\n    background-position: -140px center;\n    background-repeat: no-repeat;\n}\ni.file-preview.file-type-dir{\n    background-position: 0 center;\n}\ni.file-preview.file-type-file{\n    background-position: -140px center;\n}\ni.file-preview.file-type-filelist{\n    background-position: -210px center;\n}\ni.file-preview.file-type-zip,\ni.file-preview.file-type-rar,\ni.file-preview.file-type-7z,\ni.file-preview.file-type-tar,\ni.file-preview.file-type-gz,\ni.file-preview.file-type-bz2{\n    background-position: -280px center;\n}\ni.file-preview.file-type-xls,\ni.file-preview.file-type-xlsx{\n    background-position: -350px center;\n}\ni.file-preview.file-type-doc,\ni.file-preview.file-type-docx{\n    background-position: -420px center;\n}\ni.file-preview.file-type-ppt,\ni.file-preview.file-type-pptx{\n    background-position: -490px center;\n}\ni.file-preview.file-type-vsd{\n    background-position: -560px center;\n}\ni.file-preview.file-type-pdf{\n    background-position: -630px center;\n}\ni.file-preview.file-type-txt,\ni.file-preview.file-type-md,\ni.file-preview.file-type-json,\ni.file-preview.file-type-htm,\ni.file-preview.file-type-xml,\ni.file-preview.file-type-html,\ni.file-preview.file-type-js,\ni.file-preview.file-type-css,\ni.file-preview.file-type-php,\ni.file-preview.file-type-jsp,\ni.file-preview.file-type-asp{\n    background-position: -700px center;\n}\ni.file-preview.file-type-apk{\n    background-position: -770px center;\n}\ni.file-preview.file-type-exe{\n    background-position: -840px center;\n}\ni.file-preview.file-type-ipa{\n    background-position: -910px center;\n}\ni.file-preview.file-type-mp4,\ni.file-preview.file-type-swf,\ni.file-preview.file-type-mkv,\ni.file-preview.file-type-avi,\ni.file-preview.file-type-flv,\ni.file-preview.file-type-mov,\ni.file-preview.file-type-mpg,\ni.file-preview.file-type-mpeg,\ni.file-preview.file-type-ogv,\ni.file-preview.file-type-webm,\ni.file-preview.file-type-rm,\ni.file-preview.file-type-rmvb{\n    background-position: -980px center;\n}\ni.file-preview.file-type-ogg,\ni.file-preview.file-type-wav,\ni.file-preview.file-type-wmv,\ni.file-preview.file-type-mid,\ni.file-preview.file-type-mp3{\n    background-position: -1050px center;\n}\ni.file-preview.file-type-jpg,\ni.file-preview.file-type-jpeg,\ni.file-preview.file-type-gif,\ni.file-preview.file-type-bmp,\ni.file-preview.file-type-png,\ni.file-preview.file-type-psd{\n    background-position: -140px center;\n}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/attachment/attachment.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.min.js\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css\">\n\n    <!-- attachment dialog -->\n    <link rel=\"stylesheet\" href=\"attachment.css\" type=\"text/css\" />\n</head>\n<body>\n\n    <div class=\"wrapper\">\n        <div id=\"tabhead\" class=\"tabhead\">\n            <span class=\"tab focus\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n            <span class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n        </div>\n        <div id=\"tabbody\" class=\"tabbody\">\n            <!-- 上传图片 -->\n            <div id=\"upload\" class=\"panel focus\">\n                <div id=\"queueList\" class=\"queueList\">\n                    <div class=\"statusBar element-invisible\">\n                        <div class=\"progress\">\n                            <span class=\"text\">0%</span>\n                            <span class=\"percentage\"></span>\n                        </div><div class=\"info\"></div>\n                        <div class=\"btns\">\n                            <div id=\"filePickerBtn\"></div>\n                            <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                        </div>\n                    </div>\n                    <div id=\"dndArea\" class=\"placeholder\">\n                        <div class=\"filePickerContainer\">\n                            <div id=\"filePickerReady\"></div>\n                        </div>\n                    </div>\n                    <ul class=\"filelist element-invisible\">\n                        <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                    </ul>\n                </div>\n            </div>\n\n            <!-- 在线图片 -->\n            <div id=\"online\" class=\"panel\">\n                <div id=\"fileList\"><var id=\"lang_imgLoading\"></var></div>\n            </div>\n\n        </div>\n    </div>\n    <script type=\"text/javascript\" src=\"attachment.js\"></script>\n\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/attachment/attachment.js",
    "content": "/**\n * User: Jinqn\n * Date: 14-04-08\n * Time: 下午16:34\n * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片\n */\n\n(function () {\n\n    var uploadFile,\n        onlineFile;\n\n    window.onload = function () {\n        initTabs();\n        initButtons();\n    };\n\n    /* 初始化tab标签 */\n    function initTabs() {\n        var tabs = $G('tabhead').children;\n        for (var i = 0; i < tabs.length; i++) {\n            domUtils.on(tabs[i], \"click\", function (e) {\n                var target = e.target || e.srcElement;\n                setTabFocus(target.getAttribute('data-content-id'));\n            });\n        }\n\n        setTabFocus('upload');\n    }\n\n    /* 初始化tabbody */\n    function setTabFocus(id) {\n        if(!id) return;\n        var i, bodyId, tabs = $G('tabhead').children;\n        for (i = 0; i < tabs.length; i++) {\n            bodyId = tabs[i].getAttribute('data-content-id')\n            if (bodyId == id) {\n                domUtils.addClass(tabs[i], 'focus');\n                domUtils.addClass($G(bodyId), 'focus');\n            } else {\n                domUtils.removeClasses(tabs[i], 'focus');\n                domUtils.removeClasses($G(bodyId), 'focus');\n            }\n        }\n        switch (id) {\n            case 'upload':\n                uploadFile = uploadFile || new UploadFile('queueList');\n                break;\n            case 'online':\n                onlineFile = onlineFile || new OnlineFile('fileList');\n                break;\n        }\n    }\n\n    /* 初始化onok事件 */\n    function initButtons() {\n\n        dialog.onok = function () {\n            var list = [], id, tabs = $G('tabhead').children;\n            for (var i = 0; i < tabs.length; i++) {\n                if (domUtils.hasClass(tabs[i], 'focus')) {\n                    id = tabs[i].getAttribute('data-content-id');\n                    break;\n                }\n            }\n\n            switch (id) {\n                case 'upload':\n                    list = uploadFile.getInsertList();\n                    var count = uploadFile.getQueueCount();\n                    if (count) {\n                        $('.info', '#queueList').html('<span style=\"color:red;\">' + '还有2个未上传文件'.replace(/[\\d]/, count) + '</span>');\n                        return false;\n                    }\n                    break;\n                case 'online':\n                    list = onlineFile.getInsertList();\n                    break;\n            }\n\n            editor.execCommand('insertfile', list);\n        };\n    }\n\n\n    /* 上传附件 */\n    function UploadFile(target) {\n        this.$wrap = target.constructor == String ? $('#' + target) : $(target);\n        this.init();\n    }\n    UploadFile.prototype = {\n        init: function () {\n            this.fileList = [];\n            this.initContainer();\n            this.initUploader();\n        },\n        initContainer: function () {\n            this.$queue = this.$wrap.find('.filelist');\n        },\n        /* 初始化容器 */\n        initUploader: function () {\n            var _this = this,\n                $ = jQuery,    // just in case. Make sure it's not an other libaray.\n                $wrap = _this.$wrap,\n            // 图片容器\n                $queue = $wrap.find('.filelist'),\n            // 状态栏，包括进度和控制按钮\n                $statusBar = $wrap.find('.statusBar'),\n            // 文件总体选择信息。\n                $info = $statusBar.find('.info'),\n            // 上传按钮\n                $upload = $wrap.find('.uploadBtn'),\n            // 上传按钮\n                $filePickerBtn = $wrap.find('.filePickerBtn'),\n            // 上传按钮\n                $filePickerBlock = $wrap.find('.filePickerBlock'),\n            // 没选择文件之前的内容。\n                $placeHolder = $wrap.find('.placeholder'),\n            // 总体进度条\n                $progress = $statusBar.find('.progress').hide(),\n            // 添加的文件数量\n                fileCount = 0,\n            // 添加的文件总大小\n                fileSize = 0,\n            // 优化retina, 在retina下这个值是2\n                ratio = window.devicePixelRatio || 1,\n            // 缩略图大小\n                thumbnailWidth = 113 * ratio,\n                thumbnailHeight = 113 * ratio,\n            // 可能有pedding, ready, uploading, confirm, done.\n                state = '',\n            // 所有文件的进度信息，key为file id\n                percentages = {},\n                supportTransition = (function () {\n                    var s = document.createElement('p').style,\n                        r = 'transition' in s ||\n                            'WebkitTransition' in s ||\n                            'MozTransition' in s ||\n                            'msTransition' in s ||\n                            'OTransition' in s;\n                    s = null;\n                    return r;\n                })(),\n            // WebUploader实例\n                uploader,\n                actionUrl = editor.getActionUrl(editor.getOpt('fileActionName')),\n                fileMaxSize = editor.getOpt('fileMaxSize'),\n                acceptExtensions = (editor.getOpt('fileAllowFiles') || []).join('').replace(/\\./g, ',').replace(/^[,]/, '');;\n\n            if (!WebUploader.Uploader.support()) {\n                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();\n                return;\n            } else if (!editor.getOpt('fileActionName')) {\n                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();\n                return;\n            }\n\n            uploader = _this.uploader = WebUploader.create({\n                pick: {\n                    id: '#filePickerReady',\n                    label: lang.uploadSelectFile\n                },\n                swf: '../../third-party/webuploader/Uploader.swf',\n                server: actionUrl,\n                fileVal: editor.getOpt('fileFieldName'),\n                duplicate: true,\n                fileSingleSizeLimit: fileMaxSize,\n                compress: false\n            });\n            uploader.addButton({\n                id: '#filePickerBlock'\n            });\n            uploader.addButton({\n                id: '#filePickerBtn',\n                label: lang.uploadAddFile\n            });\n\n            setState('pedding');\n\n            // 当有文件添加进来时执行，负责view的创建\n            function addFile(file) {\n                var $li = $('<li id=\"' + file.id + '\">' +\n                        '<p class=\"title\">' + file.name + '</p>' +\n                        '<p class=\"imgWrap\"></p>' +\n                        '<p class=\"progress\"><span></span></p>' +\n                        '</li>'),\n\n                    $btns = $('<div class=\"file-panel\">' +\n                        '<span class=\"cancel\">' + lang.uploadDelete + '</span>' +\n                        '<span class=\"rotateRight\">' + lang.uploadTurnRight + '</span>' +\n                        '<span class=\"rotateLeft\">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),\n                    $prgress = $li.find('p.progress span'),\n                    $wrap = $li.find('p.imgWrap'),\n                    $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n\n                    showError = function (code) {\n                        switch (code) {\n                            case 'exceed_size':\n                                text = lang.errorExceedSize;\n                                break;\n                            case 'interrupt':\n                                text = lang.errorInterrupt;\n                                break;\n                            case 'http':\n                                text = lang.errorHttp;\n                                break;\n                            case 'not_allow_type':\n                                text = lang.errorFileType;\n                                break;\n                            default:\n                                text = lang.errorUploadRetry;\n                                break;\n                        }\n                        $info.text(text).show();\n                    };\n\n                if (file.getStatus() === 'invalid') {\n                    showError(file.statusText);\n                } else {\n                    $wrap.text(lang.uploadPreview);\n                    if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) {\n                        $wrap.empty().addClass('notimage').append('<i class=\"file-preview file-type-' + file.ext.toLowerCase() + '\"></i>' +\n                        '<span class=\"file-title\" title=\"' + file.name + '\">' + file.name + '</span>');\n                    } else {\n                        if (browser.ie && browser.version <= 7) {\n                            $wrap.text(lang.uploadNoPreview);\n                        } else {\n                            uploader.makeThumb(file, function (error, src) {\n                                if (error || !src) {\n                                    $wrap.text(lang.uploadNoPreview);\n                                } else {\n                                    var $img = $('<img src=\"' + src + '\">');\n                                    $wrap.empty().append($img);\n                                    $img.on('error', function () {\n                                        $wrap.text(lang.uploadNoPreview);\n                                    });\n                                }\n                            }, thumbnailWidth, thumbnailHeight);\n                        }\n                    }\n                    percentages[ file.id ] = [ file.size, 0 ];\n                    file.rotation = 0;\n\n                    /* 检查文件格式 */\n                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {\n                        showError('not_allow_type');\n                        uploader.removeFile(file);\n                    }\n                }\n\n                file.on('statuschange', function (cur, prev) {\n                    if (prev === 'progress') {\n                        $prgress.hide().width(0);\n                    } else if (prev === 'queued') {\n                        $li.off('mouseenter mouseleave');\n                        $btns.remove();\n                    }\n                    // 成功\n                    if (cur === 'error' || cur === 'invalid') {\n                        showError(file.statusText);\n                        percentages[ file.id ][ 1 ] = 1;\n                    } else if (cur === 'interrupt') {\n                        showError('interrupt');\n                    } else if (cur === 'queued') {\n                        percentages[ file.id ][ 1 ] = 0;\n                    } else if (cur === 'progress') {\n                        $info.hide();\n                        $prgress.css('display', 'block');\n                    } else if (cur === 'complete') {\n                    }\n\n                    $li.removeClass('state-' + prev).addClass('state-' + cur);\n                });\n\n                $li.on('mouseenter', function () {\n                    $btns.stop().animate({height: 30});\n                });\n                $li.on('mouseleave', function () {\n                    $btns.stop().animate({height: 0});\n                });\n\n                $btns.on('click', 'span', function () {\n                    var index = $(this).index(),\n                        deg;\n\n                    switch (index) {\n                        case 0:\n                            uploader.removeFile(file);\n                            return;\n                        case 1:\n                            file.rotation += 90;\n                            break;\n                        case 2:\n                            file.rotation -= 90;\n                            break;\n                    }\n\n                    if (supportTransition) {\n                        deg = 'rotate(' + file.rotation + 'deg)';\n                        $wrap.css({\n                            '-webkit-transform': deg,\n                            '-mos-transform': deg,\n                            '-o-transform': deg,\n                            'transform': deg\n                        });\n                    } else {\n                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');\n                    }\n\n                });\n\n                $li.insertBefore($filePickerBlock);\n            }\n\n            // 负责view的销毁\n            function removeFile(file) {\n                var $li = $('#' + file.id);\n                delete percentages[ file.id ];\n                updateTotalProgress();\n                $li.off().find('.file-panel').off().end().remove();\n            }\n\n            function updateTotalProgress() {\n                var loaded = 0,\n                    total = 0,\n                    spans = $progress.children(),\n                    percent;\n\n                $.each(percentages, function (k, v) {\n                    total += v[ 0 ];\n                    loaded += v[ 0 ] * v[ 1 ];\n                });\n\n                percent = total ? loaded / total : 0;\n\n                spans.eq(0).text(Math.round(percent * 100) + '%');\n                spans.eq(1).css('width', Math.round(percent * 100) + '%');\n                updateStatus();\n            }\n\n            function setState(val, files) {\n\n                if (val != state) {\n\n                    var stats = uploader.getStats();\n\n                    $upload.removeClass('state-' + state);\n                    $upload.addClass('state-' + val);\n\n                    switch (val) {\n\n                        /* 未选择文件 */\n                        case 'pedding':\n                            $queue.addClass('element-invisible');\n                            $statusBar.addClass('element-invisible');\n                            $placeHolder.removeClass('element-invisible');\n                            $progress.hide(); $info.hide();\n                            uploader.refresh();\n                            break;\n\n                        /* 可以开始上传 */\n                        case 'ready':\n                            $placeHolder.addClass('element-invisible');\n                            $queue.removeClass('element-invisible');\n                            $statusBar.removeClass('element-invisible');\n                            $progress.hide(); $info.show();\n                            $upload.text(lang.uploadStart);\n                            uploader.refresh();\n                            break;\n\n                        /* 上传中 */\n                        case 'uploading':\n                            $progress.show(); $info.hide();\n                            $upload.text(lang.uploadPause);\n                            break;\n\n                        /* 暂停上传 */\n                        case 'paused':\n                            $progress.show(); $info.hide();\n                            $upload.text(lang.uploadContinue);\n                            break;\n\n                        case 'confirm':\n                            $progress.show(); $info.hide();\n                            $upload.text(lang.uploadStart);\n\n                            stats = uploader.getStats();\n                            if (stats.successNum && !stats.uploadFailNum) {\n                                setState('finish');\n                                return;\n                            }\n                            break;\n\n                        case 'finish':\n                            $progress.hide(); $info.show();\n                            if (stats.uploadFailNum) {\n                                $upload.text(lang.uploadRetry);\n                            } else {\n                                $upload.text(lang.uploadStart);\n                            }\n                            break;\n                    }\n\n                    state = val;\n                    updateStatus();\n\n                }\n\n                if (!_this.getQueueCount()) {\n                    $upload.addClass('disabled')\n                } else {\n                    $upload.removeClass('disabled')\n                }\n\n            }\n\n            function updateStatus() {\n                var text = '', stats;\n\n                if (state === 'ready') {\n                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));\n                } else if (state === 'confirm') {\n                    stats = uploader.getStats();\n                    if (stats.uploadFailNum) {\n                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);\n                    }\n                } else {\n                    stats = uploader.getStats();\n                    text = lang.updateStatusFinish.replace('_', fileCount).\n                        replace('_KB', WebUploader.formatSize(fileSize)).\n                        replace('_', stats.successNum);\n\n                    if (stats.uploadFailNum) {\n                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);\n                    }\n                }\n\n                $info.html(text);\n            }\n\n            uploader.on('fileQueued', function (file) {\n                fileCount++;\n                fileSize += file.size;\n\n                if (fileCount === 1) {\n                    $placeHolder.addClass('element-invisible');\n                    $statusBar.show();\n                }\n\n                addFile(file);\n            });\n\n            uploader.on('fileDequeued', function (file) {\n                fileCount--;\n                fileSize -= file.size;\n\n                removeFile(file);\n                updateTotalProgress();\n            });\n\n            uploader.on('filesQueued', function (file) {\n                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {\n                    setState('ready');\n                }\n                updateTotalProgress();\n            });\n\n            uploader.on('all', function (type, files) {\n                switch (type) {\n                    case 'uploadFinished':\n                        setState('confirm', files);\n                        break;\n                    case 'startUpload':\n                        /* 添加额外的GET参数 */\n                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);\n                        uploader.option('server', url);\n                        setState('uploading', files);\n                        break;\n                    case 'stopUpload':\n                        setState('paused', files);\n                        break;\n                }\n            });\n\n            uploader.on('uploadBeforeSend', function (file, data, header) {\n                //这里可以通过data对象添加POST参数\n                header['X_Requested_With'] = 'XMLHttpRequest';\n            });\n\n            uploader.on('uploadProgress', function (file, percentage) {\n                var $li = $('#' + file.id),\n                    $percent = $li.find('.progress span');\n\n                $percent.css('width', percentage * 100 + '%');\n                percentages[ file.id ][ 1 ] = percentage;\n                updateTotalProgress();\n            });\n\n            uploader.on('uploadSuccess', function (file, ret) {\n                var $file = $('#' + file.id);\n                try {\n                    var responseText = (ret._raw || ret),\n                        json = utils.str2json(responseText);\n                    if (json.state == 'SUCCESS') {\n                        _this.fileList.push(json);\n                        $file.append('<span class=\"success\"></span>');\n                    } else {\n                        $file.find('.error').text(json.state).show();\n                    }\n                } catch (e) {\n                    $file.find('.error').text(lang.errorServerUpload).show();\n                }\n            });\n\n            uploader.on('uploadError', function (file, code) {\n            });\n            uploader.on('error', function (code, file) {\n                if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {\n                    addFile(file);\n                }\n            });\n            uploader.on('uploadComplete', function (file, ret) {\n            });\n\n            $upload.on('click', function () {\n                if ($(this).hasClass('disabled')) {\n                    return false;\n                }\n\n                if (state === 'ready') {\n                    uploader.upload();\n                } else if (state === 'paused') {\n                    uploader.upload();\n                } else if (state === 'uploading') {\n                    uploader.stop();\n                }\n            });\n\n            $upload.addClass('state-' + state);\n            updateTotalProgress();\n        },\n        getQueueCount: function () {\n            var file, i, status, readyFile = 0, files = this.uploader.getFiles();\n            for (i = 0; file = files[i++]; ) {\n                status = file.getStatus();\n                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;\n            }\n            return readyFile;\n        },\n        getInsertList: function () {\n            var i, link, data, list = [],\n                prefix = editor.getOpt('fileUrlPrefix');\n            for (i = 0; i < this.fileList.length; i++) {\n                data = this.fileList[i];\n                link = data.url;\n                list.push({\n                    title: data.original || link.substr(link.lastIndexOf('/') + 1),\n                    url: prefix + link\n                });\n            }\n            return list;\n        }\n    };\n\n\n    /* 在线附件 */\n    function OnlineFile(target) {\n        this.container = utils.isString(target) ? document.getElementById(target) : target;\n        this.init();\n    }\n    OnlineFile.prototype = {\n        init: function () {\n            this.initContainer();\n            this.initEvents();\n            this.initData();\n        },\n        /* 初始化容器 */\n        initContainer: function () {\n            this.container.innerHTML = '';\n            this.list = document.createElement('ul');\n            this.clearFloat = document.createElement('li');\n\n            domUtils.addClass(this.list, 'list');\n            domUtils.addClass(this.clearFloat, 'clearFloat');\n\n            this.list.appendChild(this.clearFloat);\n            this.container.appendChild(this.list);\n        },\n        /* 初始化滚动事件,滚动到地步自动拉取数据 */\n        initEvents: function () {\n            var _this = this;\n\n            /* 滚动拉取图片 */\n            domUtils.on($G('fileList'), 'scroll', function(e){\n                var panel = this;\n                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n                    _this.getFileData();\n                }\n            });\n            /* 选中图片 */\n            domUtils.on(this.list, 'click', function (e) {\n                var target = e.target || e.srcElement,\n                    li = target.parentNode;\n\n                if (li.tagName.toLowerCase() == 'li') {\n                    if (domUtils.hasClass(li, 'selected')) {\n                        domUtils.removeClasses(li, 'selected');\n                    } else {\n                        domUtils.addClass(li, 'selected');\n                    }\n                }\n            });\n        },\n        /* 初始化第一次的数据 */\n        initData: function () {\n\n            /* 拉取数据需要使用的值 */\n            this.state = 0;\n            this.listSize = editor.getOpt('fileManagerListSize');\n            this.listIndex = 0;\n            this.listEnd = false;\n\n            /* 第一次拉取数据 */\n            this.getFileData();\n        },\n        /* 向后台拉取图片列表数据 */\n        getFileData: function () {\n            var _this = this;\n\n            if(!_this.listEnd && !this.isLoadingData) {\n                this.isLoadingData = true;\n                ajax.request(editor.getActionUrl(editor.getOpt('fileManagerActionName')), {\n                    timeout: 100000,\n                    data: utils.extend({\n                            start: this.listIndex,\n                            size: this.listSize\n                        }, editor.queryCommandValue('serverparam')),\n                    method: 'get',\n                    onsuccess: function (r) {\n                        try {\n                            var json = eval('(' + r.responseText + ')');\n                            if (json.state == 'SUCCESS') {\n                                _this.pushData(json.list);\n                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);\n                                if(_this.listIndex >= json.total) {\n                                    _this.listEnd = true;\n                                }\n                                _this.isLoadingData = false;\n                            }\n                        } catch (e) {\n                            if(r.responseText.indexOf('ue_separate_ue') != -1) {\n                                var list = r.responseText.split(r.responseText);\n                                _this.pushData(list);\n                                _this.listIndex = parseInt(list.length);\n                                _this.listEnd = true;\n                                _this.isLoadingData = false;\n                            }\n                        }\n                    },\n                    onerror: function () {\n                        _this.isLoadingData = false;\n                    }\n                });\n            }\n        },\n        /* 添加图片到列表界面上 */\n        pushData: function (list) {\n            var i, item, img, filetype, preview, icon, _this = this,\n                urlPrefix = editor.getOpt('fileManagerUrlPrefix');\n            for (i = 0; i < list.length; i++) {\n                if(list[i] && list[i].url) {\n                    item = document.createElement('li');\n                    icon = document.createElement('span');\n                    filetype = list[i].url.substr(list[i].url.lastIndexOf('.') + 1);\n\n                    if ( \"png|jpg|jpeg|gif|bmp\".indexOf(filetype) != -1 ) {\n                        preview = document.createElement('img');\n                        domUtils.on(preview, 'load', (function(image){\n                            return function(){\n                                _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);\n                            };\n                        })(preview));\n                        preview.width = 113;\n                        preview.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );\n                    } else {\n                        var ic = document.createElement('i'),\n                            textSpan = document.createElement('span');\n                        textSpan.innerHTML = list[i].url.substr(list[i].url.lastIndexOf('/') + 1);\n                        preview = document.createElement('div');\n                        preview.appendChild(ic);\n                        preview.appendChild(textSpan);\n                        domUtils.addClass(preview, 'file-wrapper');\n                        domUtils.addClass(textSpan, 'file-title');\n                        domUtils.addClass(ic, 'file-type-' + filetype);\n                        domUtils.addClass(ic, 'file-preview');\n                    }\n                    domUtils.addClass(icon, 'icon');\n                    item.setAttribute('data-url', urlPrefix + list[i].url);\n                    if (list[i].original) {\n                        item.setAttribute('data-title', list[i].original);\n                    }\n\n                    item.appendChild(preview);\n                    item.appendChild(icon);\n                    this.list.insertBefore(item, this.clearFloat);\n                }\n            }\n        },\n        /* 改变图片大小 */\n        scale: function (img, w, h, type) {\n            var ow = img.width,\n                oh = img.height;\n\n            if (type == 'justify') {\n                if (ow >= oh) {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            } else {\n                if (ow >= oh) {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            }\n        },\n        getInsertList: function () {\n            var i, lis = this.list.children, list = [];\n            for (i = 0; i < lis.length; i++) {\n                if (domUtils.hasClass(lis[i], 'selected')) {\n                    var url = lis[i].getAttribute('data-url');\n                    var title = lis[i].getAttribute('data-title') || url.substr(url.lastIndexOf('/') + 1);\n                    list.push({\n                        title: title,\n                        url: url\n                    });\n                }\n            }\n            return list;\n        }\n    };\n\n\n})();"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/background/background.css",
    "content": ".wrapper{ width: 424px;margin: 10px auto; zoom:1;position: relative}\n.tabbody{height:225px;}\n.tabbody .panel { position: absolute;width:100%; height:100%;background: #fff; display: none;}\n.tabbody .focus { display: block;}\n\nbody{font-size: 12px;color: #888;overflow: hidden;}\ninput,label{vertical-align:middle}\n.clear{clear: both;}\n.pl{padding-left: 18px;padding-left: 23px\\9;}\n\n#imageList {width: 420px;height: 215px;margin-top: 10px;overflow: hidden;overflow-y: auto;}\n#imageList div {float: left;width: 100px;height: 95px;margin: 5px 10px;}\n#imageList img {cursor: pointer;border: 2px solid white;}\n\n.bgarea{margin: 10px;padding: 5px;height: 84%;border: 1px solid #A8A297;}\n.content div{margin: 10px 0 10px 5px;}\n.content .iptradio{margin: 0px 5px 5px 0px;}\n.txt{width:280px;}\n\n.wrapcolor{height: 19px;}\ndiv.color{float: left;margin: 0;}\n#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;margin: 0;float: left;}\ndiv.alignment,#custom{margin-left: 23px;margin-left: 28px\\9;}\n#custom input{height: 15px;min-height: 15px;width:20px;}\n#repeatType{width:100px;}\n\n\n/* 图片管理样式 */\n#imgManager {\n    width: 100%;\n    height: 225px;\n}\n#imgManager #imageList{\n    width: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n}\n#imgManager ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n#imgManager li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 9px 0 0 19px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n#imgManager li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width:0;\n    height:0;\n    margin: 0;\n    padding: 0;\n}\n#imgManager li img {\n    cursor: pointer;\n}\n#imgManager li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n#imgManager li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n#imgManager li.selected .icon {\n    background-image: url(images/success.png);\n    background-position: 75px 75px;\n}\n#imgManager li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/background/background.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"background.css\">\n</head>\n<body>\n    <div id=\"bg_container\" class=\"wrapper\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span class=\"focus\" data-content-id=\"normal\"><var id=\"lang_background_normal\"></var></span>\n            <span class=\"\" data-content-id=\"imgManager\"><var id=\"lang_background_local\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"normal\" class=\"panel focus\">\n                <fieldset class=\"bgarea\">\n                    <legend><var id=\"lang_background_set\"></var></legend>\n                    <div class=\"content\">\n                        <div>\n                            <label><input id=\"nocolorRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"none\" checked=\"checked\"><var id=\"lang_background_none\"></var></label>\n                            <label><input id=\"coloredRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"color\"><var id=\"lang_background_colored\"></var></label>\n                        </div>\n                        <div class=\"wrapcolor pl\">\n                            <div class=\"color\">\n                                <var id=\"lang_background_color\"></var>:\n                            </div>\n                            <div id=\"colorPicker\"></div>\n                            <div class=\"clear\"></div>\n                        </div>\n                        <div class=\"wrapcolor pl\">\n                            <label><var id=\"lang_background_netimg\"></var>:</label><input class=\"txt\" type=\"text\" id=\"url\">\n                        </div>\n                        <div id=\"alignment\" class=\"alignment\">\n                            <var id=\"lang_background_align\"></var>:<select id=\"repeatType\">\n                                <option value=\"center\"></option>\n                                <option value=\"repeat-x\"></option>\n                                <option value=\"repeat-y\"></option>\n                                <option value=\"repeat\"></option>\n                                <option value=\"self\"></option>\n                            </select>\n                        </div>\n                        <div id=\"custom\" >\n                            <var id=\"lang_background_position\"></var>:x:<input type=\"text\" size=\"1\" id=\"x\" maxlength=\"4\" value=\"0\">px&nbsp;&nbsp;y:<input type=\"text\" size=\"1\" id=\"y\" maxlength=\"4\" value=\"0\">px\n                        </div>\n                    </div>\n                </fieldset>\n\n            </div>\n            <div id=\"imgManager\" class=\"panel\">\n                <div id=\"imageList\" style=\"\"></div>\n            </div>\n        </div>\n    </div>\n    <script type=\"text/javascript\" src=\"background.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/background/background.js",
    "content": "(function () {\n\n    var onlineImage,\n        backupStyle = editor.queryCommandValue('background');\n\n    window.onload = function () {\n        initTabs();\n        initColorSelector();\n    };\n\n    /* 初始化tab标签 */\n    function initTabs(){\n        var tabs = $G('tabHeads').children;\n        for (var i = 0; i < tabs.length; i++) {\n            domUtils.on(tabs[i], \"click\", function (e) {\n                var target = e.target || e.srcElement;\n                for (var j = 0; j < tabs.length; j++) {\n                    if(tabs[j] == target){\n                        tabs[j].className = \"focus\";\n                        var contentId = tabs[j].getAttribute('data-content-id');\n                        $G(contentId).style.display = \"block\";\n                        if(contentId == 'imgManager') {\n                            initImagePanel();\n                        }\n                    }else {\n                        tabs[j].className = \"\";\n                        $G(tabs[j].getAttribute('data-content-id')).style.display = \"none\";\n                    }\n                }\n            });\n        }\n    }\n\n    /* 初始化颜色设置 */\n    function initColorSelector () {\n        var obj = editor.queryCommandValue('background');\n        if (obj) {\n            var color = obj['background-color'],\n                repeat = obj['background-repeat'] || 'repeat',\n                image = obj['background-image'] || '',\n                position = obj['background-position'] || 'center center',\n                pos = position.split(' '),\n                x = parseInt(pos[0]) || 0,\n                y = parseInt(pos[1]) || 0;\n\n            if(repeat == 'no-repeat' && (x || y)) repeat = 'self';\n\n            image = image.match(/url[\\s]*\\(([^\\)]*)\\)/);\n            image = image ? image[1]:'';\n            updateFormState('colored', color, image, repeat, x, y);\n        } else {\n            updateFormState();\n        }\n\n        var updateHandler = function () {\n            updateFormState();\n            updateBackground();\n        }\n        domUtils.on($G('nocolorRadio'), 'click', updateBackground);\n        domUtils.on($G('coloredRadio'), 'click', updateHandler);\n        domUtils.on($G('url'), 'keyup', function(){\n            if($G('url').value && $G('alignment').style.display == \"none\") {\n                utils.each($G('repeatType').children, function(item){\n                    item.selected = ('repeat' == item.getAttribute('value') ? 'selected':false);\n                });\n            }\n            updateHandler();\n        });\n        domUtils.on($G('repeatType'), 'change', updateHandler);\n        domUtils.on($G('x'), 'keyup', updateBackground);\n        domUtils.on($G('y'), 'keyup', updateBackground);\n\n        initColorPicker();\n    }\n\n    /* 初始化颜色选择器 */\n    function initColorPicker() {\n        var me = editor,\n            cp = $G(\"colorPicker\");\n\n        /* 生成颜色选择器ui对象 */\n        var popup = new UE.ui.Popup({\n            content: new UE.ui.ColorPicker({\n                noColorText: me.getLang(\"clearColor\"),\n                editor: me,\n                onpickcolor: function (t, color) {\n                    updateFormState('colored', color);\n                    updateBackground();\n                    UE.ui.Popup.postHide();\n                },\n                onpicknocolor: function (t, color) {\n                    updateFormState('colored', 'transparent');\n                    updateBackground();\n                    UE.ui.Popup.postHide();\n                }\n            }),\n            editor: me,\n            onhide: function () {\n            }\n        });\n\n        /* 设置颜色选择器 */\n        domUtils.on(cp, \"click\", function () {\n            popup.showAnchor(this);\n        });\n        domUtils.on(document, 'mousedown', function (evt) {\n            var el = evt.target || evt.srcElement;\n            UE.ui.Popup.postHide(el);\n        });\n        domUtils.on(window, 'scroll', function () {\n            UE.ui.Popup.postHide();\n        });\n    }\n\n    /* 初始化在线图片列表 */\n    function initImagePanel() {\n        onlineImage = onlineImage || new OnlineImage('imageList');\n    }\n\n    /* 更新背景色设置面板 */\n    function updateFormState (radio, color, url, align, x, y) {\n        var nocolorRadio = $G('nocolorRadio'),\n            coloredRadio = $G('coloredRadio');\n\n        if(radio) {\n            nocolorRadio.checked = (radio == 'colored' ? false:'checked');\n            coloredRadio.checked = (radio == 'colored' ? 'checked':false);\n        }\n        if(color) {\n            domUtils.setStyle($G(\"colorPicker\"), \"background-color\", color);\n        }\n\n        if(url && /^\\//.test(url)) {\n            var a = document.createElement('a');\n            a.href = url;\n            browser.ie && (a.href = a.href);\n            url = browser.ie ? a.href:(a.protocol + '//' + a.host + a.pathname + a.search + a.hash);\n        }\n\n        if(url || url === '') {\n            $G('url').value = url;\n        }\n        if(align) {\n            utils.each($G('repeatType').children, function(item){\n                item.selected = (align == item.getAttribute('value') ? 'selected':false);\n            });\n        }\n        if(x || y) {\n            $G('x').value = parseInt(x) || 0;\n            $G('y').value = parseInt(y) || 0;\n        }\n\n        $G('alignment').style.display = coloredRadio.checked && $G('url').value ? '':'none';\n        $G('custom').style.display = coloredRadio.checked && $G('url').value && $G('repeatType').value == 'self' ? '':'none';\n    }\n\n    /* 更新背景颜色 */\n    function updateBackground () {\n        if ($G('coloredRadio').checked) {\n            var color = domUtils.getStyle($G(\"colorPicker\"), \"background-color\"),\n                bgimg = $G(\"url\").value,\n                align = $G(\"repeatType\").value,\n                backgroundObj = {\n                    \"background-repeat\": \"no-repeat\",\n                    \"background-position\": \"center center\"\n                };\n\n            if (color) backgroundObj[\"background-color\"] = color;\n            if (bgimg) backgroundObj[\"background-image\"] = 'url(' + bgimg + ')';\n            if (align == 'self') {\n                backgroundObj[\"background-position\"] = $G(\"x\").value + \"px \" + $G(\"y\").value + \"px\";\n            } else if (align == 'repeat-x' || align == 'repeat-y' || align == 'repeat') {\n                backgroundObj[\"background-repeat\"] = align;\n            }\n\n            editor.execCommand('background', backgroundObj);\n        } else {\n            editor.execCommand('background', null);\n        }\n    }\n\n\n    /* 在线图片 */\n    function OnlineImage(target) {\n        this.container = utils.isString(target) ? document.getElementById(target) : target;\n        this.init();\n    }\n    OnlineImage.prototype = {\n        init: function () {\n            this.reset();\n            this.initEvents();\n        },\n        /* 初始化容器 */\n        initContainer: function () {\n            this.container.innerHTML = '';\n            this.list = document.createElement('ul');\n            this.clearFloat = document.createElement('li');\n\n            domUtils.addClass(this.list, 'list');\n            domUtils.addClass(this.clearFloat, 'clearFloat');\n\n            this.list.id = 'imageListUl';\n            this.list.appendChild(this.clearFloat);\n            this.container.appendChild(this.list);\n        },\n        /* 初始化滚动事件,滚动到地步自动拉取数据 */\n        initEvents: function () {\n            var _this = this;\n\n            /* 滚动拉取图片 */\n            domUtils.on($G('imageList'), 'scroll', function(e){\n                var panel = this;\n                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n                    _this.getImageData();\n                }\n            });\n            /* 选中图片 */\n            domUtils.on(this.container, 'click', function (e) {\n                var target = e.target || e.srcElement,\n                    li = target.parentNode,\n                    nodes = $G('imageListUl').childNodes;\n\n                if (li.tagName.toLowerCase() == 'li') {\n                    updateFormState('nocolor', null, '');\n                    for (var i = 0, node; node = nodes[i++];) {\n                        if (node == li && !domUtils.hasClass(node, 'selected')) {\n                            domUtils.addClass(node, 'selected');\n                            updateFormState('colored', null, li.firstChild.getAttribute(\"_src\"), 'repeat');\n                        } else {\n                            domUtils.removeClasses(node, 'selected');\n                        }\n                    }\n                    updateBackground();\n                }\n            });\n        },\n        /* 初始化第一次的数据 */\n        initData: function () {\n\n            /* 拉取数据需要使用的值 */\n            this.state = 0;\n            this.listSize = editor.getOpt('imageManagerListSize');\n            this.listIndex = 0;\n            this.listEnd = false;\n\n            /* 第一次拉取数据 */\n            this.getImageData();\n        },\n        /* 重置界面 */\n        reset: function() {\n            this.initContainer();\n            this.initData();\n        },\n        /* 向后台拉取图片列表数据 */\n        getImageData: function () {\n            var _this = this;\n\n            if(!_this.listEnd && !this.isLoadingData) {\n                this.isLoadingData = true;\n                var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),\n                    isJsonp = utils.isCrossDomainUrl(url);\n                ajax.request(url, {\n                    'timeout': 100000,\n                    'dataType': isJsonp ? 'jsonp':'',\n                    'data': utils.extend({\n                            start: this.listIndex,\n                            size: this.listSize\n                        }, editor.queryCommandValue('serverparam')),\n                    'method': 'get',\n                    'onsuccess': function (r) {\n                        try {\n                            var json = isJsonp ? r:eval('(' + r.responseText + ')');\n                            if (json.state == 'SUCCESS') {\n                                _this.pushData(json.list);\n                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);\n                                if(_this.listIndex >= json.total) {\n                                    _this.listEnd = true;\n                                }\n                                _this.isLoadingData = false;\n                            }\n                        } catch (e) {\n                            if(r.responseText.indexOf('ue_separate_ue') != -1) {\n                                var list = r.responseText.split(r.responseText);\n                                _this.pushData(list);\n                                _this.listIndex = parseInt(list.length);\n                                _this.listEnd = true;\n                                _this.isLoadingData = false;\n                            }\n                        }\n                    },\n                    'onerror': function () {\n                        _this.isLoadingData = false;\n                    }\n                });\n            }\n        },\n        /* 添加图片到列表界面上 */\n        pushData: function (list) {\n            var i, item, img, icon, _this = this,\n                urlPrefix = editor.getOpt('imageManagerUrlPrefix');\n            for (i = 0; i < list.length; i++) {\n                if(list[i] && list[i].url) {\n                    item = document.createElement('li');\n                    img = document.createElement('img');\n                    icon = document.createElement('span');\n\n                    domUtils.on(img, 'load', (function(image){\n                        return function(){\n                            _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);\n                        }\n                    })(img));\n                    img.width = 113;\n                    img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );\n                    img.setAttribute('_src', urlPrefix + list[i].url);\n                    domUtils.addClass(icon, 'icon');\n\n                    item.appendChild(img);\n                    item.appendChild(icon);\n                    this.list.insertBefore(item, this.clearFloat);\n                }\n            }\n        },\n        /* 改变图片大小 */\n        scale: function (img, w, h, type) {\n            var ow = img.width,\n                oh = img.height;\n\n            if (type == 'justify') {\n                if (ow >= oh) {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            } else {\n                if (ow >= oh) {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            }\n        },\n        getInsertList: function () {\n            var i, lis = this.list.children, list = [], align = getAlign();\n            for (i = 0; i < lis.length; i++) {\n                if (domUtils.hasClass(lis[i], 'selected')) {\n                    var img = lis[i].firstChild,\n                        src = img.getAttribute('_src');\n                    list.push({\n                        src: src,\n                        _src: src,\n                        floatStyle: align\n                    });\n                }\n\n            }\n            return list;\n        }\n    };\n\n    dialog.onok = function () {\n        updateBackground();\n        editor.fireEvent('saveScene');\n    };\n    dialog.oncancel = function () {\n        editor.execCommand('background', backupStyle);\n    };\n\n})();"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/charts/chart.config.js",
    "content": "/*\n * 图表配置文件\n * */\n\n\n//不同类型的配置\nvar typeConfig = [\n    {\n        chart: {\n            type: 'line'\n        },\n        plotOptions: {\n            line: {\n                dataLabels: {\n                    enabled: false\n                },\n                enableMouseTracking: true\n            }\n        }\n    }, {\n        chart: {\n            type: 'line'\n        },\n        plotOptions: {\n            line: {\n                dataLabels: {\n                    enabled: true\n                },\n                enableMouseTracking: false\n            }\n        }\n    }, {\n        chart: {\n            type: 'area'\n        }\n    }, {\n        chart: {\n            type: 'bar'\n        }\n    }, {\n        chart: {\n            type: 'column'\n        }\n    }, {\n        chart: {\n            plotBackgroundColor: null,\n            plotBorderWidth: null,\n            plotShadow: false\n        },\n        plotOptions: {\n            pie: {\n                allowPointSelect: true,\n                cursor: 'pointer',\n                dataLabels: {\n                    enabled: true,\n                    color: '#000000',\n                    connectorColor: '#000000',\n                    formatter: function() {\n                        return '<b>'+ this.point.name +'</b>: '+ ( Math.round( this.point.percentage*100 ) / 100 ) +' %';\n                    }\n                }\n            }\n        }\n    }\n];\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/charts/charts.css",
    "content": "html, body {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n}\n\n.main {\n    width: 100%;\n    overflow: hidden;\n}\n\n.table-view {\n    height: 100%;\n    float: left;\n    margin: 20px;\n    width: 40%;\n}\n\n.table-view .table-container {\n    width: 100%;\n    margin-bottom: 50px;\n    overflow: scroll;\n}\n\n.table-view th {\n    padding: 5px 10px;\n    background-color: #F7F7F7;\n}\n\n.table-view td {\n    width: 50px;\n    text-align: center;\n    padding:0;\n}\n\n.table-container input {\n    width: 40px;\n    padding: 5px;\n    border: none;\n    outline: none;\n}\n\n.table-view caption {\n    font-size: 18px;\n    text-align: left;\n}\n\n.charts-view {\n    /*margin-left: 49%!important;*/\n    width: 50%;\n    margin-left: 49%;\n    height: 400px;\n}\n\n.charts-container {\n    border-left: 1px solid #c3c3c3;\n}\n\n.charts-format fieldset {\n    padding-left: 20px;\n    margin-bottom: 50px;\n}\n\n.charts-format legend {\n    padding-left: 10px;\n    padding-right: 10px;\n}\n\n.format-item-container {\n    padding: 20px;\n}\n\n.format-item-container label {\n    display: block;\n    margin: 10px 0;\n}\n\n.charts-format .data-item {\n    border: 1px solid black;\n    outline: none;\n    padding: 2px 3px;\n}\n\n/* 图表类型 */\n\n.charts-type {\n    margin-top: 50px;\n    height: 300px;\n}\n\n.scroll-view {\n    border: 1px solid #c3c3c3;\n    border-left: none;\n    border-right: none;\n    overflow: hidden;\n}\n\n.scroll-container {\n    margin: 20px;\n    width: 100%;\n    overflow: hidden;\n}\n\n.scroll-bed {\n    width: 10000px;\n    _margin-top: 20px;\n    -webkit-transition: margin-left .5s ease;\n    -moz-transition: margin-left .5s ease;\n    transition: margin-left .5s ease;\n}\n\n.view-box {\n    display: inline-block;\n    *display: inline;\n    *zoom: 1;\n    margin-right: 20px;\n    border: 2px solid white;\n    line-height: 0;\n    overflow: hidden;\n    cursor: pointer;\n}\n\n.view-box img {\n    border: 1px solid #cecece;\n}\n\n.view-box.selected {\n    border-color: #7274A7;\n}\n\n.button-container {\n    margin-bottom: 20px;\n    text-align: center;\n}\n\n.button-container a {\n    display: inline-block;\n    width: 100px;\n    height: 25px;\n    line-height: 25px;\n    border: 1px solid #c2ccd1;\n    margin-right: 30px;\n    text-decoration: none;\n    color: black;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n    border-radius: 2px;\n}\n\n.button-container a:HOVER {\n    background: #fcfcfc;\n}\n\n.button-container a:ACTIVE {\n    border-top-color: #c2ccd1;\n    box-shadow:inset 0 5px 4px -4px rgba(49, 49, 64, 0.1);\n}\n\n.edui-charts-not-data {\n    height: 100px;\n    line-height: 100px;\n    text-align: center;\n}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/charts/charts.html",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <title>chart</title>\n        <meta chartset=\"utf-8\">\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"charts.css\">\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    </head>\n    <body>\n        <div class=\"main\">\n            <div class=\"table-view\">\n                <h3><var id=\"lang_data_source\"></var></h3>\n                <div id=\"tableContainer\" class=\"table-container\"></div>\n                <h3><var id=\"lang_chart_format\"></var></h3>\n                <form name=\"data-form\">\n                    <div class=\"charts-format\">\n                        <fieldset>\n                            <legend><var id=\"lang_data_align\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label>\n                                    <input type=\"radio\" class=\"format-ctrl not-pie-item\" name=\"charts-format\" value=\"1\" checked=\"checked\">\n                                    <var id=\"lang_chart_align_same\"></var>\n                                </label>\n                                <label>\n                                    <input type=\"radio\" class=\"format-ctrl not-pie-item\" name=\"charts-format\" value=\"-1\">\n                                    <var id=\"lang_chart_align_reverse\"></var>\n                                </label>\n                                <br>\n                            </div>\n                        </fieldset>\n                        <fieldset>\n                            <legend><var id=\"lang_chart_title\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label>\n                                    <var id=\"lang_chart_main_title\"></var><input type=\"text\" name=\"title\" class=\"data-item\">\n                                </label>\n                                <label>\n                                    <var id=\"lang_chart_sub_title\"></var><input type=\"text\" name=\"sub-title\" class=\"data-item not-pie-item\">\n                                </label>\n                                <label>\n                                    <var id=\"lang_chart_x_title\"></var><input type=\"text\" name=\"x-title\" class=\"data-item not-pie-item\">\n                                </label>\n                                <label>\n                                    <var id=\"lang_chart_y_title\"></var><input type=\"text\" name=\"y-title\" class=\"data-item not-pie-item\">\n                                </label>\n                            </div>\n                        </fieldset>\n                        <fieldset>\n                            <legend><var id=\"lang_chart_tip\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label>\n                                    <var id=\"lang_cahrt_tip_prefix\"></var>\n                                    <input type=\"text\" id=\"tipInput\" name=\"tip\" class=\"data-item\" disabled=\"disabled\">\n                                </label>\n                                <p><var id=\"lang_cahrt_tip_description\"></var></p>\n                            </div>\n                        </fieldset>\n                        <fieldset>\n                            <legend><var id=\"lang_chart_data_unit\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label><var id=\"lang_chart_data_unit_title\"></var><input type=\"text\" name=\"unit\" class=\"data-item\"></label>\n                                <p><var id=\"lang_chart_data_unit_description\"></var></p>\n                            </div>\n                        </fieldset>\n                    </div>\n                </form>\n            </div>\n            <div class=\"charts-view\">\n                <div id=\"chartsContainer\" class=\"charts-container\"></div>\n                <div id=\"chartsType\" class=\"charts-type\">\n                    <h3><var id=\"lang_chart_type\"></var></h3>\n                    <div class=\"scroll-view\">\n                        <div class=\"scroll-container\">\n                            <div id=\"scrollBed\" class=\"scroll-bed\"></div>\n                        </div>\n                        <div id=\"buttonContainer\" class=\"button-container\">\n                            <a href=\"#\" data-title=\"prev\"><var id=\"lang_prev_btn\"></var></a>\n                            <a href=\"#\" data-title=\"next\"><var id=\"lang_next_btn\"></var></a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <script src=\"../../third-party/jquery-1.10.2.min.js\"></script>\n        <script src=\"../../third-party/highcharts/highcharts.js\"></script>\n        <script src=\"chart.config.js\"></script>\n        <script src=\"charts.js\"></script>\n    </body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/charts/charts.js",
    "content": "/*\n * 图片转换对话框脚本\n **/\n\nvar tableData = [],\n    //编辑器页面table\n    editorTable = null,\n    chartsConfig = window.typeConfig,\n    resizeTimer = null,\n    //初始默认图表类型\n    currentChartType = 0;\n\nwindow.onload = function () {\n\n    editorTable = domUtils.findParentByTagName( editor.selection.getRange().startContainer, 'table', true);\n\n    //未找到表格， 显示错误页面\n    if ( !editorTable ) {\n        document.body.innerHTML = \"<div class='edui-charts-not-data'>未找到数据</div>\";\n        return;\n    }\n\n    //初始化图表类型选择\n    initChartsTypeView();\n    renderTable( editorTable );\n    initEvent();\n    initUserConfig( editorTable.getAttribute( \"data-chart\" ) );\n    $( \"#scrollBed .view-box:eq(\"+ currentChartType +\")\" ).trigger( \"click\" );\n    updateViewType( currentChartType );\n\n    dialog.addListener( \"resize\", function () {\n\n        if ( resizeTimer != null ) {\n            window.clearTimeout( resizeTimer );\n        }\n\n        resizeTimer = window.setTimeout( function () {\n\n            resizeTimer = null;\n\n            renderCharts();\n\n        }, 500 );\n\n    } );\n\n};\n\nfunction initChartsTypeView () {\n\n    var contents = [];\n\n    for ( var i = 0, len = chartsConfig.length; i<len; i++ ) {\n\n        contents.push( '<div class=\"view-box\" data-chart-type=\"'+ i +'\"><img width=\"300\" src=\"images/charts'+ i +'.png\"></div>' );\n\n    }\n\n    $( \"#scrollBed\" ).html( contents.join( \"\" ) );\n\n}\n\n//渲染table， 以便用户修改数据\nfunction renderTable ( table ) {\n\n    var tableHtml = [];\n\n    //构造数据\n    for ( var i = 0, row; row = table.rows[ i ]; i++ ) {\n\n        tableData[ i ] = [];\n        tableHtml[ i ] = [];\n\n        for ( var j = 0, cell; cell = row.cells[ j ]; j++ ) {\n\n            var value = getCellValue( cell );\n\n            if ( i > 0 && j > 0 ) {\n                value = +value;\n            }\n\n            if ( i === 0 || j === 0 ) {\n                tableHtml[ i ].push( '<th>'+ value +'</th>' );\n            } else {\n                tableHtml[ i ].push( '<td><input type=\"text\" class=\"data-item\" value=\"'+ value +'\"></td>' );\n            }\n\n            tableData[ i ][ j ] = value;\n\n        }\n\n        tableHtml[ i ] = tableHtml[ i ].join( \"\" );\n\n    }\n\n    //draw 表格\n    $( \"#tableContainer\" ).html( '<table id=\"showTable\" border=\"1\"><tbody><tr>'+ tableHtml.join( \"</tr><tr>\" ) +'</tr></tbody></table>' );\n\n}\n\n/*\n * 根据表格已有的图表属性初始化当前图表属性\n */\nfunction initUserConfig ( config ) {\n\n    var parsedConfig = {};\n\n    if ( !config ) {\n        return;\n    }\n\n    config = config.split( \";\" );\n\n    $.each( config, function ( index, item ) {\n\n        item = item.split( \":\" );\n        parsedConfig[ item[ 0 ] ] = item[ 1 ];\n\n    } );\n\n    setUserConfig( parsedConfig );\n\n}\n\nfunction initEvent () {\n\n    var cacheValue = null,\n        //图表类型数\n        typeViewCount = chartsConfig.length- 1,\n        $chartsTypeViewBox = $( '#scrollBed .view-box' );\n\n    $( \".charts-format\" ).delegate( \".format-ctrl\", \"change\", function () {\n\n        renderCharts();\n\n    } )\n\n    $( \".table-view\" ).delegate( \".data-item\", \"focus\", function () {\n\n        cacheValue = this.value;\n\n    } ).delegate( \".data-item\", \"blur\", function () {\n\n        if ( this.value !== cacheValue ) {\n            renderCharts();\n        }\n\n        cacheValue = null;\n\n    } );\n\n    $( \"#buttonContainer\" ).delegate( \"a\", \"click\", function (e) {\n\n        e.preventDefault();\n\n        if ( this.getAttribute( \"data-title\" ) === 'prev' ) {\n\n            if ( currentChartType > 0 ) {\n                currentChartType--;\n                updateViewType( currentChartType );\n            }\n\n        } else {\n\n            if ( currentChartType < typeViewCount ) {\n                currentChartType++;\n                updateViewType( currentChartType );\n            }\n\n        }\n\n    } );\n\n    //图表类型变化\n    $( '#scrollBed' ).delegate( \".view-box\", \"click\", function (e) {\n\n        var index = $( this ).attr( \"data-chart-type\" );\n        $chartsTypeViewBox.removeClass( \"selected\" );\n        $( $chartsTypeViewBox[ index ] ).addClass( \"selected\" );\n\n        currentChartType = index | 0;\n\n        //饼图， 禁用部分配置\n        if ( currentChartType === chartsConfig.length - 1 ) {\n\n            disableNotPieConfig();\n\n        //启用完整配置\n        } else {\n\n            enableNotPieConfig();\n\n        }\n\n        renderCharts();\n\n    } );\n\n}\n\nfunction renderCharts () {\n\n    var data = collectData();\n\n    $('#chartsContainer').highcharts( $.extend( {}, chartsConfig[ currentChartType ], {\n\n        credits: {\n            enabled: false\n        },\n        exporting: {\n            enabled: false\n        },\n        title: {\n            text: data.title,\n            x: -20 //center\n        },\n        subtitle: {\n            text: data.subTitle,\n            x: -20\n        },\n        xAxis: {\n            title: {\n                text: data.xTitle\n            },\n            categories: data.categories\n        },\n        yAxis: {\n            title: {\n                text: data.yTitle\n            },\n            plotLines: [{\n                value: 0,\n                width: 1,\n                color: '#808080'\n            }]\n        },\n        tooltip: {\n            enabled: true,\n            valueSuffix: data.suffix\n        },\n        legend: {\n            layout: 'vertical',\n            align: 'right',\n            verticalAlign: 'middle',\n            borderWidth: 1\n        },\n        series: data.series\n\n    } ));\n\n}\n\nfunction updateViewType ( index ) {\n\n    $( \"#scrollBed\" ).css( 'marginLeft', -index*324+'px' );\n\n}\n\nfunction collectData () {\n\n    var form = document.forms[ 'data-form' ],\n        data = null;\n\n    if ( currentChartType !== chartsConfig.length - 1 ) {\n\n        data = getSeriesAndCategories();\n        $.extend( data, getUserConfig() );\n\n    //饼图数据格式\n    } else {\n        data = getSeriesForPieChart();\n        data.title = form[ 'title' ].value;\n        data.suffix = form[ 'unit' ].value;\n    }\n\n    return data;\n\n}\n\n/**\n * 获取用户配置信息\n */\nfunction getUserConfig () {\n\n    var form = document.forms[ 'data-form' ],\n        info = {\n            title: form[ 'title' ].value,\n            subTitle: form[ 'sub-title' ].value,\n            xTitle: form[ 'x-title' ].value,\n            yTitle: form[ 'y-title' ].value,\n            suffix: form[ 'unit' ].value,\n            //数据对齐方式\n            tableDataFormat: getTableDataFormat (),\n            //饼图提示文字\n            tip: $( \"#tipInput\" ).val()\n        };\n\n    return info;\n\n}\n\nfunction setUserConfig ( config ) {\n\n    var form = document.forms[ 'data-form' ];\n\n    config.title && ( form[ 'title' ].value = config.title );\n    config.subTitle && ( form[ 'sub-title' ].value = config.subTitle );\n    config.xTitle && ( form[ 'x-title' ].value = config.xTitle );\n    config.yTitle && ( form[ 'y-title' ].value = config.yTitle );\n    config.suffix && ( form[ 'unit' ].value = config.suffix );\n    config.dataFormat == \"-1\" && ( form[ 'charts-format' ][ 1 ].checked = true );\n    config.tip && ( form[ 'tip' ].value = config.tip );\n    currentChartType = config.chartType || 0;\n\n}\n\nfunction getSeriesAndCategories () {\n\n    var form = document.forms[ 'data-form' ],\n        series = [],\n        categories = [],\n        tmp = [],\n        tableData = getTableData();\n\n    //反转数据\n    if ( getTableDataFormat() === \"-1\" ) {\n\n        for ( var i = 0, len = tableData.length; i < len; i++ ) {\n\n            for ( var j = 0, jlen = tableData[ i ].length; j < jlen; j++ ) {\n\n                if ( !tmp[ j ] ) {\n                    tmp[ j ] = [];\n                }\n\n                tmp[ j ][ i ] = tableData[ i ][ j ];\n\n            }\n\n        }\n\n        tableData = tmp;\n\n    }\n\n    categories = tableData[0].slice( 1 );\n\n    for ( var i = 1, data; data = tableData[ i ]; i++ ) {\n\n        series.push( {\n            name: data[ 0 ],\n            data: data.slice( 1 )\n        } );\n\n    }\n\n    return {\n        series: series,\n        categories: categories\n    };\n\n}\n\n/*\n * 获取数据源数据对齐方式\n */\nfunction getTableDataFormat () {\n\n    var form = document.forms[ 'data-form' ],\n        items = form['charts-format'];\n\n    return items[ 0 ].checked ? items[ 0 ].value : items[ 1 ].value;\n\n}\n\n/*\n * 禁用非饼图类型的配置项\n */\nfunction disableNotPieConfig() {\n\n    updateConfigItem( 'disable' );\n\n}\n\n/*\n * 启用非饼图类型的配置项\n */\nfunction enableNotPieConfig() {\n\n    updateConfigItem( 'enable' );\n\n}\n\nfunction updateConfigItem ( value ) {\n\n    var table = $( \"#showTable\" )[ 0 ],\n        isDisable = value === 'disable' ? true : false;\n\n    //table中的input处理\n    for ( var i = 2 , row; row = table.rows[ i ]; i++ ) {\n\n        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {\n\n            $( \"input\", cell ).attr( \"disabled\", isDisable );\n\n        }\n\n    }\n\n    //其他项处理\n    $( \"input.not-pie-item\" ).attr( \"disabled\", isDisable );\n    $( \"#tipInput\" ).attr( \"disabled\", !isDisable )\n\n}\n\n/*\n * 获取饼图数据\n * 饼图的数据只取第一行的\n **/\nfunction getSeriesForPieChart () {\n\n    var series = {\n            type: 'pie',\n            name: $(\"#tipInput\").val(),\n            data: []\n        },\n        tableData = getTableData();\n\n\n    for ( var j = 1, jlen = tableData[ 0 ].length; j < jlen; j++ ) {\n\n        var title = tableData[ 0 ][ j ],\n            val = tableData[ 1 ][ j ];\n\n        series.data.push( [ title, val ] );\n\n    }\n\n    return {\n        series: [ series ]\n    };\n\n}\n\nfunction getTableData () {\n\n    var table = document.getElementById( \"showTable\" ),\n        xCount = table.rows[0].cells.length - 1,\n        values = getTableInputValue();\n\n    for ( var i = 0, value; value = values[ i ]; i++ ) {\n\n        tableData[ Math.floor( i / xCount ) + 1 ][ i % xCount + 1 ] = values[ i ];\n\n    }\n\n    return tableData;\n\n}\n\nfunction getTableInputValue () {\n\n    var table = document.getElementById( \"showTable\" ),\n        inputs = table.getElementsByTagName( \"input\" ),\n        values = [];\n\n    for ( var i = 0, input; input = inputs[ i ]; i++ ) {\n        values.push( input.value | 0 );\n    }\n\n    return values;\n\n}\n\nfunction getCellValue ( cell ) {\n\n    var value = utils.trim( ( cell.innerText || cell.textContent || '' ) );\n\n    return value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\\s+|\\s+$/g, '' );\n\n}\n\n\n//dialog确认事件\ndialog.onok = function () {\n\n    //收集信息\n    var form = document.forms[ 'data-form' ],\n        info = getUserConfig();\n\n    //添加图表类型\n    info.chartType = currentChartType;\n\n    //同步表格数据到编辑器\n    syncTableData();\n\n    //执行图表命令\n    editor.execCommand( 'charts', info );\n\n};\n\n/*\n * 同步图表编辑视图的表格数据到编辑器里的原始表格\n */\nfunction syncTableData () {\n\n    var tableData = getTableData();\n\n    for ( var i = 1, row; row = editorTable.rows[ i ]; i++ ) {\n\n        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {\n\n            cell.innerHTML = tableData[ i ] [ j ];\n\n        }\n\n    }\n\n}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/emotion/emotion.css",
    "content": ".jd img{\n    background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.pp img{\n    background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:25px;height:25px;display:block;\n}\n.ldw img{\n    background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.tsj img{\n    background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.cat img{\n    background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.bb img{\n    background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.youa img{\n    background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n\n.smileytable td {height: 37px;}\n#tabPanel{margin-left:5px;overflow: hidden;}\n#tabContent {float:left;background:#FFFFFF;}\n#tabContent div{display: none;width:480px;overflow:hidden;}\n#tabIconReview.show{left:17px;display:block;}\n.menuFocus{background:#ACCD3C;}\n.menuDefault{background:#FFFFFF;}\n#tabIconReview{position:absolute;left:406px;left:398px \\9;top:41px;z-index:65533;width:90px;height:76px;}\nimg.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFFFFF;background-position:center;background-repeat:no-repeat;}\n\n.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width: 95%;}\n.tabbody table{width: 100%;}\n.tabbody td{border:1px solid #BAC498;}\n.tabbody td span{display: block;zoom:1;padding:0 4px;}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/emotion/emotion.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" >\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"emotion.css\">\n</head>\n<body>\n<div id=\"tabPanel\" class=\"wrapper\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span><var id=\"lang_input_choice\"></var></span>\n        <span><var id=\"lang_input_Tuzki\"></var></span>\n        <span><var id=\"lang_input_lvdouwa\"></var></span>\n        <span><var id=\"lang_input_BOBO\"></var></span>\n        <span><var id=\"lang_input_babyCat\"></var></span>\n        <span><var id=\"lang_input_bubble\"></var></span>\n        <span><var id=\"lang_input_youa\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"tab0\"></div>\n        <div id=\"tab1\"></div>\n        <div id=\"tab2\"></div>\n        <div id=\"tab3\"></div>\n        <div id=\"tab4\"></div>\n        <div id=\"tab5\"></div>\n        <div id=\"tab6\"></div>\n    </div>\n</div>\n<div id=\"tabIconReview\">\n    <img id='faceReview' class='review' src=\"../../themes/default/images/spacer.gif\"/>\n</div>\n<script type=\"text/javascript\" src=\"emotion.js\"></script>\n<script type=\"text/javascript\">\n    var emotion = {\n        tabNum:7, //切换面板数量\n        SmilmgName:{ tab0:['j_00', 84], tab1:['t_00', 40], tab2:['w_00', 52], tab3:['B_00', 63], tab4:['C_00', 20], tab5:['i_f', 50], tab6:['y_00', 40] }, //图片前缀名\n        imageFolders:{ tab0:'jx2/', tab1:'tsj/', tab2:'ldw/', tab3:'bobo/', tab4:'babycat/', tab5:'face/', tab6:'youa/'}, //图片对应文件夹路径\n        imageCss:{tab0:'jd', tab1:'tsj', tab2:'ldw', tab3:'bb', tab4:'cat', tab5:'pp', tab6:'youa'}, //图片css类名\n        imageCssOffset:{tab0:35, tab1:35, tab2:35, tab3:35, tab4:35, tab5:25, tab6:35}, //图片偏移\n        SmileyInfor:{\n            tab0:['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '打酱油', '俯卧撑', '气愤', '?', '吻', '怒', '胜利', 'HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '微笑', '亲吻', '调皮', '惊恐', '耍酷', '发火', '害羞', '汗水', '大哭', '', '加油', '困', '你NB', '晕倒', '开心', '偷笑', '大哭', '滴汗', '叹气', '超赞', '??', '飞吻', '天使', '撒花', '生气', '被砸', '吓傻', '随意吐'],\n            tab1:['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '摊手', '睡觉', '瘫坐', '无聊', '星星闪', '旋转', '也不行', '郁闷', '正Music', '抓墙', '撞墙至死', '歪头', '戳眼', '飘过', '互相拍砖', '砍死你', '扔桌子', '少林寺', '什么？', '转头', '我爱牛奶', '我踢', '摇晃', '晕厥', '在笼子里', '震荡'],\n            tab2:['大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '我错了', 'money', '气愤', '挑逗', '吻', '怒', '胜利', '委屈', '受伤', '说啥呢？', '闭嘴', '不', '逗你玩儿', '飞吻', '眩晕', '魔法', '我来了', '睡了', '我打', '闭嘴', '打', '打晕了', '刷牙', '爆揍', '炸弹', '倒立', '刮胡子', '邪恶的笑', '不要不要', '爱恋中', '放大仔细看', '偷窥', '超高兴', '晕', '松口气', '我跑', '享受', '修养', '哭', '汗', '啊~', '热烈欢迎', '打酱油', '俯卧撑', '?'],\n            tab3:['HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '泪眼', '流泪', '生气', '吐舌', '喜欢', '旋转', '再见', '抓狂', '汗', '鄙视', '拜', '吐血', '嘘', '打人', '蹦跳', '变脸', '扯肉', '吃To', '吃花', '吹泡泡糖', '大变身', '飞天舞', '回眸', '可怜', '猛抽', '泡泡', '苹果', '亲', '', '骚舞', '烧香', '睡', '套娃娃', '捅捅', '舞倒', '西红柿', '爱慕', '摇', '摇摆', '杂耍', '招财', '被殴', '被球闷', '大惊', '理想', '欧打', '呕吐', '碎', '吐痰'],\n            tab4:['发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '顶', '幸运', '爱心', '躲', '送花', '选择'],\n            tab5:['微笑', '亲吻', '调皮', '惊讶', '耍酷', '发火', '害羞', '汗水', '大哭', '得意', '鄙视', '困', '夸奖', '晕倒', '疑问', '媒婆', '狂吐', '青蛙', '发愁', '亲吻', '', '爱心', '心碎', '玫瑰', '礼物', '哭', '奸笑', '可爱', '得意', '呲牙', '暴汗', '楚楚可怜', '困', '哭', '生气', '惊讶', '口水', '彩虹', '夜空', '太阳', '钱钱', '灯泡', '咖啡', '蛋糕', '音乐', '爱', '胜利', '赞', '鄙视', 'OK'],\n            tab6:['男兜', '女兜', '开心', '乖乖', '偷笑', '大笑', '抽泣', '大哭', '无奈', '滴汗', '叹气', '狂晕', '委屈', '超赞', '??', '疑问', '飞吻', '天使', '撒花', '生气', '被砸', '口水', '泪奔', '吓傻', '吐舌头', '点头', '随意吐', '旋转', '困困', '鄙视', '狂顶', '篮球', '再见', '欢迎光临', '恭喜发财', '稍等', '我在线', '恕不议价', '库房有货', '货在路上']\n        }\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/emotion/emotion.js",
    "content": "window.onload = function () {\n    editor.setOpt({\n        emotionLocalization:false\n    });\n\n    emotion.SmileyPath = editor.options.emotionLocalization === true ? 'images/' : \"http://img.baidu.com/hi/\";\n    emotion.SmileyBox = createTabList( emotion.tabNum );\n    emotion.tabExist = createArr( emotion.tabNum );\n\n    initImgName();\n    initEvtHandler( \"tabHeads\" );\n};\n\nfunction initImgName() {\n    for ( var pro in emotion.SmilmgName ) {\n        var tempName = emotion.SmilmgName[pro],\n                tempBox = emotion.SmileyBox[pro],\n                tempStr = \"\";\n\n        if ( tempBox.length ) return;\n        for ( var i = 1; i <= tempName[1]; i++ ) {\n            tempStr = tempName[0];\n            if ( i < 10 ) tempStr = tempStr + '0';\n            tempStr = tempStr + i + '.gif';\n            tempBox.push( tempStr );\n        }\n    }\n}\n\nfunction initEvtHandler( conId ) {\n    var tabHeads = $G( conId );\n    for ( var i = 0, j = 0; i < tabHeads.childNodes.length; i++ ) {\n        var tabObj = tabHeads.childNodes[i];\n        if ( tabObj.nodeType == 1 ) {\n            domUtils.on( tabObj, \"click\", (function ( index ) {\n                return function () {\n                    switchTab( index );\n                };\n            })( j ) );\n            j++;\n        }\n    }\n    switchTab( 0 );\n    $G( \"tabIconReview\" ).style.display = 'none';\n}\n\nfunction InsertSmiley( url, evt ) {\n    var obj = {\n        src:editor.options.emotionLocalization ? editor.options.UEDITOR_HOME_URL + \"dialogs/emotion/\" + url : url\n    };\n    obj._src = obj.src;\n    editor.execCommand( 'insertimage', obj );\n    if ( !evt.ctrlKey ) {\n        dialog.popup.hide();\n    }\n}\n\nfunction switchTab( index ) {\n\n    autoHeight( index );\n    if ( emotion.tabExist[index] == 0 ) {\n        emotion.tabExist[index] = 1;\n        createTab( 'tab' + index );\n    }\n    //获取呈现元素句柄数组\n    var tabHeads = $G( \"tabHeads\" ).getElementsByTagName( \"span\" ),\n            tabBodys = $G( \"tabBodys\" ).getElementsByTagName( \"div\" ),\n            i = 0, L = tabHeads.length;\n    //隐藏所有呈现元素\n    for ( ; i < L; i++ ) {\n        tabHeads[i].className = \"\";\n        tabBodys[i].style.display = \"none\";\n    }\n    //显示对应呈现元素\n    tabHeads[index].className = \"focus\";\n    tabBodys[index].style.display = \"block\";\n}\n\nfunction autoHeight( index ) {\n    var iframe = dialog.getDom( \"iframe\" ),\n            parent = iframe.parentNode.parentNode;\n    switch ( index ) {\n        case 0:\n            iframe.style.height = \"380px\";\n            parent.style.height = \"392px\";\n            break;\n        case 1:\n            iframe.style.height = \"220px\";\n            parent.style.height = \"232px\";\n            break;\n        case 2:\n            iframe.style.height = \"260px\";\n            parent.style.height = \"272px\";\n            break;\n        case 3:\n            iframe.style.height = \"300px\";\n            parent.style.height = \"312px\";\n            break;\n        case 4:\n            iframe.style.height = \"140px\";\n            parent.style.height = \"152px\";\n            break;\n        case 5:\n            iframe.style.height = \"260px\";\n            parent.style.height = \"272px\";\n            break;\n        case 6:\n            iframe.style.height = \"230px\";\n            parent.style.height = \"242px\";\n            break;\n        default:\n\n    }\n}\n\n\nfunction createTab( tabName ) {\n    var faceVersion = \"?v=1.1\", //版本号\n            tab = $G( tabName ), //获取将要生成的Div句柄\n            imagePath = emotion.SmileyPath + emotion.imageFolders[tabName], //获取显示表情和预览表情的路径\n            positionLine = 11 / 2, //中间数\n            iWidth = iHeight = 35, //图片长宽\n            iColWidth = 3, //表格剩余空间的显示比例\n            tableCss = emotion.imageCss[tabName],\n            cssOffset = emotion.imageCssOffset[tabName],\n            textHTML = ['<table class=\"smileytable\">'],\n            i = 0, imgNum = emotion.SmileyBox[tabName].length, imgColNum = 11, faceImage,\n            sUrl, realUrl, posflag, offset, infor;\n\n    for ( ; i < imgNum; ) {\n        textHTML.push( '<tr>' );\n        for ( var j = 0; j < imgColNum; j++, i++ ) {\n            faceImage = emotion.SmileyBox[tabName][i];\n            if ( faceImage ) {\n                sUrl = imagePath + faceImage + faceVersion;\n                realUrl = imagePath + faceImage;\n                posflag = j < positionLine ? 0 : 1;\n                offset = cssOffset * i * (-1) - 1;\n                infor = emotion.SmileyInfor[tabName][i];\n\n                textHTML.push( '<td  class=\"' + tableCss + '\"   border=\"1\" width=\"' + iColWidth + '%\" style=\"border-collapse:collapse;\" align=\"center\"  bgcolor=\"transparent\" onclick=\"InsertSmiley(\\'' + realUrl.replace( /'/g, \"\\\\'\" ) + '\\',event)\" onmouseover=\"over(this,\\'' + sUrl + '\\',\\'' + posflag + '\\')\" onmouseout=\"out(this)\">' );\n                textHTML.push( '<span>' );\n                textHTML.push( '<img  style=\"background-position:left ' + offset + 'px;\" title=\"' + infor + '\" src=\"' + emotion.SmileyPath + (editor.options.emotionLocalization ? '0.gif\" width=\"' : 'default/0.gif\" width=\"') + iWidth + '\" height=\"' + iHeight + '\"></img>' );\n                textHTML.push( '</span>' );\n            } else {\n                textHTML.push( '<td width=\"' + iColWidth + '%\"   bgcolor=\"#FFFFFF\">' );\n            }\n            textHTML.push( '</td>' );\n        }\n        textHTML.push( '</tr>' );\n    }\n    textHTML.push( '</table>' );\n    textHTML = textHTML.join( \"\" );\n    tab.innerHTML = textHTML;\n}\n\nfunction over( td, srcPath, posFlag ) {\n    td.style.backgroundColor = \"#ACCD3C\";\n    $G( 'faceReview' ).style.backgroundImage = \"url(\" + srcPath + \")\";\n    if ( posFlag == 1 ) $G( \"tabIconReview\" ).className = \"show\";\n    $G( \"tabIconReview\" ).style.display = 'block';\n}\n\nfunction out( td ) {\n    td.style.backgroundColor = \"transparent\";\n    var tabIconRevew = $G( \"tabIconReview\" );\n    tabIconRevew.className = \"\";\n    tabIconRevew.style.display = 'none';\n}\n\nfunction createTabList( tabNum ) {\n    var obj = {};\n    for ( var i = 0; i < tabNum; i++ ) {\n        obj[\"tab\" + i] = [];\n    }\n    return obj;\n}\n\nfunction createArr( tabNum ) {\n    var arr = [];\n    for ( var i = 0; i < tabNum; i++ ) {\n        arr[i] = 0;\n    }\n    return arr;\n}\n\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/gmap/gmap.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .content{width:530px; height: 350px;margin: 10px auto;}\n        .content table{width: 100%}\n        .content table td{vertical-align: middle;}\n        #address{width:220px;height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}\n    </style>\n    <script type=\"text/javascript\" src=\"http://maps.googleapis.com/maps/api/js?sensor=false\"></script>\n</head>\n<body>\n<div class=\"content\">\n    <table>\n        <tr>\n            <td><label for=\"address\"><var id=\"lang_input_address\"></var></label></td>\n            <td><input id=\"address\" type=\"text\" /></td>\n            <td><a id=\"doSearch\" href=\"javascript:void(0)\" class=\"button\"><var id=\"lang_input_search\"></var></a></td>\n        </tr>\n    </table>\n    <div id=\"container\" style=\"width: 100%; height: 340px;margin: 5px auto; border: 1px solid gray;\"></div>\n</div>\n<script type=\"text/javascript\">\n    domUtils.on(window,\"load\",function(){\n        var map = new google.maps.Map(document.getElementById('container'), {\n                zoom: 3,\n                streetViewControl: false,\n                scaleControl: true,\n                mapTypeId: google.maps.MapTypeId.ROADMAP\n            });\n            var imgcss;\n            var marker = new google.maps.Marker({\n                map: map,\n                draggable: true\n            });\n            function doSearch(){\n                var address = document.getElementById('address').value;\n                var geocoder = new google.maps.Geocoder();\n                geocoder.geocode( { 'address': address}, function (results, status) {\n                    if (status == google.maps.GeocoderStatus.OK) {\n                        var bounds = results[0].geometry.viewport;\n                        map.fitBounds(bounds);\n                        marker.setPosition(results[0].geometry.location);\n                        marker.setTitle(address);\n                    } else alert(lang.searchError);\n                });\n            }\n            $G('address').onkeydown = function (evt){\n                evt = evt || event;\n                if (evt.keyCode == 13) {\n                    doSearch();\n                }\n            };\n            $G(\"doSearch\").onclick = doSearch;\n            dialog.onok = function (){\n                var center = map.getCenter();\n                var point = marker.getPosition();\n                var url = \"http://maps.googleapis.com/maps/api/staticmap?center=\" + center.lat() + ',' + center.lng() + \"&zoom=\" + map.zoom + \"&size=520x340&maptype=\" + map.getMapTypeId() + \"&markers=\" + point.lat() + ',' + point.lng() + \"&sensor=false\";\n                editor.execCommand('inserthtml', '<img width=\"520\" height=\"340\" src=\"' + url + '\"' + (imgcss ? ' style=\"' + imgcss + '\"' :'') + '/>');\n            };\n\n            function getPars(str,par){\n                var reg = new RegExp(par+\"=((\\\\d+|[.,])*)\",\"g\");\n                return reg.exec(str)[1];\n            }\n            var img = editor.selection.getRange().getClosedNode();\n            if(img && img.src.indexOf(\"http://maps.googleapis.com/maps/api/staticmap\")!=-1){\n                var url = img.getAttribute(\"src\");\n                var centers = getPars(url,\"center\").split(\",\");\n                point = new google.maps.LatLng(Number(centers[0]),Number(centers[1]));\n                map.setCenter(point);\n                map.setZoom(Number(getPars(url,\"zoom\")));\n                centers = getPars(url,\"markers\").split(\",\");\n                marker.setPosition(new google.maps.LatLng(Number(centers[0]),Number(centers[1])));\n                imgcss = img.style.cssText;\n            }else{\n                setTimeout(function(){\n                    doSearch();\n                },30)\n            }\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/help/help.css",
    "content": ".wrapper{width: 370px;margin: 10px auto;zoom: 1;}\n.tabbody{height: 360px;}\n.tabbody .panel{width:100%;height: 360px;position: absolute;background: #fff;}\n.tabbody .panel h1{font-size:26px;margin: 5px 0 0 5px;}\n.tabbody .panel p{font-size:12px;margin: 5px 0 0 5px;}\n.tabbody table{width:90%;line-height: 20px;margin: 5px 0 0 5px;;}\n.tabbody table thead{font-weight: bold;line-height: 25px;}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/help/help.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title>帮助</title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"help.css\">\n</head>\n<body>\n<div class=\"wrapper\" id=\"helptab\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span class=\"focus\" tabsrc=\"about\"><var id=\"lang_input_about\"></var></span>\n        <span tabsrc=\"shortcuts\"><var id=\"lang_input_shortcuts\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"about\" class=\"panel\">\n            <h1>UEditor</h1>\n            <p id=\"version\"></p>\n            <p><var id=\"lang_input_introduction\"></var></p>\n        </div>\n        <div id=\"shortcuts\" class=\"panel\">\n            <table>\n                <thead>\n                <tr>\n                    <td><var id=\"lang_Txt_shortcuts\"></var></td>\n                    <td><var id=\"lang_Txt_func\"></var></td>\n                </tr>\n                </thead>\n                <tbody>\n                <tr>\n                    <td>ctrl+b</td>\n                    <td><var id=\"lang_Txt_bold\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+c</td>\n                    <td><var id=\"lang_Txt_copy\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+x</td>\n                    <td><var id=\"lang_Txt_cut\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+v</td>\n                    <td><var id=\"lang_Txt_Paste\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+y</td>\n                    <td><var id=\"lang_Txt_undo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+z</td>\n                    <td><var id=\"lang_Txt_redo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+i</td>\n                    <td><var id=\"lang_Txt_italic\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+u</td>\n                    <td><var id=\"lang_Txt_underline\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+a</td>\n                    <td><var id=\"lang_Txt_selectAll\"></var></td>\n                </tr>\n                <tr>\n                    <td>shift+enter</td>\n                    <td><var id=\"lang_Txt_visualEnter\"></var></td>\n                </tr>\n                <tr>\n                    <td>alt+z</td>\n                    <td><var id=\"lang_Txt_fullscreen\"></var></td>\n                </tr>\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"help.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/help/help.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午1:06\n * To change this template use File | Settings | File Templates.\n */\n/**\n * tab点击处理事件\n * @param tabHeads\n * @param tabBodys\n * @param obj\n */\nfunction clickHandler( tabHeads,tabBodys,obj ) {\n    //head样式更改\n    for ( var k = 0, len = tabHeads.length; k < len; k++ ) {\n        tabHeads[k].className = \"\";\n    }\n    obj.className = \"focus\";\n    //body显隐\n    var tabSrc = obj.getAttribute( \"tabSrc\" );\n    for ( var j = 0, length = tabBodys.length; j < length; j++ ) {\n        var body = tabBodys[j],\n            id = body.getAttribute( \"id\" );\n        body.onclick = function(){\n            this.style.zoom = 1;\n        };\n        if ( id != tabSrc ) {\n            body.style.zIndex = 1;\n        } else {\n            body.style.zIndex = 200;\n        }\n    }\n\n}\n\n/**\n * TAB切换\n * @param tabParentId  tab的父节点ID或者对象本身\n */\nfunction switchTab( tabParentId ) {\n    var tabElements = $G( tabParentId ).children,\n        tabHeads = tabElements[0].children,\n        tabBodys = tabElements[1].children;\n\n    for ( var i = 0, length = tabHeads.length; i < length; i++ ) {\n        var head = tabHeads[i];\n        if ( head.className === \"focus\" )clickHandler(tabHeads,tabBodys, head );\n        head.onclick = function () {\n            clickHandler(tabHeads,tabBodys,this);\n        }\n    }\n}\nswitchTab(\"helptab\");\n\ndocument.getElementById('version').innerHTML = parent.UE.version;"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/image/image.css",
    "content": "@charset \"utf-8\";\n/* dialog样式 */\n.wrapper {\n    zoom: 1;\n    width: 630px;\n    *width: 626px;\n    height: 380px;\n    margin: 0 auto;\n    padding: 10px;\n    position: relative;\n    font-family: sans-serif;\n}\n\n/*tab样式框大小*/\n.tabhead {\n    float:left;\n}\n.tabbody {\n    width: 100%;\n    height: 346px;\n    position: relative;\n    clear: both;\n}\n\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n\n.tabbody .panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n}\n\n/* 图片对齐方式 */\n.alignBar{\n    float:right;\n    margin-top: 5px;\n    position: relative;\n}\n\n.alignBar .algnLabel{\n    float:left;\n    height: 20px;\n    line-height: 20px;\n}\n\n.alignBar #alignIcon{\n    zoom:1;\n    _display: inline;\n    display: inline-block;\n    position: relative;\n}\n.alignBar #alignIcon span{\n    float: left;\n    cursor: pointer;\n    display: block;\n    width: 19px;\n    height: 17px;\n    margin-right: 3px;\n    margin-left: 3px;\n    background-image: url(./images/alignicon.jpg);\n}\n.alignBar #alignIcon .none-align{\n    background-position: 0 -18px;\n}\n.alignBar #alignIcon .left-align{\n    background-position: -20px -18px;\n}\n.alignBar #alignIcon .right-align{\n    background-position: -40px -18px;\n}\n.alignBar #alignIcon .center-align{\n    background-position: -60px -18px;\n}\n.alignBar #alignIcon .none-align.focus{\n    background-position: 0 0;\n}\n.alignBar #alignIcon .left-align.focus{\n    background-position: -20px 0;\n}\n.alignBar #alignIcon .right-align.focus{\n    background-position: -40px 0;\n}\n.alignBar #alignIcon .center-align.focus{\n    background-position: -60px 0;\n}\n\n\n\n\n/* 远程图片样式 */\n#remote {\n    z-index: 200;\n}\n\n#remote .top{\n    width: 100%;\n    margin-top: 25px;\n}\n#remote .left{\n    display: block;\n    float: left;\n    width: 300px;\n    height:10px;\n}\n#remote .right{\n    display: block;\n    float: right;\n    width: 300px;\n    height:10px;\n}\n#remote .row{\n    margin-left: 20px;\n    clear: both;\n    height: 40px;\n}\n\n#remote .row label{\n    text-align: center;\n    width: 50px;\n    zoom:1;\n    _display: inline;\n    display:inline-block;\n    vertical-align: middle;\n}\n#remote .row label.algnLabel{\n    float: left;\n\n}\n\n#remote input.text{\n    width: 150px;\n    padding: 3px 6px;\n    font-size: 14px;\n    line-height: 1.42857143;\n    color: #555;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n#remote input.text:focus {\n    border-color: #66afe9;\n    outline: 0;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n}\n#remote #url{\n    width: 500px;\n    margin-bottom: 2px;\n}\n#remote #width,\n#remote #height{\n    width: 20px;\n    margin-left: 2px;\n    margin-right: 2px;\n}\n#remote #border,\n#remote #vhSpace,\n#remote #title{\n    width: 180px;\n    margin-right: 5px;\n}\n#remote #lock{\n}\n#remote #lockicon{\n    zoom: 1;\n    _display:inline;\n    display: inline-block;\n    width: 20px;\n    height: 20px;\n    background: url(\"../../themes/default/images/lock.gif\") -13px -13px no-repeat;\n    vertical-align: middle;\n}\n#remote #preview{\n    clear: both;\n    width: 260px;\n    height: 240px;\n    z-index: 9999;\n    margin-top: 10px;\n    background-color: #eee;\n    overflow: hidden;\n}\n\n/* 上传图片 */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n    clip: auto;\n}\n\n#upload .queueList {\n    margin: 0;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 172px;\n    padding-top: 150px;\n    text-align: center;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top:0;\n    *top: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 300px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n    position: relative;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 9px 0 0 9px;\n    *margin: 6px 0 0 6px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display:none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background: url(./images/success.gif) no-repeat right bottom \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n#upload .filelist li.filePickerBlock div.webuploader-pick  {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display:none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display:none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused{\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover{\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter:alpha(opacity=60);\n    -moz-opacity:0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n\n/* 图片管理样式 */\n#online {\n    width: 100%;\n    height: 336px;\n    padding: 10px 0 0 0;\n}\n#online #imageList{\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n}\n#online ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n#online li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 0 0 9px 9px;\n    *margin: 0 0 6px 6px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n#online li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width:0;\n    height:0;\n    margin: 0;\n    padding: 0;\n}\n#online li img {\n    cursor: pointer;\n}\n#online li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n#online li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n#online li.selected .icon {\n    background-image: url(images/success.png);\n    background-image: url(images/success.gif)\\9;\n    background-position: 75px 75px;\n}\n#online li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}\n\n\n/* 图片搜索样式 */\n#search .searchBar {\n    width: 100%;\n    height: 30px;\n    margin: 10px 0 5px 0;\n    padding: 0;\n}\n\n#search input.text{\n    width: 150px;\n    padding: 3px 6px;\n    font-size: 14px;\n    line-height: 1.42857143;\n    color: #555;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n#search input.text:focus {\n    border-color: #66afe9;\n    outline: 0;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n}\n#search input.searchTxt {\n    margin-left:5px;\n    padding-left: 5px;\n    background: #FFF;\n    width: 300px;\n    *width: 260px;\n    height: 21px;\n    line-height: 21px;\n    float: left;\n    dislay: block;\n}\n\n#search .searchType {\n    width: 65px;\n    height: 28px;\n    padding:0;\n    line-height: 28px;\n    border: 1px solid #d7d7d7;\n    border-radius: 0;\n    vertical-align: top;\n    margin-left: 5px;\n    float: left;\n    dislay: block;\n}\n\n#search #searchBtn,\n#search #searchReset {\n    display: inline-block;\n    margin-bottom: 0;\n    margin-right: 5px;\n    padding: 4px 10px;\n    font-weight: 400;\n    text-align: center;\n    vertical-align: middle;\n    cursor: pointer;\n    background-image: none;\n    border: 1px solid transparent;\n    white-space: nowrap;\n    font-size: 14px;\n    border-radius: 4px;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    vertical-align: top;\n    float: right;\n}\n\n#search #searchBtn {\n    color: white;\n    border-color: #285e8e;\n    background-color: #3b97d7;\n}\n#search #searchReset {\n    color: #333;\n    border-color: #ccc;\n    background-color: #fff;\n}\n#search #searchBtn:hover {\n    background-color: #3276b1;\n}\n#search #searchReset:hover {\n    background-color: #eee;\n}\n\n#search .msg {\n    margin-left: 5px;\n}\n\n#search .searchList{\n    width: 100%;\n    height: 300px;\n    overflow: hidden;\n    clear: both;\n}\n#search .searchList ul{\n    margin:0;\n    padding:0;\n    list-style:none;\n    clear: both;\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    zoom: 1;\n    position: relative;\n}\n\n#search .searchList li {\n    list-style:none;\n    float: left;\n    display: block;\n    width: 115px;\n    margin: 5px 10px 5px 20px;\n    *margin: 5px 10px 5px 15px;\n    padding:0;\n    font-size: 12px;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, .3);\n    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);\n    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);\n    position: relative;\n    vertical-align: top;\n    text-align: center;\n    overflow: hidden;\n    cursor: pointer;\n    filter: alpha(Opacity=100);\n    -moz-opacity: 1;\n    opacity: 1;\n    border: 2px solid #eee;\n}\n\n#search .searchList li.selected {\n    filter: alpha(Opacity=40);\n    -moz-opacity: 0.4;\n    opacity: 0.4;\n    border: 2px solid #00a0e9;\n}\n\n#search .searchList li p {\n    background-color: #eee;\n    margin: 0;\n    padding: 0;\n    position: relative;\n    width:100%;\n    height:115px;\n    overflow: hidden;\n}\n\n#search .searchList li p img {\n    cursor: pointer;\n    border: 0;\n}\n\n#search .searchList li a {\n    color: #999;\n    border-top: 1px solid #F2F2F2;\n    background: #FAFAFA;\n    text-align: center;\n    display: block;\n    padding: 0 5px;\n    width: 105px;\n    height:32px;\n    line-height:32px;\n    white-space:nowrap;\n    text-overflow:ellipsis;\n    text-decoration: none;\n    overflow: hidden;\n    word-break: break-all;\n}\n\n#search .searchList a:hover {\n    text-decoration: underline;\n    color: #333;\n}\n#search .searchList .clearFloat{\n    clear: both;\n}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/image/image.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.min.js\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css\">\n\n    <!-- image dialog -->\n    <link rel=\"stylesheet\" href=\"image.css\" type=\"text/css\" />\n</head>\n<body>\n\n    <div class=\"wrapper\">\n        <div id=\"tabhead\" class=\"tabhead\">\n            <span class=\"tab\" data-content-id=\"remote\"><var id=\"lang_tab_remote\"></var></span>\n            <span class=\"tab focus\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n            <span class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n            <span class=\"tab\" data-content-id=\"search\"><var id=\"lang_tab_search\"></var></span>\n        </div>\n        <div class=\"alignBar\">\n            <label class=\"algnLabel\"><var id=\"lang_input_align\"></var></label>\n                    <span id=\"alignIcon\">\n                        <span id=\"noneAlign\" class=\"none-align focus\" data-align=\"none\"></span>\n                        <span id=\"leftAlign\" class=\"left-align\" data-align=\"left\"></span>\n                        <span id=\"rightAlign\" class=\"right-align\" data-align=\"right\"></span>\n                        <span id=\"centerAlign\" class=\"center-align\" data-align=\"center\"></span>\n                    </span>\n            <input id=\"align\" name=\"align\" type=\"hidden\" value=\"none\"/>\n        </div>\n        <div id=\"tabbody\" class=\"tabbody\">\n\n            <!-- 远程图片 -->\n            <div id=\"remote\" class=\"panel\">\n                <div class=\"top\">\n                    <div class=\"row\">\n                        <label for=\"url\"><var id=\"lang_input_url\"></var></label>\n                        <span><input class=\"text\" id=\"url\" type=\"text\"/></span>\n                    </div>\n                </div>\n                <div class=\"left\">\n                    <div class=\"row\">\n                        <label><var id=\"lang_input_size\"></var></label>\n                        <span><var id=\"lang_input_width\">&nbsp;&nbsp;</var><input class=\"text\" type=\"text\" id=\"width\"/>px </span>\n                        <span><var id=\"lang_input_height\">&nbsp;&nbsp;</var><input class=\"text\" type=\"text\" id=\"height\"/>px </span>\n                        <span><input id=\"lock\" type=\"checkbox\" disabled=\"disabled\"><span id=\"lockicon\"></span></span>\n                    </div>\n                    <div class=\"row\">\n                        <label><var id=\"lang_input_border\"></var></label>\n                        <span><input class=\"text\" type=\"text\" id=\"border\"/>px </span>\n                    </div>\n                    <div class=\"row\">\n                        <label><var id=\"lang_input_vhspace\"></var></label>\n                        <span><input class=\"text\" type=\"text\" id=\"vhSpace\"/>px </span>\n                    </div>\n                    <div class=\"row\">\n                        <label><var id=\"lang_input_title\"></var></label>\n                        <span><input class=\"text\" type=\"text\" id=\"title\"/></span>\n                    </div>\n                </div>\n                <div class=\"right\"><div id=\"preview\"></div></div>\n            </div>\n\n            <!-- 上传图片 -->\n            <div id=\"upload\" class=\"panel focus\">\n                <div id=\"queueList\" class=\"queueList\">\n                    <div class=\"statusBar element-invisible\">\n                        <div class=\"progress\">\n                            <span class=\"text\">0%</span>\n                            <span class=\"percentage\"></span>\n                        </div><div class=\"info\"></div>\n                        <div class=\"btns\">\n                            <div id=\"filePickerBtn\"></div>\n                            <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                        </div>\n                    </div>\n                    <div id=\"dndArea\" class=\"placeholder\">\n                        <div class=\"filePickerContainer\">\n                            <div id=\"filePickerReady\"></div>\n                        </div>\n                    </div>\n                    <ul class=\"filelist element-invisible\">\n                        <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                    </ul>\n                </div>\n            </div>\n\n            <!-- 在线图片 -->\n            <div id=\"online\" class=\"panel\">\n                <div id=\"imageList\"><var id=\"lang_imgLoading\"></var></div>\n            </div>\n\n            <!-- 搜索图片 -->\n            <div id=\"search\" class=\"panel\">\n                <div class=\"searchBar\">\n                    <input id=\"searchTxt\" class=\"searchTxt text\" type=\"text\" />\n                    <select id=\"searchType\" class=\"searchType\">\n                        <option value=\"&s=4&z=0\"></option>\n                        <option value=\"&s=1&z=19\"></option>\n                        <option value=\"&s=2&z=0\"></option>\n                        <option value=\"&s=3&z=0\"></option>\n                    </select>\n                    <input id=\"searchReset\" type=\"button\"  />\n                    <input id=\"searchBtn\" type=\"button\"  />\n                </div>\n                <div id=\"searchList\" class=\"searchList\"><ul id=\"searchListUl\"></ul></div>\n            </div>\n\n        </div>\n    </div>\n    <script type=\"text/javascript\" src=\"image.js\"></script>\n\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/image/image.js",
    "content": "/**\n * User: Jinqn\n * Date: 14-04-08\n * Time: 下午16:34\n * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片\n */\n\n(function () {\n\n    var remoteImage,\n        uploadImage,\n        onlineImage,\n        searchImage;\n\n    window.onload = function () {\n        initTabs();\n        initAlign();\n        initButtons();\n    };\n\n    /* 初始化tab标签 */\n    function initTabs() {\n        var tabs = $G('tabhead').children;\n        for (var i = 0; i < tabs.length; i++) {\n            domUtils.on(tabs[i], \"click\", function (e) {\n                var target = e.target || e.srcElement;\n                setTabFocus(target.getAttribute('data-content-id'));\n            });\n        }\n\n        var img = editor.selection.getRange().getClosedNode();\n        if (img && img.tagName && img.tagName.toLowerCase() == 'img') {\n            setTabFocus('remote');\n        } else {\n            setTabFocus('upload');\n        }\n    }\n\n    /* 初始化tabbody */\n    function setTabFocus(id) {\n        if(!id) return;\n        var i, bodyId, tabs = $G('tabhead').children;\n        for (i = 0; i < tabs.length; i++) {\n            bodyId = tabs[i].getAttribute('data-content-id');\n            if (bodyId == id) {\n                domUtils.addClass(tabs[i], 'focus');\n                domUtils.addClass($G(bodyId), 'focus');\n            } else {\n                domUtils.removeClasses(tabs[i], 'focus');\n                domUtils.removeClasses($G(bodyId), 'focus');\n            }\n        }\n        switch (id) {\n            case 'remote':\n                remoteImage = remoteImage || new RemoteImage();\n                break;\n            case 'upload':\n                setAlign(editor.getOpt('imageInsertAlign'));\n                uploadImage = uploadImage || new UploadImage('queueList');\n                break;\n            case 'online':\n                setAlign(editor.getOpt('imageManagerInsertAlign'));\n                onlineImage = onlineImage || new OnlineImage('imageList');\n                onlineImage.reset();\n                break;\n            case 'search':\n                setAlign(editor.getOpt('imageManagerInsertAlign'));\n                searchImage = searchImage || new SearchImage();\n                break;\n        }\n    }\n\n    /* 初始化onok事件 */\n    function initButtons() {\n\n        dialog.onok = function () {\n            var remote = false, list = [], id, tabs = $G('tabhead').children;\n            for (var i = 0; i < tabs.length; i++) {\n                if (domUtils.hasClass(tabs[i], 'focus')) {\n                    id = tabs[i].getAttribute('data-content-id');\n                    break;\n                }\n            }\n\n            switch (id) {\n                case 'remote':\n                    list = remoteImage.getInsertList();\n                    break;\n                case 'upload':\n                    list = uploadImage.getInsertList();\n                    var count = uploadImage.getQueueCount();\n                    if (count) {\n                        $('.info', '#queueList').html('<span style=\"color:red;\">' + '还有2个未上传文件'.replace(/[\\d]/, count) + '</span>');\n                        return false;\n                    }\n                    break;\n                case 'online':\n                    list = onlineImage.getInsertList();\n                    break;\n                case 'search':\n                    list = searchImage.getInsertList();\n                    remote = true;\n                    break;\n            }\n\n            if(list) {\n                editor.execCommand('insertimage', list);\n                remote && editor.fireEvent(\"catchRemoteImage\");\n            }\n        };\n    }\n\n\n    /* 初始化对其方式的点击事件 */\n    function initAlign(){\n        /* 点击align图标 */\n        domUtils.on($G(\"alignIcon\"), 'click', function(e){\n            var target = e.target || e.srcElement;\n            if(target.className && target.className.indexOf('-align') != -1) {\n                setAlign(target.getAttribute('data-align'));\n            }\n        });\n    }\n\n    /* 设置对齐方式 */\n    function setAlign(align){\n        align = align || 'none';\n        var aligns = $G(\"alignIcon\").children;\n        for(i = 0; i < aligns.length; i++){\n            if(aligns[i].getAttribute('data-align') == align) {\n                domUtils.addClass(aligns[i], 'focus');\n                $G(\"align\").value = aligns[i].getAttribute('data-align');\n            } else {\n                domUtils.removeClasses(aligns[i], 'focus');\n            }\n        }\n    }\n    /* 获取对齐方式 */\n    function getAlign(){\n        var align = $G(\"align\").value || 'none';\n        return align == 'none' ? '':align;\n    }\n\n\n    /* 在线图片 */\n    function RemoteImage(target) {\n        this.container = utils.isString(target) ? document.getElementById(target) : target;\n        this.init();\n    }\n    RemoteImage.prototype = {\n        init: function () {\n            this.initContainer();\n            this.initEvents();\n        },\n        initContainer: function () {\n            this.dom = {\n                'url': $G('url'),\n                'width': $G('width'),\n                'height': $G('height'),\n                'border': $G('border'),\n                'vhSpace': $G('vhSpace'),\n                'title': $G('title'),\n                'align': $G('align')\n            };\n            var img = editor.selection.getRange().getClosedNode();\n            if (img) {\n                this.setImage(img);\n            }\n        },\n        initEvents: function () {\n            var _this = this,\n                locker = $G('lock');\n\n            /* 改变url */\n            domUtils.on($G(\"url\"), 'keyup', updatePreview);\n            domUtils.on($G(\"border\"), 'keyup', updatePreview);\n            domUtils.on($G(\"title\"), 'keyup', updatePreview);\n\n            domUtils.on($G(\"width\"), 'keyup', function(){\n                updatePreview();\n                if(locker.checked) {\n                    var proportion =locker.getAttribute('data-proportion');\n                    $G('height').value = Math.round(this.value / proportion);\n                } else {\n                    _this.updateLocker();\n                }\n            });\n            domUtils.on($G(\"height\"), 'keyup', function(){\n                updatePreview();\n                if(locker.checked) {\n                    var proportion =locker.getAttribute('data-proportion');\n                    $G('width').value = Math.round(this.value * proportion);\n                } else {\n                    _this.updateLocker();\n                }\n            });\n            domUtils.on($G(\"lock\"), 'change', function(){\n                var proportion = parseInt($G(\"width\").value) /parseInt($G(\"height\").value);\n                locker.setAttribute('data-proportion', proportion);\n            });\n\n            function updatePreview(){\n                _this.setPreview();\n            }\n        },\n        updateLocker: function(){\n            var width = $G('width').value,\n                height = $G('height').value,\n                locker = $G('lock');\n            if(width && height && width == parseInt(width) && height == parseInt(height)) {\n                locker.disabled = false;\n                locker.title = '';\n            } else {\n                locker.checked = false;\n                locker.disabled = 'disabled';\n                locker.title = lang.remoteLockError;\n            }\n        },\n        setImage: function(img){\n            /* 不是正常的图片 */\n            if (!img.tagName || img.tagName.toLowerCase() != 'img' && !img.getAttribute(\"src\") || !img.src) return;\n\n            var wordImgFlag = img.getAttribute(\"word_img\"),\n                src = wordImgFlag ? wordImgFlag.replace(\"&amp;\", \"&\") : (img.getAttribute('_src') || img.getAttribute(\"src\", 2).replace(\"&amp;\", \"&\")),\n                align = editor.queryCommandValue(\"imageFloat\");\n\n            /* 防止onchange事件循环调用 */\n            if (src !== $G(\"url\").value) $G(\"url\").value = src;\n            if(src) {\n                /* 设置表单内容 */\n                $G(\"width\").value = img.width || '';\n                $G(\"height\").value = img.height || '';\n                $G(\"border\").value = img.getAttribute(\"border\") || '0';\n                $G(\"vhSpace\").value = img.getAttribute(\"vspace\") || '0';\n                $G(\"title\").value = img.title || img.alt || '';\n                setAlign(align);\n                this.setPreview();\n                this.updateLocker();\n            }\n        },\n        getData: function(){\n            var data = {};\n            for(var k in this.dom){\n                data[k] = this.dom[k].value;\n            }\n            return data;\n        },\n        setPreview: function(){\n            var url = $G('url').value,\n                ow = parseInt($G('width').value, 10) || 0,\n                oh = parseInt($G('height').value, 10) || 0,\n                border = parseInt($G('border').value, 10) || 0,\n                title = $G('title').value,\n                preview = $G('preview'),\n                width,\n                height;\n\n            url = utils.unhtmlForUrl(url);\n            title = utils.unhtml(title);\n\n            width = ((!ow || !oh) ? preview.offsetWidth:Math.min(ow, preview.offsetWidth));\n            width = width+(border*2) > preview.offsetWidth ? width:(preview.offsetWidth - (border*2));\n            height = (!ow || !oh) ? '':width*oh/ow;\n\n            if(url) {\n                preview.innerHTML = '<img src=\"' + url + '\" width=\"' + width + '\" height=\"' + height + '\" border=\"' + border + 'px solid #000\" title=\"' + title + '\" />';\n            }\n        },\n        getInsertList: function () {\n            var data = this.getData();\n            if(data['url']) {\n                return [{\n                    src: data['url'],\n                    _src: data['url'],\n                    width: data['width'] || '',\n                    height: data['height'] || '',\n                    border: data['border'] || '',\n                    floatStyle: data['align'] || '',\n                    vspace: data['vhSpace'] || '',\n                    title: data['title'] || '',\n                    alt: data['title'] || '',\n                    style: \"width:\" + data['width'] + \"px;height:\" + data['height'] + \"px;\"\n                }];\n            } else {\n                return [];\n            }\n        }\n    };\n\n\n\n    /* 上传图片 */\n    function UploadImage(target) {\n        this.$wrap = target.constructor == String ? $('#' + target) : $(target);\n        this.init();\n    }\n    UploadImage.prototype = {\n        init: function () {\n            this.imageList = [];\n            this.initContainer();\n            this.initUploader();\n        },\n        initContainer: function () {\n            this.$queue = this.$wrap.find('.filelist');\n        },\n        /* 初始化容器 */\n        initUploader: function () {\n            var _this = this,\n                $ = jQuery,    // just in case. Make sure it's not an other libaray.\n                $wrap = _this.$wrap,\n            // 图片容器\n                $queue = $wrap.find('.filelist'),\n            // 状态栏，包括进度和控制按钮\n                $statusBar = $wrap.find('.statusBar'),\n            // 文件总体选择信息。\n                $info = $statusBar.find('.info'),\n            // 上传按钮\n                $upload = $wrap.find('.uploadBtn'),\n            // 上传按钮\n                $filePickerBtn = $wrap.find('.filePickerBtn'),\n            // 上传按钮\n                $filePickerBlock = $wrap.find('.filePickerBlock'),\n            // 没选择文件之前的内容。\n                $placeHolder = $wrap.find('.placeholder'),\n            // 总体进度条\n                $progress = $statusBar.find('.progress').hide(),\n            // 添加的文件数量\n                fileCount = 0,\n            // 添加的文件总大小\n                fileSize = 0,\n            // 优化retina, 在retina下这个值是2\n                ratio = window.devicePixelRatio || 1,\n            // 缩略图大小\n                thumbnailWidth = 113 * ratio,\n                thumbnailHeight = 113 * ratio,\n            // 可能有pedding, ready, uploading, confirm, done.\n                state = '',\n            // 所有文件的进度信息，key为file id\n                percentages = {},\n                supportTransition = (function () {\n                    var s = document.createElement('p').style,\n                        r = 'transition' in s ||\n                            'WebkitTransition' in s ||\n                            'MozTransition' in s ||\n                            'msTransition' in s ||\n                            'OTransition' in s;\n                    s = null;\n                    return r;\n                })(),\n            // WebUploader实例\n                uploader,\n                actionUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n                acceptExtensions = (editor.getOpt('imageAllowFiles') || []).join('').replace(/\\./g, ',').replace(/^[,]/, ''),\n                imageMaxSize = editor.getOpt('imageMaxSize'),\n                imageCompressBorder = editor.getOpt('imageCompressBorder');\n\n            if (!WebUploader.Uploader.support()) {\n                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();\n                return;\n            } else if (!editor.getOpt('imageActionName')) {\n                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();\n                return;\n            }\n\n            uploader = _this.uploader = WebUploader.create({\n                pick: {\n                    id: '#filePickerReady',\n                    label: lang.uploadSelectFile\n                },\n                accept: {\n                    title: 'Images',\n                    extensions: acceptExtensions,\n                    mimeTypes: 'image/*'\n                },\n                swf: '../../third-party/webuploader/Uploader.swf',\n                server: actionUrl,\n                fileVal: editor.getOpt('imageFieldName'),\n                duplicate: true,\n                fileSingleSizeLimit: imageMaxSize,    // 默认 2 M\n                compress: editor.getOpt('imageCompressEnable') ? {\n                    width: imageCompressBorder,\n                    height: imageCompressBorder,\n                    // 图片质量，只有type为`image/jpeg`的时候才有效。\n                    quality: 90,\n                    // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n                    allowMagnify: false,\n                    // 是否允许裁剪。\n                    crop: false,\n                    // 是否保留头部meta信息。\n                    preserveHeaders: true\n                }:false\n            });\n            uploader.addButton({\n                id: '#filePickerBlock'\n            });\n            uploader.addButton({\n                id: '#filePickerBtn',\n                label: lang.uploadAddFile\n            });\n\n            setState('pedding');\n\n            // 当有文件添加进来时执行，负责view的创建\n            function addFile(file) {\n                var $li = $('<li id=\"' + file.id + '\">' +\n                        '<p class=\"title\">' + file.name + '</p>' +\n                        '<p class=\"imgWrap\"></p>' +\n                        '<p class=\"progress\"><span></span></p>' +\n                        '</li>'),\n\n                    $btns = $('<div class=\"file-panel\">' +\n                        '<span class=\"cancel\">' + lang.uploadDelete + '</span>' +\n                        '<span class=\"rotateRight\">' + lang.uploadTurnRight + '</span>' +\n                        '<span class=\"rotateLeft\">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),\n                    $prgress = $li.find('p.progress span'),\n                    $wrap = $li.find('p.imgWrap'),\n                    $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n\n                    showError = function (code) {\n                        switch (code) {\n                            case 'exceed_size':\n                                text = lang.errorExceedSize;\n                                break;\n                            case 'interrupt':\n                                text = lang.errorInterrupt;\n                                break;\n                            case 'http':\n                                text = lang.errorHttp;\n                                break;\n                            case 'not_allow_type':\n                                text = lang.errorFileType;\n                                break;\n                            default:\n                                text = lang.errorUploadRetry;\n                                break;\n                        }\n                        $info.text(text).show();\n                    };\n\n                if (file.getStatus() === 'invalid') {\n                    showError(file.statusText);\n                } else {\n                    $wrap.text(lang.uploadPreview);\n                    if (browser.ie && browser.version <= 7) {\n                        $wrap.text(lang.uploadNoPreview);\n                    } else {\n                        uploader.makeThumb(file, function (error, src) {\n                            if (error || !src) {\n                                $wrap.text(lang.uploadNoPreview);\n                            } else {\n                                var $img = $('<img src=\"' + src + '\">');\n                                $wrap.empty().append($img);\n                                $img.on('error', function () {\n                                    $wrap.text(lang.uploadNoPreview);\n                                });\n                            }\n                        }, thumbnailWidth, thumbnailHeight);\n                    }\n                    percentages[ file.id ] = [ file.size, 0 ];\n                    file.rotation = 0;\n\n                    /* 检查文件格式 */\n                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {\n                        showError('not_allow_type');\n                        uploader.removeFile(file);\n                    }\n                }\n\n                file.on('statuschange', function (cur, prev) {\n                    if (prev === 'progress') {\n                        $prgress.hide().width(0);\n                    } else if (prev === 'queued') {\n                        $li.off('mouseenter mouseleave');\n                        $btns.remove();\n                    }\n                    // 成功\n                    if (cur === 'error' || cur === 'invalid') {\n                        showError(file.statusText);\n                        percentages[ file.id ][ 1 ] = 1;\n                    } else if (cur === 'interrupt') {\n                        showError('interrupt');\n                    } else if (cur === 'queued') {\n                        percentages[ file.id ][ 1 ] = 0;\n                    } else if (cur === 'progress') {\n                        $info.hide();\n                        $prgress.css('display', 'block');\n                    } else if (cur === 'complete') {\n                    }\n\n                    $li.removeClass('state-' + prev).addClass('state-' + cur);\n                });\n\n                $li.on('mouseenter', function () {\n                    $btns.stop().animate({height: 30});\n                });\n                $li.on('mouseleave', function () {\n                    $btns.stop().animate({height: 0});\n                });\n\n                $btns.on('click', 'span', function () {\n                    var index = $(this).index(),\n                        deg;\n\n                    switch (index) {\n                        case 0:\n                            uploader.removeFile(file);\n                            return;\n                        case 1:\n                            file.rotation += 90;\n                            break;\n                        case 2:\n                            file.rotation -= 90;\n                            break;\n                    }\n\n                    if (supportTransition) {\n                        deg = 'rotate(' + file.rotation + 'deg)';\n                        $wrap.css({\n                            '-webkit-transform': deg,\n                            '-mos-transform': deg,\n                            '-o-transform': deg,\n                            'transform': deg\n                        });\n                    } else {\n                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');\n                    }\n\n                });\n\n                $li.insertBefore($filePickerBlock);\n            }\n\n            // 负责view的销毁\n            function removeFile(file) {\n                var $li = $('#' + file.id);\n                delete percentages[ file.id ];\n                updateTotalProgress();\n                $li.off().find('.file-panel').off().end().remove();\n            }\n\n            function updateTotalProgress() {\n                var loaded = 0,\n                    total = 0,\n                    spans = $progress.children(),\n                    percent;\n\n                $.each(percentages, function (k, v) {\n                    total += v[ 0 ];\n                    loaded += v[ 0 ] * v[ 1 ];\n                });\n\n                percent = total ? loaded / total : 0;\n\n                spans.eq(0).text(Math.round(percent * 100) + '%');\n                spans.eq(1).css('width', Math.round(percent * 100) + '%');\n                updateStatus();\n            }\n\n            function setState(val, files) {\n\n                if (val != state) {\n\n                    var stats = uploader.getStats();\n\n                    $upload.removeClass('state-' + state);\n                    $upload.addClass('state-' + val);\n\n                    switch (val) {\n\n                        /* 未选择文件 */\n                        case 'pedding':\n                            $queue.addClass('element-invisible');\n                            $statusBar.addClass('element-invisible');\n                            $placeHolder.removeClass('element-invisible');\n                            $progress.hide(); $info.hide();\n                            uploader.refresh();\n                            break;\n\n                        /* 可以开始上传 */\n                        case 'ready':\n                            $placeHolder.addClass('element-invisible');\n                            $queue.removeClass('element-invisible');\n                            $statusBar.removeClass('element-invisible');\n                            $progress.hide(); $info.show();\n                            $upload.text(lang.uploadStart);\n                            uploader.refresh();\n                            break;\n\n                        /* 上传中 */\n                        case 'uploading':\n                            $progress.show(); $info.hide();\n                            $upload.text(lang.uploadPause);\n                            break;\n\n                        /* 暂停上传 */\n                        case 'paused':\n                            $progress.show(); $info.hide();\n                            $upload.text(lang.uploadContinue);\n                            break;\n\n                        case 'confirm':\n                            $progress.show(); $info.hide();\n                            $upload.text(lang.uploadStart);\n\n                            stats = uploader.getStats();\n                            if (stats.successNum && !stats.uploadFailNum) {\n                                setState('finish');\n                                return;\n                            }\n                            break;\n\n                        case 'finish':\n                            $progress.hide(); $info.show();\n                            if (stats.uploadFailNum) {\n                                $upload.text(lang.uploadRetry);\n                            } else {\n                                $upload.text(lang.uploadStart);\n                            }\n                            break;\n                    }\n\n                    state = val;\n                    updateStatus();\n\n                }\n\n                if (!_this.getQueueCount()) {\n                    $upload.addClass('disabled')\n                } else {\n                    $upload.removeClass('disabled')\n                }\n\n            }\n\n            function updateStatus() {\n                var text = '', stats;\n\n                if (state === 'ready') {\n                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));\n                } else if (state === 'confirm') {\n                    stats = uploader.getStats();\n                    if (stats.uploadFailNum) {\n                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);\n                    }\n                } else {\n                    stats = uploader.getStats();\n                    text = lang.updateStatusFinish.replace('_', fileCount).\n                        replace('_KB', WebUploader.formatSize(fileSize)).\n                        replace('_', stats.successNum);\n\n                    if (stats.uploadFailNum) {\n                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);\n                    }\n                }\n\n                $info.html(text);\n            }\n\n            uploader.on('fileQueued', function (file) {\n                fileCount++;\n                fileSize += file.size;\n\n                if (fileCount === 1) {\n                    $placeHolder.addClass('element-invisible');\n                    $statusBar.show();\n                }\n\n                addFile(file);\n            });\n\n            uploader.on('fileDequeued', function (file) {\n                fileCount--;\n                fileSize -= file.size;\n\n                removeFile(file);\n                updateTotalProgress();\n            });\n\n            uploader.on('filesQueued', function (file) {\n                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {\n                    setState('ready');\n                }\n                updateTotalProgress();\n            });\n\n            uploader.on('all', function (type, files) {\n                switch (type) {\n                    case 'uploadFinished':\n                        setState('confirm', files);\n                        break;\n                    case 'startUpload':\n                        /* 添加额外的GET参数 */\n                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);\n                        uploader.option('server', url);\n                        setState('uploading', files);\n                        break;\n                    case 'stopUpload':\n                        setState('paused', files);\n                        break;\n                }\n            });\n\n            uploader.on('uploadBeforeSend', function (file, data, header) {\n                //这里可以通过data对象添加POST参数\n                header['X_Requested_With'] = 'XMLHttpRequest';\n            });\n\n            uploader.on('uploadProgress', function (file, percentage) {\n                var $li = $('#' + file.id),\n                    $percent = $li.find('.progress span');\n\n                $percent.css('width', percentage * 100 + '%');\n                percentages[ file.id ][ 1 ] = percentage;\n                updateTotalProgress();\n            });\n\n            uploader.on('uploadSuccess', function (file, ret) {\n                var $file = $('#' + file.id);\n                try {\n                    var responseText = (ret._raw || ret),\n                        json = utils.str2json(responseText);\n                    if (json.state == 'SUCCESS') {\n                        _this.imageList.push(json);\n                        $file.append('<span class=\"success\"></span>');\n                    } else {\n                        $file.find('.error').text(json.state).show();\n                    }\n                } catch (e) {\n                    $file.find('.error').text(lang.errorServerUpload).show();\n                }\n            });\n\n            uploader.on('uploadError', function (file, code) {\n            });\n            uploader.on('error', function (code, file) {\n                if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {\n                    addFile(file);\n                }\n            });\n            uploader.on('uploadComplete', function (file, ret) {\n            });\n\n            $upload.on('click', function () {\n                if ($(this).hasClass('disabled')) {\n                    return false;\n                }\n\n                if (state === 'ready') {\n                    uploader.upload();\n                } else if (state === 'paused') {\n                    uploader.upload();\n                } else if (state === 'uploading') {\n                    uploader.stop();\n                }\n            });\n\n            $upload.addClass('state-' + state);\n            updateTotalProgress();\n        },\n        getQueueCount: function () {\n            var file, i, status, readyFile = 0, files = this.uploader.getFiles();\n            for (i = 0; file = files[i++]; ) {\n                status = file.getStatus();\n                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;\n            }\n            return readyFile;\n        },\n        destroy: function () {\n            this.$wrap.remove();\n        },\n        getInsertList: function () {\n            var i, data, list = [],\n                align = getAlign(),\n                prefix = editor.getOpt('imageUrlPrefix');\n            for (i = 0; i < this.imageList.length; i++) {\n                data = this.imageList[i];\n                list.push({\n                    src: prefix + data.url,\n                    _src: prefix + data.url,\n                    title: data.title,\n                    alt: data.original,\n                    floatStyle: align\n                });\n            }\n            return list;\n        }\n    };\n\n\n    /* 在线图片 */\n    function OnlineImage(target) {\n        this.container = utils.isString(target) ? document.getElementById(target) : target;\n        this.init();\n    }\n    OnlineImage.prototype = {\n        init: function () {\n            this.reset();\n            this.initEvents();\n        },\n        /* 初始化容器 */\n        initContainer: function () {\n            this.container.innerHTML = '';\n            this.list = document.createElement('ul');\n            this.clearFloat = document.createElement('li');\n\n            domUtils.addClass(this.list, 'list');\n            domUtils.addClass(this.clearFloat, 'clearFloat');\n\n            this.list.appendChild(this.clearFloat);\n            this.container.appendChild(this.list);\n        },\n        /* 初始化滚动事件,滚动到地步自动拉取数据 */\n        initEvents: function () {\n            var _this = this;\n\n            /* 滚动拉取图片 */\n            domUtils.on($G('imageList'), 'scroll', function(e){\n                var panel = this;\n                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n                    _this.getImageData();\n                }\n            });\n            /* 选中图片 */\n            domUtils.on(this.container, 'click', function (e) {\n                var target = e.target || e.srcElement,\n                    li = target.parentNode;\n\n                if (li.tagName.toLowerCase() == 'li') {\n                    if (domUtils.hasClass(li, 'selected')) {\n                        domUtils.removeClasses(li, 'selected');\n                    } else {\n                        domUtils.addClass(li, 'selected');\n                    }\n                }\n            });\n        },\n        /* 初始化第一次的数据 */\n        initData: function () {\n\n            /* 拉取数据需要使用的值 */\n            this.state = 0;\n            this.listSize = editor.getOpt('imageManagerListSize');\n            this.listIndex = 0;\n            this.listEnd = false;\n\n            /* 第一次拉取数据 */\n            this.getImageData();\n        },\n        /* 重置界面 */\n        reset: function() {\n            this.initContainer();\n            this.initData();\n        },\n        /* 向后台拉取图片列表数据 */\n        getImageData: function () {\n            var _this = this;\n\n            if(!_this.listEnd && !this.isLoadingData) {\n                this.isLoadingData = true;\n                var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),\n                    isJsonp = utils.isCrossDomainUrl(url);\n                ajax.request(url, {\n                    'timeout': 100000,\n                    'dataType': isJsonp ? 'jsonp':'',\n                    'data': utils.extend({\n                            start: this.listIndex,\n                            size: this.listSize\n                        }, editor.queryCommandValue('serverparam')),\n                    'method': 'get',\n                    'onsuccess': function (r) {\n                        try {\n                            var json = isJsonp ? r:eval('(' + r.responseText + ')');\n                            if (json.state == 'SUCCESS') {\n                                _this.pushData(json.list);\n                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);\n                                if(_this.listIndex >= json.total) {\n                                    _this.listEnd = true;\n                                }\n                                _this.isLoadingData = false;\n                            }\n                        } catch (e) {\n                            if(r.responseText.indexOf('ue_separate_ue') != -1) {\n                                var list = r.responseText.split(r.responseText);\n                                _this.pushData(list);\n                                _this.listIndex = parseInt(list.length);\n                                _this.listEnd = true;\n                                _this.isLoadingData = false;\n                            }\n                        }\n                    },\n                    'onerror': function () {\n                        _this.isLoadingData = false;\n                    }\n                });\n            }\n        },\n        /* 添加图片到列表界面上 */\n        pushData: function (list) {\n            var i, item, img, icon, _this = this,\n                urlPrefix = editor.getOpt('imageManagerUrlPrefix');\n            for (i = 0; i < list.length; i++) {\n                if(list[i] && list[i].url) {\n                    item = document.createElement('li');\n                    img = document.createElement('img');\n                    icon = document.createElement('span');\n\n                    domUtils.on(img, 'load', (function(image){\n                        return function(){\n                            _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);\n                        }\n                    })(img));\n                    img.width = 113;\n                    img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );\n                    img.setAttribute('_src', urlPrefix + list[i].url);\n                    domUtils.addClass(icon, 'icon');\n\n                    item.appendChild(img);\n                    item.appendChild(icon);\n                    this.list.insertBefore(item, this.clearFloat);\n                }\n            }\n        },\n        /* 改变图片大小 */\n        scale: function (img, w, h, type) {\n            var ow = img.width,\n                oh = img.height;\n\n            if (type == 'justify') {\n                if (ow >= oh) {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            } else {\n                if (ow >= oh) {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            }\n        },\n        getInsertList: function () {\n            var i, lis = this.list.children, list = [], align = getAlign();\n            for (i = 0; i < lis.length; i++) {\n                if (domUtils.hasClass(lis[i], 'selected')) {\n                    var img = lis[i].firstChild,\n                        src = img.getAttribute('_src');\n                    list.push({\n                        src: src,\n                        _src: src,\n                        alt: src.substr(src.lastIndexOf('/') + 1),\n                        floatStyle: align\n                    });\n                }\n\n            }\n            return list;\n        }\n    };\n\n    /*搜索图片 */\n    function SearchImage() {\n        this.init();\n    }\n    SearchImage.prototype = {\n        init: function () {\n            this.initEvents();\n        },\n        initEvents: function(){\n            var _this = this;\n\n            /* 点击搜索按钮 */\n            domUtils.on($G('searchBtn'), 'click', function(){\n                var key = $G('searchTxt').value;\n                if(key && key != lang.searchRemind) {\n                    _this.getImageData();\n                }\n            });\n            /* 点击清除妞 */\n            domUtils.on($G('searchReset'), 'click', function(){\n                $G('searchTxt').value = lang.searchRemind;\n                $G('searchListUl').innerHTML = '';\n                $G('searchType').selectedIndex = 0;\n            });\n            /* 搜索框聚焦 */\n            domUtils.on($G('searchTxt'), 'focus', function(){\n                var key = $G('searchTxt').value;\n                if(key && key == lang.searchRemind) {\n                    $G('searchTxt').value = '';\n                }\n            });\n            /* 搜索框回车键搜索 */\n            domUtils.on($G('searchTxt'), 'keydown', function(e){\n                var keyCode = e.keyCode || e.which;\n                if (keyCode == 13) {\n                    $G('searchBtn').click();\n                }\n            });\n\n            /* 选中图片 */\n            domUtils.on($G('searchList'), 'click', function(e){\n                var target = e.target || e.srcElement,\n                    li = target.parentNode.parentNode;\n\n                if (li.tagName.toLowerCase() == 'li') {\n                    if (domUtils.hasClass(li, 'selected')) {\n                        domUtils.removeClasses(li, 'selected');\n                    } else {\n                        domUtils.addClass(li, 'selected');\n                    }\n                }\n            });\n        },\n        encodeToGb2312:function (str){\n            if(!str) return '';\n            var strOut = \"\",\n                z = 'D2BBB6A18140C6DF814181428143CDF2D5C9C8FDC9CFCFC2D8A2B2BBD3EB8144D8A4B3F38145D7A8C7D2D8A7CAC08146C7F0B1FBD2B5B4D4B6ABCBBFD8A9814781488149B6AA814AC1BDD1CF814BC9A5D8AD814CB8F6D1BEE3DCD6D0814D814EB7E1814FB4AE8150C1D98151D8BC8152CDE8B5A4CEAAD6F78153C0F6BED9D8AF815481558156C4CB8157BEC38158D8B1C3B4D2E58159D6AECEDAD5A7BAF5B7A6C0D6815AC6B9C5D2C7C7815BB9D4815CB3CBD2D2815D815ED8BFBEC5C6F2D2B2CFB0CFE7815F816081618162CAE981638164D8C081658166816781688169816AC2F2C2D2816BC8E9816C816D816E816F817081718172817381748175C7AC8176817781788179817A817B817CC1CB817DD3E8D5F9817ECAC2B6FED8A1D3DABFF78180D4C6BBA5D8C1CEE5BEAE81818182D8A88183D1C7D0A9818481858186D8BDD9EFCDF6BFBA8187BDBBBAA5D2E0B2FABAE0C4B68188CFEDBEA9CDA4C1C18189818A818BC7D7D9F1818CD9F4818D818E818F8190C8CBD8E9819181928193D2DACAB2C8CAD8ECD8EAD8C6BDF6C6CDB3F08194D8EBBDF1BDE98195C8D4B4D381968197C2D88198B2D6D7D0CACBCBFBD5CCB8B6CFC98199819A819BD9DAD8F0C7AA819CD8EE819DB4FAC1EED2D4819E819FD8ED81A0D2C7D8EFC3C781A181A281A3D1F681A4D6D9D8F281A5D8F5BCFEBCDB81A681A781A8C8CE81A9B7DD81AAB7C281ABC6F381AC81AD81AE81AF81B081B181B2D8F8D2C181B381B4CEE9BCBFB7FCB7A5D0DD81B581B681B781B881B9D6DAD3C5BBEFBBE1D8F181BA81BBC9A1CEB0B4AB81BCD8F381BDC9CBD8F6C2D7D8F781BE81BFCEB1D8F981C081C181C2B2AEB9C081C3D9A381C4B0E981C5C1E681C6C9EC81C7CBC581C8CBC6D9A481C981CA81CB81CC81CDB5E881CE81CFB5AB81D081D181D281D381D481D5CEBBB5CDD7A1D7F4D3D381D6CCE581D7BACE81D8D9A2D9DCD3E0D8FDB7F0D7F7D8FED8FAD9A1C4E381D981DAD3B6D8F4D9DD81DBD8FB81DCC5E581DD81DEC0D081DF81E0D1F0B0DB81E181E2BCD1D9A681E3D9A581E481E581E681E7D9ACD9AE81E8D9ABCAB981E981EA81EBD9A9D6B681EC81ED81EEB3DED9A881EFC0FD81F0CACC81F1D9AA81F2D9A781F381F4D9B081F581F6B6B181F781F881F9B9A981FAD2C081FB81FCCFC081FD81FEC2C28240BDC4D5ECB2E0C7C8BFEBD9AD8241D9AF8242CEEABAEE82438244824582468247C7D682488249824A824B824C824D824E824F8250B1E3825182528253B4D9B6EDD9B48254825582568257BFA182588259825AD9DEC7CEC0FED9B8825B825C825D825E825FCBD7B7FD8260D9B58261D9B7B1A3D3E1D9B98262D0C58263D9B682648265D9B18266D9B2C1A9D9B382678268BCF3D0DEB8A98269BEE3826AD9BD826B826C826D826ED9BA826FB0B3827082718272D9C28273827482758276827782788279827A827B827C827D827E8280D9C4B1B68281D9BF82828283B5B98284BEF3828582868287CCC8BAF2D2D08288D9C38289828ABDE8828BB3AB828C828D828ED9C5BEEB828FD9C6D9BBC4DF8290D9BED9C1D9C0829182928293829482958296829782988299829A829BD5AE829CD6B5829DC7E3829E829F82A082A1D9C882A282A382A4BCD9D9CA82A582A682A7D9BC82A8D9CBC6AB82A982AA82AB82AC82ADD9C982AE82AF82B082B1D7F682B2CDA382B382B482B582B682B782B882B982BABDA182BB82BC82BD82BE82BF82C0D9CC82C182C282C382C482C582C682C782C882C9C5BCCDB582CA82CB82CCD9CD82CD82CED9C7B3A5BFFE82CF82D082D182D2B8B582D382D4C0FC82D582D682D782D8B0F882D982DA82DB82DC82DD82DE82DF82E082E182E282E382E482E582E682E782E882E982EA82EB82EC82EDB4F682EED9CE82EFD9CFB4A2D9D082F082F1B4DF82F282F382F482F582F6B0C182F782F882F982FA82FB82FC82FDD9D1C9B582FE8340834183428343834483458346834783488349834A834B834C834D834E834F83508351CFF1835283538354835583568357D9D283588359835AC1C5835B835C835D835E835F836083618362836383648365D9D6C9AE8366836783688369D9D5D9D4D9D7836A836B836C836DCBDB836EBDA9836F8370837183728373C6A7837483758376837783788379837A837B837C837DD9D3D9D8837E83808381D9D9838283838384838583868387C8E583888389838A838B838C838D838E838F839083918392839383948395C0DC8396839783988399839A839B839C839D839E839F83A083A183A283A383A483A583A683A783A883A983AA83AB83AC83AD83AE83AF83B083B183B2B6F9D8A3D4CA83B3D4AAD0D6B3E4D5D783B4CFC8B9E283B5BFCB83B6C3E283B783B883B9B6D283BA83BBCDC3D9EED9F083BC83BD83BEB5B383BFB6B583C083C183C283C383C4BEA483C583C6C8EB83C783C8C8AB83C983CAB0CBB9ABC1F9D9E283CBC0BCB9B283CCB9D8D0CBB1F8C6E4BEDFB5E4D7C883CDD1F8BCE6CADE83CE83CFBCBDD9E6D8E783D083D1C4DA83D283D3B8D4C8BD83D483D5B2E1D4D983D683D783D883D9C3B083DA83DBC3E1DAA2C8DF83DCD0B483DDBEFCC5A983DE83DF83E0B9DA83E1DAA383E2D4A9DAA483E383E483E583E683E7D9FBB6AC83E883E9B7EBB1F9D9FCB3E5BEF683EABFF6D2B1C0E483EB83EC83EDB6B3D9FED9FD83EE83EFBEBB83F083F183F2C6E083F3D7BCDAA183F4C1B983F5B5F2C1E883F683F7BCF583F8B4D583F983FA83FB83FC83FD83FE844084418442C1DD8443C4FD84448445BCB8B7B284468447B7EF84488449844A844B844C844DD9EC844EC6BE844FBFADBBCB84508451B5CA8452DBC9D0D78453CDB9B0BCB3F6BBF7DBCABAAF8454D4E4B5B6B5F3D8D6C8D084558456B7D6C7D0D8D78457BFAF84588459DBBBD8D8845A845BD0CCBBAE845C845D845EEBBEC1D0C1F5D4F2B8D5B4B4845FB3F584608461C9BE846284638464C5D0846584668467C5D9C0FB8468B1F08469D8D9B9CE846AB5BD846B846CD8DA846D846ED6C6CBA2C8AFC9B2B4CCBFCC846FB9F48470D8DBD8DCB6E7BCC1CCEA847184728473847484758476CFF78477D8DDC7B084788479B9D0BDA3847A847BCCDE847CC6CA847D847E848084818482D8E08483D8DE84848485D8DF848684878488B0FE8489BEE7848ACAA3BCF4848B848C848D848EB8B1848F8490B8EE849184928493849484958496849784988499849AD8E2849BBDCB849CD8E4D8E3849D849E849F84A084A1C5FC84A284A384A484A584A684A784A8D8E584A984AAD8E684AB84AC84AD84AE84AF84B084B1C1A684B2C8B0B0ECB9A6BCD3CEF1DBBDC1D384B384B484B584B6B6AFD6FAC5ACBDD9DBBEDBBF84B784B884B9C0F8BEA2C0CD84BA84BB84BC84BD84BE84BF84C084C184C284C3DBC0CAC684C484C584C6B2AA84C784C884C9D3C284CAC3E384CBD1AB84CC84CD84CE84CFDBC284D0C0D584D184D284D3DBC384D4BFB184D584D684D784D884D984DAC4BC84DB84DC84DD84DEC7DA84DF84E084E184E284E384E484E584E684E784E884E9DBC484EA84EB84EC84ED84EE84EF84F084F1D9E8C9D784F284F384F4B9B4CEF0D4C884F584F684F784F8B0FCB4D284F9D0D984FA84FB84FC84FDD9E984FEDECBD9EB8540854185428543D8B0BBAFB1B18544B3D7D8CE85458546D4D185478548BDB3BFEF8549CFBB854A854BD8D0854C854D854EB7CB854F85508551D8D185528553855485558556855785588559855A855BC6A5C7F8D2BD855C855DD8D2C4E4855ECAAE855FC7A78560D8A68561C9FDCEE7BBDCB0EB856285638564BBAAD0AD8565B1B0D7E4D7BF8566B5A5C2F4C4CF85678568B2A98569B2B7856AB1E5DFB2D5BCBFA8C2ACD8D5C2B1856BD8D4CED4856CDAE0856DCEC0856E856FD8B4C3AED3A1CEA38570BCB4C8B4C2D18571BEEDD0B68572DAE18573857485758576C7E485778578B3A78579B6F2CCFCC0FA857A857BC0F7857CD1B9D1E1D8C7857D857E85808581858285838584B2DE85858586C0E58587BAF185888589D8C8858AD4AD858B858CCFE1D8C9858DD8CACFC3858EB3F8BEC7858F859085918592D8CB8593859485958596859785988599DBCC859A859B859C859DC8A5859E859F85A0CFD885A1C8FEB2CE85A285A385A485A585A6D3D6B2E6BCB0D3D1CBABB7B485A785A885A9B7A285AA85ABCAE585ACC8A1CADCB1E4D0F085ADC5D185AE85AF85B0DBC5B5FE85B185B2BFDAB9C5BEE4C1ED85B3DFB6DFB5D6BBBDD0D5D9B0C8B6A3BFC9CCA8DFB3CAB7D3D285B4D8CFD2B6BAC5CBBECCBE85B5DFB7B5F0DFB485B685B785B8D3F585B9B3D4B8F785BADFBA85BBBACFBCAAB5F585BCCDACC3FBBAF3C0F4CDC2CFF2DFB8CFC585BDC2C0DFB9C2F085BE85BF85C0BEFD85C1C1DFCDCCD2F7B7CDDFC185C2DFC485C385C4B7F1B0C9B6D6B7D485C5BAACCCFDBFD4CBB1C6F485C6D6A8DFC585C7CEE2B3B385C885C9CEFCB4B585CACEC7BAF085CBCEE185CCD1BD85CD85CEDFC085CF85D0B4F485D1B3CA85D2B8E6DFBB85D385D485D585D6C4C585D7DFBCDFBDDFBEC5BBDFBFDFC2D4B1DFC385D8C7BACED885D985DA85DB85DC85DDC4D885DEDFCA85DFDFCF85E0D6DC85E185E285E385E485E585E685E785E8DFC9DFDACEB685E9BAC7DFCEDFC8C5DE85EA85EBC9EBBAF4C3FC85EC85EDBED785EEDFC685EFDFCD85F0C5D885F185F285F385F4D5A6BACD85F5BECCD3BDB8C085F6D6E485F7DFC7B9BEBFA785F885F9C1FCDFCBDFCC85FADFD085FB85FC85FD85FE8640DFDBDFE58641DFD7DFD6D7C9DFE3DFE4E5EBD2A7DFD28642BFA98643D4DB8644BFC8DFD4864586468647CFCC86488649DFDD864AD1CA864BDFDEB0A7C6B7DFD3864CBAE5864DB6DFCDDBB9FED4D5864E864FDFDFCFECB0A5DFE7DFD1D1C6DFD5DFD8DFD9DFDC8650BBA98651DFE0DFE18652DFE2DFE6DFE8D3B486538654865586568657B8E7C5B6DFEAC9DAC1A8C4C486588659BFDECFF8865A865B865CD5DCDFEE865D865E865F866086618662B2B88663BADFDFEC8664DBC18665D1E48666866786688669CBF4B4BD866AB0A6866B866C866D866E866FDFF1CCC6DFF286708671DFED867286738674867586768677DFE986788679867A867BDFEB867CDFEFDFF0BBBD867D867EDFF386808681DFF48682BBA38683CADBCEA8E0A7B3AA8684E0A6868586868687E0A186888689868A868BDFFE868CCDD9DFFC868DDFFA868EBFD0D7C4868FC9CC86908691DFF8B0A186928693869486958696DFFD869786988699869ADFFBE0A2869B869C869D869E869FE0A886A086A186A286A3B7C886A486A5C6A1C9B6C0B2DFF586A686A7C5BE86A8D8C4DFF9C4F686A986AA86AB86AC86AD86AEE0A3E0A4E0A5D0A586AF86B0E0B4CCE486B1E0B186B2BFA6E0AFCEB9E0ABC9C686B386B4C0AEE0AEBAEDBAB0E0A986B586B686B7DFF686B8E0B386B986BAE0B886BB86BC86BDB4ADE0B986BE86BFCFB2BAC886C0E0B086C186C286C386C486C586C686C7D0FA86C886C986CA86CB86CC86CD86CE86CF86D0E0AC86D1D4FB86D2DFF786D3C5E786D4E0AD86D5D3F786D6E0B6E0B786D786D886D986DA86DBE0C4D0E186DC86DD86DEE0BC86DF86E0E0C9E0CA86E186E286E3E0BEE0AAC9A4E0C186E4E0B286E586E686E786E886E9CAC8E0C386EAE0B586EBCECB86ECCBC3E0CDE0C6E0C286EDE0CB86EEE0BAE0BFE0C086EF86F0E0C586F186F2E0C7E0C886F3E0CC86F4E0BB86F586F686F786F886F9CBD4E0D586FAE0D6E0D286FB86FC86FD86FE87408741E0D0BCCE87428743E0D18744B8C2D8C587458746874787488749874A874B874CD0EA874D874EC2EF874F8750E0CFE0BD875187528753E0D4E0D387548755E0D78756875787588759E0DCE0D8875A875B875CD6F6B3B0875DD7EC875ECBBB875F8760E0DA8761CEFB876287638764BAD987658766876787688769876A876B876C876D876E876F8770E0E1E0DDD2AD87718772877387748775E0E287768777E0DBE0D9E0DF87788779E0E0877A877B877C877D877EE0DE8780E0E4878187828783C6F7D8ACD4EBE0E6CAC98784878587868787E0E587888789878A878BB8C1878C878D878E878FE0E7E0E887908791879287938794879587968797E0E9E0E387988799879A879B879C879D879EBABFCCE7879F87A087A1E0EA87A287A387A487A587A687A787A887A987AA87AB87AC87AD87AE87AF87B0CFF987B187B287B387B487B587B687B787B887B987BA87BBE0EB87BC87BD87BE87BF87C087C187C2C8C287C387C487C587C6BDC087C787C887C987CA87CB87CC87CD87CE87CF87D087D187D287D3C4D287D487D587D687D787D887D987DA87DB87DCE0EC87DD87DEE0ED87DF87E0C7F4CBC487E1E0EEBBD8D8B6D2F2E0EFCDC587E2B6DA87E387E487E587E687E787E8E0F187E9D4B087EA87EBC0A7B4D187EC87EDCEA7E0F087EE87EF87F0E0F2B9CC87F187F2B9FACDBCE0F387F387F487F5C6D4E0F487F6D4B287F7C8A6E0F6E0F587F887F987FA87FB87FC87FD87FE8840884188428843884488458846884788488849E0F7884A884BCDC1884C884D884ECAA5884F885088518852D4DADBD7DBD98853DBD8B9E7DBDCDBDDB5D888548855DBDA8856885788588859885ADBDBB3A1DBDF885B885CBBF8885DD6B7885EDBE0885F886088618862BEF988638864B7BB8865DBD0CCAEBFB2BBB5D7F8BFD38866886788688869886ABFE9886B886CBCE1CCB3DBDEB0D3CEEBB7D8D7B9C6C2886D886EC0A4886FCCB98870DBE7DBE1C6BADBE38871DBE88872C5F7887388748875DBEA88768877DBE9BFC088788879887ADBE6DBE5887B887C887D887E8880B4B9C0ACC2A2DBE2DBE48881888288838884D0CDDBED88858886888788888889C0DDDBF2888A888B888C888D888E888F8890B6E28891889288938894DBF3DBD2B9B8D4ABDBEC8895BFD1DBF08896DBD18897B5E68898DBEBBFE58899889A889BDBEE889CDBF1889D889E889FDBF988A088A188A288A388A488A588A688A788A8B9A1B0A388A988AA88AB88AC88AD88AE88AFC2F188B088B1B3C7DBEF88B288B3DBF888B4C6D2DBF488B588B6DBF5DBF7DBF688B788B8DBFE88B9D3F2B2BA88BA88BB88BCDBFD88BD88BE88BF88C088C188C288C388C4DCA488C5DBFB88C688C788C888C9DBFA88CA88CB88CCDBFCC5E0BBF988CD88CEDCA388CF88D0DCA588D1CCC388D288D388D4B6D1DDC088D588D688D7DCA188D8DCA288D988DA88DBC7B588DC88DD88DEB6E988DF88E088E1DCA788E288E388E488E5DCA688E6DCA9B1A488E788E8B5CC88E988EA88EB88EC88EDBFB088EE88EF88F088F188F2D1DF88F388F488F588F6B6C288F788F888F988FA88FB88FC88FD88FE894089418942894389448945DCA88946894789488949894A894B894CCBFAEBF3894D894E894FCBDC89508951CBFE895289538954CCC189558956895789588959C8FB895A895B895C895D895E895FDCAA89608961896289638964CCEEDCAB89658966896789688969896A896B896C896D896E896F897089718972897389748975DBD38976DCAFDCAC8977BEB38978CAFB8979897A897BDCAD897C897D897E89808981898289838984C9CAC4B989858986898789888989C7BDDCAE898A898B898CD4F6D0E6898D898E898F89908991899289938994C4ABB6D589958996899789988999899A899B899C899D899E899F89A089A189A289A389A489A589A6DBD489A789A889A989AAB1DA89AB89AC89ADDBD589AE89AF89B089B189B289B389B489B589B689B789B8DBD689B989BA89BBBABE89BC89BD89BE89BF89C089C189C289C389C489C589C689C789C889C9C8C089CA89CB89CC89CD89CE89CFCABFC8C989D0D7B389D1C9F989D289D3BFC789D489D5BAF889D689D7D2BC89D889D989DA89DB89DC89DD89DE89DFE2BA89E0B4A689E189E2B1B889E389E489E589E689E7B8B489E8CFC489E989EA89EB89ECD9E7CFA6CDE289ED89EED9EDB6E089EFD2B989F089F1B9BB89F289F389F489F5E2B9E2B789F6B4F389F7CCECCCABB7F289F8D8B2D1EBBABB89F9CAA789FA89FBCDB789FC89FDD2C4BFE4BCD0B6E189FEDEC58A408A418A428A43DEC6DBBC8A44D1D98A458A46C6E6C4CEB7EE8A47B7DC8A488A49BFFCD7E08A4AC6F58A4B8A4CB1BCDEC8BDB1CCD7DECA8A4DDEC98A4E8A4F8A508A518A52B5EC8A53C9DD8A548A55B0C28A568A578A588A598A5A8A5B8A5C8A5D8A5E8A5F8A608A618A62C5AEC5AB8A63C4CC8A64BCE9CBFD8A658A668A67BAC38A688A698A6AE5F9C8E7E5FACDFD8A6BD7B1B8BEC2E88A6CC8D18A6D8A6EE5FB8A6F8A708A718A72B6CABCCB8A738A74D1FDE6A18A75C3EE8A768A778A788A79E6A48A7A8A7B8A7C8A7DE5FEE6A5CDD78A7E8A80B7C1E5FCE5FDE6A38A818A82C4DDE6A88A838A84E6A78A858A868A878A888A898A8AC3C38A8BC6DE8A8C8A8DE6AA8A8E8A8F8A908A918A928A938A94C4B78A958A968A97E6A2CABC8A988A998A9A8A9BBDE3B9C3E6A6D0D5CEAF8A9C8A9DE6A9E6B08A9ED2A68A9FBDAAE6AD8AA08AA18AA28AA38AA4E6AF8AA5C0D18AA68AA7D2CC8AA88AA98AAABCA78AAB8AAC8AAD8AAE8AAF8AB08AB18AB28AB38AB48AB58AB6E6B18AB7D2F68AB88AB98ABAD7CB8ABBCDFE8ABCCDDEC2A6E6ABE6ACBDBFE6AEE6B38ABD8ABEE6B28ABF8AC08AC18AC2E6B68AC3E6B88AC48AC58AC68AC7C4EF8AC88AC98ACAC4C88ACB8ACCBEEAC9EF8ACD8ACEE6B78ACFB6F08AD08AD18AD2C3E48AD38AD48AD58AD68AD78AD88AD9D3E9E6B48ADAE6B58ADBC8A28ADC8ADD8ADE8ADF8AE0E6BD8AE18AE28AE3E6B98AE48AE58AE68AE78AE8C6C58AE98AEACDF1E6BB8AEB8AEC8AED8AEE8AEF8AF08AF18AF28AF38AF4E6BC8AF58AF68AF78AF8BBE98AF98AFA8AFB8AFC8AFD8AFE8B40E6BE8B418B428B438B44E6BA8B458B46C0B78B478B488B498B4A8B4B8B4C8B4D8B4E8B4FD3A4E6BFC9F4E6C38B508B51E6C48B528B538B548B55D0F68B568B578B588B598B5A8B5B8B5C8B5D8B5E8B5F8B608B618B628B638B648B658B668B67C3BD8B688B698B6A8B6B8B6C8B6D8B6EC3C4E6C28B6F8B708B718B728B738B748B758B768B778B788B798B7A8B7B8B7CE6C18B7D8B7E8B808B818B828B838B84E6C7CFB18B85EBF48B868B87E6CA8B888B898B8A8B8B8B8CE6C58B8D8B8EBCDEC9A98B8F8B908B918B928B938B94BCB58B958B96CFD38B978B988B998B9A8B9BE6C88B9CE6C98B9DE6CE8B9EE6D08B9F8BA08BA1E6D18BA28BA38BA4E6CBB5D58BA5E6CC8BA68BA7E6CF8BA88BA9C4DB8BAAE6C68BAB8BAC8BAD8BAE8BAFE6CD8BB08BB18BB28BB38BB48BB58BB68BB78BB88BB98BBA8BBB8BBC8BBD8BBE8BBF8BC08BC18BC28BC38BC48BC58BC6E6D28BC78BC88BC98BCA8BCB8BCC8BCD8BCE8BCF8BD08BD18BD2E6D4E6D38BD38BD48BD58BD68BD78BD88BD98BDA8BDB8BDC8BDD8BDE8BDF8BE08BE18BE28BE38BE48BE58BE68BE78BE88BE98BEA8BEB8BECE6D58BEDD9F88BEE8BEFE6D68BF08BF18BF28BF38BF48BF58BF68BF7E6D78BF88BF98BFA8BFB8BFC8BFD8BFE8C408C418C428C438C448C458C468C47D7D3E6DD8C48E6DEBFD7D4D08C49D7D6B4E6CBEFE6DAD8C3D7CED0A28C4AC3CF8C4B8C4CE6DFBCBEB9C2E6DBD1A78C4D8C4EBAA2C2CF8C4FD8AB8C508C518C52CAEBE5EE8C53E6DC8C54B7F58C558C568C578C58C8E68C598C5AC4F58C5B8C5CE5B2C4FE8C5DCBFCE5B3D5AC8C5ED3EECAD8B0B28C5FCBCECDEA8C608C61BAEA8C628C638C64E5B58C65E5B48C66D7DAB9D9D6E6B6A8CDF0D2CBB1A6CAB58C67B3E8C9F3BFCDD0FBCAD2E5B6BBC28C688C698C6ACFDCB9AC8C6B8C6C8C6D8C6ED4D78C6F8C70BAA6D1E7CFFCBCD28C71E5B7C8DD8C728C738C74BFEDB1F6CBDE8C758C76BCC58C77BCC4D2FAC3DCBFDC8C788C798C7A8C7BB8BB8C7C8C7D8C7EC3C28C80BAAED4A28C818C828C838C848C858C868C878C888C89C7DEC4AFB2EC8C8AB9D18C8B8C8CE5BBC1C88C8D8C8ED5AF8C8F8C908C918C928C93E5BC8C94E5BE8C958C968C978C988C998C9A8C9BB4E7B6D4CBC2D1B0B5BC8C9C8C9DCAD98C9EB7E28C9F8CA0C9E48CA1BDAB8CA28CA3CEBED7F08CA48CA58CA68CA7D0A18CA8C9D98CA98CAAB6FBE6D8BCE28CABB3BE8CACC9D08CADE6D9B3A28CAE8CAF8CB08CB1DECC8CB2D3C8DECD8CB3D2A28CB48CB58CB68CB7DECE8CB88CB98CBA8CBBBECD8CBC8CBDDECF8CBE8CBF8CC0CAACD2FCB3DFE5EAC4E1BEA1CEB2C4F2BED6C6A8B2E38CC18CC2BED38CC38CC4C7FCCCEBBDECCEDD8CC58CC6CABAC6C1E5ECD0BC8CC78CC88CC9D5B98CCA8CCB8CCCE5ED8CCD8CCE8CCF8CD0CAF48CD1CDC0C2C58CD2E5EF8CD3C2C4E5F08CD48CD58CD68CD78CD88CD98CDAE5F8CDCD8CDBC9BD8CDC8CDD8CDE8CDF8CE08CE18CE2D2D9E1A88CE38CE48CE58CE6D3EC8CE7CBEAC6F18CE88CE98CEA8CEB8CECE1AC8CED8CEE8CEFE1A7E1A98CF08CF1E1AAE1AF8CF28CF3B2ED8CF4E1ABB8DAE1ADE1AEE1B0B5BAE1B18CF58CF68CF78CF88CF9E1B3E1B88CFA8CFB8CFC8CFD8CFED1D28D40E1B6E1B5C1EB8D418D428D43E1B78D44D4C08D45E1B28D46E1BAB0B68D478D488D498D4AE1B48D4BBFF98D4CE1B98D4D8D4EE1BB8D4F8D508D518D528D538D54E1BE8D558D568D578D588D598D5AE1BC8D5B8D5C8D5D8D5E8D5F8D60D6C58D618D628D638D648D658D668D67CFBF8D688D69E1BDE1BFC2CD8D6AB6EB8D6BD3F88D6C8D6DC7CD8D6E8D6FB7E58D708D718D728D738D748D758D768D778D788D79BEFE8D7A8D7B8D7C8D7D8D7E8D80E1C0E1C18D818D82E1C7B3E78D838D848D858D868D878D88C6E98D898D8A8D8B8D8C8D8DB4DE8D8ED1C28D8F8D908D918D92E1C88D938D94E1C68D958D968D978D988D99E1C58D9AE1C3E1C28D9BB1C08D9C8D9D8D9ED5B8E1C48D9F8DA08DA18DA28DA3E1CB8DA48DA58DA68DA78DA88DA98DAA8DABE1CCE1CA8DAC8DAD8DAE8DAF8DB08DB18DB28DB3EFFA8DB48DB5E1D3E1D2C7B68DB68DB78DB88DB98DBA8DBB8DBC8DBD8DBE8DBF8DC0E1C98DC18DC2E1CE8DC3E1D08DC48DC58DC68DC78DC88DC98DCA8DCB8DCC8DCD8DCEE1D48DCFE1D1E1CD8DD08DD1E1CF8DD28DD38DD48DD5E1D58DD68DD78DD88DD98DDA8DDB8DDC8DDD8DDE8DDF8DE08DE18DE2E1D68DE38DE48DE58DE68DE78DE88DE98DEA8DEB8DEC8DED8DEE8DEF8DF08DF18DF28DF38DF48DF58DF68DF78DF8E1D78DF98DFA8DFBE1D88DFC8DFD8DFE8E408E418E428E438E448E458E468E478E488E498E4A8E4B8E4C8E4D8E4E8E4F8E508E518E528E538E548E55E1DA8E568E578E588E598E5A8E5B8E5C8E5D8E5E8E5F8E608E618E62E1DB8E638E648E658E668E678E688E69CEA18E6A8E6B8E6C8E6D8E6E8E6F8E708E718E728E738E748E758E76E7DD8E77B4A8D6DD8E788E79D1B2B3B28E7A8E7BB9A4D7F3C7C9BEDEB9AE8E7CCED78E7D8E7EB2EEDBCF8E80BCBAD2D1CBC8B0CD8E818E82CFEF8E838E848E858E868E87D9E3BDED8E888E89B1D2CAD0B2BC8E8ACBA7B7AB8E8BCAA68E8C8E8D8E8ECFA38E8F8E90E0F8D5CAE0FB8E918E92E0FAC5C1CCFB8E93C1B1E0F9D6E3B2AFD6C4B5DB8E948E958E968E978E988E998E9A8E9BB4F8D6A18E9C8E9D8E9E8E9F8EA0CFAFB0EF8EA18EA2E0FC8EA38EA48EA58EA68EA7E1A1B3A38EA88EA9E0FDE0FEC3B18EAA8EAB8EAC8EADC3DD8EAEE1A2B7F98EAF8EB08EB18EB28EB38EB4BBCF8EB58EB68EB78EB88EB98EBA8EBBE1A3C4BB8EBC8EBD8EBE8EBF8EC0E1A48EC18EC2E1A58EC38EC4E1A6B4B18EC58EC68EC78EC88EC98ECA8ECB8ECC8ECD8ECE8ECF8ED08ED18ED28ED3B8C9C6BDC4EA8ED4B2A28ED5D0D28ED6E7DBBBC3D3D7D3C48ED7B9E3E2CF8ED88ED98EDAD7AF8EDBC7ECB1D38EDC8EDDB4B2E2D18EDE8EDF8EE0D0F2C2AEE2D08EE1BFE2D3A6B5D7E2D2B5EA8EE2C3EDB8FD8EE3B8AE8EE4C5D3B7CFE2D48EE58EE68EE78EE8E2D3B6C8D7F98EE98EEA8EEB8EEC8EEDCDA58EEE8EEF8EF08EF18EF2E2D88EF3E2D6CAFCBFB5D3B9E2D58EF48EF58EF68EF7E2D78EF88EF98EFA8EFB8EFC8EFD8EFE8F408F418F42C1AEC0C88F438F448F458F468F478F48E2DBE2DAC0AA8F498F4AC1CE8F4B8F4C8F4D8F4EE2DC8F4F8F508F518F528F538F548F558F568F578F588F598F5AE2DD8F5BE2DE8F5C8F5D8F5E8F5F8F608F618F628F638F64DBC88F65D1D3CDA28F668F67BDA88F688F698F6ADEC3D8A5BFAADBCDD2ECC6FAC5AA8F6B8F6C8F6DDEC48F6EB1D7DFAE8F6F8F708F71CABD8F72DFB18F73B9AD8F74D2FD8F75B8A5BAEB8F768F77B3DA8F788F798F7AB5DCD5C58F7B8F7C8F7D8F7EC3D6CFD2BBA18F80E5F3E5F28F818F82E5F48F83CDE48F84C8F58F858F868F878F888F898F8A8F8BB5AFC7BF8F8CE5F68F8D8F8E8F8FECB08F908F918F928F938F948F958F968F978F988F998F9A8F9B8F9C8F9D8F9EE5E68F9FB9E9B5B18FA0C2BCE5E8E5E7E5E98FA18FA28FA38FA4D2CD8FA58FA68FA7E1EAD0CE8FA8CDAE8FA9D1E58FAA8FABB2CAB1EB8FACB1F2C5ED8FAD8FAED5C3D3B08FAFE1DC8FB08FB18FB2E1DD8FB3D2DB8FB4B3B9B1CB8FB58FB68FB7CDF9D5F7E1DE8FB8BEB6B4FD8FB9E1DFBADCE1E0BBB2C2C9E1E18FBA8FBB8FBCD0EC8FBDCDBD8FBE8FBFE1E28FC0B5C3C5C7E1E38FC18FC2E1E48FC38FC48FC58FC6D3F98FC78FC88FC98FCA8FCB8FCCE1E58FCDD1AD8FCE8FCFE1E6CEA28FD08FD18FD28FD38FD48FD5E1E78FD6B5C28FD78FD88FD98FDAE1E8BBD58FDB8FDC8FDD8FDE8FDFD0C4E2E0B1D8D2E48FE08FE1E2E18FE28FE3BCC9C8CC8FE4E2E3ECFEECFDDFAF8FE58FE68FE7E2E2D6BECDFCC3A68FE88FE98FEAE3C38FEB8FECD6D2E2E78FED8FEEE2E88FEF8FF0D3C78FF18FF2E2ECBFEC8FF3E2EDE2E58FF48FF5B3C08FF68FF78FF8C4EE8FF98FFAE2EE8FFB8FFCD0C38FFDBAF6E2E9B7DEBBB3CCACCBCBE2E4E2E6E2EAE2EB8FFE90409041E2F790429043E2F4D4F5E2F390449045C5AD9046D5FAC5C2B2C090479048E2EF9049E2F2C1AFCBBC904A904BB5A1E2F9904C904D904EBCB1E2F1D0D4D4B9E2F5B9D6E2F6904F90509051C7D390529053905490559056E2F0905790589059905A905BD7DCEDA1905C905DE2F8905EEDA5E2FECAD1905F906090619062906390649065C1B59066BBD090679068BFD69069BAE3906A906BCBA1906C906D906EEDA6EDA3906F9070EDA29071907290739074BBD6EDA7D0F490759076EDA4BADEB6F7E3A1B6B2CCF1B9A79077CFA2C7A190789079BFD2907A907BB6F1907CE2FAE2FBE2FDE2FCC4D5E3A2907DD3C1907E90809081E3A7C7C49082908390849085CFA490869087E3A9BAB790889089908A908BE3A8908CBBDA908DE3A3908E908F9090E3A4E3AA9091E3A69092CEF2D3C690939094BBBC90959096D4C39097C4FA90989099EDA8D0FCE3A5909AC3F5909BE3ADB1AF909CE3B2909D909E909FBCC290A090A1E3ACB5BF90A290A390A490A590A690A790A890A9C7E9E3B090AA90AB90ACBEAACDEF90AD90AE90AF90B090B1BBF390B290B390B4CCE890B590B6E3AF90B7E3B190B8CFA7E3AE90B9CEA9BBDD90BA90BB90BC90BD90BEB5EBBEE5B2D2B3CD90BFB1B9E3ABB2D1B5ACB9DFB6E890C090C1CFEBE3B790C2BBCC90C390C4C8C7D0CA90C590C690C790C890C9E3B8B3EE90CA90CB90CC90CDEDA990CED3FAD3E490CF90D090D1EDAAE3B9D2E290D290D390D490D590D6E3B590D790D890D990DAD3DE90DB90DC90DD90DEB8D0E3B390DF90E0E3B6B7DF90E1E3B4C0A290E290E390E4E3BA90E590E690E790E890E990EA90EB90EC90ED90EE90EF90F090F190F290F390F490F590F690F7D4B890F890F990FA90FB90FC90FD90FE9140B4C89141E3BB9142BBC59143C9F791449145C9E5914691479148C4BD9149914A914B914C914D914E914FEDAB9150915191529153C2FD9154915591569157BBDBBFAE91589159915A915B915C915D915ECEBF915F916091619162E3BC9163BFB6916491659166916791689169916A916B916C916D916E916F9170917191729173917491759176B1EF91779178D4F79179917A917B917C917DE3BE917E9180918191829183918491859186EDAD918791889189918A918B918C918D918E918FE3BFBAA9EDAC91909191E3BD91929193919491959196919791989199919A919BE3C0919C919D919E919F91A091A1BAB691A291A391A4B6AE91A591A691A791A891A9D0B891AAB0C3EDAE91AB91AC91AD91AE91AFEDAFC0C191B0E3C191B191B291B391B491B591B691B791B891B991BA91BB91BC91BD91BE91BF91C091C1C5B391C291C391C491C591C691C791C891C991CA91CB91CC91CD91CE91CFE3C291D091D191D291D391D491D591D691D791D8DCB291D991DA91DB91DC91DD91DEEDB091DFB8EA91E0CEECEAA7D0E7CAF9C8D6CFB7B3C9CED2BDE491E191E2E3DEBBF2EAA8D5BD91E3C6DDEAA991E491E591E6EAAA91E7EAACEAAB91E8EAAEEAAD91E991EA91EB91ECBDD891EDEAAF91EEC2BE91EF91F091F191F2B4C1B4F791F391F4BBA791F591F691F791F891F9ECE6ECE5B7BFCBF9B1E291FAECE791FB91FC91FDC9C8ECE8ECE991FECAD6DED0B2C5D4FA92409241C6CBB0C7B4F2C8D3924292439244CDD092459246BFB8924792489249924A924B924C924DBFDB924E924FC7A4D6B49250C0A9DED1C9A8D1EFC5A4B0E7B3B6C8C592519252B0E292539254B7F692559256C5FA92579258B6F39259D5D2B3D0BCBC925A925B925CB3AD925D925E925F9260BEF1B0D1926192629263926492659266D2D6CAE3D7A59267CDB6B6B6BFB9D5DB9268B8A7C5D79269926A926BDED2BFD9C2D5C7C0926CBBA4B1A8926D926EC5EA926F9270C5FBCCA79271927292739274B1A7927592769277B5D692789279927AC4A8927BDED3D1BAB3E9927CC3F2927D927EB7F79280D6F4B5A3B2F0C4B4C4E9C0ADDED49281B0E8C5C4C1E09282B9D59283BEDCCDD8B0CE9284CDCFDED6BED0D7BEDED5D5D0B0DD92859286C4E292879288C2A3BCF09289D3B5C0B9C5A1B2A6D4F1928A928BC0A8CAC3DED7D5FC928CB9B0928DC8ADCBA9928EDED9BFBD928F929092919292C6B4D7A7CAB0C4C39293B3D6B9D29294929592969297D6B8EAFCB0B492989299929A929BBFE6929C929DCCF4929E929F92A092A1CDDA92A292A392A4D6BFC2CE92A5CECECCA2D0AEC4D3B5B2DED8D5F5BCB7BBD392A692A7B0A492A8C5B2B4EC92A992AA92ABD5F192AC92ADEAFD92AE92AF92B092B192B292B3DEDACDA692B492B5CDEC92B692B792B892B9CEE6DEDC92BACDB1C0A692BB92BCD7BD92BDDEDBB0C6BAB4C9D3C4F3BEE892BE92BF92C092C1B2B692C292C392C492C592C692C792C892C9C0CCCBF092CABCF1BBBBB5B792CB92CC92CDC5F592CEDEE692CF92D092D1DEE3BEDD92D292D3DEDF92D492D592D692D7B4B7BDDD92D892D9DEE0C4ED92DA92DB92DC92DDCFC692DEB5E092DF92E092E192E2B6DECADAB5F4DEE592E3D5C692E4DEE1CCCDC6FE92E5C5C592E692E792E8D2B492E9BEF292EA92EB92EC92ED92EE92EF92F0C2D392F1CCBDB3B892F2BDD392F3BFD8CDC6D1DAB4EB92F4DEE4DEDDDEE792F5EAFE92F692F7C2B0DEE292F892F9D6C0B5A792FAB2F492FBDEE892FCDEF292FD92FE934093419342DEED9343DEF193449345C8E0934693479348D7E1DEEFC3E8CCE19349B2E5934A934B934CD2BE934D934E934F9350935193529353DEEE9354DEEBCED59355B4A79356935793589359935ABFABBEBE935B935CBDD2935D935E935F9360DEE99361D4AE9362DEDE9363DEEA9364936593669367C0BF9368DEECB2F3B8E9C2A79369936ABDC1936B936C936D936E936FDEF5DEF893709371B2ABB4A493729373B4EAC9A6937493759376937793789379DEF6CBD1937AB8E3937BDEF7DEFA937C937D937E9380DEF9938193829383CCC29384B0E1B4EE93859386938793889389938AE5BA938B938C938D938E938FD0AF93909391B2EB9392EBA19393DEF493949395C9E3DEF3B0DAD2A1B1F79396CCAF939793989399939A939B939C939DDEF0939ECBA4939F93A093A1D5AA93A293A393A493A593A6DEFB93A793A893A993AA93AB93AC93AD93AEB4DD93AFC4A693B093B193B2DEFD93B393B493B593B693B793B893B993BA93BB93BCC3FEC4A1DFA193BD93BE93BF93C093C193C293C3C1CC93C4DEFCBEEF93C5C6B293C693C793C893C993CA93CB93CC93CD93CEB3C5C8F693CF93D0CBBADEFE93D193D2DFA493D393D493D593D6D7B293D793D893D993DA93DBB3B793DC93DD93DE93DFC1C393E093E1C7CBB2A5B4E993E2D7AB93E393E493E593E6C4EC93E7DFA2DFA393E8DFA593E9BAB393EA93EB93ECDFA693EDC0DE93EE93EFC9C393F093F193F293F393F493F593F6B2D9C7E693F7DFA793F8C7DC93F993FA93FB93FCDFA8EBA293FD93FE944094419442CBD3944394449445DFAA9446DFA99447B2C194489449944A944B944C944D944E944F9450945194529453945494559456945794589459945A945B945C945D945E945F9460C5CA94619462946394649465946694679468DFAB9469946A946B946C946D946E946F9470D4DC94719472947394749475C8C19476947794789479947A947B947C947D947E948094819482DFAC94839484948594869487BEF094889489DFADD6A7948A948B948C948DEAB7EBB6CAD5948ED8FCB8C4948FB9A594909491B7C5D5FE94929493949494959496B9CA94979498D0A7F4CD9499949AB5D0949B949CC3F4949DBEC8949E949F94A0EBB7B0BD94A194A2BDCC94A3C1B294A4B1D6B3A894A594A694A7B8D2C9A294A894A9B6D894AA94AB94AC94ADEBB8BEB494AE94AF94B0CAFD94B1C7C394B2D5FB94B394B4B7F394B594B694B794B894B994BA94BB94BC94BD94BE94BF94C094C194C294C3CEC494C494C594C6D5ABB1F394C794C894C9ECB3B0DF94CAECB594CB94CC94CDB6B794CEC1CF94CFF5FAD0B194D094D1D5E594D2CED394D394D4BDEFB3E294D5B8AB94D6D5B694D7EDBD94D8B6CF94D9CBB9D0C294DA94DB94DC94DD94DE94DF94E094E1B7BD94E294E3ECB6CAA994E494E594E6C5D494E7ECB9ECB8C2C3ECB794E894E994EA94EBD0FDECBA94ECECBBD7E594ED94EEECBC94EF94F094F1ECBDC6EC94F294F394F494F594F694F794F894F9CEDE94FABCC894FB94FCC8D5B5A9BEC9D6BCD4E794FD94FED1AED0F1EAB8EAB9EABABAB59540954195429543CAB1BFF595449545CDFA9546954795489549954AEAC0954BB0BAEABE954C954DC0A5954E954F9550EABB9551B2FD9552C3F7BBE8955395549555D2D7CEF4EABF955695579558EABC9559955A955BEAC3955CD0C7D3B3955D955E955F9560B4BA9561C3C1D7F29562956395649565D5D19566CAC79567EAC595689569EAC4EAC7EAC6956A956B956C956D956ED6E7956FCFD495709571EACB9572BBCE9573957495759576957795789579BDFAC9CE957A957BEACC957C957DC9B9CFFEEACAD4CEEACDEACF957E9580CDED9581958295839584EAC99585EACE95869587CEEE9588BBDE9589B3BF958A958B958C958D958EC6D5BEB0CEFA958F95909591C7E79592BEA7EAD095939594D6C7959595969597C1C095989599959AD4DD959BEAD1959C959DCFBE959E959F95A095A1EAD295A295A395A495A5CAEE95A695A795A895A9C5AFB0B595AA95AB95AC95AD95AEEAD495AF95B095B195B295B395B495B595B695B7EAD3F4DF95B895B995BA95BB95BCC4BA95BD95BE95BF95C095C1B1A995C295C395C495C5E5DF95C695C795C895C9EAD595CA95CB95CC95CD95CE95CF95D095D195D295D395D495D595D695D795D895D995DA95DB95DC95DD95DE95DF95E095E195E295E3CAEF95E4EAD6EAD7C6D895E595E695E795E895E995EA95EB95ECEAD895ED95EEEAD995EF95F095F195F295F395F4D4BB95F5C7FAD2B7B8FC95F695F7EAC295F8B2DC95F995FAC2FC95FBD4F8CCE6D7EE95FC95FD95FE9640964196429643D4C2D3D0EBC3C5F39644B7FE96459646EBD4964796489649CBB7EBDE964AC0CA964B964C964DCDFB964EB3AF964FC6DA965096519652965396549655EBFC9656C4BE9657CEB4C4A9B1BED4FD9658CAF59659D6EC965A965BC6D3B6E4965C965D965E965FBBFA96609661D0E096629663C9B19664D4D3C8A896659666B8CB9667E8BEC9BC96689669E8BB966AC0EED0D3B2C4B4E5966BE8BC966C966DD5C8966E966F967096719672B6C59673E8BDCAF8B8DCCCF5967496759676C0B496779678D1EEE8BFE8C29679967ABABC967BB1ADBDDC967CEABDE8C3967DE8C6967EE8CB9680968196829683E8CC9684CBC9B0E59685BCAB96869687B9B996889689E8C1968ACDF7968BE8CA968C968D968E968FCEF69690969196929693D5ED9694C1D6E8C49695C3B69696B9FBD6A6E8C8969796989699CAE0D4E6969AE8C0969BE8C5E8C7969CC7B9B7E3969DE8C9969EBFDDE8D2969F96A0E8D796A1E8D5BCDCBCCFE8DB96A296A396A496A596A696A796A896A9E8DE96AAE8DAB1FA96AB96AC96AD96AE96AF96B096B196B296B396B4B0D8C4B3B8CCC6E2C8BEC8E196B596B696B7E8CFE8D4E8D696B8B9F1E8D8D7F596B9C4FB96BAE8DC96BB96BCB2E996BD96BE96BFE8D196C096C1BCED96C296C3BFC2E8CDD6F996C4C1F8B2F196C596C696C796C896C996CA96CB96CCE8DF96CDCAC1E8D996CE96CF96D096D1D5A496D2B1EAD5BBE8CEE8D0B6B0E8D396D3E8DDC0B896D4CAF796D5CBA896D696D7C6DCC0F596D896D996DA96DB96DCE8E996DD96DE96DFD0A396E096E196E296E396E496E596E6E8F2D6EA96E796E896E996EA96EB96EC96EDE8E0E8E196EE96EF96F0D1F9BACBB8F996F196F2B8F1D4D4E8EF96F3E8EEE8ECB9F0CCD2E8E6CEA6BFF296F4B0B8E8F1E8F096F5D7C096F6E8E496F7CDA9C9A396F8BBB8BDDBE8EA96F996FA96FB96FC96FD96FE9740974197429743E8E2E8E3E8E5B5B5E8E7C7C5E8EBE8EDBDB0D7AE9744E8F897459746974797489749974A974B974CE8F5974DCDB0E8F6974E974F9750975197529753975497559756C1BA9757E8E89758C3B7B0F09759975A975B975C975D975E975F9760E8F4976197629763E8F7976497659766B9A3976797689769976A976B976C976D976E976F9770C9D2977197729773C3CECEE0C0E69774977597769777CBF39778CCDDD0B59779977ACAE1977BE8F3977C977D977E9780978197829783978497859786BCEC9787E8F997889789978A978B978C978DC3DE978EC6E5978FB9F79790979197929793B0F497949795D7D897969797BCAC9798C5EF9799979A979B979C979DCCC4979E979FE9A697A097A197A297A397A497A597A697A797A897A9C9AD97AAE9A2C0E297AB97AC97ADBFC397AE97AF97B0E8FEB9D797B1E8FB97B297B397B497B5E9A497B697B797B8D2CE97B997BA97BB97BC97BDE9A397BED6B2D7B597BFE9A797C0BDB797C197C297C397C497C597C697C797C897C997CA97CB97CCE8FCE8FD97CD97CE97CFE9A197D097D197D297D397D497D597D697D7CDD697D897D9D2AC97DA97DB97DCE9B297DD97DE97DF97E0E9A997E197E297E3B4AA97E4B4BB97E597E6E9AB97E797E897E997EA97EB97EC97ED97EE97EF97F097F197F297F397F497F597F697F7D0A897F897F9E9A597FA97FBB3FE97FC97FDE9ACC0E397FEE9AA98409841E9B998429843E9B89844984598469847E9AE98489849E8FA984A984BE9A8984C984D984E984F9850BFACE9B1E9BA98519852C2A5985398549855E9AF9856B8C59857E9AD9858D3DCE9B4E9B5E9B79859985A985BE9C7985C985D985E985F98609861C0C6E9C598629863E9B098649865E9BBB0F19866986798689869986A986B986C986D986E986FE9BCD5A598709871E9BE9872E9BF987398749875E9C198769877C1F198789879C8B6987A987B987CE9BD987D987E988098819882E9C29883988498859886988798889889988AE9C3988BE9B3988CE9B6988DBBB1988E988F9890E9C0989198929893989498959896BCF7989798989899E9C4E9C6989A989B989C989D989E989F98A098A198A298A398A498A5E9CA98A698A798A898A9E9CE98AA98AB98AC98AD98AE98AF98B098B198B298B3B2DB98B4E9C898B598B698B798B898B998BA98BB98BC98BD98BEB7AE98BF98C098C198C298C398C498C598C698C798C898C998CAE9CBE9CC98CB98CC98CD98CE98CF98D0D5C198D1C4A398D298D398D498D598D698D7E9D898D8BAE198D998DA98DB98DCE9C998DDD3A398DE98DF98E0E9D498E198E298E398E498E598E698E7E9D7E9D098E898E998EA98EB98ECE9CF98ED98EEC7C198EF98F098F198F298F398F498F598F6E9D298F798F898F998FA98FB98FC98FDE9D9B3C898FEE9D399409941994299439944CFF0994599469947E9CD99489949994A994B994C994D994E994F995099519952B3F79953995499559956995799589959E9D6995A995BE9DA995C995D995ECCB4995F99609961CFAD99629963996499659966996799689969996AE9D5996BE9DCE9DB996C996D996E996F9970E9DE99719972997399749975997699779978E9D19979997A997B997C997D997E99809981E9DD9982E9DFC3CA9983998499859986998799889989998A998B998C998D998E998F9990999199929993999499959996999799989999999A999B999C999D999E999F99A099A199A299A399A499A599A699A799A899A999AA99AB99AC99AD99AE99AF99B099B199B299B399B499B599B699B799B899B999BA99BB99BC99BD99BE99BF99C099C199C299C399C499C599C699C799C899C999CA99CB99CC99CD99CE99CF99D099D199D299D399D499D599D699D799D899D999DA99DB99DC99DD99DE99DF99E099E199E299E399E499E599E699E799E899E999EA99EB99EC99ED99EE99EF99F099F199F299F399F499F5C7B7B4CEBBB6D0C0ECA399F699F7C5B799F899F999FA99FB99FC99FD99FE9A409A419A42D3FB9A439A449A459A46ECA49A47ECA5C6DB9A489A499A4ABFEE9A4B9A4C9A4D9A4EECA69A4F9A50ECA7D0AA9A51C7B89A529A53B8E89A549A559A569A579A589A599A5A9A5B9A5C9A5D9A5E9A5FECA89A609A619A629A639A649A659A669A67D6B9D5FDB4CBB2BDCEE4C6E79A689A69CDE19A6A9A6B9A6C9A6D9A6E9A6F9A709A719A729A739A749A759A769A77B4F59A78CBC0BCDF9A799A7A9A7B9A7CE9E2E9E3D1EAE9E59A7DB4F9E9E49A7ED1B3CAE2B2D09A80E9E89A819A829A839A84E9E6E9E79A859A86D6B39A879A889A89E9E9E9EA9A8A9A8B9A8C9A8D9A8EE9EB9A8F9A909A919A929A939A949A959A96E9EC9A979A989A999A9A9A9B9A9C9A9D9A9EECAFC5B9B6CE9A9FD2F39AA09AA19AA29AA39AA49AA59AA6B5EE9AA7BBD9ECB19AA89AA9D2E39AAA9AAB9AAC9AAD9AAECEE39AAFC4B89AB0C3BF9AB19AB2B6BED8B9B1C8B1CFB1D1C5FE9AB3B1D09AB4C3AB9AB59AB69AB79AB89AB9D5B19ABA9ABB9ABC9ABD9ABE9ABF9AC09AC1EBA4BAC19AC29AC39AC4CCBA9AC59AC69AC7EBA59AC8EBA79AC99ACA9ACBEBA89ACC9ACD9ACEEBA69ACF9AD09AD19AD29AD39AD49AD5EBA9EBABEBAA9AD69AD79AD89AD99ADAEBAC9ADBCACFD8B5C3F19ADCC3A5C6F8EBADC4CA9ADDEBAEEBAFEBB0B7D59ADE9ADF9AE0B7FA9AE1EBB1C7E29AE2EBB39AE3BAA4D1F5B0B1EBB2EBB49AE49AE59AE6B5AAC2C8C7E89AE7EBB59AE8CBAEE3DF9AE99AEAD3C09AEB9AEC9AED9AEED9DB9AEF9AF0CDA1D6ADC7F39AF19AF29AF3D9E0BBE39AF4BABAE3E29AF59AF69AF79AF89AF9CFAB9AFA9AFB9AFCE3E0C9C79AFDBAB99AFE9B409B41D1B4E3E1C8EAB9AFBDADB3D8CEDB9B429B43CCC09B449B459B46E3E8E3E9CDF49B479B489B499B4A9B4BCCAD9B4CBCB39B4DE3EA9B4EE3EB9B4F9B50D0DA9B519B529B53C6FBB7DA9B549B55C7DFD2CACED69B56E3E4E3EC9B57C9F2B3C19B589B59E3E79B5A9B5BC6E3E3E59B5C9B5DEDB3E3E69B5E9B5F9B609B61C9B39B62C5E69B639B649B65B9B59B66C3BB9B67E3E3C5BDC1A4C2D9B2D79B68E3EDBBA6C4AD9B69E3F0BEDA9B6A9B6BE3FBE3F5BAD39B6C9B6D9B6E9B6FB7D0D3CD9B70D6CED5D3B9C1D5B4D1D89B719B729B739B74D0B9C7F69B759B769B77C8AAB2B49B78C3DA9B799B7A9B7BE3EE9B7C9B7DE3FCE3EFB7A8E3F7E3F49B7E9B809B81B7BA9B829B83C5A29B84E3F6C5DDB2A8C6FC9B85C4E09B869B87D7A29B88C0E1E3F99B899B8AE3FAE3FDCCA9E3F39B8BD3BE9B8CB1C3EDB4E3F1E3F29B8DE3F8D0BAC6C3D4F3E3FE9B8E9B8FBDE09B909B91E4A79B929B93E4A69B949B959B96D1F3E4A39B97E4A99B989B999B9AC8F79B9B9B9C9B9D9B9ECFB49B9FE4A8E4AEC2E59BA09BA1B6B49BA29BA39BA49BA59BA69BA7BDF29BA8E4A29BA99BAABAE9E4AA9BAB9BACE4AC9BAD9BAEB6FDD6DEE4B29BAFE4AD9BB09BB19BB2E4A19BB3BBEECDDDC7A2C5C99BB49BB5C1F79BB6E4A49BB7C7B3BDACBDBDE4A59BB8D7C7B2E29BB9E4ABBCC3E4AF9BBABBEBE4B0C5A8E4B19BBB9BBC9BBD9BBED5E3BFA39BBFE4BA9BC0E4B79BC1E4BB9BC29BC3E4BD9BC49BC5C6D69BC69BC7BAC6C0CB9BC89BC99BCAB8A1E4B49BCB9BCC9BCD9BCED4A19BCF9BD0BAA3BDFE9BD19BD29BD3E4BC9BD49BD59BD69BD79BD8CDBF9BD99BDAC4F99BDB9BDCCFFBC9E69BDD9BDED3BF9BDFCFD19BE09BE1E4B39BE2E4B8E4B9CCE99BE39BE49BE59BE69BE7CCCE9BE8C0D4E4B5C1B0E4B6CED09BE9BBC1B5D39BEAC8F3BDA7D5C7C9ACB8A2E4CA9BEB9BECE4CCD1C49BED9BEED2BA9BEF9BF0BAAD9BF19BF2BAD49BF39BF49BF59BF69BF79BF8E4C3B5ED9BF99BFA9BFBD7CDE4C0CFFDE4BF9BFC9BFD9BFEC1DCCCCA9C409C419C429C43CAE79C449C459C469C47C4D79C48CCD4E4C89C499C4A9C4BE4C7E4C19C4CE4C4B5AD9C4D9C4ED3D99C4FE4C69C509C519C529C53D2F9B4E39C54BBB49C559C56C9EE9C57B4BE9C589C599C5ABBEC9C5BD1CD9C5CCCEDEDB59C5D9C5E9C5F9C609C619C629C639C64C7E59C659C669C679C68D4A89C69E4CBD7D5E4C29C6ABDA5E4C59C6B9C6CD3E69C6DE4C9C9F89C6E9C6FE4BE9C709C71D3E59C729C73C7FEB6C99C74D4FCB2B3E4D79C759C769C77CEC29C78E4CD9C79CEBC9C7AB8DB9C7B9C7CE4D69C7DBFCA9C7E9C809C81D3CE9C82C3EC9C839C849C859C869C879C889C899C8AC5C8E4D89C8B9C8C9C8D9C8E9C8F9C909C919C92CDC4E4CF9C939C949C959C96E4D4E4D59C97BAFE9C98CFE69C999C9AD5BF9C9B9C9C9C9DE4D29C9E9C9F9CA09CA19CA29CA39CA49CA59CA69CA79CA8E4D09CA99CAAE4CE9CAB9CAC9CAD9CAE9CAF9CB09CB19CB29CB39CB49CB59CB69CB79CB89CB9CDE5CAAA9CBA9CBB9CBCC0A39CBDBDA6E4D39CBE9CBFB8C89CC09CC19CC29CC39CC4E4E7D4B49CC59CC69CC79CC89CC99CCA9CCBE4DB9CCC9CCD9CCEC1EF9CCF9CD0E4E99CD19CD2D2E79CD39CD4E4DF9CD5E4E09CD69CD7CFAA9CD89CD99CDA9CDBCBDD9CDCE4DAE4D19CDDE4E59CDEC8DCE4E39CDF9CE0C4E7E4E29CE1E4E19CE29CE39CE4B3FCE4E89CE59CE69CE79CE8B5E19CE99CEA9CEBD7CC9CEC9CED9CEEE4E69CEFBBAC9CF0D7D2CCCFEBF89CF1E4E49CF29CF3B9F69CF49CF59CF6D6CDE4D9E4DCC2FAE4DE9CF7C2CBC0C4C2D09CF8B1F5CCB29CF99CFA9CFB9CFC9CFD9CFE9D409D419D429D43B5CE9D449D459D469D47E4EF9D489D499D4A9D4B9D4C9D4D9D4E9D4FC6AF9D509D519D52C6E19D539D54E4F59D559D569D579D589D59C2A99D5A9D5B9D5CC0ECD1DDE4EE9D5D9D5E9D5F9D609D619D629D639D649D659D66C4AE9D679D689D69E4ED9D6A9D6B9D6C9D6DE4F6E4F4C2FE9D6EE4DD9D6FE4F09D70CAFE9D71D5C49D729D73E4F19D749D759D769D779D789D799D7AD1FA9D7B9D7C9D7D9D7E9D809D819D82E4EBE4EC9D839D849D85E4F29D86CEAB9D879D889D899D8A9D8B9D8C9D8D9D8E9D8F9D90C5CB9D919D929D93C7B19D94C2BA9D959D969D97E4EA9D989D999D9AC1CA9D9B9D9C9D9D9D9E9D9F9DA0CCB6B3B19DA19DA29DA3E4FB9DA4E4F39DA59DA69DA7E4FA9DA8E4FD9DA9E4FC9DAA9DAB9DAC9DAD9DAE9DAF9DB0B3CE9DB19DB29DB3B3BAE4F79DB49DB5E4F9E4F8C5EC9DB69DB79DB89DB99DBA9DBB9DBC9DBD9DBE9DBF9DC09DC19DC2C0BD9DC39DC49DC59DC6D4E89DC79DC89DC99DCA9DCBE5A29DCC9DCD9DCE9DCF9DD09DD19DD29DD39DD49DD59DD6B0C49DD79DD8E5A49DD99DDAE5A39DDB9DDC9DDD9DDE9DDF9DE0BCA49DE1E5A59DE29DE39DE49DE59DE69DE7E5A19DE89DE99DEA9DEB9DEC9DED9DEEE4FEB1F49DEF9DF09DF19DF29DF39DF49DF59DF69DF79DF89DF9E5A89DFAE5A9E5A69DFB9DFC9DFD9DFE9E409E419E429E439E449E459E469E47E5A7E5AA9E489E499E4A9E4B9E4C9E4D9E4E9E4F9E509E519E529E539E549E559E569E579E589E599E5A9E5B9E5C9E5D9E5E9E5F9E609E619E629E639E649E659E669E679E68C6D99E699E6A9E6B9E6C9E6D9E6E9E6F9E70E5ABE5AD9E719E729E739E749E759E769E77E5AC9E789E799E7A9E7B9E7C9E7D9E7E9E809E819E829E839E849E859E869E879E889E89E5AF9E8A9E8B9E8CE5AE9E8D9E8E9E8F9E909E919E929E939E949E959E969E979E989E999E9A9E9B9E9C9E9D9E9EB9E09E9F9EA0E5B09EA19EA29EA39EA49EA59EA69EA79EA89EA99EAA9EAB9EAC9EAD9EAEE5B19EAF9EB09EB19EB29EB39EB49EB59EB69EB79EB89EB99EBABBF0ECE1C3F09EBBB5C6BBD29EBC9EBD9EBE9EBFC1E9D4EE9EC0BEC49EC19EC29EC3D7C69EC4D4D6B2D3ECBE9EC59EC69EC79EC8EAC19EC99ECA9ECBC2AFB4B69ECC9ECD9ECED1D79ECF9ED09ED1B3B49ED2C8B2BFBBECC09ED39ED4D6CB9ED59ED6ECBFECC19ED79ED89ED99EDA9EDB9EDC9EDD9EDE9EDF9EE09EE19EE29EE3ECC5BEE6CCBFC5DABEBC9EE4ECC69EE5B1FE9EE69EE79EE8ECC4D5A8B5E39EE9ECC2C1B6B3E39EEA9EEBECC3CBB8C0C3CCFE9EEC9EED9EEE9EEFC1D29EF0ECC89EF19EF29EF39EF49EF59EF69EF79EF89EF99EFA9EFB9EFC9EFDBAE6C0D39EFED6F29F409F419F42D1CC9F439F449F459F46BFBE9F47B7B3C9D5ECC7BBE29F48CCCCBDFDC8C89F49CFA99F4A9F4B9F4C9F4D9F4E9F4F9F50CDE99F51C5EB9F529F539F54B7E99F559F569F579F589F599F5A9F5B9F5C9F5D9F5E9F5FD1C9BAB89F609F619F629F639F64ECC99F659F66ECCA9F67BBC0ECCB9F68ECE2B1BAB7D99F699F6A9F6B9F6C9F6D9F6E9F6F9F709F719F729F73BDB99F749F759F769F779F789F799F7A9F7BECCCD1E6ECCD9F7C9F7D9F7E9F80C8BB9F819F829F839F849F859F869F879F889F899F8A9F8B9F8C9F8D9F8EECD19F8F9F909F919F92ECD39F93BBCD9F94BCE59F959F969F979F989F999F9A9F9B9F9C9F9D9F9E9F9F9FA09FA1ECCF9FA2C9B79FA39FA49FA59FA69FA7C3BA9FA8ECE3D5D5ECD09FA99FAA9FAB9FAC9FADD6F39FAE9FAF9FB0ECD2ECCE9FB19FB29FB39FB4ECD49FB5ECD59FB69FB7C9BF9FB89FB99FBA9FBB9FBC9FBDCFA89FBE9FBF9FC09FC19FC2D0DC9FC39FC49FC59FC6D1AC9FC79FC89FC99FCAC8DB9FCB9FCC9FCDECD6CEF59FCE9FCF9FD09FD19FD2CAECECDA9FD39FD49FD59FD69FD79FD89FD9ECD99FDA9FDB9FDCB0BE9FDD9FDE9FDF9FE09FE19FE2ECD79FE3ECD89FE49FE59FE6ECE49FE79FE89FE99FEA9FEB9FEC9FED9FEE9FEFC8BC9FF09FF19FF29FF39FF49FF59FF69FF79FF89FF9C1C79FFA9FFB9FFC9FFD9FFEECDCD1E0A040A041A042A043A044A045A046A047A048A049ECDBA04AA04BA04CA04DD4EFA04EECDDA04FA050A051A052A053A054DBC6A055A056A057A058A059A05AA05BA05CA05DA05EECDEA05FA060A061A062A063A064A065A066A067A068A069A06AB1ACA06BA06CA06DA06EA06FA070A071A072A073A074A075A076A077A078A079A07AA07BA07CA07DA07EA080A081ECDFA082A083A084A085A086A087A088A089A08AA08BECE0A08CD7A6A08DC5C0A08EA08FA090EBBCB0AEA091A092A093BEF4B8B8D2AFB0D6B5F9A094D8B3A095CBACA096E3DDA097A098A099A09AA09BA09CA09DC6ACB0E6A09EA09FA0A0C5C6EBB9A0A1A0A2A0A3A0A4EBBAA0A5A0A6A0A7EBBBA0A8A0A9D1C0A0AAC5A3A0ABEAF2A0ACC4B2A0ADC4B5C0CEA0AEA0AFA0B0EAF3C4C1A0B1CEEFA0B2A0B3A0B4A0B5EAF0EAF4A0B6A0B7C9FCA0B8A0B9C7A3A0BAA0BBA0BCCCD8CEFEA0BDA0BEA0BFEAF5EAF6CFACC0E7A0C0A0C1EAF7A0C2A0C3A0C4A0C5A0C6B6BFEAF8A0C7EAF9A0C8EAFAA0C9A0CAEAFBA0CBA0CCA0CDA0CEA0CFA0D0A0D1A0D2A0D3A0D4A0D5A0D6EAF1A0D7A0D8A0D9A0DAA0DBA0DCA0DDA0DEA0DFA0E0A0E1A0E2C8AEE1EBA0E3B7B8E1ECA0E4A0E5A0E6E1EDA0E7D7B4E1EEE1EFD3CCA0E8A0E9A0EAA0EBA0ECA0EDA0EEE1F1BFF1E1F0B5D2A0EFA0F0A0F1B1B7A0F2A0F3A0F4A0F5E1F3E1F2A0F6BAFCA0F7E1F4A0F8A0F9A0FAA0FBB9B7A0FCBED1A0FDA0FEAA40AA41C4FCAA42BADDBDC6AA43AA44AA45AA46AA47AA48E1F5E1F7AA49AA4AB6C0CFC1CAA8E1F6D5F8D3FCE1F8E1FCE1F9AA4BAA4CE1FAC0EAAA4DE1FEE2A1C0C7AA4EAA4FAA50AA51E1FBAA52E1FDAA53AA54AA55AA56AA57AA58E2A5AA59AA5AAA5BC1D4AA5CAA5DAA5EAA5FE2A3AA60E2A8B2FEE2A2AA61AA62AA63C3CDB2C2E2A7E2A6AA64AA65E2A4E2A9AA66AA67E2ABAA68AA69AA6AD0C9D6EDC3A8E2ACAA6BCFD7AA6CAA6DE2AEAA6EAA6FBAEFAA70AA71E9E0E2ADE2AAAA72AA73AA74AA75BBABD4B3AA76AA77AA78AA79AA7AAA7BAA7CAA7DAA7EAA80AA81AA82AA83E2B0AA84AA85E2AFAA86E9E1AA87AA88AA89AA8AE2B1AA8BAA8CAA8DAA8EAA8FAA90AA91AA92E2B2AA93AA94AA95AA96AA97AA98AA99AA9AAA9BAA9CAA9DE2B3CCA1AA9EE2B4AA9FAAA0AB40AB41AB42AB43AB44AB45AB46AB47AB48AB49AB4AAB4BE2B5AB4CAB4DAB4EAB4FAB50D0FEAB51AB52C2CAAB53D3F1AB54CDF5AB55AB56E7E0AB57AB58E7E1AB59AB5AAB5BAB5CBEC1AB5DAB5EAB5FAB60C2EAAB61AB62AB63E7E4AB64AB65E7E3AB66AB67AB68AB69AB6AAB6BCDE6AB6CC3B5AB6DAB6EE7E2BBB7CFD6AB6FC1E1E7E9AB70AB71AB72E7E8AB73AB74E7F4B2A3AB75AB76AB77AB78E7EAAB79E7E6AB7AAB7BAB7CAB7DAB7EE7ECE7EBC9BAAB80AB81D5E4AB82E7E5B7A9E7E7AB83AB84AB85AB86AB87AB88AB89E7EEAB8AAB8BAB8CAB8DE7F3AB8ED6E9AB8FAB90AB91AB92E7EDAB93E7F2AB94E7F1AB95AB96AB97B0E0AB98AB99AB9AAB9BE7F5AB9CAB9DAB9EAB9FABA0AC40AC41AC42AC43AC44AC45AC46AC47AC48AC49AC4AC7F2AC4BC0C5C0EDAC4CAC4DC1F0E7F0AC4EAC4FAC50AC51E7F6CBF6AC52AC53AC54AC55AC56AC57AC58AC59AC5AE8A2E8A1AC5BAC5CAC5DAC5EAC5FAC60D7C1AC61AC62E7FAE7F9AC63E7FBAC64E7F7AC65E7FEAC66E7FDAC67E7FCAC68AC69C1D5C7D9C5FDC5C3AC6AAC6BAC6CAC6DAC6EC7EDAC6FAC70AC71AC72E8A3AC73AC74AC75AC76AC77AC78AC79AC7AAC7BAC7CAC7DAC7EAC80AC81AC82AC83AC84AC85AC86E8A6AC87E8A5AC88E8A7BAF7E7F8E8A4AC89C8F0C9AAAC8AAC8BAC8CAC8DAC8EAC8FAC90AC91AC92AC93AC94AC95AC96E8A9AC97AC98B9E5AC99AC9AAC9BAC9CAC9DD1FEE8A8AC9EAC9FACA0AD40AD41AD42E8AAAD43E8ADE8AEAD44C1A7AD45AD46AD47E8AFAD48AD49AD4AE8B0AD4BAD4CE8ACAD4DE8B4AD4EAD4FAD50AD51AD52AD53AD54AD55AD56AD57AD58E8ABAD59E8B1AD5AAD5BAD5CAD5DAD5EAD5FAD60AD61E8B5E8B2E8B3AD62AD63AD64AD65AD66AD67AD68AD69AD6AAD6BAD6CAD6DAD6EAD6FAD70AD71E8B7AD72AD73AD74AD75AD76AD77AD78AD79AD7AAD7BAD7CAD7DAD7EAD80AD81AD82AD83AD84AD85AD86AD87AD88AD89E8B6AD8AAD8BAD8CAD8DAD8EAD8FAD90AD91AD92B9CFAD93F0ACAD94F0ADAD95C6B0B0EAC8BFAD96CDDFAD97AD98AD99AD9AAD9BAD9CAD9DCECDEAB1AD9EAD9FADA0AE40EAB2AE41C6BFB4C9AE42AE43AE44AE45AE46AE47AE48EAB3AE49AE4AAE4BAE4CD5E7AE4DAE4EAE4FAE50AE51AE52AE53AE54DDF9AE55EAB4AE56EAB5AE57EAB6AE58AE59AE5AAE5BB8CADFB0C9F5AE5CCCF0AE5DAE5EC9FAAE5FAE60AE61AE62AE63C9FBAE64AE65D3C3CBA6AE66B8A6F0AEB1C2AE67E5B8CCEFD3C9BCD7C9EAAE68B5E7AE69C4D0B5E9AE6AEEAEBBADAE6BAE6CE7DEAE6DEEAFAE6EAE6FAE70AE71B3A9AE72AE73EEB2AE74AE75EEB1BDE7AE76EEB0CEB7AE77AE78AE79AE7AC5CFAE7BAE7CAE7DAE7EC1F4DBCEEEB3D0F3AE80AE81AE82AE83AE84AE85AE86AE87C2D4C6E8AE88AE89AE8AB7ACAE8BAE8CAE8DAE8EAE8FAE90AE91EEB4AE92B3EBAE93AE94AE95BBFBEEB5AE96AE97AE98AE99AE9AE7DCAE9BAE9CAE9DEEB6AE9EAE9FBDAEAEA0AF40AF41AF42F1E2AF43AF44AF45CAE8AF46D2C9F0DAAF47F0DBAF48F0DCC1C6AF49B8EDBECEAF4AAF4BF0DEAF4CC5B1F0DDD1F1AF4DF0E0B0CCBDEAAF4EAF4FAF50AF51AF52D2DFF0DFAF53B4AFB7E8F0E6F0E5C6A3F0E1F0E2B4C3AF54AF55F0E3D5EEAF56AF57CCDBBED2BCB2AF58AF59AF5AF0E8F0E7F0E4B2A1AF5BD6A2D3B8BEB7C8ACAF5CAF5DF0EAAF5EAF5FAF60AF61D1F7AF62D6CCBADBF0E9AF63B6BBAF64AF65CDB4AF66AF67C6A6AF68AF69AF6AC1A1F0EBF0EEAF6BF0EDF0F0F0ECAF6CBBBEF0EFAF6DAF6EAF6FAF70CCB5F0F2AF71AF72B3D5AF73AF74AF75AF76B1D4AF77AF78F0F3AF79AF7AF0F4F0F6B4E1AF7BF0F1AF7CF0F7AF7DAF7EAF80AF81F0FAAF82F0F8AF83AF84AF85F0F5AF86AF87AF88AF89F0FDAF8AF0F9F0FCF0FEAF8BF1A1AF8CAF8DAF8ECEC1F1A4AF8FF1A3AF90C1F6F0FBCADDAF91AF92B4F1B1F1CCB1AF93F1A6AF94AF95F1A7AF96AF97F1ACD5CEF1A9AF98AF99C8B3AF9AAF9BAF9CF1A2AF9DF1ABF1A8F1A5AF9EAF9FF1AAAFA0B040B041B042B043B044B045B046B0A9F1ADB047B048B049B04AB04BB04CF1AFB04DF1B1B04EB04FB050B051B052F1B0B053F1AEB054B055B056B057D1A2B058B059B05AB05BB05CB05DB05EF1B2B05FB060B061F1B3B062B063B064B065B066B067B068B069B9EFB06AB06BB5C7B06CB0D7B0D9B06DB06EB06FD4EDB070B5C4B071BDD4BBCAF0A7B072B073B8DEB074B075F0A8B076B077B0A8B078F0A9B079B07ACDEEB07BB07CF0AAB07DB07EB080B081B082B083B084B085B086B087F0ABB088B089B08AB08BB08CB08DB08EB08FB090C6A4B091B092D6E5F1E4B093F1E5B094B095B096B097B098B099B09AB09BB09CB09DC3F3B09EB09FD3DBB0A0B140D6D1C5E8B141D3AFB142D2E6B143B144EEC1B0BBD5B5D1CEBCE0BAD0B145BFF8B146B8C7B5C1C5CCB147B148CAA2B149B14AB14BC3CBB14CB14DB14EB14FB150EEC2B151B152B153B154B155B156B157B158C4BFB6A2B159EDECC3A4B15AD6B1B15BB15CB15DCFE0EDEFB15EB15FC5CEB160B6DCB161B162CAA1B163B164EDEDB165B166EDF0EDF1C3BCB167BFB4B168EDEEB169B16AB16BB16CB16DB16EB16FB170B171B172B173EDF4EDF2B174B175B176B177D5E6C3DFB178EDF3B179B17AB17BEDF6B17CD5A3D1A3B17DB17EB180EDF5B181C3D0B182B183B184B185B186EDF7BFF4BEECEDF8B187CCF7B188D1DBB189B18AB18BD7C5D5F6B18CEDFCB18DB18EB18FEDFBB190B191B192B193B194B195B196B197EDF9EDFAB198B199B19AB19BB19CB19DB19EB19FEDFDBEA6B1A0B240B241B242B243CBAFEEA1B6BDB244EEA2C4C0B245EDFEB246B247BDDEB2C7B248B249B24AB24BB24CB24DB24EB24FB250B251B252B253B6C3B254B255B256EEA5D8BAEEA3EEA6B257B258B259C3E9B3F2B25AB25BB25CB25DB25EB25FEEA7EEA4CFB9B260B261EEA8C2F7B262B263B264B265B266B267B268B269B26AB26BB26CB26DEEA9EEAAB26EDEABB26FB270C6B3B271C7C6B272D6F5B5C9B273CBB2B274B275B276EEABB277B278CDABB279EEACB27AB27BB27CB27DB27ED5B0B280EEADB281F6C4B282B283B284B285B286B287B288B289B28AB28BB28CB28DB28EDBC7B28FB290B291B292B293B294B295B296B297B4A3B298B299B29AC3ACF1E6B29BB29CB29DB29EB29FCAB8D2D3B2A0D6AAB340EFF2B341BED8B342BDC3EFF3B6CCB0ABB343B344B345B346CAAFB347B348EDB6B349EDB7B34AB34BB34CB34DCEF9B7AFBFF3EDB8C2EBC9B0B34EB34FB350B351B352B353EDB9B354B355C6F6BFB3B356B357B358EDBCC5F8B359D1D0B35AD7A9EDBAEDBBB35BD1E2B35CEDBFEDC0B35DEDC4B35EB35FB360EDC8B361EDC6EDCED5E8B362EDC9B363B364EDC7EDBEB365B366C5E9B367B368B369C6C6B36AB36BC9E9D4D2EDC1EDC2EDC3EDC5B36CC0F9B36DB4A1B36EB36FB370B371B9E8B372EDD0B373B374B375B376EDD1B377EDCAB378EDCFB379CEF8B37AB37BCBB6EDCCEDCDB37CB37DB37EB380B381CFF5B382B383B384B385B386B387B388B389B38AB38BB38CB38DEDD2C1F2D3B2EDCBC8B7B38EB38FB390B391B392B393B394B395BCEFB396B397B398B399C5F0B39AB39BB39CB39DB39EB39FB3A0B440B441B442EDD6B443B5EFB444B445C2B5B0ADCBE9B446B447B1AEB448EDD4B449B44AB44BCDEBB5E2B44CEDD5EDD3EDD7B44DB44EB5FAB44FEDD8B450EDD9B451EDDCB452B1CCB453B454B455B456B457B458B459B45AC5F6BCEEEDDACCBCB2EAB45BB45CB45DB45EEDDBB45FB460B461B462C4EBB463B464B4C5B465B466B467B0F5B468B469B46AEDDFC0DAB4E8B46BB46CB46DB46EC5CDB46FB470B471EDDDBFC4B472B473B474EDDEB475B476B477B478B479B47AB47BB47CB47DB47EB480B481B482B483C4A5B484B485B486EDE0B487B488B489B48AB48BEDE1B48CEDE3B48DB48EC1D7B48FB490BBC7B491B492B493B494B495B496BDB8B497B498B499EDE2B49AB49BB49CB49DB49EB49FB4A0B540B541B542B543B544B545EDE4B546B547B548B549B54AB54BB54CB54DB54EB54FEDE6B550B551B552B553B554EDE5B555B556B557B558B559B55AB55BB55CB55DB55EB55FB560B561B562B563EDE7B564B565B566B567B568CABEECEAC0F1B569C9E7B56AECEBC6EEB56BB56CB56DB56EECECB56FC6EDECEDB570B571B572B573B574B575B576B577B578ECF0B579B57AD7E6ECF3B57BB57CECF1ECEEECEFD7A3C9F1CBEEECF4B57DECF2B57EB580CFE9B581ECF6C6B1B582B583B584B585BCC0B586ECF5B587B588B589B58AB58BB58CB58DB5BBBBF6B58EECF7B58FB590B591B592B593D9F7BDFBB594B595C2BBECF8B596B597B598B599ECF9B59AB59BB59CB59DB8A3B59EB59FB5A0B640B641B642B643B644B645B646ECFAB647B648B649B64AB64BB64CB64DB64EB64FB650B651B652ECFBB653B654B655B656B657B658B659B65AB65BB65CB65DECFCB65EB65FB660B661B662D3EDD8AEC0EBB663C7DDBACCB664D0E3CBBDB665CDBAB666B667B8D1B668B669B1FCB66AC7EFB66BD6D6B66CB66DB66EBFC6C3EBB66FB670EFF5B671B672C3D8B673B674B675B676B677B678D7E2B679B67AB67BEFF7B3D3B67CC7D8D1EDB67DD6C8B67EEFF8B680EFF6B681BBFDB3C6B682B683B684B685B686B687B688BDD5B689B68AD2C6B68BBBE0B68CB68DCFA1B68EEFFCEFFBB68FB690EFF9B691B692B693B694B3CCB695C9D4CBB0B696B697B698B699B69AEFFEB69BB69CB0DEB69DB69ED6C9B69FB6A0B740EFFDB741B3EDB742B743F6D5B744B745B746B747B748B749B74AB74BB74CB74DB74EB74FB750B751B752CEC8B753B754B755F0A2B756F0A1B757B5BEBCDABBFCB758B8E5B759B75AB75BB75CB75DB75EC4C2B75FB760B761B762B763B764B765B766B767B768F0A3B769B76AB76BB76CB76DCBEBB76EB76FB770B771B772B773B774B775B776B777B778B779B77AB77BB77CB77DB77EB780B781B782B783B784B785B786F0A6B787B788B789D1A8B78ABEBFC7EEF1B6F1B7BFD5B78BB78CB78DB78EB4A9F1B8CDBBB78FC7D4D5ADB790F1B9B791F1BAB792B793B794B795C7CFB796B797B798D2A4D6CFB799B79AF1BBBDD1B4B0BEBDB79BB79CB79DB4DCCED1B79EBFDFF1BDB79FB7A0B840B841BFFAF1BCB842F1BFB843B844B845F1BEF1C0B846B847B848B849B84AF1C1B84BB84CB84DB84EB84FB850B851B852B853B854B855C1FEB856B857B858B859B85AB85BB85CB85DB85EB85FB860C1A2B861B862B863B864B865B866B867B868B869B86ACAFAB86BB86CD5BEB86DB86EB86FB870BEBABEB9D5C2B871B872BFA2B873CDAFF1B5B874B875B876B877B878B879BDDFB87AB6CBB87BB87CB87DB87EB880B881B882B883B884D6F1F3C3B885B886F3C4B887B8CDB888B889B88AF3C6F3C7B88BB0CAB88CF3C5B88DF3C9CBF1B88EB88FB890F3CBB891D0A6B892B893B1CAF3C8B894B895B896F3CFB897B5D1B898B899F3D7B89AF3D2B89BB89CB89DF3D4F3D3B7FBB89EB1BFB89FF3CEF3CAB5DAB8A0F3D0B940B941F3D1B942F3D5B943B944B945B946F3CDB947BCE3B948C1FDB949F3D6B94AB94BB94CB94DB94EB94FF3DAB950F3CCB951B5C8B952BDEEF3DCB953B954B7A4BFF0D6FECDB2B955B4F0B956B2DFB957F3D8B958F3D9C9B8B959F3DDB95AB95BF3DEB95CF3E1B95DB95EB95FB960B961B962B963B964B965B966B967F3DFB968B969F3E3F3E2B96AB96BF3DBB96CBFEAB96DB3EFB96EF3E0B96FB970C7A9B971BCF2B972B973B974B975F3EBB976B977B978B979B97AB97BB97CB9BFB97DB97EF3E4B980B981B982B2ADBBFEB983CBE3B984B985B986B987F3EDF3E9B988B989B98AB9DCF3EEB98BB98CB98DF3E5F3E6F3EAC2E1F3ECF3EFF3E8BCFDB98EB98FB990CFE4B991B992F3F0B993B994B995F3E7B996B997B998B999B99AB99BB99CB99DF3F2B99EB99FB9A0BA40D7ADC6AABA41BA42BA43BA44F3F3BA45BA46BA47BA48F3F1BA49C2A8BA4ABA4BBA4CBA4DBA4EB8DDF3F5BA4FBA50F3F4BA51BA52BA53B4DBBA54BA55BA56F3F6F3F7BA57BA58BA59F3F8BA5ABA5BBA5CC0BABA5DBA5EC0E9BA5FBA60BA61BA62BA63C5F1BA64BA65BA66BA67F3FBBA68F3FABA69BA6ABA6BBA6CBA6DBA6EBA6FBA70B4D8BA71BA72BA73F3FEF3F9BA74BA75F3FCBA76BA77BA78BA79BA7ABA7BF3FDBA7CBA7DBA7EBA80BA81BA82BA83BA84F4A1BA85BA86BA87BA88BA89BA8AF4A3BBC9BA8BBA8CF4A2BA8DBA8EBA8FBA90BA91BA92BA93BA94BA95BA96BA97BA98BA99F4A4BA9ABA9BBA9CBA9DBA9EBA9FB2BEF4A6F4A5BAA0BB40BB41BB42BB43BB44BB45BB46BB47BB48BB49BCAEBB4ABB4BBB4CBB4DBB4EBB4FBB50BB51BB52BB53BB54BB55BB56BB57BB58BB59BB5ABB5BBB5CBB5DBB5EBB5FBB60BB61BB62BB63BB64BB65BB66BB67BB68BB69BB6ABB6BBB6CBB6DBB6EC3D7D9E1BB6FBB70BB71BB72BB73BB74C0E0F4CCD7D1BB75BB76BB77BB78BB79BB7ABB7BBB7CBB7DBB7EBB80B7DBBB81BB82BB83BB84BB85BB86BB87F4CEC1A3BB88BB89C6C9BB8AB4D6D5B3BB8BBB8CBB8DF4D0F4CFF4D1CBDABB8EBB8FF4D2BB90D4C1D6E0BB91BB92BB93BB94B7E0BB95BB96BB97C1B8BB98BB99C1BBF4D3BEACBB9ABB9BBB9CBB9DBB9EB4E2BB9FBBA0F4D4F4D5BEABBC40BC41F4D6BC42BC43BC44F4DBBC45F4D7F4DABC46BAFDBC47F4D8F4D9BC48BC49BC4ABC4BBC4CBC4DBC4EB8E2CCC7F4DCBC4FB2DABC50BC51C3D3BC52BC53D4E3BFB7BC54BC55BC56BC57BC58BC59BC5AF4DDBC5BBC5CBC5DBC5EBC5FBC60C5B4BC61BC62BC63BC64BC65BC66BC67BC68F4E9BC69BC6ACFB5BC6BBC6CBC6DBC6EBC6FBC70BC71BC72BC73BC74BC75BC76BC77BC78CEC9BC79BC7ABC7BBC7CBC7DBC7EBC80BC81BC82BC83BC84BC85BC86BC87BC88BC89BC8ABC8BBC8CBC8DBC8ECBD8BC8FCBF7BC90BC91BC92BC93BDF4BC94BC95BC96D7CFBC97BC98BC99C0DBBC9ABC9BBC9CBC9DBC9EBC9FBCA0BD40BD41BD42BD43BD44BD45BD46BD47BD48BD49BD4ABD4BBD4CBD4DBD4EBD4FBD50BD51BD52BD53BD54BD55BD56BD57BD58BD59BD5ABD5BBD5CBD5DBD5EBD5FBD60BD61BD62BD63BD64BD65BD66BD67BD68BD69BD6ABD6BBD6CBD6DBD6EBD6FBD70BD71BD72BD73BD74BD75BD76D0F5BD77BD78BD79BD7ABD7BBD7CBD7DBD7EF4EABD80BD81BD82BD83BD84BD85BD86BD87BD88BD89BD8ABD8BBD8CBD8DBD8EBD8FBD90BD91BD92BD93BD94BD95BD96BD97BD98BD99BD9ABD9BBD9CBD9DBD9EBD9FBDA0BE40BE41BE42BE43BE44BE45BE46BE47BE48BE49BE4ABE4BBE4CF4EBBE4DBE4EBE4FBE50BE51BE52BE53F4ECBE54BE55BE56BE57BE58BE59BE5ABE5BBE5CBE5DBE5EBE5FBE60BE61BE62BE63BE64BE65BE66BE67BE68BE69BE6ABE6BBE6CBE6DBE6EBE6FBE70BE71BE72BE73BE74BE75BE76BE77BE78BE79BE7ABE7BBE7CBE7DBE7EBE80BE81BE82BE83BE84BE85BE86BE87BE88BE89BE8ABE8BBE8CBE8DBE8EBE8FBE90BE91BE92BE93BE94BE95BE96BE97BE98BE99BE9ABE9BBE9CBE9DBE9EBE9FBEA0BF40BF41BF42BF43BF44BF45BF46BF47BF48BF49BF4ABF4BBF4CBF4DBF4EBF4FBF50BF51BF52BF53BF54BF55BF56BF57BF58BF59BF5ABF5BBF5CBF5DBF5EBF5FBF60BF61BF62BF63BF64BF65BF66BF67BF68BF69BF6ABF6BBF6CBF6DBF6EBF6FBF70BF71BF72BF73BF74BF75BF76BF77BF78BF79BF7ABF7BBF7CBF7DBF7EBF80F7E3BF81BF82BF83BF84BF85B7B1BF86BF87BF88BF89BF8AF4EDBF8BBF8CBF8DBF8EBF8FBF90BF91BF92BF93BF94BF95BF96BF97BF98BF99BF9ABF9BBF9CBF9DBF9EBF9FBFA0C040C041C042C043C044C045C046C047C048C049C04AC04BC04CC04DC04EC04FC050C051C052C053C054C055C056C057C058C059C05AC05BC05CC05DC05EC05FC060C061C062C063D7EBC064C065C066C067C068C069C06AC06BC06CC06DC06EC06FC070C071C072C073C074C075C076C077C078C079C07AC07BF4EEC07CC07DC07EE6F9BEC0E6FABAECE6FBCFCBE6FCD4BCBCB6E6FDE6FEBCCDC8D2CEB3E7A1C080B4BFE7A2C9B4B8D9C4C9C081D7DDC2DAB7D7D6BDCEC6B7C4C082C083C5A6E7A3CFDFE7A4E7A5E7A6C1B7D7E9C9F0CFB8D6AFD6D5E7A7B0EDE7A8E7A9C9DCD2EFBEADE7AAB0F3C8DEBDE1E7ABC8C6C084E7ACBBE6B8F8D1A4E7ADC2E7BEF8BDCACDB3E7AEE7AFBEEED0E5C085CBE7CCD0BCCCE7B0BCA8D0F7E7B1C086D0F8E7B2E7B3B4C2E7B4E7B5C9FECEACC3E0E7B7B1C1B3F1C087E7B8E7B9D7DBD5C0E7BAC2CCD7BAE7BBE7BCE7BDBCEAC3E5C0C2E7BEE7BFBCA9C088E7C0E7C1E7B6B6D0E7C2C089E7C3E7C4BBBAB5DEC2C6B1E0E7C5D4B5E7C6B8BFE7C8E7C7B7ECC08AE7C9B2F8E7CAE7CBE7CCE7CDE7CEE7CFE7D0D3A7CBF5E7D1E7D2E7D3E7D4C9C9E7D5E7D6E7D7E7D8E7D9BDC9E7DAF3BEC08BB8D7C08CC8B1C08DC08EC08FC090C091C092C093F3BFC094F3C0F3C1C095C096C097C098C099C09AC09BC09CC09DC09EB9DECDF8C09FC0A0D8E8BAB1C140C2DEEEB7C141B7A3C142C143C144C145EEB9C146EEB8B0D5C147C148C149C14AC14BEEBBD5D6D7EFC14CC14DC14ED6C3C14FC150EEBDCAF0C151EEBCC152C153C154C155EEBEC156C157C158C159EEC0C15AC15BEEBFC15CC15DC15EC15FC160C161C162C163D1F2C164C7BCC165C3C0C166C167C168C169C16AB8E1C16BC16CC16DC16EC16FC1E7C170C171F4C6D0DFF4C7C172CFDBC173C174C8BAC175C176F4C8C177C178C179C17AC17BC17CC17DF4C9F4CAC17EF4CBC180C181C182C183C184D9FAB8FEC185C186E5F1D3F0C187F4E0C188CECCC189C18AC18BB3E1C18CC18DC18EC18FF1B4C190D2EEC191F4E1C192C193C194C195C196CFE8F4E2C197C198C7CCC199C19AC19BC19CC19DC19EB5D4B4E4F4E4C19FC1A0C240F4E3F4E5C241C242F4E6C243C244C245C246F4E7C247BAB2B0BFC248F4E8C249C24AC24BC24CC24DC24EC24FB7ADD2EDC250C251C252D2ABC0CFC253BFBCEBA3D5DFEAC8C254C255C256C257F1F3B6F8CBA3C258C259C4CDC25AF1E7C25BF1E8B8FBF1E9BAC4D4C5B0D2C25CC25DF1EAC25EC25FC260F1EBC261F1ECC262C263F1EDF1EEF1EFF1F1F1F0C5D5C264C265C266C267C268C269F1F2C26AB6FAC26BF1F4D2AEDEC7CBCAC26CC26DB3DCC26EB5A2C26FB9A2C270C271C4F4F1F5C272C273F1F6C274C275C276C1C4C1FBD6B0F1F7C277C278C279C27AF1F8C27BC1AAC27CC27DC27EC6B8C280BEDBC281C282C283C284C285C286C287C288C289C28AC28BC28CC28DC28EF1F9B4CFC28FC290C291C292C293C294F1FAC295C296C297C298C299C29AC29BC29CC29DC29EC29FC2A0C340EDB2EDB1C341C342CBE0D2DEC343CBC1D5D8C344C8E2C345C0DFBCA1C346C347C348C349C34AC34BEBC1C34CC34DD0A4C34ED6E2C34FB6C7B8D8EBC0B8CEC350EBBFB3A6B9C9D6ABC351B7F4B7CAC352C353C354BCE7B7BEEBC6C355EBC7B0B9BFCFC356EBC5D3FDC357EBC8C358C359EBC9C35AC35BB7CEC35CEBC2EBC4C9F6D6D7D5CDD0B2EBCFCEB8EBD0C35DB5A8C35EC35FC360C361C362B1B3EBD2CCA5C363C364C365C366C367C368C369C5D6EBD3C36AEBD1C5DFEBCECAA4EBD5B0FBC36BC36CBAFAC36DC36ED8B7F1E3C36FEBCAEBCBEBCCEBCDEBD6E6C0EBD9C370BFE8D2C8EBD7EBDCB8ECEBD8C371BDBAC372D0D8C373B0B7C374EBDDC4DCC375C376C377C378D6ACC379C37AC37BB4E0C37CC37DC2F6BCB9C37EC380EBDAEBDBD4E0C6EAC4D4EBDFC5A7D9F5C381B2B1C382EBE4C383BDC5C384C385C386EBE2C387C388C389C38AC38BC38CC38DC38EC38FC390C391C392C393EBE3C394C395B8ACC396CDD1EBE5C397C398C399EBE1C39AC1B3C39BC39CC39DC39EC39FC6A2C3A0C440C441C442C443C444C445CCF3C446EBE6C447C0B0D2B8EBE7C448C449C44AB8AFB8ADC44BEBE8C7BBCDF3C44CC44DC44EEBEAEBEBC44FC450C451C452C453EBEDC454C455C456C457D0C8C458EBF2C459EBEEC45AC45BC45CEBF1C8F9C45DD1FCEBECC45EC45FEBE9C460C461C462C463B8B9CFD9C4E5EBEFEBF0CCDACDC8B0F2C464EBF6C465C466C467C468C469EBF5C46AB2B2C46BC46CC46DC46EB8E0C46FEBF7C470C471C472C473C474C475B1ECC476C477CCC5C4A4CFA5C478C479C47AC47BC47CEBF9C47DC47EECA2C480C5F2C481EBFAC482C483C484C485C486C487C488C489C9C5C48AC48BC48CC48DC48EC48FE2DFEBFEC490C491C492C493CDCEECA1B1DBD3B7C494C495D2DCC496C497C498EBFDC499EBFBC49AC49BC49CC49DC49EC49FC4A0C540C541C542C543C544C545C546C547C548C549C54AC54BC54CC54DC54EB3BCC54FC550C551EAB0C552C553D7D4C554F4ABB3F4C555C556C557C558C559D6C1D6C2C55AC55BC55CC55DC55EC55FD5E9BECAC560F4A7C561D2A8F4A8F4A9C562F4AABECBD3DFC563C564C565C566C567C9E0C9E1C568C569F3C2C56ACAE6C56BCCF2C56CC56DC56EC56FC570C571E2B6CBB4C572CEE8D6DBC573F4ADF4AEF4AFC574C575C576C577F4B2C578BABDF4B3B0E3F4B0C579F4B1BDA2B2D5C57AF4B6F4B7B6E6B2B0CFCFF4B4B4ACC57BF4B5C57CC57DF4B8C57EC580C581C582C583F4B9C584C585CDA7C586F4BAC587F4BBC588C589C58AF4BCC58BC58CC58DC58EC58FC590C591C592CBD2C593F4BDC594C595C596C597F4BEC598C599C59AC59BC59CC59DC59EC59FF4BFC5A0C640C641C642C643F4DEC1BCBCE8C644C9ABD1DEE5F5C645C646C647C648DCB3D2D5C649C64ADCB4B0ACDCB5C64BC64CBDDAC64DDCB9C64EC64FC650D8C2C651DCB7D3F3C652C9D6DCBADCB6C653DCBBC3A2C654C655C656C657DCBCDCC5DCBDC658C659CEDFD6A5C65ADCCFC65BDCCDC65CC65DDCD2BDE6C2ABC65EDCB8DCCBDCCEDCBEB7D2B0C5DCC7D0BEDCC1BBA8C65FB7BCDCCCC660C661DCC6DCBFC7DBC662C663C664D1BFDCC0C665C666DCCAC667C668DCD0C669C66ACEADDCC2C66BDCC3DCC8DCC9B2D4DCD1CBD5C66CD4B7DCDBDCDFCCA6DCE6C66DC3E7DCDCC66EC66FBFC1DCD9C670B0FAB9B6DCE5DCD3C671DCC4DCD6C8F4BFE0C672C673C674C675C9BBC676C677C678B1BDC679D3A2C67AC67BDCDAC67CC67DDCD5C67EC6BBC680DCDEC681C682C683C684C685D7C2C3AFB7B6C7D1C3A9DCE2DCD8DCEBDCD4C686C687DCDDC688BEA5DCD7C689DCE0C68AC68BDCE3DCE4C68CDCF8C68DC68EDCE1DDA2DCE7C68FC690C691C692C693C694C695C696C697C698BCEBB4C4C699C69AC3A3B2E7DCFAC69BDCF2C69CDCEFC69DDCFCDCEED2F0B2E8C69EC8D7C8E3DCFBC69FDCEDC6A0C740C741DCF7C742C743DCF5C744C745BEA3DCF4C746B2DDC747C748C749C74AC74BDCF3BCF6DCE8BBC4C74CC0F3C74DC74EC74FC750C751BCD4DCE9DCEAC752DCF1DCF6DCF9B5B4C753C8D9BBE7DCFEDCFDD3ABDDA1DDA3DDA5D2F1DDA4DDA6DDA7D2A9C754C755C756C757C758C759C75ABAC9DDA9C75BC75CDDB6DDB1DDB4C75DC75EC75FC760C761C762C763DDB0C6CEC764C765C0F2C766C767C768C769C9AFC76AC76BC76CDCECDDAEC76DC76EC76FC770DDB7C771C772DCF0DDAFC773DDB8C774DDACC775C776C777C778C779C77AC77BDDB9DDB3DDADC4AAC77CC77DC77EC780DDA8C0B3C1ABDDAADDABC781DDB2BBF1DDB5D3A8DDBAC782DDBBC3A7C783C784DDD2DDBCC785C786C787DDD1C788B9BDC789C78ABED5C78BBEFAC78CC78DBACAC78EC78FC790C791DDCAC792DDC5C793DDBFC794C795C796B2CBDDC3C797DDCBB2A4DDD5C798C799C79ADDBEC79BC79CC79DC6D0DDD0C79EC79FC7A0C840C841DDD4C1E2B7C6C842C843C844C845C846DDCEDDCFC847C848C849DDC4C84AC84BC84CDDBDC84DDDCDCCD1C84EDDC9C84FC850C851C852DDC2C3C8C6BCCEAEDDCCC853DDC8C854C855C856C857C858C859DDC1C85AC85BC85CDDC6C2DCC85DC85EC85FC860C861C862D3A9D3AADDD3CFF4C8F8C863C864C865C866C867C868C869C86ADDE6C86BC86CC86DC86EC86FC870DDC7C871C872C873DDE0C2E4C874C875C876C877C878C879C87AC87BDDE1C87CC87DC87EC880C881C882C883C884C885C886DDD7C887C888C889C88AC88BD6F8C88CDDD9DDD8B8F0DDD6C88DC88EC88FC890C6CFC891B6ADC892C893C894C895C896DDE2C897BAF9D4E1DDE7C898C899C89AB4D0C89BDDDAC89CBFFBDDE3C89DDDDFC89EDDDDC89FC8A0C940C941C942C943C944B5D9C945C946C947C948DDDBDDDCDDDEC949BDAFDDE4C94ADDE5C94BC94CC94DC94EC94FC950C951C952DDF5C953C3C9C954C955CBE2C956C957C958C959DDF2C95AC95BC95CC95DC95EC95FC960C961C962C963C964C965C966D8E1C967C968C6D1C969DDF4C96AC96BC96CD5F4DDF3DDF0C96DC96EDDECC96FDDEFC970DDE8C971C972D0EEC973C974C975C976C8D8DDEEC977C978DDE9C979C97ADDEACBF2C97BDDEDC97CC97DB1CDC97EC980C981C982C983C984C0B6C985BCBBDDF1C986C987DDF7C988DDF6DDEBC989C98AC98BC98CC98DC5EEC98EC98FC990DDFBC991C992C993C994C995C996C997C998C999C99AC99BDEA4C99CC99DDEA3C99EC99FC9A0CA40CA41CA42CA43CA44CA45CA46CA47CA48DDF8CA49CA4ACA4BCA4CC3EFCA4DC2FBCA4ECA4FCA50D5E1CA51CA52CEB5CA53CA54CA55CA56DDFDCA57B2CCCA58CA59CA5ACA5BCA5CCA5DCA5ECA5FCA60C4E8CADFCA61CA62CA63CA64CA65CA66CA67CA68CA69CA6AC7BEDDFADDFCDDFEDEA2B0AAB1CECA6BCA6CCA6DCA6ECA6FDEACCA70CA71CA72CA73DEA6BDB6C8EFCA74CA75CA76CA77CA78CA79CA7ACA7BCA7CCA7DCA7EDEA1CA80CA81DEA5CA82CA83CA84CA85DEA9CA86CA87CA88CA89CA8ADEA8CA8BCA8CCA8DDEA7CA8ECA8FCA90CA91CA92CA93CA94CA95CA96DEADCA97D4CCCA98CA99CA9ACA9BDEB3DEAADEAECA9CCA9DC0D9CA9ECA9FCAA0CB40CB41B1A1DEB6CB42DEB1CB43CB44CB45CB46CB47CB48CB49DEB2CB4ACB4BCB4CCB4DCB4ECB4FCB50CB51CB52CB53CB54D1A6DEB5CB55CB56CB57CB58CB59CB5ACB5BDEAFCB5CCB5DCB5EDEB0CB5FD0BDCB60CB61CB62DEB4CAEDDEB9CB63CB64CB65CB66CB67CB68DEB8CB69DEB7CB6ACB6BCB6CCB6DCB6ECB6FCB70DEBBCB71CB72CB73CB74CB75CB76CB77BDE5CB78CB79CB7ACB7BCB7CB2D8C3EACB7DCB7EDEBACB80C5BACB81CB82CB83CB84CB85CB86DEBCCB87CB88CB89CB8ACB8BCB8CCB8DCCD9CB8ECB8FCB90CB91B7AACB92CB93CB94CB95CB96CB97CB98CB99CB9ACB9BCB9CCB9DCB9ECB9FCBA0CC40CC41D4E5CC42CC43CC44DEBDCC45CC46CC47CC48CC49DEBFCC4ACC4BCC4CCC4DCC4ECC4FCC50CC51CC52CC53CC54C4A2CC55CC56CC57CC58DEC1CC59CC5ACC5BCC5CCC5DCC5ECC5FCC60CC61CC62CC63CC64CC65CC66CC67CC68DEBECC69DEC0CC6ACC6BCC6CCC6DCC6ECC6FCC70CC71CC72CC73CC74CC75CC76CC77D5BACC78CC79CC7ADEC2CC7BCC7CCC7DCC7ECC80CC81CC82CC83CC84CC85CC86CC87CC88CC89CC8ACC8BF2AEBBA2C2B2C5B0C2C7CC8CCC8DF2AFCC8ECC8FCC90CC91CC92D0E9CC93CC94CC95D3DDCC96CC97CC98EBBDCC99CC9ACC9BCC9CCC9DCC9ECC9FCCA0B3E6F2B0CD40F2B1CD41CD42CAADCD43CD44CD45CD46CD47CD48CD49BAE7F2B3F2B5F2B4CBE4CFBAF2B2CAB4D2CFC2ECCD4ACD4BCD4CCD4DCD4ECD4FCD50CEC3F2B8B0F6F2B7CD51CD52CD53CD54CD55F2BECD56B2CFCD57CD58CD59CD5ACD5BCD5CD1C1F2BACD5DCD5ECD5FCD60CD61F2BCD4E9CD62CD63F2BBF2B6F2BFF2BDCD64F2B9CD65CD66F2C7F2C4F2C6CD67CD68F2CAF2C2F2C0CD69CD6ACD6BF2C5CD6CCD6DCD6ECD6FCD70D6FBCD71CD72CD73F2C1CD74C7F9C9DFCD75F2C8B9C6B5B0CD76CD77F2C3F2C9F2D0F2D6CD78CD79BBD7CD7ACD7BCD7CF2D5CDDCCD7DD6EBCD7ECD80F2D2F2D4CD81CD82CD83CD84B8F2CD85CD86CD87CD88F2CBCD89CD8ACD8BF2CEC2F9CD8CD5DDF2CCF2CDF2CFF2D3CD8DCD8ECD8FF2D9D3BCCD90CD91CD92CD93B6EACD94CAF1CD95B7E4F2D7CD96CD97CD98F2D8F2DAF2DDF2DBCD99CD9AF2DCCD9BCD9CCD9DCD9ED1D1F2D1CD9FCDC9CDA0CECFD6A9CE40F2E3CE41C3DBCE42F2E0CE43CE44C0AFF2ECF2DECE45F2E1CE46CE47CE48F2E8CE49CE4ACE4BCE4CF2E2CE4DCE4EF2E7CE4FCE50F2E6CE51CE52F2E9CE53CE54CE55F2DFCE56CE57F2E4F2EACE58CE59CE5ACE5BCE5CCE5DCE5ED3ACF2E5B2F5CE5FCE60F2F2CE61D0ABCE62CE63CE64CE65F2F5CE66CE67CE68BBC8CE69F2F9CE6ACE6BCE6CCE6DCE6ECE6FF2F0CE70CE71F2F6F2F8F2FACE72CE73CE74CE75CE76CE77CE78CE79F2F3CE7AF2F1CE7BCE7CCE7DBAFBCE7EB5FBCE80CE81CE82CE83F2EFF2F7F2EDF2EECE84CE85CE86F2EBF3A6CE87F3A3CE88CE89F3A2CE8ACE8BF2F4CE8CC8DACE8DCE8ECE8FCE90CE91F2FBCE92CE93CE94F3A5CE95CE96CE97CE98CE99CE9ACE9BC3F8CE9CCE9DCE9ECE9FCEA0CF40CF41CF42F2FDCF43CF44F3A7F3A9F3A4CF45F2FCCF46CF47CF48F3ABCF49F3AACF4ACF4BCF4CCF4DC2DDCF4ECF4FF3AECF50CF51F3B0CF52CF53CF54CF55CF56F3A1CF57CF58CF59F3B1F3ACCF5ACF5BCF5CCF5DCF5EF3AFF2FEF3ADCF5FCF60CF61CF62CF63CF64CF65F3B2CF66CF67CF68CF69F3B4CF6ACF6BCF6CCF6DF3A8CF6ECF6FCF70CF71F3B3CF72CF73CF74F3B5CF75CF76CF77CF78CF79CF7ACF7BCF7CCF7DCF7ED0B7CF80CF81CF82CF83F3B8CF84CF85CF86CF87D9F9CF88CF89CF8ACF8BCF8CCF8DF3B9CF8ECF8FCF90CF91CF92CF93CF94CF95F3B7CF96C8E4F3B6CF97CF98CF99CF9AF3BACF9BCF9CCF9DCF9ECF9FF3BBB4C0CFA0D040D041D042D043D044D045D046D047D048D049D04AD04BD04CD04DEEC3D04ED04FD050D051D052D053F3BCD054D055F3BDD056D057D058D1AAD059D05AD05BF4ACD0C6D05CD05DD05ED05FD060D061D0D0D1DCD062D063D064D065D066D067CFCED068D069BDD6D06AD1C3D06BD06CD06DD06ED06FD070D071BAE2E1E9D2C2F1C2B2B9D072D073B1EDF1C3D074C9C0B3C4D075D9F2D076CBA5D077F1C4D078D079D07AD07BD6D4D07CD07DD07ED080D081F1C5F4C0F1C6D082D4ACF1C7D083B0C0F4C1D084D085F4C2D086D087B4FCD088C5DBD089D08AD08BD08CCCBBD08DD08ED08FD0E4D090D091D092D093D094CDE0D095D096D097D098D099F1C8D09AD9F3D09BD09CD09DD09ED09FD0A0B1BBD140CFAED141D142D143B8A4D144D145D146D147D148F1CAD149D14AD14BD14CF1CBD14DD14ED14FD150B2C3C1D1D151D152D7B0F1C9D153D154F1CCD155D156D157D158F1CED159D15AD15BD9F6D15CD2E1D4A3D15DD15EF4C3C8B9D15FD160D161D162D163F4C4D164D165F1CDF1CFBFE3F1D0D166D167F1D4D168D169D16AD16BD16CD16DD16EF1D6F1D1D16FC9D1C5E1D170D171D172C2E3B9FCD173D174F1D3D175F1D5D176D177D178B9D3D179D17AD17BD17CD17DD17ED180F1DBD181D182D183D184D185BAD6D186B0FDF1D9D187D188D189D18AD18BF1D8F1D2F1DAD18CD18DD18ED18FD190F1D7D191D192D193C8ECD194D195D196D197CDCAF1DDD198D199D19AD19BE5BDD19CD19DD19EF1DCD19FF1DED1A0D240D241D242D243D244D245D246D247D248F1DFD249D24ACFE5D24BD24CD24DD24ED24FD250D251D252D253D254D255D256D257D258D259D25AD25BD25CD25DD25ED25FD260D261D262D263F4C5BDF3D264D265D266D267D268D269F1E0D26AD26BD26CD26DD26ED26FD270D271D272D273D274D275D276D277D278D279D27AD27BD27CD27DF1E1D27ED280D281CEF7D282D2AAD283F1FBD284D285B8B2D286D287D288D289D28AD28BD28CD28DD28ED28FD290D291D292D293D294D295D296D297D298D299D29AD29BD29CD29DD29ED29FD2A0D340D341D342D343D344D345D346D347D348D349D34AD34BD34CD34DD34ED34FD350D351D352D353D354D355D356D357D358D359D35AD35BD35CD35DD35EBCFBB9DBD35FB9E6C3D9CAD3EAE8C0C0BEF5EAE9EAEAEAEBD360EAECEAEDEAEEEAEFBDC7D361D362D363F5FBD364D365D366F5FDD367F5FED368F5FCD369D36AD36BD36CBDE2D36DF6A1B4A5D36ED36FD370D371F6A2D372D373D374F6A3D375D376D377ECB2D378D379D37AD37BD37CD37DD37ED380D381D382D383D384D1D4D385D386D387D388D389D38AD9EAD38BD38CD38DD38ED38FD390D391D392D393D394D395D396D397D398D399D39AD39BD39CD39DD39ED39FD3A0D440D441D442D443D444D445D446D447D448D449D44AD44BD44CD44DD44ED44FD450D451D452D453D454D455D456D457D458D459D45AD45BD45CD45DD45ED45FF6A4D460D461D462D463D464D465D466D467D468EEBAD469D46AD46BD46CD46DD46ED46FD470D471D472D473D474D475D476D477D478D479D47AD47BD47CD47DD47ED480D481D482D483D484D485D486D487D488D489D48AD48BD48CD48DD48ED48FD490D491D492D493D494D495D496D497D498D499D5B2D49AD49BD49CD49DD49ED49FD4A0D540D541D542D543D544D545D546D547D3FECCDCD548D549D54AD54BD54CD54DD54ED54FCAC4D550D551D552D553D554D555D556D557D558D559D55AD55BD55CD55DD55ED55FD560D561D562D563D564D565D566D567D568D569D56AD56BD56CD56DD56ED56FD570D571D572D573D574D575D576D577D578D579D57AD57BD57CD57DD57ED580D581D582D583D584D585D586D587D588D589D58AD58BD58CD58DD58ED58FD590D591D592D593D594D595D596D597D598D599D59AD59BD59CD59DD59ED59FD5A0D640D641D642D643D644D645D646D647D648D649D64AD64BD64CD64DD64ED64FD650D651D652D653D654D655D656D657D658D659D65AD65BD65CD65DD65ED65FD660D661D662E5C0D663D664D665D666D667D668D669D66AD66BD66CD66DD66ED66FD670D671D672D673D674D675D676D677D678D679D67AD67BD67CD67DD67ED680D681F6A5D682D683D684D685D686D687D688D689D68AD68BD68CD68DD68ED68FD690D691D692D693D694D695D696D697D698D699D69AD69BD69CD69DD69ED69FD6A0D740D741D742D743D744D745D746D747D748D749D74AD74BD74CD74DD74ED74FD750D751D752D753D754D755D756D757D758D759D75AD75BD75CD75DD75ED75FBEAFD760D761D762D763D764C6A9D765D766D767D768D769D76AD76BD76CD76DD76ED76FD770D771D772D773D774D775D776D777D778D779D77AD77BD77CD77DD77ED780D781D782D783D784D785D786D787D788D789D78AD78BD78CD78DD78ED78FD790D791D792D793D794D795D796D797D798DAA5BCC6B6A9B8BCC8CFBCA5DAA6DAA7CCD6C8C3DAA8C6FDD799D1B5D2E9D1B6BCC7D79ABDB2BBE4DAA9DAAAD1C8DAABD0EDB6EFC2DBD79BCBCFB7EDC9E8B7C3BEF7D6A4DAACDAADC6C0D7E7CAB6D79CD5A9CBDFD5EFDAAED6DFB4CADAB0DAAFD79DD2EBDAB1DAB2DAB3CAD4DAB4CAABDAB5DAB6B3CFD6EFDAB7BBB0B5AEDAB8DAB9B9EED1AFD2E8DABAB8C3CFEAB2EFDABBDABCD79EBDEBCEDCD3EFDABDCEF3DABED3D5BBE5DABFCBB5CBD0DAC0C7EBD6EEDAC1C5B5B6C1DAC2B7CCBFCEDAC3DAC4CBADDAC5B5F7DAC6C1C2D7BBDAC7CCB8D79FD2EAC4B1DAC8B5FDBBD1DAC9D0B3DACADACBCEBDDACCDACDDACEB2F7DAD1DACFD1E8DAD0C3D5DAD2D7A0DAD3DAD4DAD5D0BBD2A5B0F9DAD6C7ABDAD7BDF7C3A1DAD8DAD9C3FDCCB7DADADADBC0BEC6D7DADCDADDC7B4DADEDADFB9C8D840D841D842D843D844D845D846D847D848BBEDD849D84AD84BD84CB6B9F4F8D84DF4F9D84ED84FCDE3D850D851D852D853D854D855D856D857F5B9D858D859D85AD85BEBE0D85CD85DD85ED85FD860D861CFF3BBBFD862D863D864D865D866D867D868BAC0D4A5D869D86AD86BD86CD86DD86ED86FE1D9D870D871D872D873F5F4B1AAB2F2D874D875D876D877D878D879D87AF5F5D87BD87CF5F7D87DD87ED880BAD1F5F6D881C3B2D882D883D884D885D886D887D888F5F9D889D88AD88BF5F8D88CD88DD88ED88FD890D891D892D893D894D895D896D897D898D899D89AD89BD89CD89DD89ED89FD8A0D940D941D942D943D944D945D946D947D948D949D94AD94BD94CD94DD94ED94FD950D951D952D953D954D955D956D957D958D959D95AD95BD95CD95DD95ED95FD960D961D962D963D964D965D966D967D968D969D96AD96BD96CD96DD96ED96FD970D971D972D973D974D975D976D977D978D979D97AD97BD97CD97DD97ED980D981D982D983D984D985D986D987D988D989D98AD98BD98CD98DD98ED98FD990D991D992D993D994D995D996D997D998D999D99AD99BD99CD99DD99ED99FD9A0DA40DA41DA42DA43DA44DA45DA46DA47DA48DA49DA4ADA4BDA4CDA4DDA4EB1B4D5EAB8BADA4FB9B1B2C6D4F0CFCDB0DCD5CBBBF5D6CAB7B7CCB0C6B6B1E1B9BAD6FCB9E1B7A1BCFAEADAEADBCCF9B9F3EADCB4FBC3B3B7D1BAD8EADDD4F4EADEBCD6BBDFEADFC1DEC2B8D4DFD7CAEAE0EAE1EAE4EAE2EAE3C9DEB8B3B6C4EAE5CAEAC9CDB4CDDA50DA51E2D9C5E2EAE6C0B5DA52D7B8EAE7D7ACC8FCD8D3D8CDD4DEDA53D4F9C9C4D3AEB8D3B3E0DA54C9E2F4F6DA55DA56DA57BAD5DA58F4F7DA59DA5AD7DFDA5BDA5CF4F1B8B0D5D4B8CFC6F0DA5DDA5EDA5FDA60DA61DA62DA63DA64DA65B3C3DA66DA67F4F2B3ACDA68DA69DA6ADA6BD4BDC7F7DA6CDA6DDA6EDA6FDA70F4F4DA71DA72F4F3DA73DA74DA75DA76DA77DA78DA79DA7ADA7BDA7CCCCBDA7DDA7EDA80C8A4DA81DA82DA83DA84DA85DA86DA87DA88DA89DA8ADA8BDA8CDA8DF4F5DA8ED7E3C5BFF5C0DA8FDA90F5BBDA91F5C3DA92F5C2DA93D6BAF5C1DA94DA95DA96D4BEF5C4DA97F5CCDA98DA99DA9ADA9BB0CFB5F8DA9CF5C9F5CADA9DC5DCDA9EDA9FDAA0DB40F5C5F5C6DB41DB42F5C7F5CBDB43BEE0F5C8B8FADB44DB45DB46F5D0F5D3DB47DB48DB49BFE7DB4AB9F2F5BCF5CDDB4BDB4CC2B7DB4DDB4EDB4FCCF8DB50BCF9DB51F5CEF5CFF5D1B6E5F5D2DB52F5D5DB53DB54DB55DB56DB57DB58DB59F5BDDB5ADB5BDB5CF5D4D3BBDB5DB3ECDB5EDB5FCCA4DB60DB61DB62DB63F5D6DB64DB65DB66DB67DB68DB69DB6ADB6BF5D7BEE1F5D8DB6CDB6DCCDFF5DBDB6EDB6FDB70DB71DB72B2C8D7D9DB73F5D9DB74F5DAF5DCDB75F5E2DB76DB77DB78F5E0DB79DB7ADB7BF5DFF5DDDB7CDB7DF5E1DB7EDB80F5DEF5E4F5E5DB81CCE3DB82DB83E5BFB5B8F5E3F5E8CCA3DB84DB85DB86DB87DB88F5E6F5E7DB89DB8ADB8BDB8CDB8DDB8EF5BEDB8FDB90DB91DB92DB93DB94DB95DB96DB97DB98DB99DB9AB1C4DB9BDB9CF5BFDB9DDB9EB5C5B2E4DB9FF5ECF5E9DBA0B6D7DC40F5EDDC41F5EADC42DC43DC44DC45DC46F5EBDC47DC48B4DADC49D4EADC4ADC4BDC4CF5EEDC4DB3F9DC4EDC4FDC50DC51DC52DC53DC54F5EFF5F1DC55DC56DC57F5F0DC58DC59DC5ADC5BDC5CDC5DDC5EF5F2DC5FF5F3DC60DC61DC62DC63DC64DC65DC66DC67DC68DC69DC6ADC6BC9EDB9AADC6CDC6DC7FBDC6EDC6FB6E3DC70DC71DC72DC73DC74DC75DC76CCC9DC77DC78DC79DC7ADC7BDC7CDC7DDC7EDC80DC81DC82DC83DC84DC85DC86DC87DC88DC89DC8AEAA6DC8BDC8CDC8DDC8EDC8FDC90DC91DC92DC93DC94DC95DC96DC97DC98DC99DC9ADC9BDC9CDC9DDC9EDC9FDCA0DD40DD41DD42DD43DD44DD45DD46DD47DD48DD49DD4ADD4BDD4CDD4DDD4EDD4FDD50DD51DD52DD53DD54DD55DD56DD57DD58DD59DD5ADD5BDD5CDD5DDD5EDD5FDD60DD61DD62DD63DD64DD65DD66DD67DD68DD69DD6ADD6BDD6CDD6DDD6EDD6FDD70DD71DD72DD73DD74DD75DD76DD77DD78DD79DD7ADD7BDD7CDD7DDD7EDD80DD81DD82DD83DD84DD85DD86DD87DD88DD89DD8ADD8BDD8CDD8DDD8EDD8FDD90DD91DD92DD93DD94DD95DD96DD97DD98DD99DD9ADD9BDD9CDD9DDD9EDD9FDDA0DE40DE41DE42DE43DE44DE45DE46DE47DE48DE49DE4ADE4BDE4CDE4DDE4EDE4FDE50DE51DE52DE53DE54DE55DE56DE57DE58DE59DE5ADE5BDE5CDE5DDE5EDE5FDE60B3B5D4FEB9ECD0F9DE61E9EDD7AAE9EEC2D6C8EDBAE4E9EFE9F0E9F1D6E1E9F2E9F3E9F5E9F4E9F6E9F7C7E1E9F8D4D8E9F9BDCEDE62E9FAE9FBBDCFE9FCB8A8C1BEE9FDB1B2BBD4B9F5E9FEDE63EAA1EAA2EAA3B7F8BCADDE64CAE4E0CED4AFCFBDD5B7EAA4D5DEEAA5D0C1B9BCDE65B4C7B1D9DE66DE67DE68C0B1DE69DE6ADE6BDE6CB1E6B1E7DE6DB1E8DE6EDE6FDE70DE71B3BDC8E8DE72DE73DE74DE75E5C1DE76DE77B1DFDE78DE79DE7AC1C9B4EFDE7BDE7CC7A8D3D8DE7DC6F9D1B8DE7EB9FDC2F5DE80DE81DE82DE83DE84D3ADDE85D4CBBDFCDE86E5C2B7B5E5C3DE87DE88BBB9D5E2DE89BDF8D4B6CEA5C1ACB3D9DE8ADE8BCCF6DE8CE5C6E5C4E5C8DE8DE5CAE5C7B5CFC6C8DE8EB5FCE5C5DE8FCAF6DE90DE91E5C9DE92DE93DE94C3D4B1C5BCA3DE95DE96DE97D7B7DE98DE99CDCBCBCDCACACCD3E5CCE5CBC4E6DE9ADE9BD1A1D1B7E5CDDE9CE5D0DE9DCDB8D6F0E5CFB5DDDE9ECDBEDE9FE5D1B6BADEA0DF40CDA8B9E4DF41CAC5B3D1CBD9D4ECE5D2B7EADF42DF43DF44E5CEDF45DF46DF47DF48DF49DF4AE5D5B4FEE5D6DF4BDF4CDF4DDF4EDF4FE5D3E5D4DF50D2DDDF51DF52C2DFB1C6DF53D3E2DF54DF55B6DDCBECDF56E5D7DF57DF58D3F6DF59DF5ADF5BDF5CDF5DB1E9DF5EB6F4E5DAE5D8E5D9B5C0DF5FDF60DF61D2C5E5DCDF62DF63E5DEDF64DF65DF66DF67DF68DF69E5DDC7B2DF6AD2A3DF6BDF6CE5DBDF6DDF6EDF6FDF70D4E2D5DADF71DF72DF73DF74DF75E5E0D7F1DF76DF77DF78DF79DF7ADF7BDF7CE5E1DF7DB1DCD1FBDF7EE5E2E5E4DF80DF81DF82DF83E5E3DF84DF85E5E5DF86DF87DF88DF89DF8AD2D8DF8BB5CBDF8CE7DFDF8DDAF5DF8EDAF8DF8FDAF6DF90DAF7DF91DF92DF93DAFAD0CFC4C7DF94DF95B0EEDF96DF97DF98D0B0DF99DAF9DF9AD3CABAAADBA2C7F1DF9BDAFCDAFBC9DBDAFDDF9CDBA1D7DEDAFEC1DADF9DDF9EDBA5DF9FDFA0D3F4E040E041DBA7DBA4E042DBA8E043E044BDBCE045E046E047C0C9DBA3DBA6D6A3E048DBA9E049E04AE04BDBADE04CE04DE04EDBAEDBACBAC2E04FE050E051BFA4DBABE052E053E054DBAAD4C7B2BFE055E056DBAFE057B9F9E058DBB0E059E05AE05BE05CB3BBE05DE05EE05FB5A6E060E061E062E063B6BCDBB1E064E065E066B6F5E067DBB2E068E069E06AE06BE06CE06DE06EE06FE070E071E072E073E074E075E076E077E078E079E07AE07BB1C9E07CE07DE07EE080DBB4E081E082E083DBB3DBB5E084E085E086E087E088E089E08AE08BE08CE08DE08EDBB7E08FDBB6E090E091E092E093E094E095E096DBB8E097E098E099E09AE09BE09CE09DE09EE09FDBB9E0A0E140DBBAE141E142D3CFF4FAC7F5D7C3C5E4F4FCF4FDF4FBE143BEC6E144E145E146E147D0EFE148E149B7D3E14AE14BD4CDCCAAE14CE14DF5A2F5A1BAA8F4FECBD6E14EE14FE150F5A4C0D2E151B3EAE152CDAAF5A5F5A3BDB4F5A8E153F5A9BDCDC3B8BFE1CBE1F5AAE154E155E156F5A6F5A7C4F0E157E158E159E15AE15BF5ACE15CB4BCE15DD7EDE15EB4D7F5ABF5AEE15FE160F5ADF5AFD0D1E161E162E163E164E165E166E167C3D1C8A9E168E169E16AE16BE16CE16DF5B0F5B1E16EE16FE170E171E172E173F5B2E174E175F5B3F5B4F5B5E176E177E178E179F5B7F5B6E17AE17BE17CE17DF5B8E17EE180E181E182E183E184E185E186E187E188E189E18AB2C9E18BD3D4CACDE18CC0EFD6D8D2B0C1BFE18DBDF0E18EE18FE190E191E192E193E194E195E196E197B8AAE198E199E19AE19BE19CE19DE19EE19FE1A0E240E241E242E243E244E245E246E247E248E249E24AE24BE24CE24DE24EE24FE250E251E252E253E254E255E256E257E258E259E25AE25BE25CE25DE25EE25FE260E261E262E263E264E265E266E267E268E269E26AE26BE26CE26DE26EE26FE270E271E272E273E274E275E276E277E278E279E27AE27BE27CE27DE27EE280E281E282E283E284E285E286E287E288E289E28AE28BE28CE28DE28EE28FE290E291E292E293E294E295E296E297E298E299E29AE29BE29CE29DE29EE29FE2A0E340E341E342E343E344E345E346E347E348E349E34AE34BE34CE34DE34EE34FE350E351E352E353E354E355E356E357E358E359E35AE35BE35CE35DE35EE35FE360E361E362E363E364E365E366E367E368E369E36AE36BE36CE36DBCF8E36EE36FE370E371E372E373E374E375E376E377E378E379E37AE37BE37CE37DE37EE380E381E382E383E384E385E386E387F6C6E388E389E38AE38BE38CE38DE38EE38FE390E391E392E393E394E395E396E397E398E399E39AE39BE39CE39DE39EE39FE3A0E440E441E442E443E444E445F6C7E446E447E448E449E44AE44BE44CE44DE44EE44FE450E451E452E453E454E455E456E457E458E459E45AE45BE45CE45DE45EF6C8E45FE460E461E462E463E464E465E466E467E468E469E46AE46BE46CE46DE46EE46FE470E471E472E473E474E475E476E477E478E479E47AE47BE47CE47DE47EE480E481E482E483E484E485E486E487E488E489E48AE48BE48CE48DE48EE48FE490E491E492E493E494E495E496E497E498E499E49AE49BE49CE49DE49EE49FE4A0E540E541E542E543E544E545E546E547E548E549E54AE54BE54CE54DE54EE54FE550E551E552E553E554E555E556E557E558E559E55AE55BE55CE55DE55EE55FE560E561E562E563E564E565E566E567E568E569E56AE56BE56CE56DE56EE56FE570E571E572E573F6C9E574E575E576E577E578E579E57AE57BE57CE57DE57EE580E581E582E583E584E585E586E587E588E589E58AE58BE58CE58DE58EE58FE590E591E592E593E594E595E596E597E598E599E59AE59BE59CE59DE59EE59FF6CAE5A0E640E641E642E643E644E645E646E647E648E649E64AE64BE64CE64DE64EE64FE650E651E652E653E654E655E656E657E658E659E65AE65BE65CE65DE65EE65FE660E661E662F6CCE663E664E665E666E667E668E669E66AE66BE66CE66DE66EE66FE670E671E672E673E674E675E676E677E678E679E67AE67BE67CE67DE67EE680E681E682E683E684E685E686E687E688E689E68AE68BE68CE68DE68EE68FE690E691E692E693E694E695E696E697E698E699E69AE69BE69CE69DF6CBE69EE69FE6A0E740E741E742E743E744E745E746E747F7E9E748E749E74AE74BE74CE74DE74EE74FE750E751E752E753E754E755E756E757E758E759E75AE75BE75CE75DE75EE75FE760E761E762E763E764E765E766E767E768E769E76AE76BE76CE76DE76EE76FE770E771E772E773E774E775E776E777E778E779E77AE77BE77CE77DE77EE780E781E782E783E784E785E786E787E788E789E78AE78BE78CE78DE78EE78FE790E791E792E793E794E795E796E797E798E799E79AE79BE79CE79DE79EE79FE7A0E840E841E842E843E844E845E846E847E848E849E84AE84BE84CE84DE84EF6CDE84FE850E851E852E853E854E855E856E857E858E859E85AE85BE85CE85DE85EE85FE860E861E862E863E864E865E866E867E868E869E86AE86BE86CE86DE86EE86FE870E871E872E873E874E875E876E877E878E879E87AF6CEE87BE87CE87DE87EE880E881E882E883E884E885E886E887E888E889E88AE88BE88CE88DE88EE88FE890E891E892E893E894EEC4EEC5EEC6D5EBB6A4EEC8EEC7EEC9EECAC7A5EECBEECCE895B7B0B5F6EECDEECFE896EECEE897B8C6EED0EED1EED2B6DBB3AED6D3C4C6B1B5B8D6EED3EED4D4BFC7D5BEFBCED9B9B3EED6EED5EED8EED7C5A5EED9EEDAC7AEEEDBC7AFEEDCB2A7EEDDEEDEEEDFEEE0EEE1D7EAEEE2EEE3BCD8EEE4D3CBCCFAB2ACC1E5EEE5C7A6C3ADE898EEE6EEE7EEE8EEE9EEEAEEEBEEECE899EEEDEEEEEEEFE89AE89BEEF0EEF1EEF2EEF4EEF3E89CEEF5CDADC2C1EEF6EEF7EEF8D5A1EEF9CFB3EEFAEEFBE89DEEFCEEFDEFA1EEFEEFA2B8F5C3FAEFA3EFA4BDC2D2BFB2F9EFA5EFA6EFA7D2F8EFA8D6FDEFA9C6CCE89EEFAAEFABC1B4EFACCFFACBF8EFAEEFADB3FAB9F8EFAFEFB0D0E2EFB1EFB2B7E6D0BFEFB3EFB4EFB5C8F1CCE0EFB6EFB7EFB8EFB9EFBAD5E0EFBBB4EDC3AAEFBCE89FEFBDEFBEEFBFE8A0CEFDEFC0C2E0B4B8D7B6BDF5E940CFC7EFC3EFC1EFC2EFC4B6A7BCFCBEE2C3CCEFC5EFC6E941EFC7EFCFEFC8EFC9EFCAC7C2EFF1B6CDEFCBE942EFCCEFCDB6C6C3BEEFCEE943EFD0EFD1EFD2D5F2E944EFD3C4F7E945EFD4C4F8EFD5EFD6B8E4B0F7EFD7EFD8EFD9E946EFDAEFDBEFDCEFDDE947EFDEBEB5EFE1EFDFEFE0E948EFE2EFE3C1CDEFE4EFE5EFE6EFE7EFE8EFE9EFEAEFEBEFECC0D8E949EFEDC1ADEFEEEFEFEFF0E94AE94BCFE2E94CE94DE94EE94FE950E951E952E953B3A4E954E955E956E957E958E959E95AE95BE95CE95DE95EE95FE960E961E962E963E964E965E966E967E968E969E96AE96BE96CE96DE96EE96FE970E971E972E973E974E975E976E977E978E979E97AE97BE97CE97DE97EE980E981E982E983E984E985E986E987E988E989E98AE98BE98CE98DE98EE98FE990E991E992E993E994E995E996E997E998E999E99AE99BE99CE99DE99EE99FE9A0EA40EA41EA42EA43EA44EA45EA46EA47EA48EA49EA4AEA4BEA4CEA4DEA4EEA4FEA50EA51EA52EA53EA54EA55EA56EA57EA58EA59EA5AEA5BC3C5E3C5C9C1E3C6EA5CB1D5CECAB4B3C8F2E3C7CFD0E3C8BCE4E3C9E3CAC3C6D5A2C4D6B9EBCEC5E3CBC3F6E3CCEA5DB7A7B8F3BAD2E3CDE3CED4C4E3CFEA5EE3D0D1CBE3D1E3D2E3D3E3D4D1D6E3D5B2FBC0BBE3D6EA5FC0ABE3D7E3D8E3D9EA60E3DAE3DBEA61B8B7DAE2EA62B6D3EA63DAE4DAE3EA64EA65EA66EA67EA68EA69EA6ADAE6EA6BEA6CEA6DC8EEEA6EEA6FDAE5B7C0D1F4D2F5D5F3BDD7EA70EA71EA72EA73D7E8DAE8DAE7EA74B0A2CDD3EA75DAE9EA76B8BDBCCAC2BDC2A4B3C2DAEAEA77C2AAC4B0BDB5EA78EA79CFDEEA7AEA7BEA7CDAEBC9C2EA7DEA7EEA80EA81EA82B1DDEA83EA84EA85DAECEA86B6B8D4BAEA87B3FDEA88EA89DAEDD4C9CFD5C5E3EA8ADAEEEA8BEA8CEA8DEA8EEA8FDAEFEA90DAF0C1EACCD5CFDDEA91EA92EA93EA94EA95EA96EA97EA98EA99EA9AEA9BEA9CEA9DD3E7C2A1EA9EDAF1EA9FEAA0CBE5EB40DAF2EB41CBE6D2FEEB42EB43EB44B8F4EB45EB46DAF3B0AFCFB6EB47EB48D5CFEB49EB4AEB4BEB4CEB4DEB4EEB4FEB50EB51EB52CBEDEB53EB54EB55EB56EB57EB58EB59EB5ADAF4EB5BEB5CE3C4EB5DEB5EC1A5EB5FEB60F6BFEB61EB62F6C0F6C1C4D1EB63C8B8D1E3EB64EB65D0DBD1C5BCAFB9CDEB66EFF4EB67EB68B4C6D3BAF6C2B3FBEB69EB6AF6C3EB6BEB6CB5F1EB6DEB6EEB6FEB70EB71EB72EB73EB74EB75EB76F6C5EB77EB78EB79EB7AEB7BEB7CEB7DD3EAF6A7D1A9EB7EEB80EB81EB82F6A9EB83EB84EB85F6A8EB86EB87C1E3C0D7EB88B1A2EB89EB8AEB8BEB8CCEEDEB8DD0E8F6ABEB8EEB8FCFF6EB90F6AAD5F0F6ACC3B9EB91EB92EB93BBF4F6AEF6ADEB94EB95EB96C4DEEB97EB98C1D8EB99EB9AEB9BEB9CEB9DCBAAEB9ECFBCEB9FEBA0EC40EC41EC42EC43EC44EC45EC46EC47EC48F6AFEC49EC4AF6B0EC4BEC4CF6B1EC4DC2B6EC4EEC4FEC50EC51EC52B0D4C5F9EC53EC54EC55EC56F6B2EC57EC58EC59EC5AEC5BEC5CEC5DEC5EEC5FEC60EC61EC62EC63EC64EC65EC66EC67EC68EC69C7E0F6A6EC6AEC6BBEB8EC6CEC6DBEB2EC6EB5E5EC6FEC70B7C7EC71BFBFC3D2C3E6EC72EC73D8CCEC74EC75EC76B8EFEC77EC78EC79EC7AEC7BEC7CEC7DEC7EEC80BDF9D1A5EC81B0D0EC82EC83EC84EC85EC86F7B0EC87EC88EC89EC8AEC8BEC8CEC8DEC8EF7B1EC8FEC90EC91EC92EC93D0ACEC94B0B0EC95EC96EC97F7B2F7B3EC98F7B4EC99EC9AEC9BC7CAEC9CEC9DEC9EEC9FECA0ED40ED41BECFED42ED43F7B7ED44ED45ED46ED47ED48ED49ED4AF7B6ED4BB1DEED4CF7B5ED4DED4EF7B8ED4FF7B9ED50ED51ED52ED53ED54ED55ED56ED57ED58ED59ED5AED5BED5CED5DED5EED5FED60ED61ED62ED63ED64ED65ED66ED67ED68ED69ED6AED6BED6CED6DED6EED6FED70ED71ED72ED73ED74ED75ED76ED77ED78ED79ED7AED7BED7CED7DED7EED80ED81CEA4C8CDED82BAABE8B8E8B9E8BABEC2ED83ED84ED85ED86ED87D2F4ED88D4CFC9D8ED89ED8AED8BED8CED8DED8EED8FED90ED91ED92ED93ED94ED95ED96ED97ED98ED99ED9AED9BED9CED9DED9EED9FEDA0EE40EE41EE42EE43EE44EE45EE46EE47EE48EE49EE4AEE4BEE4CEE4DEE4EEE4FEE50EE51EE52EE53EE54EE55EE56EE57EE58EE59EE5AEE5BEE5CEE5DEE5EEE5FEE60EE61EE62EE63EE64EE65EE66EE67EE68EE69EE6AEE6BEE6CEE6DEE6EEE6FEE70EE71EE72EE73EE74EE75EE76EE77EE78EE79EE7AEE7BEE7CEE7DEE7EEE80EE81EE82EE83EE84EE85EE86EE87EE88EE89EE8AEE8BEE8CEE8DEE8EEE8FEE90EE91EE92EE93EE94EE95EE96EE97EE98EE99EE9AEE9BEE9CEE9DEE9EEE9FEEA0EF40EF41EF42EF43EF44EF45D2B3B6A5C7EAF1FCCFEECBB3D0EBE7EFCDE7B9CBB6D9F1FDB0E4CBCCF1FED4A4C2ADC1ECC6C4BEB1F2A1BCD5EF46F2A2F2A3EF47F2A4D2C3C6B5EF48CDC7F2A5EF49D3B1BFC5CCE2EF4AF2A6F2A7D1D5B6EEF2A8F2A9B5DFF2AAF2ABEF4BB2FCF2ACF2ADC8A7EF4CEF4DEF4EEF4FEF50EF51EF52EF53EF54EF55EF56EF57EF58EF59EF5AEF5BEF5CEF5DEF5EEF5FEF60EF61EF62EF63EF64EF65EF66EF67EF68EF69EF6AEF6BEF6CEF6DEF6EEF6FEF70EF71B7E7EF72EF73ECA9ECAAECABEF74ECACEF75EF76C6AEECADECAEEF77EF78EF79B7C9CAB3EF7AEF7BEF7CEF7DEF7EEF80EF81E2B8F7CFEF82EF83EF84EF85EF86EF87EF88EF89EF8AEF8BEF8CEF8DEF8EEF8FEF90EF91EF92EF93EF94EF95EF96EF97EF98EF99EF9AEF9BEF9CEF9DEF9EEF9FEFA0F040F041F042F043F044F7D0F045F046B2CDF047F048F049F04AF04BF04CF04DF04EF04FF050F051F052F053F054F055F056F057F058F059F05AF05BF05CF05DF05EF05FF060F061F062F063F7D1F064F065F066F067F068F069F06AF06BF06CF06DF06EF06FF070F071F072F073F074F075F076F077F078F079F07AF07BF07CF07DF07EF080F081F082F083F084F085F086F087F088F089F7D3F7D2F08AF08BF08CF08DF08EF08FF090F091F092F093F094F095F096E2BBF097BCA2F098E2BCE2BDE2BEE2BFE2C0E2C1B7B9D2FBBDA4CACEB1A5CBC7F099E2C2B6FCC8C4E2C3F09AF09BBDC8F09CB1FDE2C4F09DB6F6E2C5C4D9F09EF09FE2C6CFDAB9DDE2C7C0A1F0A0E2C8B2F6F140E2C9F141C1F3E2CAE2CBC2F8E2CCE2CDE2CECAD7D8B8D9E5CFE3F142F143F144F145F146F147F148F149F14AF14BF14CF0A5F14DF14EDCB0F14FF150F151F152F153F154F155F156F157F158F159F15AF15BF15CF15DF15EF15FF160F161F162F163F164F165F166F167F168F169F16AF16BF16CF16DF16EF16FF170F171F172F173F174F175F176F177F178F179F17AF17BF17CF17DF17EF180F181F182F183F184F185F186F187F188F189F18AF18BF18CF18DF18EF18FF190F191F192F193F194F195F196F197F198F199F19AF19BF19CF19DF19EF19FF1A0F240F241F242F243F244F245F246F247F248F249F24AF24BF24CF24DF24EF24FF250F251F252F253F254F255F256F257F258F259F25AF25BF25CF25DF25EF25FF260F261F262F263F264F265F266F267F268F269F26AF26BF26CF26DF26EF26FF270F271F272F273F274F275F276F277F278F279F27AF27BF27CF27DF27EF280F281F282F283F284F285F286F287F288F289F28AF28BF28CF28DF28EF28FF290F291F292F293F294F295F296F297F298F299F29AF29BF29CF29DF29EF29FF2A0F340F341F342F343F344F345F346F347F348F349F34AF34BF34CF34DF34EF34FF350F351C2EDD4A6CDD4D1B1B3DBC7FDF352B2B5C2BFE6E0CABBE6E1E6E2BED4E6E3D7A4CDD5E6E5BCDDE6E4E6E6E6E7C2EEF353BDBEE6E8C2E6BAA7E6E9F354E6EAB3D2D1E9F355F356BFA5E6EBC6EFE6ECE6EDF357F358E6EEC6ADE6EFF359C9A7E6F0E6F1E6F2E5B9E6F3E6F4C2E2E6F5E6F6D6E8E6F7F35AE6F8B9C7F35BF35CF35DF35EF35FF360F361F7BBF7BAF362F363F364F365F7BEF7BCBAA1F366F7BFF367F7C0F368F369F36AF7C2F7C1F7C4F36BF36CF7C3F36DF36EF36FF370F371F7C5F7C6F372F373F374F375F7C7F376CBE8F377F378F379F37AB8DFF37BF37CF37DF37EF380F381F7D4F382F7D5F383F384F385F386F7D6F387F388F389F38AF7D8F38BF7DAF38CF7D7F38DF38EF38FF390F391F392F393F394F395F7DBF396F7D9F397F398F399F39AF39BF39CF39DD7D7F39EF39FF3A0F440F7DCF441F442F443F444F445F446F7DDF447F448F449F7DEF44AF44BF44CF44DF44EF44FF450F451F452F453F454F7DFF455F456F457F7E0F458F459F45AF45BF45CF45DF45EF45FF460F461F462DBCBF463F464D8AAF465F466F467F468F469F46AF46BF46CE5F7B9EDF46DF46EF46FF470BFFDBBEAF7C9C6C7F7C8F471F7CAF7CCF7CBF472F473F474F7CDF475CEBAF476F7CEF477F478C4A7F479F47AF47BF47CF47DF47EF480F481F482F483F484F485F486F487F488F489F48AF48BF48CF48DF48EF48FF490F491F492F493F494F495F496F497F498F499F49AF49BF49CF49DF49EF49FF4A0F540F541F542F543F544F545F546F547F548F549F54AF54BF54CF54DF54EF54FF550F551F552F553F554F555F556F557F558F559F55AF55BF55CF55DF55EF55FF560F561F562F563F564F565F566F567F568F569F56AF56BF56CF56DF56EF56FF570F571F572F573F574F575F576F577F578F579F57AF57BF57CF57DF57EF580F581F582F583F584F585F586F587F588F589F58AF58BF58CF58DF58EF58FF590F591F592F593F594F595F596F597F598F599F59AF59BF59CF59DF59EF59FF5A0F640F641F642F643F644F645F646F647F648F649F64AF64BF64CF64DF64EF64FF650F651F652F653F654F655F656F657F658F659F65AF65BF65CF65DF65EF65FF660F661F662F663F664F665F666F667F668F669F66AF66BF66CF66DF66EF66FF670F671F672F673F674F675F676F677F678F679F67AF67BF67CF67DF67EF680F681F682F683F684F685F686F687F688F689F68AF68BF68CF68DF68EF68FF690F691F692F693F694F695F696F697F698F699F69AF69BF69CF69DF69EF69FF6A0F740F741F742F743F744F745F746F747F748F749F74AF74BF74CF74DF74EF74FF750F751F752F753F754F755F756F757F758F759F75AF75BF75CF75DF75EF75FF760F761F762F763F764F765F766F767F768F769F76AF76BF76CF76DF76EF76FF770F771F772F773F774F775F776F777F778F779F77AF77BF77CF77DF77EF780D3E3F781F782F6CFF783C2B3F6D0F784F785F6D1F6D2F6D3F6D4F786F787F6D6F788B1ABF6D7F789F6D8F6D9F6DAF78AF6DBF6DCF78BF78CF78DF78EF6DDF6DECFCAF78FF6DFF6E0F6E1F6E2F6E3F6E4C0F0F6E5F6E6F6E7F6E8F6E9F790F6EAF791F6EBF6ECF792F6EDF6EEF6EFF6F0F6F1F6F2F6F3F6F4BEA8F793F6F5F6F6F6F7F6F8F794F795F796F797F798C8FAF6F9F6FAF6FBF6FCF799F79AF6FDF6FEF7A1F7A2F7A3F7A4F7A5F79BF79CF7A6F7A7F7A8B1EEF7A9F7AAF7ABF79DF79EF7ACF7ADC1DBF7AEF79FF7A0F7AFF840F841F842F843F844F845F846F847F848F849F84AF84BF84CF84DF84EF84FF850F851F852F853F854F855F856F857F858F859F85AF85BF85CF85DF85EF85FF860F861F862F863F864F865F866F867F868F869F86AF86BF86CF86DF86EF86FF870F871F872F873F874F875F876F877F878F879F87AF87BF87CF87DF87EF880F881F882F883F884F885F886F887F888F889F88AF88BF88CF88DF88EF88FF890F891F892F893F894F895F896F897F898F899F89AF89BF89CF89DF89EF89FF8A0F940F941F942F943F944F945F946F947F948F949F94AF94BF94CF94DF94EF94FF950F951F952F953F954F955F956F957F958F959F95AF95BF95CF95DF95EF95FF960F961F962F963F964F965F966F967F968F969F96AF96BF96CF96DF96EF96FF970F971F972F973F974F975F976F977F978F979F97AF97BF97CF97DF97EF980F981F982F983F984F985F986F987F988F989F98AF98BF98CF98DF98EF98FF990F991F992F993F994F995F996F997F998F999F99AF99BF99CF99DF99EF99FF9A0FA40FA41FA42FA43FA44FA45FA46FA47FA48FA49FA4AFA4BFA4CFA4DFA4EFA4FFA50FA51FA52FA53FA54FA55FA56FA57FA58FA59FA5AFA5BFA5CFA5DFA5EFA5FFA60FA61FA62FA63FA64FA65FA66FA67FA68FA69FA6AFA6BFA6CFA6DFA6EFA6FFA70FA71FA72FA73FA74FA75FA76FA77FA78FA79FA7AFA7BFA7CFA7DFA7EFA80FA81FA82FA83FA84FA85FA86FA87FA88FA89FA8AFA8BFA8CFA8DFA8EFA8FFA90FA91FA92FA93FA94FA95FA96FA97FA98FA99FA9AFA9BFA9CFA9DFA9EFA9FFAA0FB40FB41FB42FB43FB44FB45FB46FB47FB48FB49FB4AFB4BFB4CFB4DFB4EFB4FFB50FB51FB52FB53FB54FB55FB56FB57FB58FB59FB5AFB5BC4F1F0AFBCA6F0B0C3F9FB5CC5B8D1BBFB5DF0B1F0B2F0B3F0B4F0B5D1BCFB5ED1ECFB5FF0B7F0B6D4A7FB60CDD2F0B8F0BAF0B9F0BBF0BCFB61FB62B8EBF0BDBAE8FB63F0BEF0BFBEE9F0C0B6ECF0C1F0C2F0C3F0C4C8B5F0C5F0C6FB64F0C7C5F4FB65F0C8FB66FB67FB68F0C9FB69F0CAF7BDFB6AF0CBF0CCF0CDFB6BF0CEFB6CFB6DFB6EFB6FF0CFBAD7FB70F0D0F0D1F0D2F0D3F0D4F0D5F0D6F0D8FB71FB72D3A5F0D7FB73F0D9FB74FB75FB76FB77FB78FB79FB7AFB7BFB7CFB7DF5BAC2B9FB7EFB80F7E4FB81FB82FB83FB84F7E5F7E6FB85FB86F7E7FB87FB88FB89FB8AFB8BFB8CF7E8C2B4FB8DFB8EFB8FFB90FB91FB92FB93FB94FB95F7EAFB96F7EBFB97FB98FB99FB9AFB9BFB9CC2F3FB9DFB9EFB9FFBA0FC40FC41FC42FC43FC44FC45FC46FC47FC48F4F0FC49FC4AFC4BF4EFFC4CFC4DC2E9FC4EF7E1F7E2FC4FFC50FC51FC52FC53BBC6FC54FC55FC56FC57D9E4FC58FC59FC5ACAF2C0E8F0A4FC5BBADAFC5CFC5DC7ADFC5EFC5FFC60C4ACFC61FC62F7ECF7EDF7EEFC63F7F0F7EFFC64F7F1FC65FC66F7F4FC67F7F3FC68F7F2F7F5FC69FC6AFC6BFC6CF7F6FC6DFC6EFC6FFC70FC71FC72FC73FC74FC75EDE9FC76EDEAEDEBFC77F6BCFC78FC79FC7AFC7BFC7CFC7DFC7EFC80FC81FC82FC83FC84F6BDFC85F6BEB6A6FC86D8BEFC87FC88B9C4FC89FC8AFC8BD8BBFC8CDCB1FC8DFC8EFC8FFC90FC91FC92CAF3FC93F7F7FC94FC95FC96FC97FC98FC99FC9AFC9BFC9CF7F8FC9DFC9EF7F9FC9FFCA0FD40FD41FD42FD43FD44F7FBFD45F7FAFD46B1C7FD47F7FCF7FDFD48FD49FD4AFD4BFD4CF7FEFD4DFD4EFD4FFD50FD51FD52FD53FD54FD55FD56FD57C6EBECB4FD58FD59FD5AFD5BFD5CFD5DFD5EFD5FFD60FD61FD62FD63FD64FD65FD66FD67FD68FD69FD6AFD6BFD6CFD6DFD6EFD6FFD70FD71FD72FD73FD74FD75FD76FD77FD78FD79FD7AFD7BFD7CFD7DFD7EFD80FD81FD82FD83FD84FD85B3DDF6B3FD86FD87F6B4C1E4F6B5F6B6F6B7F6B8F6B9F6BAC8A3F6BBFD88FD89FD8AFD8BFD8CFD8DFD8EFD8FFD90FD91FD92FD93C1FAB9A8EDE8FD94FD95FD96B9EAD9DFFD97FD98FD99FD9AFD9';\n\n            for (var i = 0; i < str.length; i++) {\n                var c = str.charAt(i),\n                    code = str.charCodeAt(i);\n                if (c == \" \") strOut += \"+\";\n                else if (code >= 19968 && code <= 40869) {\n                    var index = code - 19968;\n                    strOut += \"%\" + z.substr(index * 4, 2) + \"%\" + z.substr(index * 4 + 2, 2);\n                } else {\n                    strOut += \"%\" + str.charCodeAt(i).toString(16);\n                }\n            }\n            return strOut;\n        },\n        /* 改变图片大小 */\n        scale: function (img, w, h) {\n            var ow = img.width,\n                oh = img.height;\n\n            if (ow >= oh) {\n                img.width = w * ow / oh;\n                img.height = h;\n                img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n            } else {\n                img.width = w;\n                img.height = h * oh / ow;\n                img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n            }\n        },\n        getImageData: function(){\n            var _this = this,\n                key = $G('searchTxt').value,\n                type = $G('searchType').value,\n                keepOriginName = editor.options.keepOriginName ? \"1\" : \"0\",\n                url = \"http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&st=-1&tn=baiduimagejson&istype=2&rn=32&fm=index&pv=&word=\" + _this.encodeToGb2312(key) + type + \"&keeporiginname=\" + keepOriginName + \"&\" + +new Date;\n\n            $G('searchListUl').innerHTML = lang.searchLoading;\n            ajax.request(url, {\n                'dataType': 'jsonp',\n                'charset': 'GB18030',\n                'onsuccess':function(json){\n                    var list = [];\n                    if(json && json.data) {\n                        for(var i = 0; i < json.data.length; i++) {\n                            if(json.data[i].objURL) {\n                                list.push({\n                                    title: json.data[i].fromPageTitleEnc,\n                                    src: json.data[i].objURL,\n                                    url: json.data[i].fromURL\n                                });\n                            }\n                        }\n                    }\n                    _this.setList(list);\n                },\n                'onerror':function(){\n                    $G('searchListUl').innerHTML = lang.searchRetry;\n                }\n            });\n        },\n        /* 添加图片到列表界面上 */\n        setList: function (list) {\n            var i, item, p, img, link, _this = this,\n                listUl = $G('searchListUl');\n\n            listUl.innerHTML = '';\n            if(list.length) {\n                for (i = 0; i < list.length; i++) {\n                    item = document.createElement('li');\n                    p = document.createElement('p');\n                    img = document.createElement('img');\n                    link = document.createElement('a');\n\n                    img.onload = function () {\n                        _this.scale(this, 113, 113);\n                    };\n                    img.width = 113;\n                    img.setAttribute('src', list[i].src);\n\n                    link.href = list[i].url;\n                    link.target = '_blank';\n                    link.title = list[i].title;\n                    link.innerHTML = list[i].title;\n\n                    p.appendChild(img);\n                    item.appendChild(p);\n                    item.appendChild(link);\n                    listUl.appendChild(item);\n                }\n            } else {\n                listUl.innerHTML = lang.searchRetry;\n            }\n        },\n        getInsertList: function () {\n            var child,\n                src,\n                align = getAlign(),\n                list = [],\n                items = $G('searchListUl').children;\n            for(var i = 0; i < items.length; i++) {\n                child = items[i].firstChild && items[i].firstChild.firstChild;\n                if(child.tagName && child.tagName.toLowerCase() == 'img' && domUtils.hasClass(items[i], 'selected')) {\n                    src = child.src;\n                    list.push({\n                        src: src,\n                        _src: src,\n                        alt: src.substr(src.lastIndexOf('/') + 1),\n                        floatStyle: align\n                    });\n                }\n            }\n            return list;\n        }\n    };\n\n})();\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/insertframe/insertframe.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .warp {width: 320px;height: 153px;margin-left:5px;padding: 20px 0 0 15px;position: relative;}\n        #url {width: 290px; margin-bottom: 2px; margin-left: -6px; margin-left: -2px\\9;*margin-left:0;_margin-left:0; }\n        .format span{display: inline-block; width: 58px;text-align: center; zoom:1;}\n        table td{padding:5px 0;}\n        #align{width: 65px;height: 23px;line-height: 22px;}\n    </style>\n</head>\n<body>\n<div class=\"warp\">\n        <table width=\"300\" cellpadding=\"0\" cellspacing=\"0\">\n            <tr>\n                <td colspan=\"2\" class=\"format\">\n                    <span><var id=\"lang_input_address\"></var></span>\n                    <input style=\"width:200px\" id=\"url\" type=\"text\" value=\"\"/>\n                </td>\n            </tr>\n            <tr>\n                <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_width\"></var></span><input style=\"width:200px\" type=\"text\" id=\"width\"/> px</td>\n\n            </tr>\n            <tr>\n                <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_height\"></var></span><input style=\"width:200px\" type=\"text\" id=\"height\"/> px</td>\n            </tr>\n            <tr>\n                <td><span><var id=\"lang_input_isScroll\"></var></span><input type=\"checkbox\" id=\"scroll\"/> </td>\n                <td><span><var id=\"lang_input_frameborder\"></var></span><input type=\"checkbox\" id=\"frameborder\"/> </td>\n            </tr>\n\n            <tr>\n                <td colspan=\"2\"><span><var id=\"lang_input_alignMode\"></var></span>\n                    <select id=\"align\">\n                        <option value=\"\"></option>\n                        <option value=\"left\"></option>\n                        <option value=\"right\"></option>\n                    </select>\n                </td>\n            </tr>\n        </table>\n</div>\n<script type=\"text/javascript\">\n    var iframe = editor._iframe;\n    if(iframe){\n        $G(\"url\").value = iframe.getAttribute(\"src\")||\"\";\n        $G(\"width\").value = iframe.getAttribute(\"width\")||iframe.style.width.replace(\"px\",\"\")||\"\";\n        $G(\"height\").value = iframe.getAttribute(\"height\") || iframe.style.height.replace(\"px\",\"\") ||\"\";\n        $G(\"scroll\").checked = (iframe.getAttribute(\"scrolling\") == \"yes\") ? true : false;\n        $G(\"frameborder\").checked = (iframe.getAttribute(\"frameborder\") == \"1\") ? true : false;\n        $G(\"align\").value = iframe.align ? iframe.align : \"\";\n    }\n    function queding(){\n        var  url = $G(\"url\").value.replace(/^\\s*|\\s*$/ig,\"\"),\n                width = $G(\"width\").value,\n                height = $G(\"height\").value,\n                scroll = $G(\"scroll\"),\n                frameborder = $G(\"frameborder\"),\n                float = $G(\"align\").value,\n                newIframe = editor.document.createElement(\"iframe\"),\n                div;\n        if(!url){\n            alert(lang.enterAddress);\n            return false;\n        }\n        newIframe.setAttribute(\"src\",/http:\\/\\/|https:\\/\\//ig.test(url) ? url : \"http://\"+url);\n        /^[1-9]+[.]?\\d*$/g.test( width ) ? newIframe.setAttribute(\"width\",width) : \"\";\n        /^[1-9]+[.]?\\d*$/g.test( height ) ? newIframe.setAttribute(\"height\",height) : \"\";\n        scroll.checked ?  newIframe.setAttribute(\"scrolling\",\"yes\") : newIframe.setAttribute(\"scrolling\",\"no\");\n        frameborder.checked ?  newIframe.setAttribute(\"frameborder\",\"1\",0) : newIframe.setAttribute(\"frameborder\",\"0\",0);\n        float ? newIframe.setAttribute(\"align\",float) :  newIframe.setAttribute(\"align\",\"\");\n        if(iframe){\n            iframe.parentNode.insertBefore(newIframe,iframe);\n            domUtils.remove(iframe);\n        }else{\n            div = editor.document.createElement(\"div\");\n            div.appendChild(newIframe);\n            editor.execCommand(\"inserthtml\",div.innerHTML);\n        }\n        editor._iframe = null;\n        dialog.close();\n    }\n    dialog.onok = queding;\n    $G(\"url\").onkeydown = function(evt){\n        evt = evt || event;\n        if(evt.keyCode == 13){\n            queding();\n        }\n    };\n    $focus($G( \"url\" ));\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/internal.js",
    "content": "(function () {\n    var parent = window.parent;\n    //dialog对象\n    dialog = parent.$EDITORUI[window.frameElement.id.replace( /_iframe$/, '' )];\n    //当前打开dialog的编辑器实例\n    editor = dialog.editor;\n\n    UE = parent.UE;\n\n    domUtils = UE.dom.domUtils;\n\n    utils = UE.utils;\n\n    browser = UE.browser;\n\n    ajax = UE.ajax;\n\n    $G = function ( id ) {\n        return document.getElementById( id )\n    };\n    //focus元素\n    $focus = function ( node ) {\n        setTimeout( function () {\n            if ( browser.ie ) {\n                var r = node.createTextRange();\n                r.collapse( false );\n                r.select();\n            } else {\n                node.focus()\n            }\n        }, 0 )\n    };\n    utils.loadFile(document,{\n        href:editor.options.themePath + editor.options.theme + \"/dialogbase.css?cache=\"+Math.random(),\n        tag:\"link\",\n        type:\"text/css\",\n        rel:\"stylesheet\"\n    });\n    lang = editor.getLang(dialog.className.split( \"-\" )[2]);\n    if(lang){\n        domUtils.on(window,'load',function () {\n\n            var langImgPath = editor.options.langPath + editor.options.lang + \"/images/\";\n            //针对静态资源\n            for ( var i in lang[\"static\"] ) {\n                var dom = $G( i );\n                if(!dom) continue;\n                var tagName = dom.tagName,\n                    content = lang[\"static\"][i];\n                if(content.src){\n                    //clone\n                    content = utils.extend({},content,false);\n                    content.src = langImgPath + content.src;\n                }\n                if(content.style){\n                    content = utils.extend({},content,false);\n                    content.style = content.style.replace(/url\\s*\\(/g,\"url(\" + langImgPath)\n                }\n                switch ( tagName.toLowerCase() ) {\n                    case \"var\":\n                        dom.parentNode.replaceChild( document.createTextNode( content ), dom );\n                        break;\n                    case \"select\":\n                        var ops = dom.options;\n                        for ( var j = 0, oj; oj = ops[j]; ) {\n                            oj.innerHTML = content.options[j++];\n                        }\n                        for ( var p in content ) {\n                            p != \"options\" && dom.setAttribute( p, content[p] );\n                        }\n                        break;\n                    default :\n                        domUtils.setAttributes( dom, content);\n                }\n            }\n        } );\n    }\n\n\n})();\n\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/link/link.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        *{margin:0;padding:0;color: #838383;}\n        table{font-size: 12px;margin: 10px;line-height: 30px}\n        .txt{width:300px;height:21px;line-height:21px;border:1px solid #d7d7d7;}\n    </style>\n</head>\n<body>\n    <table>\n        <tr>\n            <td><label for=\"text\"> <var id=\"lang_input_text\"></var></label></td>\n            <td><input class=\"txt\" id=\"text\" type=\"text\" disabled=\"true\"/></td>\n        </tr>\n        <tr>\n            <td><label for=\"href\"> <var id=\"lang_input_url\"></var></label></td>\n            <td><input class=\"txt\" id=\"href\" type=\"text\" /></td>\n        </tr>\n        <tr>\n            <td><label for=\"title\"> <var id=\"lang_input_title\"></var></label></td>\n            <td><input class=\"txt\" id=\"title\" type=\"text\"/></td>\n        </tr>\n        <tr>\n             <td colspan=\"2\">\n                 <label for=\"target\"><var id=\"lang_input_target\"></var></label>\n                 <input id=\"target\" type=\"checkbox\"/>\n             </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\" id=\"msg\"></td>\n        </tr>\n    </table>\n<script type=\"text/javascript\">\n    var range = editor.selection.getRange(),\n        link = range.collapsed ? editor.queryCommandValue( \"link\" ) : editor.selection.getStart(),\n        url,\n        text = $G('text'),\n        rangeLink = domUtils.findParentByTagName(range.getCommonAncestor(),'a',true),\n        orgText;\n    link = domUtils.findParentByTagName( link, \"a\", true );\n    if(link){\n        url = utils.html(link.getAttribute( '_href' ) || link.getAttribute( 'href', 2 ));\n\n        if(rangeLink === link && !link.getElementsByTagName('img').length){\n            text.removeAttribute('disabled');\n            orgText = text.value = link[browser.ie ? 'innerText':'textContent'];\n        }else{\n            text.setAttribute('disabled','true');\n            text.value = lang.validLink;\n        }\n\n    }else{\n        if(range.collapsed){\n            text.removeAttribute('disabled');\n            text.value = '';\n        }else{\n            text.setAttribute('disabled','true');\n            text.value = lang.validLink;\n        }\n\n    }\n    $G(\"title\").value = url ? link.title : \"\";\n    $G(\"href\").value = url ? url: '';\n    $G(\"target\").checked = url && link.target == \"_blank\" ? true :  false;\n    $focus($G(\"href\"));\n\n    function handleDialogOk(){\n        var href =$G('href').value.replace(/^\\s+|\\s+$/g, '');\n        if(href){\n            if(!hrefStartWith(href,[\"http\",\"/\",\"ftp://\",'#'])) {\n                href  = \"http://\" + href;\n            }\n            var obj = {\n                'href' : href,\n                'target' : $G(\"target\").checked ? \"_blank\" : '_self',\n                'title' : $G(\"title\").value.replace(/^\\s+|\\s+$/g, ''),\n                '_href':href\n            };\n            //修改链接内容的情况太特殊了，所以先做到这里了\n            //todo:情况多的时候，做到command里\n            if(orgText && text.value != orgText){\n                link[browser.ie ? 'innerText' : 'textContent'] =  obj.textValue = text.value;\n                range.selectNode(link).select()\n            }\n            if(range.collapsed){\n                obj.textValue = text.value;\n            }\n            editor.execCommand('link',utils.clearEmptyAttrs(obj) );\n            dialog.close();\n        }\n    }\n    dialog.onok = handleDialogOk;\n    $G('href').onkeydown = $G('title').onkeydown = function(evt){\n        evt = evt || window.event;\n        if (evt.keyCode == 13) {\n            handleDialogOk();\n            return false;\n        }\n    };\n    $G('href').onblur = function(){\n        if(!hrefStartWith(this.value,[\"http\",\"/\",\"ftp://\",'#'])){\n            $G(\"msg\").innerHTML = \"<span style='color: red'>\"+lang.httpPrompt+\"</span>\";\n        }else{\n            $G(\"msg\").innerHTML = \"\";\n        }\n    };\n\n    function hrefStartWith(href,arr){\n        href = href.replace(/^\\s+|\\s+$/g, '');\n        for(var i=0,ai;ai=arr[i++];){\n            if(href.indexOf(ai)==0){\n                return true;\n            }\n        }\n        return false;\n    }\n\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/map/map.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <script type=\"text/javascript\" src=\"http://api.map.baidu.com/api?v=1.1&services=true\"></script>\n    <style type=\"text/css\">\n        .content{width:530px; height: 350px;margin: 10px auto;}\n        .content table{width: 100%}\n        .content table td{vertical-align: middle;}\n        #city,#address{height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}\n        #city{width:60px}\n        #address{width:130px}\n        #is_dynamic_label span{vertical-align:middle;margin: 3px 0px 3px 3px;}\n        #is_dynamic_label input{vertical-align:middle;margin: 3px 3px 3px 50px;}\n    </style>\n</head>\n<body>\n<div class=\"content\">\n    <table>\n        <tr>\n            <td><var id=\"lang_city\"></var>:</td>\n            <td><input id=\"city\" type=\"text\" /></td>\n            <td><var id=\"lang_address\"></var>:</td>\n            <td><input id=\"address\" type=\"text\" value=\"\" /></td>\n            <td><a href=\"javascript:doSearch()\" class=\"button\"><var id=\"lang_search\"></var></a></td>\n            <td><label id=\"is_dynamic_label\" for=\"is_dynamic\"><input id=\"is_dynamic\" type=\"checkbox\" name=\"is_dynamic\" /><span><var id=\"lang_dynamicmap\"></var></span></label></td>\n        </tr>\n    </table>\n    <div style=\"width:100%;height:340px;margin:5px auto;border:1px solid gray\" id=\"container\"></div>\n\n</div>\n<script type=\"text/javascript\">\n    var map = new BMap.Map(\"container\"),marker,point,styleStr;\n    map.enableScrollWheelZoom();\n    map.enableContinuousZoom();\n    function doSearch(){\n        if (!document.getElementById('city').value) {\n            alert(lang.cityMsg);\n            return;\n        }\n        var search = new BMap.LocalSearch(document.getElementById('city').value, {\n            onSearchComplete: function (results){\n                if (results && results.getNumPois()) {\n                    var points = [];\n                    for (var i=0; i<results.getCurrentNumPois(); i++) {\n                        points.push(results.getPoi(i).point);\n                    }\n                    if (points.length > 1) {\n                        map.setViewport(points);\n                    } else {\n                        map.centerAndZoom(points[0], 13);\n                    }\n                    point = map.getCenter();\n                    marker.setPoint(point);\n                } else {\n                    alert(lang.errorMsg);\n                }\n            }\n        });\n        search.search(document.getElementById('address').value || document.getElementById('city').value);\n    }\n    //获得参数\n    function getPars(str,par){\n        var reg = new RegExp(par+\"=((\\\\d+|[.,])*)\",\"g\");\n        return reg.exec(str)[1];\n    }\n    function init(){\n        var mapNode = editor.selection.getRange().getClosedNode(),\n            isMapImg = mapNode && /api[.]map[.]baidu[.]com/ig.test(mapNode.getAttribute(\"src\")),\n            isMapIframe = mapNode && domUtils.hasClass(mapNode, 'ueditor_baidumap');\n        if(isMapImg || isMapIframe){\n            var url, centerPos, markerPos;\n            if(isMapIframe) {\n                url = decodeURIComponent(mapNode.getAttribute(\"src\"));\n                $G('is_dynamic').checked = true;\n                styleStr = mapNode.style.cssText;\n            } else {\n                url = mapNode.getAttribute(\"src\");\n                styleStr = mapNode.style.cssText;\n            }\n\n            centerPos = getPars(url,\"center\").split(\",\");\n            markerPos = getPars(url, \"markers\").split(\",\");\n            point = new BMap.Point(Number(centerPos[0]),Number(centerPos[1]));\n            marker = new BMap.Marker(new BMap.Point(Number(markerPos[0]), Number(markerPos[1])));\n            map.addControl(new BMap.NavigationControl());\n            map.centerAndZoom(point, Number(getPars(url,\"zoom\")));\n        }else{\n            point = new BMap.Point(116.404, 39.915);    // 创建点坐标\n            marker = new BMap.Marker(point);\n            map.addControl(new BMap.NavigationControl());\n            map.centerAndZoom(point, 10);                     // 初始化地图,设置中心点坐标和地图级别。\n        }\n        marker.enableDragging();\n        map.addOverlay(marker);\n    }\n    init();\n    document.getElementById('address').onkeydown = function (evt){\n        evt = evt || event;\n        if (evt.keyCode == 13) {\n            doSearch();\n        }\n    };\n    dialog.onok = function (){\n        var center = map.getCenter();\n        var zoom = map.zoomLevel;\n        var size = map.getSize();\n        var mapWidth = size.width;\n        var mapHeight = size.height;\n        var point = marker.getPoint();\n\n        if($G('is_dynamic').checked) {\n            var URL = editor.options.UEDITOR_HOME_URL,\n                url = [URL + (/\\/$/.test(URL) ? '':'/') + \"dialogs/map/show.html\" +\n                    '#center=' + center.lng + ',' + center.lat,\n                    '&zoom=' + zoom,\n                    '&width=' + mapWidth,\n                    '&height=' + mapHeight,\n                    '&markers=' + point.lng + ',' + point.lat,\n                    '&markerStyles=' + 'l,A'].join('');\n            editor.execCommand('inserthtml', '<iframe class=\"ueditor_baidumap\" src=\"' + url + '\"' + (styleStr ? ' style=\"' + styleStr + '\"' :'') + ' frameborder=\"0\" width=\"' + (mapWidth+4) + '\" height=\"' + (mapHeight+4) + '\"></iframe>');\n        } else {\n            var url = \"http://api.map.baidu.com/staticimage?center=\" + center.lng + ',' + center.lat +\n                    \"&zoom=\" + zoom + \"&width=\" + size.width + '&height=' + size.height + \"&markers=\" + point.lng + ',' + point.lat;\n            editor.execCommand('inserthtml', '<img width=\"'+ size.width +'\"height=\"'+ size.height +'\" src=\"' + url + '\"' + (styleStr ? ' style=\"' + styleStr + '\"' :'') + '/>');\n        }\n    };\n    document.getElementById(\"address\").focus();\n</script>\n\n\n</body>\n</html>\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/map/show.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n        \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <meta charset=\"utf-8\"/>\n    <meta name=\"keywords\" content=\"百度地图,百度地图API，百度地图自定义工具，百度地图所见即所得工具\"/>\n    <meta name=\"description\" content=\"百度地图API自定义地图，帮助用户在可视化操作下生成百度地图\"/>\n    <title>百度地图API自定义地图</title>\n    <!--引用百度地图API-->\n    <style type=\"text/css\">\n        html, body {\n            margin: 0;\n            padding: 0;\n            overflow: hidden;\n        }\n    </style>\n    <script type=\"text/javascript\" src=\"http://api.map.baidu.com/api?key=&v=1.1&services=true\"></script>\n</head>\n\n<body onload=\"initMap();\">\n<!--百度地图容器-->\n<div style=\"width:697px;height:550px;border:#ccc solid 1px;\" id=\"dituContent\"></div>\n</body>\n<script type=\"text/javascript\">\n    function getParam(name) {\n        return location.href.match(new RegExp('[?#&]' + name + '=([^?#&]+)', 'i')) ? RegExp.$1 : '';\n    }\n    var map, marker;\n    var centerParam = getParam('center');\n    var zoomParam = getParam('zoom');\n    var widthParam = getParam('width');\n    var heightParam = getParam('height');\n    var markersParam = getParam('markers');\n    var markerStylesParam = getParam('markerStyles');\n\n    //创建和初始化地图函数：\n    function initMap() {\n        // [FF]切换模式后报错\n        if (!window.BMap) {\n            return;\n        }\n        var dituContent = document.getElementById('dituContent');\n        dituContent.style.width = widthParam + 'px';\n        dituContent.style.height = heightParam + 'px';\n\n        createMap();//创建地图\n        setMapEvent();//设置地图事件\n        addMapControl();//向地图添加控件\n\n        // 创建标注\n        var markersArr = markersParam.split(',');\n        var point = new BMap.Point(markersArr[0], markersArr[1]);\n        marker = new BMap.Marker(point);\n        marker.enableDragging();\n        map.addOverlay(marker); // 将标注添加到地图中\n\n        if(parent.editor && parent.document.body.contentEditable==\"true\") { //在编辑状态下\n            setMapListener();//地图改变修改外层的iframe标签src属性\n        }\n    }\n\n    //创建地图函数：\n    function createMap() {\n        map = new BMap.Map(\"dituContent\");//在百度地图容器中创建一个地图\n        var centerArr = centerParam.split(',');\n        var point = new BMap.Point(parseFloat(centerArr[0]), parseFloat(centerArr[1]));//定义一个中心点坐标\n        map.centerAndZoom(point, parseInt(zoomParam));//设定地图的中心点和坐标并将地图显示在地图容器中\n    }\n\n    //地图事件设置函数：\n    function setMapEvent() {\n        map.enableDragging();//启用地图拖拽事件，默认启用(可不写)\n        map.enableScrollWheelZoom();//启用地图滚轮放大缩小\n        map.enableDoubleClickZoom();//启用鼠标双击放大，默认启用(可不写)\n        map.enableKeyboard();//启用键盘上下左右键移动地图\n    }\n\n    //地图控件添加函数：\n    function addMapControl() {\n        //向地图中添加缩放控件\n        var ctrl_nav = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE});\n        map.addControl(ctrl_nav);\n        //向地图中添加缩略图控件\n        var ctrl_ove = new BMap.OverviewMapControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: 1});\n        map.addControl(ctrl_ove);\n        //向地图中添加比例尺控件\n        var ctrl_sca = new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT});\n        map.addControl(ctrl_sca);\n    }\n\n    function setMapListener() {\n        var editor = parent.editor, containerIframe,\n            iframes = parent.document.getElementsByTagName('iframe');\n        for (var key in iframes) {\n            if (iframes[key].contentWindow == window) {\n                containerIframe = iframes[key];\n                break;\n            }\n        }\n        if (containerIframe) {\n            map.addEventListener('moveend', mapListenerHandler);\n            map.addEventListener('zoomend', mapListenerHandler);\n            marker.addEventListener('dragend', mapListenerHandler);\n        }\n\n        function mapListenerHandler() {\n            var zoom = map.getZoom(),\n                center = map.getCenter(),\n                marker = window.marker.getPoint();\n            containerIframe.src = containerIframe.src.\n                replace(new RegExp('([?#&])center=([^?#&]+)', 'i'), '$1center=' + center.lng + ',' + center.lat).\n                replace(new RegExp('([?#&])markers=([^?#&]+)', 'i'), '$1markers=' + marker.lng + ',' + marker.lat).\n                replace(new RegExp('([?#&])zoom=([^?#&]+)', 'i'), '$1zoom=' + zoom);\n            editor.fireEvent('saveScene');\n        }\n    }\n</script>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/music/music.css",
    "content": ".wrapper{margin: 5px 10px;}\n\n.searchBar{height:30px;padding:7px 0 3px;text-align:center;}\n.searchBtn{font-size:13px;height:24px;}\n\n.resultBar{width:460px;margin:5px auto;border: 1px solid #CCC;border-radius: 5px;box-shadow: 2px 2px 5px #D3D6DA;overflow: hidden;}\n\n.listPanel{overflow: hidden;}\n.panelon{display:block;}\n.paneloff{display:none}\n\n.page{width:220px;margin:20px auto;overflow: hidden;}\n.pageon{float:right;width:24px;line-height:24px;height:24px;margin-right: 5px;background: none;border: none;color: #000;font-weight: bold;text-align:center}\n.pageoff{float:right;width:24px;line-height:24px;height:24px;cursor:pointer;background-color: #fff;\n   border: 1px solid #E7ECF0;color: #2D64B3;margin-right: 5px;text-decoration: none;text-align:center;}\n\n.m-box{width:460px;}\n.m-m{float: left;line-height: 20px;height: 20px;}\n.m-h{height:24px;line-height:24px;padding-left: 46px;background-color:#FAFAFA;border-bottom: 1px solid #DAD8D8;font-weight: bold;font-size: 12px;color: #333;}\n.m-l{float:left;width:40px; }\n.m-t{float:left;width:140px;}\n.m-s{float:left;width:110px;}\n.m-z{float:left;width:100px;}\n.m-try-t{float: left;width: 60px;;}\n\n.m-try{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/try_music.gif') no-repeat ;}\n.m-trying{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/stop_music.gif') no-repeat ;}\n\n.loading{width:95px;height:7px;font-size:7px;margin:60px auto;background:url(http://static.tieba.baidu.com/tb/editor/images/loading.gif) no-repeat}\n.empty{width:300px;height:40px;padding:2px;margin:50px auto;line-height:40px; color:#006699;text-align:center;}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/music/music.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n    <title>插入音乐</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"music.css\">\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"searchBar\">\n        <input id=\"J_searchName\" type=\"text\"/>\n        <input type=\"button\" class=\"searchBtn\" id=\"J_searchBtn\">\n    </div>\n    <div class=\"resultBar\" id=\"J_resultBar\">\n        <div class=\"loading\" style=\"display:none\"></div>\n        <div class=\"empty\"><var id=\"lang_input_tips\"></var></div>\n    </div>\n    <div id=\"J_preview\"></div>\n</div>\n<script type=\"text/javascript\" src=\"music.js\"></script>\n<script type=\"text/javascript\">\n    var music = new Music;\n    dialog.onok = function () {\n        music.exec();\n    };\n    dialog.oncancel = function () {\n        $G('J_preview').innerHTML = \"\";\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/music/music.js",
    "content": "function Music() {\n    this.init();\n}\n(function () {\n    var pages = [],\n        panels = [],\n        selectedItem = null;\n    Music.prototype = {\n        total:70,\n        pageSize:10,\n        dataUrl:\"http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.common\",\n        playerUrl:\"http://box.baidu.com/widget/flash/bdspacesong.swf\",\n\n        init:function () {\n            var me = this;\n            domUtils.on($G(\"J_searchName\"), \"keyup\", function (event) {\n                var e = window.event || event;\n                if (e.keyCode == 13) {\n                    me.dosearch();\n                }\n            });\n            domUtils.on($G(\"J_searchBtn\"), \"click\", function () {\n                me.dosearch();\n            });\n        },\n        callback:function (data) {\n            var me = this;\n            me.data = data.song_list;\n            setTimeout(function () {\n                $G('J_resultBar').innerHTML = me._renderTemplate(data.song_list);\n            }, 300);\n        },\n        dosearch:function () {\n            var me = this;\n            selectedItem = null;\n            var key = $G('J_searchName').value;\n            if (utils.trim(key) == \"\")return false;\n            key = encodeURIComponent(key);\n            me._sent(key);\n        },\n        doselect:function (i) {\n            var me = this;\n            if (typeof i == 'object') {\n                selectedItem = i;\n            } else if (typeof i == 'number') {\n                selectedItem = me.data[i];\n            }\n        },\n        onpageclick:function (id) {\n            var me = this;\n            for (var i = 0; i < pages.length; i++) {\n                $G(pages[i]).className = 'pageoff';\n                $G(panels[i]).className = 'paneloff';\n            }\n            $G('page' + id).className = 'pageon';\n            $G('panel' + id).className = 'panelon';\n        },\n        listenTest:function (elem) {\n            var me = this,\n                view = $G('J_preview'),\n                is_play_action = (elem.className == 'm-try'),\n                old_trying = me._getTryingElem();\n\n            if (old_trying) {\n                old_trying.className = 'm-try';\n                view.innerHTML = '';\n            }\n            if (is_play_action) {\n                elem.className = 'm-trying';\n                view.innerHTML = me._buildMusicHtml(me._getUrl(true));\n            }\n        },\n        _sent:function (param) {\n            var me = this;\n            $G('J_resultBar').innerHTML = '<div class=\"loading\"></div>';\n\n            utils.loadFile(document, {\n                src:me.dataUrl + '&query=' + param + '&page_size=' + me.total + '&callback=music.callback&.r=' + Math.random(),\n                tag:\"script\",\n                type:\"text/javascript\",\n                defer:\"defer\"\n            });\n        },\n        _removeHtml:function (str) {\n            var reg = /<\\s*\\/?\\s*[^>]*\\s*>/gi;\n            return str.replace(reg, \"\");\n        },\n        _getUrl:function (isTryListen) {\n            var me = this;\n            var param = 'from=tiebasongwidget&url=&name=' + encodeURIComponent(me._removeHtml(selectedItem.title)) + '&artist='\n                + encodeURIComponent(me._removeHtml(selectedItem.author)) + '&extra='\n                + encodeURIComponent(me._removeHtml(selectedItem.album_title))\n                + '&autoPlay='+isTryListen+'' + '&loop=true';\n            return  me.playerUrl + \"?\" + param;\n        },\n        _getTryingElem:function () {\n            var s = $G('J_listPanel').getElementsByTagName('span');\n\n            for (var i = 0; i < s.length; i++) {\n                if (s[i].className == 'm-trying')\n                    return s[i];\n            }\n            return null;\n        },\n        _buildMusicHtml:function (playerUrl) {\n            var html = '<embed class=\"BDE_try_Music\" allowfullscreen=\"false\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"';\n            html += ' src=\"' + playerUrl + '\"';\n            html += ' width=\"1\" height=\"1\" style=\"position:absolute;left:-2000px;\"';\n            html += ' type=\"application/x-shockwave-flash\" wmode=\"transparent\" play=\"true\" loop=\"false\"';\n            html += ' menu=\"false\" allowscriptaccess=\"never\" scale=\"noborder\">';\n            return html;\n        },\n        _byteLength:function (str) {\n            return str.replace(/[^\\u0000-\\u007f]/g, \"\\u0061\\u0061\").length;\n        },\n        _getMaxText:function (s) {\n            var me = this;\n            s = me._removeHtml(s);\n            if (me._byteLength(s) > 12)\n                return s.substring(0, 5) + '...';\n            if (!s) s = \"&nbsp;\";\n            return s;\n        },\n        _rebuildData:function (data) {\n            var me = this,\n                newData = [],\n                d = me.pageSize,\n                itembox;\n            for (var i = 0; i < data.length; i++) {\n                if ((i + d) % d == 0) {\n                    itembox = [];\n                    newData.push(itembox)\n                }\n                itembox.push(data[i]);\n            }\n            return newData;\n        },\n        _renderTemplate:function (data) {\n            var me = this;\n            if (data.length == 0)return '<div class=\"empty\">' + lang.emptyTxt + '</div>';\n            data = me._rebuildData(data);\n            var s = [], p = [], t = [];\n            s.push('<div id=\"J_listPanel\" class=\"listPanel\">');\n            p.push('<div class=\"page\">');\n            for (var i = 0, tmpList; tmpList = data[i++];) {\n                panels.push('panel' + i);\n                pages.push('page' + i);\n                if (i == 1) {\n                    s.push('<div id=\"panel' + i + '\" class=\"panelon\">');\n                    if (data.length != 1) {\n                        t.push('<div id=\"page' + i + '\" onclick=\"music.onpageclick(' + i + ')\" class=\"pageon\">' + (i ) + '</div>');\n                    }\n                } else {\n                    s.push('<div id=\"panel' + i + '\" class=\"paneloff\">');\n                    t.push('<div id=\"page' + i + '\" onclick=\"music.onpageclick(' + i + ')\" class=\"pageoff\">' + (i ) + '</div>');\n                }\n                s.push('<div class=\"m-box\">');\n                s.push('<div class=\"m-h\"><span class=\"m-t\">' + lang.chapter + '</span><span class=\"m-s\">' + lang.singer\n                    + '</span><span class=\"m-z\">' + lang.special + '</span><span class=\"m-try-t\">' + lang.listenTest + '</span></div>');\n                for (var j = 0, tmpObj; tmpObj = tmpList[j++];) {\n                    s.push('<label for=\"radio-' + i + '-' + j + '\" class=\"m-m\">');\n                    s.push('<input type=\"radio\" id=\"radio-' + i + '-' + j + '\" name=\"musicId\" class=\"m-l\" onclick=\"music.doselect(' + (me.pageSize * (i-1) + (j-1)) + ')\"/>');\n                    s.push('<span class=\"m-t\">' + me._getMaxText(tmpObj.title) + '</span>');\n                    s.push('<span class=\"m-s\">' + me._getMaxText(tmpObj.author) + '</span>');\n                    s.push('<span class=\"m-z\">' + me._getMaxText(tmpObj.album_title) + '</span>');\n                    s.push('<span class=\"m-try\" onclick=\"music.doselect(' + (me.pageSize * (i-1) + (j-1)) + ');music.listenTest(this)\"></span>');\n                    s.push('</label>');\n                }\n                s.push('</div>');\n                s.push('</div>');\n            }\n            t.reverse();\n            p.push(t.join(''));\n            s.push('</div>');\n            p.push('</div>');\n            return s.join('') + p.join('');\n        },\n        exec:function () {\n            var me = this;\n            if (selectedItem == null)   return;\n            $G('J_preview').innerHTML = \"\";\n            editor.execCommand('music', {\n                url:me._getUrl(false),\n                width:400,\n                height:95\n            });\n        }\n    };\n})();\n\n\n\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/preview/preview.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n        <style>\n            html,body{\n                height:100%;\n                width:100%;\n                padding:0;\n                margin:0;\n            }\n            #preview{\n                width:100%;\n                height:100%;\n                padding:0;\n                margin:0;\n            }\n            #preview *{font-family:sans-serif;font-size:16px;}\n        </style>\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n        <script src=\"../../ueditor.parse.js\"></script>\n        <title></title>\n    </head>\n    <body class=\"view\">\n        <div id=\"preview\" style=\"margin:8px\">\n\n        </div>\n    </body>\n    <script>\n        document.getElementById('preview').innerHTML = editor.getContent();\n        uParse('#preview',{\n            rootPath : '../../',\n            chartContainerHeight:500\n        })\n        dialog.oncancel = function(){\n            document.getElementById('preview').innerHTML = '';\n        }\n    </script>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/scrawl/scrawl.css",
    "content": "/*common\n*/\nbody{margin: 0;}\ntable{width:100%;}\ntable td{padding:2px 4px;vertical-align: middle;}\na{text-decoration: none;}\nem{font-style: normal;}\n.border_style1{border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}\n/*module\n*/\n.main{margin: 8px;overflow: hidden;}\n\n.hot{float:left;height:335px;}\n.drawBoard{position: relative; cursor: crosshair;}\n.brushBorad{position: absolute;left:0;top:0;z-index: 998;}\n.picBoard{border: none;text-align: center;line-height: 300px;cursor: default;}\n.operateBar{margin-top:10px;font-size:12px;text-align: center;}\n.operateBar span{margin-left: 10px;}\n\n.drawToolbar{float:right;width:110px;height:300px;overflow: hidden;}\n.colorBar{margin-top:10px;font-size: 12px;text-align: center;}\n.colorBar a{display:block;width: 10px;height: 10px;border:1px solid #1006F1;border-radius: 3px; box-shadow:2px 2px 5px #d3d6da;opacity: 0.3}\n.sectionBar{margin-top:15px;font-size: 12px;text-align: center;}\n.sectionBar a{display:inline-block;width:10px;height:12px;color: #888;text-indent: -999px;opacity: 0.3}\n.size1{background: url('images/size.png') 1px center no-repeat ;}\n.size2{background: url('images/size.png') -10px center no-repeat;}\n.size3{background: url('images/size.png') -22px center no-repeat;}\n.size4{background: url('images/size.png') -35px center no-repeat;}\n\n.addImgH{position: relative;}\n.addImgH_form{position: absolute;left: 18px;top: -1px;width: 75px;height: 21px;opacity: 0;cursor: pointer;}\n.addImgH_form input{width: 100%;}\n/*scrawl遮罩层\n*/\n.maskLayerNull{display: none;}\n.maskLayer{position: absolute;top:0;left:0;width: 100%; height: 100%;opacity: 0.7;\n    background-color: #fff;text-align:center;font-weight:bold;line-height:300px;z-index: 1000;}\n/*btn state\n*/\n.previousStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undoH.png');cursor: pointer;}\n.previousStepH .text{color:#888;cursor:pointer;}\n.previousStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undo.png');cursor:default;}\n.previousStep .text{color:#ccc;cursor:default;}\n\n.nextStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redoH.png');cursor: pointer;}\n.nextStepH .text{color:#888;cursor:pointer;}\n.nextStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redo.png');cursor:default;}\n.nextStep .text{color:#ccc;cursor:default;}\n\n.clearBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/emptyH.png');cursor: pointer;}\n.clearBoardH .text{color:#888;cursor:pointer;}\n.clearBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/empty.png');cursor:default;}\n.clearBoard .text{color:#ccc;cursor:default;}\n\n.scaleBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scaleH.png');cursor: pointer;}\n.scaleBoardH .text{color:#888;cursor:pointer;}\n.scaleBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scale.png');cursor:default;}\n.scaleBoard .text{color:#ccc;cursor:default;}\n\n.removeImgH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimgH.png');cursor: pointer;}\n.removeImgH .text{color:#888;cursor:pointer;}\n.removeImg .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimg.png');cursor:default;}\n.removeImg .text{color:#ccc;cursor:default;}\n\n.addImgH .icon{vertical-align:top;display: inline-block;width:16px;height:16px;background-image: url('images/addimg.png')}\n.addImgH .text{color:#888;cursor:pointer;}\n/*icon\n*/\n.brushIcon{display: inline-block;width:16px;height:16px;background-image: url('images/brush.png')}\n.eraserIcon{display: inline-block;width:16px;height:16px;background-image: url('images/eraser.png')}\n\n\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/scrawl/scrawl.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"scrawl.css\">\n</head>\n<body>\n<div class=\"main\" id=\"J_wrap\">\n    <div class=\"hot\">\n        <div class=\"drawBoard border_style1\">\n            <canvas id=\"J_brushBoard\" class=\"brushBorad\" width=\"360\" height=\"300\"></canvas>\n            <div id=\"J_picBoard\" class=\"picBoard\" style=\"width: 360px;height: 300px\"></div>\n        </div>\n        <div id=\"J_operateBar\" class=\"operateBar\">\n            <span id=\"J_previousStep\" class=\"previousStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_previousStep\"></var></em>\n            </span>\n            <span id=\"J_nextStep\" class=\"nextStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_nextsStep\"></var></em>\n            </span>\n            <span id=\"J_clearBoard\" class=\"clearBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_clear\"></var></em>\n            </span>\n            <span id=\"J_sacleBoard\" class=\"scaleBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_ScalePic\"></var></em>\n            </span>\n        </div>\n    </div>\n    <div class=\"drawToolbar border_style1\">\n        <div id=\"J_colorBar\" class=\"colorBar\"></div>\n        <div id=\"J_brushBar\" class=\"sectionBar\">\n            <em class=\"brushIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div id=\"J_eraserBar\" class=\"sectionBar\">\n            <em class=\"eraserIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div class=\"sectionBar\">\n            <div id=\"J_addImg\" class=\"addImgH\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_addPic\"></var></em>\n                <form method=\"post\" id=\"fileForm\" enctype=\"multipart/form-data\" class=\"addImgH_form\" target=\"up\">\n                    <input type=\"file\" name=\"upfile\" id=\"J_imgTxt\"\n                           accept=\"image/gif,image/jpeg,image/png,image/jpg,image/bmp\"/>\n                </form>\n                <iframe name=\"up\" style=\"display: none\"></iframe>\n            </div>\n        </div>\n        <div class=\"sectionBar\">\n            <span id=\"J_removeImg\" class=\"removeImg\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_removePic\"></var></em>\n            </span>\n        </div>\n    </div>\n</div>\n<div id=\"J_maskLayer\" class=\"maskLayerNull\"></div>\n\n<script type=\"text/javascript\" src=\"scrawl.js\"></script>\n<script type=\"text/javascript\">\n    var settings = {\n        drawBrushSize:3, //画笔初始大小\n        drawBrushColor:\"#4bacc6\", //画笔初始颜色\n        colorList:['c00000', 'ff0000', 'ffc000', 'ffff00', '92d050', '00b050', '00b0f0', '0070c0', '002060', '7030a0', 'ffffff',\n            '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646'], //画笔选择颜色\n        saveNum:10  //撤销次数\n    };\n\n    var scrawlObj = new scrawl( settings );\n    scrawlObj.isCancelScrawl = false;\n\n    dialog.onok = function () {\n        exec( scrawlObj );\n        return false;\n    };\n    dialog.oncancel = function () {\n        scrawlObj.isCancelScrawl = true;\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/scrawl/scrawl.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-5-22\n * Time: 上午11:38\n * To change this template use File | Settings | File Templates.\n */\nvar scrawl = function (options) {\n    options && this.initOptions(options);\n};\n(function () {\n    var canvas = $G(\"J_brushBoard\"),\n        context = canvas.getContext('2d'),\n        drawStep = [], //undo redo存储\n        drawStepIndex = 0; //undo redo指针\n\n    scrawl.prototype = {\n        isScrawl:false, //是否涂鸦\n        brushWidth:-1, //画笔粗细\n        brushColor:\"\", //画笔颜色\n\n        initOptions:function (options) {\n            var me = this;\n            me.originalState(options);//初始页面状态\n            me._buildToolbarColor(options.colorList);//动态生成颜色选择集合\n\n            me._addBoardListener(options.saveNum);//添加画板处理\n            me._addOPerateListener(options.saveNum);//添加undo redo clearBoard处理\n            me._addColorBarListener();//添加颜色选择处理\n            me._addBrushBarListener();//添加画笔大小处理\n            me._addEraserBarListener();//添加橡皮大小处理\n            me._addAddImgListener();//添加增添背景图片处理\n            me._addRemoveImgListenter();//删除背景图片处理\n            me._addScalePicListenter();//添加缩放处理\n            me._addClearSelectionListenter();//添加清楚选中状态处理\n\n            me._originalColorSelect(options.drawBrushColor);//初始化颜色选中\n            me._originalBrushSelect(options.drawBrushSize);//初始化画笔选中\n            me._clearSelection();//清楚选中状态\n        },\n\n        originalState:function (options) {\n            var me = this;\n\n            me.brushWidth = options.drawBrushSize;//同步画笔粗细\n            me.brushColor = options.drawBrushColor;//同步画笔颜色\n\n            context.lineWidth = me.brushWidth;//初始画笔大小\n            context.strokeStyle = me.brushColor;//初始画笔颜色\n            context.fillStyle = \"transparent\";//初始画布背景颜色\n            context.lineCap = \"round\";//去除锯齿\n            context.fill();\n        },\n        _buildToolbarColor:function (colorList) {\n            var tmp = null, arr = [];\n            arr.push(\"<table id='J_colorList'>\");\n            for (var i = 0, color; color = colorList[i++];) {\n                if ((i - 1) % 5 == 0) {\n                    if (i != 1) {\n                        arr.push(\"</tr>\");\n                    }\n                    arr.push(\"<tr>\");\n                }\n                tmp = '#' + color;\n                arr.push(\"<td><a title='\" + tmp + \"' href='javascript:void(0)' style='background-color:\" + tmp + \"'></a></td>\");\n            }\n            arr.push(\"</tr></table>\");\n            $G(\"J_colorBar\").innerHTML = arr.join(\"\");\n        },\n\n        _addBoardListener:function (saveNum) {\n            var me = this,\n                margin = 0,\n                startX = -1,\n                startY = -1,\n                isMouseDown = false,\n                isMouseMove = false,\n                isMouseUp = false,\n                buttonPress = 0, button, flag = '';\n\n            margin = parseInt(domUtils.getComputedStyle($G(\"J_wrap\"), \"margin-left\"));\n            drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n            drawStepIndex += 1;\n\n            domUtils.on(canvas, [\"mousedown\", \"mousemove\", \"mouseup\", \"mouseout\"], function (e) {\n                button = browser.webkit ? e.which : buttonPress;\n                switch (e.type) {\n                    case 'mousedown':\n                        buttonPress = 1;\n                        flag = 1;\n                        isMouseDown = true;\n                        isMouseUp = false;\n                        isMouseMove = false;\n                        me.isScrawl = true;\n                        startX = e.clientX - margin;//10为外边距总和\n                        startY = e.clientY - margin;\n                        context.beginPath();\n                        break;\n                    case 'mousemove' :\n                        if (!flag && button == 0) {\n                            return;\n                        }\n                        if (!flag && button) {\n                            startX = e.clientX - margin;//10为外边距总和\n                            startY = e.clientY - margin;\n                            context.beginPath();\n                            flag = 1;\n                        }\n                        if (isMouseUp || !isMouseDown) {\n                            return;\n                        }\n                        var endX = e.clientX - margin,\n                            endY = e.clientY - margin;\n\n                        context.moveTo(startX, startY);\n                        context.lineTo(endX, endY);\n                        context.stroke();\n                        startX = endX;\n                        startY = endY;\n                        isMouseMove = true;\n                        break;\n                    case 'mouseup':\n                        buttonPress = 0;\n                        if (!isMouseDown)return;\n                        if (!isMouseMove) {\n                            context.arc(startX, startY, context.lineWidth, 0, Math.PI * 2, false);\n                            context.fillStyle = context.strokeStyle;\n                            context.fill();\n                        }\n                        context.closePath();\n                        me._saveOPerate(saveNum);\n                        isMouseDown = false;\n                        isMouseMove = false;\n                        isMouseUp = true;\n                        startX = -1;\n                        startY = -1;\n                        break;\n                    case 'mouseout':\n                        flag = '';\n                        buttonPress = 0;\n                        if (button == 1) return;\n                        context.closePath();\n                        break;\n                }\n            });\n        },\n        _addOPerateListener:function (saveNum) {\n            var me = this;\n            domUtils.on($G(\"J_previousStep\"), \"click\", function () {\n                if (drawStepIndex > 1) {\n                    drawStepIndex -= 1;\n                    context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                    context.putImageData(drawStep[drawStepIndex - 1], 0, 0);\n                    me.btn2Highlight(\"J_nextStep\");\n                    drawStepIndex == 1 && me.btn2disable(\"J_previousStep\");\n                }\n            });\n            domUtils.on($G(\"J_nextStep\"), \"click\", function () {\n                if (drawStepIndex > 0 && drawStepIndex < drawStep.length) {\n                    context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                    context.putImageData(drawStep[drawStepIndex], 0, 0);\n                    drawStepIndex += 1;\n                    me.btn2Highlight(\"J_previousStep\");\n                    drawStepIndex == drawStep.length && me.btn2disable(\"J_nextStep\");\n                }\n            });\n            domUtils.on($G(\"J_clearBoard\"), \"click\", function () {\n                context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                drawStep = [];\n                me._saveOPerate(saveNum);\n                drawStepIndex = 1;\n                me.isScrawl = false;\n                me.btn2disable(\"J_previousStep\");\n                me.btn2disable(\"J_nextStep\");\n                me.btn2disable(\"J_clearBoard\");\n            });\n        },\n        _addColorBarListener:function () {\n            var me = this;\n            domUtils.on($G(\"J_colorBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    color = target.title;\n                if (!!color) {\n                    me._addColorSelect(target);\n\n                    me.brushColor = color;\n                    context.globalCompositeOperation = \"source-over\";\n                    context.lineWidth = me.brushWidth;\n                    context.strokeStyle = color;\n                }\n            });\n        },\n        _addBrushBarListener:function () {\n            var me = this;\n            domUtils.on($G(\"J_brushBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    size = browser.ie ? target.innerText : target.text;\n                if (!!size) {\n                    me._addBESelect(target);\n\n                    context.globalCompositeOperation = \"source-over\";\n                    context.lineWidth = parseInt(size);\n                    context.strokeStyle = me.brushColor;\n                    me.brushWidth = context.lineWidth;\n                }\n            });\n        },\n        _addEraserBarListener:function () {\n            var me = this;\n            domUtils.on($G(\"J_eraserBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    size = browser.ie ? target.innerText : target.text;\n                if (!!size) {\n                    me._addBESelect(target);\n\n                    context.lineWidth = parseInt(size);\n                    context.globalCompositeOperation = \"destination-out\";\n                    context.strokeStyle = \"#FFF\";\n                }\n            });\n        },\n        _addAddImgListener:function () {\n            var file = $G(\"J_imgTxt\");\n            if (!window.FileReader) {\n                $G(\"J_addImg\").style.display = 'none';\n                $G(\"J_removeImg\").style.display = 'none';\n                $G(\"J_sacleBoard\").style.display = 'none';\n            }\n            domUtils.on(file, \"change\", function (e) {\n                var frm = file.parentNode;\n                addMaskLayer(lang.backgroundUploading);\n\n                var target = e.target || e.srcElement,\n                    reader = new FileReader();\n                reader.onload = function(evt){\n                    var target = evt.target || evt.srcElement;\n                    ue_callback(target.result, 'SUCCESS');\n                };\n                reader.readAsDataURL(target.files[0]);\n                frm.reset();\n            });\n        },\n        _addRemoveImgListenter:function () {\n            var me = this;\n            domUtils.on($G(\"J_removeImg\"), \"click\", function () {\n                $G(\"J_picBoard\").innerHTML = \"\";\n                me.btn2disable(\"J_removeImg\");\n                me.btn2disable(\"J_sacleBoard\");\n            });\n        },\n        _addScalePicListenter:function () {\n            domUtils.on($G(\"J_sacleBoard\"), \"click\", function () {\n                var picBoard = $G(\"J_picBoard\"),\n                    scaleCon = $G(\"J_scaleCon\"),\n                    img = picBoard.children[0];\n\n                if (img) {\n                    if (!scaleCon) {\n                        picBoard.style.cssText = \"position:relative;z-index:999;\"+picBoard.style.cssText;\n                        img.style.cssText = \"position: absolute;top:\" + (canvas.height - img.height) / 2 + \"px;left:\" + (canvas.width - img.width) / 2 + \"px;\";\n                        var scale = new ScaleBoy();\n                        picBoard.appendChild(scale.init());\n                        scale.startScale(img);\n                    } else {\n                        if (scaleCon.style.visibility == \"visible\") {\n                            scaleCon.style.visibility = \"hidden\";\n                            picBoard.style.position = \"\";\n                            picBoard.style.zIndex = \"\";\n                        } else {\n                            scaleCon.style.visibility = \"visible\";\n                            picBoard.style.cssText += \"position:relative;z-index:999\";\n                        }\n                    }\n                }\n            });\n        },\n        _addClearSelectionListenter:function () {\n            var doc = document;\n            domUtils.on(doc, 'mousemove', function (e) {\n                if (browser.ie && browser.version < 11)\n                    doc.selection.clear();\n                else\n                    window.getSelection().removeAllRanges();\n            });\n        },\n        _clearSelection:function () {\n            var list = [\"J_operateBar\", \"J_colorBar\", \"J_brushBar\", \"J_eraserBar\", \"J_picBoard\"];\n            for (var i = 0, group; group = list[i++];) {\n                domUtils.unSelectable($G(group));\n            }\n        },\n\n        _saveOPerate:function (saveNum) {\n            var me = this;\n            if (drawStep.length <= saveNum) {\n                if(drawStepIndex<drawStep.length){\n                    me.btn2disable(\"J_nextStep\");\n                    drawStep.splice(drawStepIndex);\n                }\n                drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n                drawStepIndex = drawStep.length;\n            } else {\n                drawStep.shift();\n                drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n                drawStepIndex = drawStep.length;\n            }\n            me.btn2Highlight(\"J_previousStep\");\n            me.btn2Highlight(\"J_clearBoard\");\n        },\n\n        _originalColorSelect:function (title) {\n            var colorList = $G(\"J_colorList\").getElementsByTagName(\"td\");\n            for (var j = 0, cell; cell = colorList[j++];) {\n                if (cell.children[0].title.toLowerCase() == title) {\n                    cell.children[0].style.opacity = 1;\n                }\n            }\n        },\n        _originalBrushSelect:function (text) {\n            var brushList = $G(\"J_brushBar\").children;\n            for (var i = 0, ele; ele = brushList[i++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    var size = browser.ie ? ele.innerText : ele.text;\n                    if (size.toLowerCase() == text) {\n                        ele.style.opacity = 1;\n                    }\n                }\n            }\n        },\n        _addColorSelect:function (target) {\n            var me = this,\n                colorList = $G(\"J_colorList\").getElementsByTagName(\"td\"),\n                eraserList = $G(\"J_eraserBar\").children,\n                brushList = $G(\"J_brushBar\").children;\n\n            for (var i = 0, cell; cell = colorList[i++];) {\n                cell.children[0].style.opacity = 0.3;\n            }\n            for (var k = 0, ele; ele = brushList[k++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    ele.style.opacity = 0.3;\n                    var size = browser.ie ? ele.innerText : ele.text;\n                    if (size.toLowerCase() == this.brushWidth) {\n                        ele.style.opacity = 1;\n                    }\n                }\n            }\n            for (var j = 0, node; node = eraserList[j++];) {\n                if (node.tagName.toLowerCase() == \"a\") {\n                    node.style.opacity = 0.3;\n                }\n            }\n\n            target.style.opacity = 1;\n            target.blur();\n        },\n        _addBESelect:function (target) {\n            var brushList = $G(\"J_brushBar\").children;\n            var eraserList = $G(\"J_eraserBar\").children;\n\n            for (var i = 0, ele; ele = brushList[i++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    ele.style.opacity = 0.3;\n                }\n            }\n            for (var j = 0, node; node = eraserList[j++];) {\n                if (node.tagName.toLowerCase() == \"a\") {\n                    node.style.opacity = 0.3;\n                }\n            }\n\n            target.style.opacity = 1;\n            target.blur();\n        },\n        getCanvasData:function () {\n            var picContainer = $G(\"J_picBoard\"),\n                img = picContainer.children[0];\n            if (img) {\n                var x, y;\n                if (img.style.position == \"absolute\") {\n                    x = parseInt(img.style.left);\n                    y = parseInt(img.style.top);\n                } else {\n                    x = (picContainer.offsetWidth - img.width) / 2;\n                    y = (picContainer.offsetHeight - img.height) / 2;\n                }\n                context.globalCompositeOperation = \"destination-over\";\n                context.drawImage(img, x, y, img.width, img.height);\n            } else {\n                context.globalCompositeOperation = \"destination-atop\";\n                context.fillStyle = \"#fff\";//重置画布背景白色\n                context.fillRect(0, 0, canvas.width, canvas.height);\n            }\n            try {\n                return canvas.toDataURL(\"image/png\").substring(22);\n            } catch (e) {\n                return \"\";\n            }\n        },\n        btn2Highlight:function (id) {\n            var cur = $G(id);\n            cur.className.indexOf(\"H\") == -1 && (cur.className += \"H\");\n        },\n        btn2disable:function (id) {\n            var cur = $G(id);\n            cur.className.indexOf(\"H\") != -1 && (cur.className = cur.className.replace(\"H\", \"\"));\n        },\n        getTarget:function (evt) {\n            return evt.target || evt.srcElement;\n        }\n    };\n})();\n\nvar ScaleBoy = function () {\n    this.dom = null;\n    this.scalingElement = null;\n};\n(function () {\n    function _appendStyle() {\n        var doc = document,\n            head = doc.getElementsByTagName('head')[0],\n            style = doc.createElement('style'),\n            cssText = '.scale{visibility:hidden;cursor:move;position:absolute;left:0;top:0;width:100px;height:50px;background-color:#fff;font-size:0;line-height:0;opacity:.4;filter:Alpha(opacity=40);}'\n                + '.scale span{position:absolute;left:0;top:0;width:6px;height:6px;background-color:#006DAE;}'\n                + '.scale .hand0, .scale .hand7{cursor:nw-resize;}'\n                + '.scale .hand1, .scale .hand6{left:50%;margin-left:-3px;cursor:n-resize;}'\n                + '.scale .hand2, .scale .hand4, .scale .hand7{left:100%;margin-left:-6px;}'\n                + '.scale .hand3, .scale .hand4{top:50%;margin-top:-3px;cursor:w-resize;}'\n                + '.scale .hand5, .scale .hand6, .scale .hand7{margin-top:-6px;top:100%;}'\n                + '.scale .hand2, .scale .hand5{cursor:ne-resize;}';\n        style.type = 'text/css';\n\n        try {\n            style.appendChild(doc.createTextNode(cssText));\n        } catch (e) {\n            style.styleSheet.cssText = cssText;\n        }\n        head.appendChild(style);\n    }\n\n    function _getDom() {\n        var doc = document,\n            hand,\n            arr = [],\n            scale = doc.createElement('div');\n\n        scale.id = 'J_scaleCon';\n        scale.className = 'scale';\n        for (var i = 0; i < 8; i++) {\n            arr.push(\"<span class='hand\" + i + \"'></span>\");\n        }\n        scale.innerHTML = arr.join(\"\");\n        return scale;\n    }\n\n    var rect = [\n        //[left, top, width, height]\n        [1, 1, -1, -1],\n        [0, 1, 0, -1],\n        [0, 1, 1, -1],\n        [1, 0, -1, 0],\n        [0, 0, 1, 0],\n        [1, 0, -1, 1],\n        [0, 0, 0, 1],\n        [0, 0, 1, 1]\n    ];\n    ScaleBoy.prototype = {\n        init:function () {\n            _appendStyle();\n            var me = this,\n                scale = me.dom = _getDom();\n\n            me.scaleMousemove.fp = me;\n            domUtils.on(scale, 'mousedown', function (e) {\n                var target = e.target || e.srcElement;\n                me.start = {x:e.clientX, y:e.clientY};\n                if (target.className.indexOf('hand') != -1) {\n                    me.dir = target.className.replace('hand', '');\n                }\n                domUtils.on(document.body, 'mousemove', me.scaleMousemove);\n                e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;\n            });\n            domUtils.on(document.body, 'mouseup', function (e) {\n                if (me.start) {\n                    domUtils.un(document.body, 'mousemove', me.scaleMousemove);\n                    if (me.moved) {\n                        me.updateScaledElement({position:{x:scale.style.left, y:scale.style.top}, size:{w:scale.style.width, h:scale.style.height}});\n                    }\n                    delete me.start;\n                    delete me.moved;\n                    delete me.dir;\n                }\n            });\n            return scale;\n        },\n        startScale:function (objElement) {\n            var me = this, Idom = me.dom;\n\n            Idom.style.cssText = 'visibility:visible;top:' + objElement.style.top + ';left:' + objElement.style.left + ';width:' + objElement.offsetWidth + 'px;height:' + objElement.offsetHeight + 'px;';\n            me.scalingElement = objElement;\n        },\n        updateScaledElement:function (objStyle) {\n            var cur = this.scalingElement,\n                pos = objStyle.position,\n                size = objStyle.size;\n            if (pos) {\n                typeof pos.x != 'undefined' && (cur.style.left = pos.x);\n                typeof pos.y != 'undefined' && (cur.style.top = pos.y);\n            }\n            if (size) {\n                size.w && (cur.style.width = size.w);\n                size.h && (cur.style.height = size.h);\n            }\n        },\n        updateStyleByDir:function (dir, offset) {\n            var me = this,\n                dom = me.dom, tmp;\n\n            rect['def'] = [1, 1, 0, 0];\n            if (rect[dir][0] != 0) {\n                tmp = parseInt(dom.style.left) + offset.x;\n                dom.style.left = me._validScaledProp('left', tmp) + 'px';\n            }\n            if (rect[dir][1] != 0) {\n                tmp = parseInt(dom.style.top) + offset.y;\n                dom.style.top = me._validScaledProp('top', tmp) + 'px';\n            }\n            if (rect[dir][2] != 0) {\n                tmp = dom.clientWidth + rect[dir][2] * offset.x;\n                dom.style.width = me._validScaledProp('width', tmp) + 'px';\n            }\n            if (rect[dir][3] != 0) {\n                tmp = dom.clientHeight + rect[dir][3] * offset.y;\n                dom.style.height = me._validScaledProp('height', tmp) + 'px';\n            }\n            if (dir === 'def') {\n                me.updateScaledElement({position:{x:dom.style.left, y:dom.style.top}});\n            }\n        },\n        scaleMousemove:function (e) {\n            var me = arguments.callee.fp,\n                start = me.start,\n                dir = me.dir || 'def',\n                offset = {x:e.clientX - start.x, y:e.clientY - start.y};\n\n            me.updateStyleByDir(dir, offset);\n            arguments.callee.fp.start = {x:e.clientX, y:e.clientY};\n            arguments.callee.fp.moved = 1;\n        },\n        _validScaledProp:function (prop, value) {\n            var ele = this.dom,\n                wrap = $G(\"J_picBoard\");\n\n            value = isNaN(value) ? 0 : value;\n            switch (prop) {\n                case 'left':\n                    return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value;\n                case 'top':\n                    return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value;\n                case 'width':\n                    return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value;\n                case 'height':\n                    return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value;\n            }\n        }\n    };\n})();\n\n//后台回调\nfunction ue_callback(url, state) {\n    var doc = document,\n        picBorard = $G(\"J_picBoard\"),\n        img = doc.createElement(\"img\");\n\n    //图片缩放\n    function scale(img, max, oWidth, oHeight) {\n        var width = 0, height = 0, percent, ow = img.width || oWidth, oh = img.height || oHeight;\n        if (ow > max || oh > max) {\n            if (ow >= oh) {\n                if (width = ow - max) {\n                    percent = (width / ow).toFixed(2);\n                    img.height = oh - oh * percent;\n                    img.width = max;\n                }\n            } else {\n                if (height = oh - max) {\n                    percent = (height / oh).toFixed(2);\n                    img.width = ow - ow * percent;\n                    img.height = max;\n                }\n            }\n        }\n    }\n\n    //移除遮罩层\n    removeMaskLayer();\n    //状态响应\n    if (state == \"SUCCESS\") {\n        picBorard.innerHTML = \"\";\n        img.onload = function () {\n            scale(this, 300);\n            picBorard.appendChild(img);\n\n            var obj = new scrawl();\n            obj.btn2Highlight(\"J_removeImg\");\n            //trace 2457\n            obj.btn2Highlight(\"J_sacleBoard\");\n        };\n        img.src = url;\n    } else {\n        alert(state);\n    }\n}\n//去掉遮罩层\nfunction removeMaskLayer() {\n    var maskLayer = $G(\"J_maskLayer\");\n    maskLayer.className = \"maskLayerNull\";\n    maskLayer.innerHTML = \"\";\n    dialog.buttons[0].setDisabled(false);\n}\n//添加遮罩层\nfunction addMaskLayer(html) {\n    var maskLayer = $G(\"J_maskLayer\");\n    dialog.buttons[0].setDisabled(true);\n    maskLayer.className = \"maskLayer\";\n    maskLayer.innerHTML = html;\n}\n//执行确认按钮方法\nfunction exec(scrawlObj) {\n    if (scrawlObj.isScrawl) {\n        addMaskLayer(lang.scrawlUpLoading);\n        var base64 = scrawlObj.getCanvasData();\n        if (!!base64) {\n            var options = {\n                timeout:100000,\n                onsuccess:function (xhr) {\n                    if (!scrawlObj.isCancelScrawl) {\n                        var responseObj;\n                        responseObj = eval(\"(\" + xhr.responseText + \")\");\n                        if (responseObj.state == \"SUCCESS\") {\n                            var imgObj = {},\n                                url = editor.options.scrawlUrlPrefix + responseObj.url;\n                            imgObj.src = url;\n                            imgObj._src = url;\n                            imgObj.alt = responseObj.original || '';\n                            imgObj.title = responseObj.title || '';\n                            editor.execCommand(\"insertImage\", imgObj);\n                            dialog.close();\n                        } else {\n                            alert(responseObj.state);\n                        }\n\n                    }\n                },\n                onerror:function () {\n                    alert(lang.imageError);\n                    dialog.close();\n                }\n            };\n            options[editor.getOpt('scrawlFieldName')] = base64;\n\n            var actionUrl = editor.getActionUrl(editor.getOpt('scrawlActionName')),\n                params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n                url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + params);\n            ajax.request(url, options);\n        }\n    } else {\n        addMaskLayer(lang.noScarwl + \"&nbsp;&nbsp;&nbsp;<input type='button' value='\" + lang.continueBtn + \"'  onclick='removeMaskLayer()'/>\");\n    }\n}\n\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/searchreplace/searchreplace.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .warpper{ position:relative;width: 380px; height: 100%; margin: 10px auto;}\n        .tabbody{height: 160px;}\n        .tabbody table{width:100%;border-collapse: separate;border-spacing: 3px;}\n        .tabbody .panel{width:373px;height:100%;padding-left: 5px;position: absolute;background-color: #fff;}\n        .tabbody input.int{ width:190px;height:21px;border:1px solid #d7d7d7;line-height:21px;}\n        .tabbody input.btn{padding: 0 5px; text-align:center;line-height:24px; text-decoration: none;height:24px;background:url(\"../../themes/default/images/dialog-title-bg.png\") repeat-x;border:1px solid #ccc; }\n    </style>\n</head>\n<body>\n<div class=\"warpper\" id=\"searchtab\">\n    <div id=\"head\" class=\"tabhead\">\n        <span  tabsrc=\"find\" class=\"focus\"><var id=\"lang_tab_search\"></var></span>\n        <span  tabsrc=\"replace\" ><var id=\"lang_tab_replace\"></var></span>\n    </div>\n    <div class=\"tabbody\">\n        <div class=\"panel\" id=\"find\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search1\"></var>: </td>\n                    <td><input id=\"findtxt\" type=\"text\" class=\"int\" /></td>\n                </tr>\n                <!--<tr>-->\n\n                    <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_case_sensitive1\"></var></td>\n                    <td>\n                        <input id=\"matchCase\" type=\"checkbox\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextFindBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"preFindBtn\" type=\"button\" class=\"btn\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"search-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n        <div class=\"panel\" id=\"replace\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search2\"></var>: </td>\n                    <td><input id=\"findtxt1\" type=\"text\" class=\"int\"  /></td>\n                </tr>\n                <!--<tr>-->\n\n                    <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg1\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_replace\"></var>: </td>\n                    <td><input id=\"replacetxt\" type=\"text\" class=\"int\" /></td>\n                </tr>\n                <tr>\n                    <td><var id=\"lang_case_sensitive2\"></var></td>\n                    <td>\n                        <input id=\"matchCase1\" type=\"checkbox\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextReplaceBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"preReplaceBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"repalceBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"repalceAllBtn\" type=\"button\" class=\"btn\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"replace-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"searchreplace.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/searchreplace/searchreplace.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午12:29\n * To change this template use File | Settings | File Templates.\n */\n\n//清空上次查选的痕迹\neditor.firstForSR = 0;\neditor.currentRangeForSR = null;\n//给tab注册切换事件\n/**\n * tab点击处理事件\n * @param tabHeads\n * @param tabBodys\n * @param obj\n */\nfunction clickHandler( tabHeads,tabBodys,obj ) {\n    //head样式更改\n    for ( var k = 0, len = tabHeads.length; k < len; k++ ) {\n        tabHeads[k].className = \"\";\n    }\n    obj.className = \"focus\";\n    //body显隐\n    var tabSrc = obj.getAttribute( \"tabSrc\" );\n    for ( var j = 0, length = tabBodys.length; j < length; j++ ) {\n        var body = tabBodys[j],\n            id = body.getAttribute( \"id\" );\n        if ( id != tabSrc ) {\n            body.style.zIndex = 1;\n        } else {\n            body.style.zIndex = 200;\n        }\n    }\n\n}\n\n/**\n * TAB切换\n * @param tabParentId  tab的父节点ID或者对象本身\n */\nfunction switchTab( tabParentId ) {\n    var tabElements = $G( tabParentId ).children,\n        tabHeads = tabElements[0].children,\n        tabBodys = tabElements[1].children;\n\n    for ( var i = 0, length = tabHeads.length; i < length; i++ ) {\n        var head = tabHeads[i];\n        if ( head.className === \"focus\" )clickHandler(tabHeads,tabBodys, head );\n        head.onclick = function () {\n            clickHandler(tabHeads,tabBodys,this);\n        }\n    }\n}\n$G('searchtab').onmousedown = function(){\n    $G('search-msg').innerHTML = '';\n    $G('replace-msg').innerHTML = ''\n}\n//是否区分大小写\nfunction getMatchCase(id) {\n    return $G(id).checked ? true : false;\n}\n//查找\n$G(\"nextFindBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:1,\n        casesensitive:getMatchCase(\"matchCase\")\n    };\n    if (!frCommond(obj)) {\n        var bk = editor.selection.getRange().createBookmark();\n        $G('search-msg').innerHTML = lang.getEnd;\n        editor.selection.getRange().moveToBookmark(bk).select();\n\n\n    }\n};\n$G(\"nextReplaceBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt1\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:1,\n        casesensitive:getMatchCase(\"matchCase1\")\n    };\n    frCommond(obj);\n};\n$G(\"preFindBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:-1,\n        casesensitive:getMatchCase(\"matchCase\")\n    };\n    if (!frCommond(obj)) {\n        $G('search-msg').innerHTML = lang.getStart;\n    }\n};\n$G(\"preReplaceBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt1\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:-1,\n        casesensitive:getMatchCase(\"matchCase1\")\n    };\n    frCommond(obj);\n};\n//替换\n$G(\"repalceBtn\").onclick = function () {\n    var findtxt = $G(\"findtxt1\").value.replace(/^\\s|\\s$/g, \"\"), obj,\n        replacetxt = $G(\"replacetxt\").value.replace(/^\\s|\\s$/g, \"\");\n    if (!findtxt) {\n        return false;\n    }\n    if (findtxt == replacetxt || (!getMatchCase(\"matchCase1\") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:1,\n        casesensitive:getMatchCase(\"matchCase1\"),\n        replaceStr:replacetxt\n    };\n    frCommond(obj);\n};\n//全部替换\n$G(\"repalceAllBtn\").onclick = function () {\n    var findtxt = $G(\"findtxt1\").value.replace(/^\\s|\\s$/g, \"\"), obj,\n        replacetxt = $G(\"replacetxt\").value.replace(/^\\s|\\s$/g, \"\");\n    if (!findtxt) {\n        return false;\n    }\n    if (findtxt == replacetxt || (!getMatchCase(\"matchCase1\") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        casesensitive:getMatchCase(\"matchCase1\"),\n        replaceStr:replacetxt,\n        all:true\n    };\n    var num = frCommond(obj);\n    if (num) {\n        $G('replace-msg').innerHTML = lang.countMsg.replace(\"{#count}\", num);\n    }\n};\n//执行\nvar frCommond = function (obj) {\n    return editor.execCommand(\"searchreplace\", obj);\n};\nswitchTab(\"searchtab\");"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/snapscreen/snapscreen.html",
    "content": "<!DOCTYPE HTML>\n<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n        <title></title>\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n        <style type=\"text/css\">\n            *{color: #838383}\n            html,body {\n                font-size: 12px;\n                width:100%;\n                height:100%;\n                overflow: hidden;\n                margin:0px;\n                padding:0px;\n            }\n            h2 { font-size: 16px; margin: 20px auto;}\n            .content{\n                padding:5px 15px 0 15px;\n                height:100%;\n            }\n            dt,dd { margin-left: 0; padding-left: 0;}\n            dt a { display: block;\n                    height: 30px;\n                    line-height: 30px;\n                    width: 55px;\n                    background: #EFEFEF;\n                    border: 1px solid #CCC;\n                    padding: 0 10px;\n                    text-decoration: none;\n            }\n            dt a:hover{\n                background: #e0e0e0;\n                border-color: #999\n            }\n            dt a:active{\n                background: #ccc;\n                border-color: #999;\n                color: #666;\n            }\n            dd { line-height:20px;margin-top: 10px;}\n            span{ padding-right:4px;}\n            input{width:210px;height:21px;background: #FFF;border:1px solid #d7d7d7;padding: 0px; margin: 0px; }\n\n\n        </style>\n    </head>\n    <body>\n        <div class=\"content\">\n            <h2><var id=\"lang_showMsg\"></var></h2>\n            <dl>\n                <dt><a href=\"../../third-party/snapscreen/UEditorSnapscreen.exe\" target=\"_blank\" id=\"downlink\"><var id=\"lang_download\"></var></a></dt>\n                <dd><var id=\"lang_step1\"></var></dd>\n                <dd><var id=\"lang_step2\"></var></dd>\n            </dl>\n        </div>\n    </body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/spechars/spechars.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        html,body{overflow:hidden;}\n        #specharsTab{width: 97%;margin: 10px auto; zoom:1;position: relative}\n        .tabbody {height:447px;}\n        .tabbody span{ margin: 5px 3px;text-align: center;display:inline-block;width: 40px;height:16px;line-height: 16px;cursor: pointer; }\n    </style>\n</head>\n<body>\n    <div id=\"specharsTab\">\n        <div id=\"tabHeads\" class=\"tabhead\"></div><div id=\"tabBodys\" class=\"tabbody\"></div>\n    </div>\n<script type=\"text/javascript\" src=\"spechars.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/spechars/spechars.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午1:09\n * To change this template use File | Settings | File Templates.\n */\nvar charsContent = [\n    { name:\"tsfh\", title:lang.tsfh, content:toArray(\"、,。,·,ˉ,ˇ,¨,〃,々,—,～,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,＄,¤,￠,￡,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,￢,￤,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞\")},\n    { name:\"lmsz\", title:lang.lmsz, content:toArray(\"ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ\")},\n    { name:\"szfh\", title:lang.szfh, content:toArray(\"⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩\")},\n    { name:\"rwfh\", title:lang.rwfh, content:toArray(\"ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ\")},\n    { name:\"xlzm\", title:lang.xlzm, content:toArray(\"Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω\")},\n    { name:\"ewzm\", title:lang.ewzm, content:toArray(\"А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я\")},\n    { name:\"pyzm\", title:lang.pyzm, content:toArray(\"ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü\")},\n    { name:\"yyyb\", title:lang.yyyb, content:toArray(\"i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,\")},\n    { name:\"zyzf\", title:lang.zyzf, content:toArray(\"ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ\")}\n];\n(function createTab(content) {\n    for (var i = 0, ci; ci = content[i++];) {\n        var span = document.createElement(\"span\");\n        span.setAttribute(\"tabSrc\", ci.name);\n        span.innerHTML = ci.title;\n        if (i == 1)span.className = \"focus\";\n        domUtils.on(span, \"click\", function () {\n            var tmps = $G(\"tabHeads\").children;\n            for (var k = 0, sk; sk = tmps[k++];) {\n                sk.className = \"\";\n            }\n            tmps = $G(\"tabBodys\").children;\n            for (var k = 0, sk; sk = tmps[k++];) {\n                sk.style.display = \"none\";\n            }\n            this.className = \"focus\";\n            $G(this.getAttribute(\"tabSrc\")).style.display = \"\";\n        });\n        $G(\"tabHeads\").appendChild(span);\n        domUtils.insertAfter(span, document.createTextNode(\"\\n\"));\n        var div = document.createElement(\"div\");\n        div.id = ci.name;\n        div.style.display = (i == 1) ? \"\" : \"none\";\n        var cons = ci.content;\n        for (var j = 0, con; con = cons[j++];) {\n            var charSpan = document.createElement(\"span\");\n            charSpan.innerHTML = con;\n            domUtils.on(charSpan, \"click\", function () {\n                editor.execCommand(\"insertHTML\", this.innerHTML);\n                dialog.close();\n            });\n            div.appendChild(charSpan);\n        }\n        $G(\"tabBodys\").appendChild(div);\n    }\n})(charsContent);\nfunction toArray(str) {\n    return str.split(\",\");\n}\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/table/edittable.css",
    "content": "body{\n    overflow: hidden;\n    width: 540px;\n}\n.wrapper {\n    margin: 10px auto 0;\n    font-size: 12px;\n    overflow: hidden;\n    width: 520px;\n    height: 315px;\n}\n\n.clear {\n    clear: both;\n}\n\n.wrapper .left {\n    float: left;\n    margin-left: 10px;;\n}\n\n.wrapper .right {\n    float: right;\n    border-left: 2px dotted #EDEDED;\n    padding-left: 15px;\n}\n\n.section {\n    margin-bottom: 15px;\n    width: 240px;\n    overflow: hidden;\n}\n\n.section h3 {\n    font-weight: bold;\n    padding: 5px 0;\n    margin-bottom: 10px;\n    border-bottom: 1px solid #EDEDED;\n    font-size: 12px;\n}\n\n.section ul {\n    list-style: none;\n    overflow: hidden;\n    clear: both;\n\n}\n\n.section li {\n    float: left;\n    width: 120px;;\n}\n\n.section .tone {\n    width: 80px;;\n}\n\n.section .preview {\n    width: 220px;\n}\n\n.section .preview table {\n    text-align: center;\n    vertical-align: middle;\n    color: #666;\n}\n\n.section .preview caption {\n    font-weight: bold;\n}\n\n.section .preview td {\n    border-width: 1px;\n    border-style: solid;\n    height: 22px;\n}\n\n.section .preview th {\n    border-style: solid;\n    border-color: #DDD;\n    border-width: 2px 1px 1px 1px;\n    height: 22px;\n    background-color: #F7F7F7;\n}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/table/edittable.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"edittable.css\">\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"left\">\n        <div class=\"section\">\n            <h3><var id=\"lang_tableStyle\"></var></h3>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_title\" name=\"style\"/><var id=\"lang_insertTitle\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_titleCol\" name=\"style\"/><var id=\"lang_insertTitleCol\"></var></label>\n                </li>\n            </ul>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_caption\" name=\"style\"/><var id=\"lang_insertCaption\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_sorttable\" name=\"style\"/><var id=\"lang_orderbycontent\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_tableSize\"></var></h3>\n            <ul>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizeContent\" name=\"size\"/><var id=\"lang_autoSizeContent\"></var></label>\n                </li>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizePage\" name=\"size\"/><var id=\"lang_autoSizePage\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_borderStyle\"></var></h3>\n            <ul>\n                <li>\n                    <span><var id=\"lang_color\"></var></span>\n                    <input type=\"text\" class=\"tone\" id=\"J_tone\" readonly='readonly' />\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n    </div>\n    <div class=\"right\">\n        <div class=\"section\">\n            <h3><var id=\"lang_example\"></var></h3>\n            <div class=\"preview\" id=\"J_preview\">\n            </div>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"edittable.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/table/edittable.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-12-19\n * Time: 下午4:55\n * To change this template use File | Settings | File Templates.\n */\n(function () {\n    var title = $G(\"J_title\"),\n        titleCol = $G(\"J_titleCol\"),\n        caption = $G(\"J_caption\"),\n        sorttable = $G(\"J_sorttable\"),\n        autoSizeContent = $G(\"J_autoSizeContent\"),\n        autoSizePage = $G(\"J_autoSizePage\"),\n        tone = $G(\"J_tone\"),\n        me,\n        preview = $G(\"J_preview\");\n\n    var editTable = function () {\n        me = this;\n        me.init();\n    };\n    editTable.prototype = {\n        init:function () {\n            var colorPiker = new UE.ui.ColorPicker({\n                    editor:editor\n                }),\n                colorPop = new UE.ui.Popup({\n                    editor:editor,\n                    content:colorPiker\n                });\n\n            title.checked = editor.queryCommandState(\"inserttitle\") == -1;\n            titleCol.checked = editor.queryCommandState(\"inserttitlecol\") == -1;\n            caption.checked = editor.queryCommandState(\"insertcaption\") == -1;\n            sorttable.checked = editor.queryCommandState(\"enablesort\") == 1;\n\n            var enablesortState = editor.queryCommandState(\"enablesort\"),\n                disablesortState = editor.queryCommandState(\"disablesort\");\n\n            sorttable.checked = !!(enablesortState < 0 && disablesortState >=0);\n            sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0);\n            sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg:'';\n\n            me.createTable(title.checked, titleCol.checked, caption.checked);\n            me.setAutoSize();\n            me.setColor(me.getColor());\n\n            domUtils.on(title, \"click\", me.titleHanler);\n            domUtils.on(titleCol, \"click\", me.titleColHanler);\n            domUtils.on(caption, \"click\", me.captionHanler);\n            domUtils.on(sorttable, \"click\", me.sorttableHanler);\n            domUtils.on(autoSizeContent, \"click\", me.autoSizeContentHanler);\n            domUtils.on(autoSizePage, \"click\", me.autoSizePageHanler);\n\n            domUtils.on(tone, \"click\", function () {\n                colorPop.showAnchor(tone);\n            });\n            domUtils.on(document, 'mousedown', function () {\n                colorPop.hide();\n            });\n            colorPiker.addListener(\"pickcolor\", function () {\n                me.setColor(arguments[1]);\n                colorPop.hide();\n            });\n            colorPiker.addListener(\"picknocolor\", function () {\n                me.setColor(\"\");\n                colorPop.hide();\n            });\n        },\n\n        createTable:function (hasTitle, hasTitleCol, hasCaption) {\n            var arr = [],\n                sortSpan = '<span>^</span>';\n            arr.push(\"<table id='J_example'>\");\n            if (hasCaption) {\n                arr.push(\"<caption>\" + lang.captionName + \"</caption>\")\n            }\n            if (hasTitle) {\n                arr.push(\"<tr>\");\n                if(hasTitleCol) { arr.push(\"<th>\" + lang.titleName + \"</th>\"); }\n                for (var j = 0; j < 5; j++) {\n                    arr.push(\"<th>\" + lang.titleName + \"</th>\");\n                }\n                arr.push(\"</tr>\");\n            }\n            for (var i = 0; i < 6; i++) {\n                arr.push(\"<tr>\");\n                if(hasTitleCol) { arr.push(\"<th>\" + lang.titleName + \"</th>\") }\n                for (var k = 0; k < 5; k++) {\n                    arr.push(\"<td>\" + lang.cellsName + \"</td>\")\n                }\n                arr.push(\"</tr>\");\n            }\n            arr.push(\"</table>\");\n            preview.innerHTML = arr.join(\"\");\n            this.updateSortSpan();\n        },\n        titleHanler:function () {\n            var example = $G(\"J_example\"),\n                frg=document.createDocumentFragment(),\n                color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, \"td\")[0], \"border-color\"),\n                colCount = example.rows[0].children.length;\n\n            if (title.checked) {\n                example.insertRow(0);\n                for (var i = 0, node; i < colCount; i++) {\n                    node = document.createElement(\"th\");\n                    node.innerHTML = lang.titleName;\n                    frg.appendChild(node);\n                }\n                example.rows[0].appendChild(frg);\n\n            } else {\n                domUtils.remove(example.rows[0]);\n            }\n            me.setColor(color);\n            me.updateSortSpan();\n        },\n        titleColHanler:function () {\n            var example = $G(\"J_example\"),\n                color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, \"td\")[0], \"border-color\"),\n                colArr = example.rows,\n                colCount = colArr.length;\n\n            if (titleCol.checked) {\n                for (var i = 0, node; i < colCount; i++) {\n                    node = document.createElement(\"th\");\n                    node.innerHTML = lang.titleName;\n                    colArr[i].insertBefore(node, colArr[i].children[0]);\n                }\n            } else {\n                for (var i = 0; i < colCount; i++) {\n                    domUtils.remove(colArr[i].children[0]);\n                }\n            }\n            me.setColor(color);\n            me.updateSortSpan();\n        },\n        captionHanler:function () {\n            var example = $G(\"J_example\");\n            if (caption.checked) {\n                var row = document.createElement('caption');\n                row.innerHTML = lang.captionName;\n                example.insertBefore(row, example.firstChild);\n            } else {\n                domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]);\n            }\n        },\n        sorttableHanler:function(){\n            me.updateSortSpan();\n        },\n        autoSizeContentHanler:function () {\n            var example = $G(\"J_example\");\n            example.removeAttribute(\"width\");\n        },\n        autoSizePageHanler:function () {\n            var example = $G(\"J_example\");\n            var tds = example.getElementsByTagName(example, \"td\");\n            utils.each(tds, function (td) {\n                td.removeAttribute(\"width\");\n            });\n            example.setAttribute('width', '100%');\n        },\n        updateSortSpan: function(){\n            var example = $G(\"J_example\"),\n                row = example.rows[0];\n\n            var spans = domUtils.getElementsByTagName(example,\"span\");\n            utils.each(spans,function(span){\n                span.parentNode.removeChild(span);\n            });\n            if (sorttable.checked) {\n                utils.each(row.cells, function(cell, i){\n                    var span = document.createElement(\"span\");\n                    span.innerHTML = \"^\";\n                    cell.appendChild(span);\n                });\n            }\n        },\n        getColor:function () {\n            var start = editor.selection.getStart(), color,\n                cell = domUtils.findParentByTagName(start, [\"td\", \"th\", \"caption\"], true);\n            color = cell && domUtils.getComputedStyle(cell, \"border-color\");\n            if (!color)  color = \"#DDDDDD\";\n            return color;\n        },\n        setColor:function (color) {\n            var example = $G(\"J_example\"),\n                arr = domUtils.getElementsByTagName(example, \"td\").concat(\n                    domUtils.getElementsByTagName(example, \"th\"),\n                    domUtils.getElementsByTagName(example, \"caption\")\n                );\n\n            tone.value = color;\n            utils.each(arr, function (node) {\n                node.style.borderColor = color;\n            });\n\n        },\n        setAutoSize:function () {\n            var me = this;\n            autoSizePage.checked = true;\n            me.autoSizePageHanler();\n        }\n    };\n\n    new editTable;\n\n    dialog.onok = function () {\n        editor.__hasEnterExecCommand = true;\n\n        var checks = {\n            title:\"inserttitle deletetitle\",\n            titleCol:\"inserttitlecol deletetitlecol\",\n            caption:\"insertcaption deletecaption\",\n            sorttable:\"enablesort disablesort\"\n        };\n        editor.fireEvent('saveScene');\n        for(var i in checks){\n            var cmds = checks[i].split(\" \"),\n                input = $G(\"J_\" + i);\n            if(input[\"checked\"]){\n                editor.queryCommandState(cmds[0])!=-1 &&editor.execCommand(cmds[0]);\n            }else{\n                editor.queryCommandState(cmds[1])!=-1 &&editor.execCommand(cmds[1]);\n            }\n        }\n\n        editor.execCommand(\"edittable\", tone.value);\n        autoSizeContent.checked ?editor.execCommand('adaptbytext') : \"\";\n        autoSizePage.checked ? editor.execCommand(\"adaptbywindow\") : \"\";\n        editor.fireEvent('saveScene');\n\n        editor.__hasEnterExecCommand = false;\n    };\n})();"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/table/edittd.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .section {\n            text-align: center;\n            margin-top: 10px;\n        }\n        .section input {\n            margin-left: 5px;\n            width: 70px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <span><var id=\"lang_tdBkColor\"></var></span>\n    <input type=\"text\" id=\"J_tone\"/>\n</div>\n<script type=\"text/javascript\">\n    var tone = $G(\"J_tone\"),\n            colorPiker = new UE.ui.ColorPicker({\n                editor:editor\n            }),\n            colorPop = new UE.ui.Popup({\n                editor:editor,\n                content:colorPiker\n            });\n    domUtils.on(tone, \"click\", function () {\n        colorPop.showAnchor(tone);\n    });\n    domUtils.on(document, 'mousedown', function () {\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"pickcolor\", function () {\n        tone.value = arguments[1];\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"picknocolor\", function () {\n        tone.value=\"\";\n        colorPop.hide();\n    });\n    dialog.onok=function(){\n        editor.execCommand(\"edittd\",tone.value);\n    };\n\n    var start = editor.selection.getStart(),\n        cell = start && domUtils.findParentByTagName(start, [\"td\", \"th\"], true);\n    if(cell){\n        var color = domUtils.getComputedStyle(cell,'background-color');\n        if(/^#/.test(color)){\n            tone.value = color\n        }\n\n    }\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/table/edittip.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title>表格删除提示</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .section {\n            width: 200px;\n            margin: 10px auto 0;\n            font-size: 14px;\n        }\n\n        .item {\n            text-align: center;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delRow\" name=\"cmd\" checked/><var id=\"lang_delRow\"></var></label>\n    </div>\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delCol\" name=\"cmd\"/><var id=\"lang_delCol\"></var></label>\n    </div>\n</div>\n<script type=\"text/javascript\">\n    dialog.onok = function () {\n        $G(\"J_delRow\").checked ? editor.execCommand(\"deleterow\") : editor.execCommand(\"deletecol\");\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/template/config.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-8-8\n * Time: 下午2:00\n * To change this template use File | Settings | File Templates.\n */\nvar templates = [\n    {\n        \"pre\":\"pre0.png\",\n        'title':lang.blank,\n        'preHtml':'<p class=\"ue_t\">&nbsp;欢迎使用UEditor！</p>',\n        \"html\":'<p class=\"ue_t\">欢迎使用UEditor！</p>'\n\n    },\n    {\n        \"pre\":\"pre1.png\",\n        'title':lang.blog,\n        'preHtml':'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">深入理解Range</span></h1><p style=\"text-align:center;\"><strong class=\" \">UEditor二次开发</strong></p><h3><span class=\" \" style=\"font-family:幼圆\">什么是Range</span></h3><p style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 </p><br /><h3><span class=\" \" style=\"font-family:幼圆\">Range能干什么</span></h3><p style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。</p>',\n        \"html\":'<h1 class=\"ue_t\" label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">[键入文档标题]</span></h1><p style=\"text-align:center;\"><strong class=\"ue_t\">[键入文档副标题]</strong></p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 1]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 2]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。 您还可以使用“开始”选项卡上的其他控件来直接设置文本格式。大多数控件都允许您选择是使用当前主题外观，还是使用某种直接指定的格式。 </p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 3]</span></h3><p class=\"ue_t\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><p class=\"ue_t\"><br /></p>'\n\n    },\n    {\n        \"pre\":\"pre2.png\",\n        'title':lang.resume,\n        'preHtml':'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\" \">WEB前端开发简历</span></h1><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"100\" style=\"text-align:center;\"><p><span style=\"background-color:transparent;\">插</span><br /></p><p>入</p><p>照</p><p>片</p></td><td><p><span style=\"background-color:transparent;\"> 联系电话：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电话]</span><br /></p><p><span style=\"background-color:transparent;\"> 电子邮件：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电子邮件地址]</span><br /></p><p><span style=\"background-color:transparent;\"> 家庭住址：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的地址]</span><br /></p></td></tr></tbody></table><h3><span style=\"color:#E36C09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\" \">WEB前端研发工程师</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">﻿</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[起止时间]</span> <span class=\"ue_t\">[学校名称] </span> <span class=\"ue_t\">[所学专业]</span> <span class=\"ue_t\">[所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><p><br /></p>',\n        \"html\":'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\"ue_t\">[此处键入简历标题]</span></h1><p><span style=\"color:#e36c09;\"><br /></span></p><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"200\" style=\"text-align:center;\" class=\"ue_t\">【此处插入照片】</td><td><p><br /></p><p> 联系电话：<span class=\"ue_t\">[键入您的电话]</span></p><p><br /></p><p> 电子邮件：<span class=\"ue_t\">[键入您的电子邮件地址]</span></p><p><br /></p><p> 家庭住址：<span class=\"ue_t\">[键入您的地址]</span></p><p><br /></p></td></tr></tbody></table><h3><span style=\"color:#e36c09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\"ue_t\">[此处键入您的期望职位]</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">﻿</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称] </span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称]</span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol></ol><p><span style=\"color:#e36c09;font-size:20px;\">掌握技能</span></p><p style=\"text-indent:2em;\"> &nbsp;<span class=\"ue_t\">[这里可以键入您所掌握的技能]</span><br /></p>'\n\n    },\n    {\n        \"pre\":\"pre3.png\",\n        'title':lang.richText,\n        'preHtml':'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"150\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:150px;height:100px;float:left;\" />图文混排方法</p><p>图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文</p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"100\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:100px;height:100px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p>',\n        \"html\":'<p><br /></p><h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"300\" height=\"200\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:200px;float:left;\" />图文混排方法</p><p>1. 图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文本</p><p><br /></p><p>2. 图片居右，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居右对齐，然后即可在左边输入多行文本</p><p><br /></p><p>3. 图片居中环绕排版</p><p>方法：亲，这个真心没有办法。。。</p><p><br /></p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"300\" height=\"300\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:300px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p><br /></p>'\n    },\n    {\n        \"pre\":\"pre4.png\",\n        'title':lang.sciPapers,\n        'preHtml':'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><br /></p>',\n        'html':'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个列表瞅瞅：</span></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以多行</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">右边是图片</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">绝对没有问题的，不信你也可以试试看</span></p><p><br /></p>'\n    }\n];"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/template/template.css",
    "content": ".wrap{ padding: 5px;font-size: 14px;}\n.left{width:425px;float: left;}\n.right{width:160px;border: 1px solid #ccc;float: right;padding: 5px;margin-right: 5px;}\n.right .pre{height: 332px;overflow-y: auto;}\n.right .preitem{border: white 1px solid;margin: 5px 0;padding: 2px 0;}\n.right .preitem:hover{background-color: lemonChiffon;cursor: pointer;border: #ccc 1px solid;}\n.right .preitem img{display: block;margin: 0 auto;width:100px;}\n.clear{clear: both;}\n.top{height:26px;line-height: 26px;padding: 5px;}\n.bottom{height:320px;width:100%;margin: 0 auto;}\n.transparent{ background: url(\"images/bg.gif\") repeat;}\n.bottom table tr td{border:1px dashed #ccc;}\n#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;}\n.border_style1{padding:2px;border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}\np{margin: 5px 0}\ntable{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all;}\nli{clear:both}\nol{padding-left:40px; }"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/template/template.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"template.css\">\n</head>\n<body>\n    <div class=\"wrap\">\n        <div class=\"left\">\n            <div class=\"top\">\n                <label><var id=\"lang_template_clear\"></var>：<input id=\"issave\" type=\"checkbox\"></label>\n            </div>\n            <div class=\"bottom border_style1\" id=\"preview\"></div>\n        </div>\n        <fieldset  class=\"right border_style1\">\n            <legend><var id=\"lang_template_select\"></var></legend>\n            <div class=\"pre\" id=\"preitem\"></div>\n        </fieldset>\n        <div class=\"clear\"></div>\n    </div>\n    <script type=\"text/javascript\" src=\"config.js\"></script>\n    <script type=\"text/javascript\" src=\"template.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/template/template.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-8-8\n * Time: 下午2:09\n * To change this template use File | Settings | File Templates.\n */\n(function () {\n    var me = editor,\n            preview = $G( \"preview\" ),\n            preitem = $G( \"preitem\" ),\n            tmps = templates,\n            currentTmp;\n    var initPre = function () {\n        var str = \"\";\n        for ( var i = 0, tmp; tmp = tmps[i++]; ) {\n            str += '<div class=\"preitem\" onclick=\"pre(' + i + ')\"><img src=\"' + \"images/\" + tmp.pre + '\" ' + (tmp.title ? \"alt=\" + tmp.title + \" title=\" + tmp.title + \"\" : \"\") + '></div>';\n        }\n        preitem.innerHTML = str;\n    };\n    var pre = function ( n ) {\n        var tmp = tmps[n - 1];\n        currentTmp = tmp;\n        clearItem();\n        domUtils.setStyles( preitem.childNodes[n - 1], {\n            \"background-color\":\"lemonChiffon\",\n            \"border\":\"#ccc 1px solid\"\n        } );\n        preview.innerHTML = tmp.preHtml ? tmp.preHtml : \"\";\n    };\n    var clearItem = function () {\n        var items = preitem.children;\n        for ( var i = 0, item; item = items[i++]; ) {\n            domUtils.setStyles( item, {\n                \"background-color\":\"\",\n                \"border\":\"white 1px solid\"\n            } );\n        }\n    };\n    dialog.onok = function () {\n        if ( !$G( \"issave\" ).checked ){\n            me.execCommand( \"cleardoc\" );\n        }\n        var obj = {\n            html:currentTmp && currentTmp.html\n        };\n        me.execCommand( \"template\", obj );\n    };\n    initPre();\n    window.pre = pre;\n    pre(2)\n\n})();"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/video/video.css",
    "content": "@charset \"utf-8\";\n.wrapper{ width: 570px;_width:575px;margin: 10px auto; zoom:1;position: relative}\n.tabbody{height: 335px;}\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n.tabbody .panel.focus {\n    width: 100%;\n    height: 335px;\n    display: block;\n}\n\n.tabbody .panel table td{vertical-align: middle;}\n#videoUrl {\n    width: 490px;\n    height: 21px;\n    line-height: 21px;\n    margin: 8px 5px;\n    background: #FFF;\n    border: 1px solid #d7d7d7;\n}\n#videoSearchTxt{margin-left:15px;background: #FFF;width:200px;height:21px;line-height:21px;border: 1px solid #d7d7d7;}\n#searchList{width: 570px;overflow: auto;zoom:1;height: 270px;}\n#searchList div{float: left;width: 120px;height: 135px;margin: 5px 15px;}\n#searchList img{margin: 2px 8px;cursor: pointer;border: 2px solid #fff} /*不用缩略图*/\n#searchList p{margin-left: 10px;}\n#videoType{\n    width: 65px;\n    height: 23px;\n    line-height: 22px;\n    border: 1px solid #d7d7d7;\n}\n#videoSearchBtn,#videoSearchReset{\n    /*width: 80px;*/\n    height: 25px;\n    line-height: 25px;\n    background: #eee;\n    border: 1px solid #d7d7d7;\n    cursor: pointer;\n    padding: 0 5px;\n}\n\n\n\n#preview{position: relative;width: 420px;padding:0;overflow: hidden; margin-left: 10px; _margin-left:5px; height: 280px;background-color: #ddd;float: left}\n#preview .previewMsg {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color: #666;}\n#preview .previewMsg span{display:block;margin: 125px auto 0 auto;text-align:center;font-size:18px;color:#fff;}\n#preview .previewVideo {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;}\n.edui-video-wrapper fieldset{\n    border: 1px solid #ddd;\n    padding-left: 5px;\n    margin-bottom: 20px;\n    padding-bottom: 5px;\n    width: 115px;\n}\n\n#videoInfo {width: 120px;float: left;margin-left: 10px;_margin-left:7px;}\nfieldset{\n    border: 1px solid #ddd;\n    padding-left: 5px;\n    margin-bottom: 20px;\n    padding-bottom: 5px;\n    width: 115px;\n}\nfieldset legend{font-weight: bold;}\nfieldset p{line-height: 30px;}\nfieldset input.txt{\n    width: 65px;\n    height: 21px;\n    line-height: 21px;\n    margin: 8px 5px;\n    background: #FFF;\n    border: 1px solid #d7d7d7;\n}\nlabel.url{font-weight: bold;margin-left: 5px;color: #06c;}\n#videoFloat div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;}\n#videoFloat .focus{opacity: 1;filter: alpha(opacity = 100)}\nspan.view{display: inline-block;width: 30px;float: right;cursor: pointer;color: blue}\n\n\n\n\n/* upload video */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 335px;\n    display: block;\n    clip: auto;\n}\n#upload_alignment div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;}\n#upload_alignment .focus{opacity: 1;filter: alpha(opacity = 100)}\n#upload_left { width:427px; float:left; }\n#upload_left .controller { height: 30px; clear: both; }\n#uploadVideoInfo{margin-top:10px;float:right;padding-right:8px;}\n\n#upload .queueList {\n    margin: 0;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    margin-right:0;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 161px;\n    padding-top: 150px;\n    text-align: center;\n    width: 97%;\n    float: left;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top:0;\n    *margin-left: 0;\n    *left: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 285px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 15px 0 0 20px;\n    *margin: 15px 0 0 15px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n#upload .filelist li p.imgWrap.notimage {\n    margin-top: 0;\n    width: 111px;\n    height: 111px;\n    border: 1px #eeeeee solid;\n}\n#upload .filelist li p.imgWrap.notimage i.file-preview {\n    margin-top: 15px;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display:none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background-image: url(./images/success.gif) \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n#upload .filelist li.filePickerBlock div.webuploader-pick  {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display:none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display:none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused{\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover{\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter:alpha(opacity=60);\n    -moz-opacity:0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n/* 在线文件的文件预览图标 */\ni.file-preview {\n    display: block;\n    margin: 10px auto;\n    width: 70px;\n    height: 70px;\n    background-image: url(\"./images/file-icons.png\");\n    background-image: url(\"./images/file-icons.gif\") \\9;\n    background-position: -140px center;\n    background-repeat: no-repeat;\n}\ni.file-preview.file-type-dir{\n    background-position: 0 center;\n}\ni.file-preview.file-type-file{\n    background-position: -140px center;\n}\ni.file-preview.file-type-filelist{\n    background-position: -210px center;\n}\ni.file-preview.file-type-zip,\ni.file-preview.file-type-rar,\ni.file-preview.file-type-7z,\ni.file-preview.file-type-tar,\ni.file-preview.file-type-gz,\ni.file-preview.file-type-bz2{\n    background-position: -280px center;\n}\ni.file-preview.file-type-xls,\ni.file-preview.file-type-xlsx{\n    background-position: -350px center;\n}\ni.file-preview.file-type-doc,\ni.file-preview.file-type-docx{\n    background-position: -420px center;\n}\ni.file-preview.file-type-ppt,\ni.file-preview.file-type-pptx{\n    background-position: -490px center;\n}\ni.file-preview.file-type-vsd{\n    background-position: -560px center;\n}\ni.file-preview.file-type-pdf{\n    background-position: -630px center;\n}\ni.file-preview.file-type-txt,\ni.file-preview.file-type-md,\ni.file-preview.file-type-json,\ni.file-preview.file-type-htm,\ni.file-preview.file-type-xml,\ni.file-preview.file-type-html,\ni.file-preview.file-type-js,\ni.file-preview.file-type-css,\ni.file-preview.file-type-php,\ni.file-preview.file-type-jsp,\ni.file-preview.file-type-asp{\n    background-position: -700px center;\n}\ni.file-preview.file-type-apk{\n    background-position: -770px center;\n}\ni.file-preview.file-type-exe{\n    background-position: -840px center;\n}\ni.file-preview.file-type-ipa{\n    background-position: -910px center;\n}\ni.file-preview.file-type-mp4,\ni.file-preview.file-type-swf,\ni.file-preview.file-type-mkv,\ni.file-preview.file-type-avi,\ni.file-preview.file-type-flv,\ni.file-preview.file-type-mov,\ni.file-preview.file-type-mpg,\ni.file-preview.file-type-mpeg,\ni.file-preview.file-type-ogv,\ni.file-preview.file-type-webm,\ni.file-preview.file-type-rm,\ni.file-preview.file-type-rmvb{\n    background-position: -980px center;\n}\ni.file-preview.file-type-ogg,\ni.file-preview.file-type-wav,\ni.file-preview.file-type-wmv,\ni.file-preview.file-type-mid,\ni.file-preview.file-type-mp3{\n    background-position: -1050px center;\n}\ni.file-preview.file-type-jpg,\ni.file-preview.file-type-jpeg,\ni.file-preview.file-type-gif,\ni.file-preview.file-type-bmp,\ni.file-preview.file-type-png,\ni.file-preview.file-type-psd{\n    background-position: -140px center;\n}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/video/video.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"video.css\" />\n</head>\n<body>\n<div class=\"wrapper\">\n    <div id=\"videoTab\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span tabSrc=\"video\" class=\"focus\" data-content-id=\"video\"><var id=\"lang_tab_insertV\"></var></span>\n            <span tabSrc=\"upload\" data-content-id=\"upload\"><var id=\"lang_tab_uploadV\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"video\" class=\"panel focus\">\n               <table><tr><td><label for=\"videoUrl\" class=\"url\"><var id=\"lang_video_url\"></var></label></td><td><input id=\"videoUrl\" type=\"text\"></td></tr></table>\n               <div id=\"preview\"></div>\n               <div id=\"videoInfo\">\n                   <fieldset>\n                       <legend><var id=\"lang_video_size\"></var></legend>\n                       <table>\n                           <tr><td><label for=\"videoWidth\"><var id=\"lang_videoW\"></var></label></td><td><input class=\"txt\" id=\"videoWidth\" type=\"text\"/></td></tr>\n                           <tr><td><label for=\"videoHeight\"><var id=\"lang_videoH\"></var></label></td><td><input class=\"txt\" id=\"videoHeight\" type=\"text\"/></td></tr>\n                       </table>\n                   </fieldset>\n                   <fieldset>\n                      <legend><var id=\"lang_alignment\"></var></legend>\n                      <div id=\"videoFloat\"></div>\n                  </fieldset>\n               </div>\n            </div>\n            <div id=\"upload\" class=\"panel\">\n                <div id=\"upload_left\">\n                    <div id=\"queueList\" class=\"queueList\">\n                        <div class=\"statusBar element-invisible\">\n                            <div class=\"progress\">\n                                <span class=\"text\">0%</span>\n                                <span class=\"percentage\"></span>\n                            </div><div class=\"info\"></div>\n                            <div class=\"btns\">\n                                <div id=\"filePickerBtn\"></div>\n                                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                            </div>\n                        </div>\n                        <div id=\"dndArea\" class=\"placeholder\">\n                            <div class=\"filePickerContainer\">\n                                <div id=\"filePickerReady\"></div>\n                            </div>\n                        </div>\n                        <ul class=\"filelist element-invisible\">\n                            <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                        </ul>\n                    </div>\n                </div>\n                <div id=\"uploadVideoInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_upload_size\"></var></legend>\n                        <table>\n                            <tr><td><label><var id=\"lang_upload_width\"></var></label></td><td><input class=\"txt\" id=\"upload_width\" type=\"text\"/></td></tr>\n                            <tr><td><label><var id=\"lang_upload_height\"></var></label></td><td><input class=\"txt\" id=\"upload_height\" type=\"text\"/></td></tr>\n                        </table>\n                    </fieldset>\n                    <fieldset>\n                        <legend><var id=\"lang_upload_alignment\"></var></legend>\n                        <div id=\"upload_alignment\"></div>\n                    </fieldset>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- jquery -->\n<script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.min.js\"></script>\n\n<!-- webuploader -->\n<script type=\"text/javascript\" src=\"../../third-party/webuploader/webuploader.min.js\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css\">\n\n<!-- video -->\n<script type=\"text/javascript\" src=\"video.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/video/video.js",
    "content": "/**\n * Created by JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-2-20\n * Time: 上午11:19\n * To change this template use File | Settings | File Templates.\n */\n\n(function(){\n\n    var video = {},\n        uploadVideoList = [],\n        isModifyUploadVideo = false,\n        uploadFile;\n\n    window.onload = function(){\n        $focus($G(\"videoUrl\"));\n        initTabs();\n        initVideo();\n        initUpload();\n    };\n\n    /* 初始化tab标签 */\n    function initTabs(){\n        var tabs = $G('tabHeads').children;\n        for (var i = 0; i < tabs.length; i++) {\n            domUtils.on(tabs[i], \"click\", function (e) {\n                var j, bodyId, target = e.target || e.srcElement;\n                for (j = 0; j < tabs.length; j++) {\n                    bodyId = tabs[j].getAttribute('data-content-id');\n                    if(tabs[j] == target){\n                        domUtils.addClass(tabs[j], 'focus');\n                        domUtils.addClass($G(bodyId), 'focus');\n                    }else {\n                        domUtils.removeClasses(tabs[j], 'focus');\n                        domUtils.removeClasses($G(bodyId), 'focus');\n                    }\n                }\n            });\n        }\n    }\n\n    function initVideo(){\n        createAlignButton( [\"videoFloat\", \"upload_alignment\"] );\n        addUrlChangeListener($G(\"videoUrl\"));\n        addOkListener();\n\n        //编辑视频时初始化相关信息\n        (function(){\n            var img = editor.selection.getRange().getClosedNode(),url;\n            if(img && img.className){\n                var hasFakedClass = (img.className == \"edui-faked-video\"),\n                    hasUploadClass = img.className.indexOf(\"edui-upload-video\")!=-1;\n                if(hasFakedClass || hasUploadClass) {\n                    $G(\"videoUrl\").value = url = img.getAttribute(\"_url\");\n                    $G(\"videoWidth\").value = img.width;\n                    $G(\"videoHeight\").value = img.height;\n                    var align = domUtils.getComputedStyle(img,\"float\"),\n                        parentAlign = domUtils.getComputedStyle(img.parentNode,\"text-align\");\n                    updateAlignButton(parentAlign===\"center\"?\"center\":align);\n                }\n                if(hasUploadClass) {\n                    isModifyUploadVideo = true;\n                }\n            }\n            createPreviewVideo(url);\n        })();\n    }\n\n    /**\n     * 监听确认和取消两个按钮事件，用户执行插入或者清空正在播放的视频实例操作\n     */\n    function addOkListener(){\n        dialog.onok = function(){\n            $G(\"preview\").innerHTML = \"\";\n            var currentTab =  findFocus(\"tabHeads\",\"tabSrc\");\n            switch(currentTab){\n                case \"video\":\n                    return insertSingle();\n                    break;\n                case \"videoSearch\":\n                    return insertSearch(\"searchList\");\n                    break;\n                case \"upload\":\n                    return insertUpload();\n                    break;\n            }\n        };\n        dialog.oncancel = function(){\n            $G(\"preview\").innerHTML = \"\";\n        };\n    }\n\n    /**\n     * 依据传入的align值更新按钮信息\n     * @param align\n     */\n    function updateAlignButton( align ) {\n        var aligns = $G( \"videoFloat\" ).children;\n        for ( var i = 0, ci; ci = aligns[i++]; ) {\n            if ( ci.getAttribute( \"name\" ) == align ) {\n                if ( ci.className !=\"focus\" ) {\n                    ci.className = \"focus\";\n                }\n            } else {\n                if ( ci.className ==\"focus\" ) {\n                    ci.className = \"\";\n                }\n            }\n        }\n    }\n\n    /**\n     * 将单个视频信息插入编辑器中\n     */\n    function insertSingle(){\n        var width = $G(\"videoWidth\"),\n            height = $G(\"videoHeight\"),\n            url=$G('videoUrl').value,\n            align = findFocus(\"videoFloat\",\"name\");\n        if(!url) return false;\n        if ( !checkNum( [width, height] ) ) return false;\n        editor.execCommand('insertvideo', {\n            url: convert_url(url),\n            width: width.value,\n            height: height.value,\n            align: align\n        }, isModifyUploadVideo ? 'upload':null);\n    }\n\n    /**\n     * 将元素id下的所有代表视频的图片插入编辑器中\n     * @param id\n     */\n    function insertSearch(id){\n        var imgs = domUtils.getElementsByTagName($G(id),\"img\"),\n            videoObjs=[];\n        for(var i=0,img; img=imgs[i++];){\n            if(img.getAttribute(\"selected\")){\n                videoObjs.push({\n                    url:img.getAttribute(\"ue_video_url\"),\n                    width:420,\n                    height:280,\n                    align:\"none\"\n                });\n            }\n        }\n        editor.execCommand('insertvideo',videoObjs);\n    }\n\n    /**\n     * 找到id下具有focus类的节点并返回该节点下的某个属性\n     * @param id\n     * @param returnProperty\n     */\n    function findFocus( id, returnProperty ) {\n        var tabs = $G( id ).children,\n                property;\n        for ( var i = 0, ci; ci = tabs[i++]; ) {\n            if ( ci.className==\"focus\" ) {\n                property = ci.getAttribute( returnProperty );\n                break;\n            }\n        }\n        return property;\n    }\n    function convert_url(url){\n        if ( !url ) return '';\n        url = utils.trim(url)\n            .replace(/v\\.youku\\.com\\/v_show\\/id_([\\w\\-=]+)\\.html/i, 'player.youku.com/player.php/sid/$1/v.swf')\n            .replace(/(www\\.)?youtube\\.com\\/watch\\?v=([\\w\\-]+)/i, \"www.youtube.com/v/$2\")\n            .replace(/youtu.be\\/(\\w+)$/i, \"www.youtube.com/v/$1\")\n            .replace(/v\\.ku6\\.com\\/.+\\/([\\w\\.]+)\\.html.*$/i, \"player.ku6.com/refer/$1/v.swf\")\n            .replace(/www\\.56\\.com\\/u\\d+\\/v_([\\w\\-]+)\\.html/i, \"player.56.com/v_$1.swf\")\n            .replace(/www.56.com\\/w\\d+\\/play_album\\-aid\\-\\d+_vid\\-([^.]+)\\.html/i, \"player.56.com/v_$1.swf\")\n            .replace(/v\\.pps\\.tv\\/play_([\\w]+)\\.html.*$/i, \"player.pps.tv/player/sid/$1/v.swf\")\n            .replace(/www\\.letv\\.com\\/ptv\\/vplay\\/([\\d]+)\\.html.*$/i, \"i7.imgs.letv.com/player/swfPlayer.swf?id=$1&autoplay=0\")\n            .replace(/www\\.tudou\\.com\\/programs\\/view\\/([\\w\\-]+)\\/?/i, \"www.tudou.com/v/$1\")\n            .replace(/v\\.qq\\.com\\/cover\\/[\\w]+\\/[\\w]+\\/([\\w]+)\\.html/i, \"static.video.qq.com/TPout.swf?vid=$1\")\n            .replace(/v\\.qq\\.com\\/.+[\\?\\&]vid=([^&]+).*$/i, \"static.video.qq.com/TPout.swf?vid=$1\")\n            .replace(/my\\.tv\\.sohu\\.com\\/[\\w]+\\/[\\d]+\\/([\\d]+)\\.shtml.*$/i, \"share.vrs.sohu.com/my/v.swf&id=$1\");\n\n        return url;\n    }\n\n    /**\n      * 检测传入的所有input框中输入的长宽是否是正数\n      * @param nodes input框集合，\n      */\n     function checkNum( nodes ) {\n         for ( var i = 0, ci; ci = nodes[i++]; ) {\n             var value = ci.value;\n             if ( !isNumber( value ) && value) {\n                 alert( lang.numError );\n                 ci.value = \"\";\n                 ci.focus();\n                 return false;\n             }\n         }\n         return true;\n     }\n\n    /**\n     * 数字判断\n     * @param value\n     */\n    function isNumber( value ) {\n        return /(0|^[1-9]\\d*$)/.test( value );\n    }\n\n    /**\n      * 创建图片浮动选择按钮\n      * @param ids\n      */\n     function createAlignButton( ids ) {\n         for ( var i = 0, ci; ci = ids[i++]; ) {\n             var floatContainer = $G( ci ),\n                     nameMaps = {\"none\":lang['default'], \"left\":lang.floatLeft, \"right\":lang.floatRight, \"center\":lang.block};\n             for ( var j in nameMaps ) {\n                 var div = document.createElement( \"div\" );\n                 div.setAttribute( \"name\", j );\n                 if ( j == \"none\" ) div.className=\"focus\";\n                 div.style.cssText = \"background:url(images/\" + j + \"_focus.jpg);\";\n                 div.setAttribute( \"title\", nameMaps[j] );\n                 floatContainer.appendChild( div );\n             }\n             switchSelect( ci );\n         }\n     }\n\n    /**\n     * 选择切换\n     * @param selectParentId\n     */\n    function switchSelect( selectParentId ) {\n        var selects = $G( selectParentId ).children;\n        for ( var i = 0, ci; ci = selects[i++]; ) {\n            domUtils.on( ci, \"click\", function () {\n                for ( var j = 0, cj; cj = selects[j++]; ) {\n                    cj.className = \"\";\n                    cj.removeAttribute && cj.removeAttribute( \"class\" );\n                }\n                this.className = \"focus\";\n            } )\n        }\n    }\n\n    /**\n     * 监听url改变事件\n     * @param url\n     */\n    function addUrlChangeListener(url){\n        if (browser.ie) {\n            url.onpropertychange = function () {\n                createPreviewVideo( this.value );\n            }\n        } else {\n            url.addEventListener( \"input\", function () {\n                createPreviewVideo( this.value );\n            }, false );\n        }\n    }\n\n    /**\n     * 根据url生成视频预览\n     * @param url\n     */\n    function createPreviewVideo(url){\n        if ( !url )return;\n\n        var conUrl = convert_url(url);\n\n        conUrl = utils.unhtmlForUrl(conUrl);\n\n        $G(\"preview\").innerHTML = '<div class=\"previewMsg\"><span>'+lang.urlError+'</span></div>'+\n        '<embed class=\"previewVideo\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"' +\n            ' src=\"' + conUrl + '\"' +\n            ' width=\"' + 420  + '\"' +\n            ' height=\"' + 280  + '\"' +\n            ' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >' +\n        '</embed>';\n    }\n\n\n    /* 插入上传视频 */\n    function insertUpload(){\n        var videoObjs=[],\n            uploadDir = editor.getOpt('videoUrlPrefix'),\n            width = parseInt($G('upload_width').value, 10) || 420,\n            height = parseInt($G('upload_height').value, 10) || 280,\n            align = findFocus(\"upload_alignment\",\"name\") || 'none';\n        for(var key in uploadVideoList) {\n            var file = uploadVideoList[key];\n            videoObjs.push({\n                url: uploadDir + file.url,\n                width:width,\n                height:height,\n                align:align\n            });\n        }\n\n        var count = uploadFile.getQueueCount();\n        if (count) {\n            $('.info', '#queueList').html('<span style=\"color:red;\">' + '还有2个未上传文件'.replace(/[\\d]/, count) + '</span>');\n            return false;\n        } else {\n            editor.execCommand('insertvideo', videoObjs, 'upload');\n        }\n    }\n\n    /*初始化上传标签*/\n    function initUpload(){\n        uploadFile = new UploadFile('queueList');\n    }\n\n\n    /* 上传附件 */\n    function UploadFile(target) {\n        this.$wrap = target.constructor == String ? $('#' + target) : $(target);\n        this.init();\n    }\n    UploadFile.prototype = {\n        init: function () {\n            this.fileList = [];\n            this.initContainer();\n            this.initUploader();\n        },\n        initContainer: function () {\n            this.$queue = this.$wrap.find('.filelist');\n        },\n        /* 初始化容器 */\n        initUploader: function () {\n            var _this = this,\n                $ = jQuery,    // just in case. Make sure it's not an other libaray.\n                $wrap = _this.$wrap,\n            // 图片容器\n                $queue = $wrap.find('.filelist'),\n            // 状态栏，包括进度和控制按钮\n                $statusBar = $wrap.find('.statusBar'),\n            // 文件总体选择信息。\n                $info = $statusBar.find('.info'),\n            // 上传按钮\n                $upload = $wrap.find('.uploadBtn'),\n            // 上传按钮\n                $filePickerBtn = $wrap.find('.filePickerBtn'),\n            // 上传按钮\n                $filePickerBlock = $wrap.find('.filePickerBlock'),\n            // 没选择文件之前的内容。\n                $placeHolder = $wrap.find('.placeholder'),\n            // 总体进度条\n                $progress = $statusBar.find('.progress').hide(),\n            // 添加的文件数量\n                fileCount = 0,\n            // 添加的文件总大小\n                fileSize = 0,\n            // 优化retina, 在retina下这个值是2\n                ratio = window.devicePixelRatio || 1,\n            // 缩略图大小\n                thumbnailWidth = 113 * ratio,\n                thumbnailHeight = 113 * ratio,\n            // 可能有pedding, ready, uploading, confirm, done.\n                state = '',\n            // 所有文件的进度信息，key为file id\n                percentages = {},\n                supportTransition = (function () {\n                    var s = document.createElement('p').style,\n                        r = 'transition' in s ||\n                            'WebkitTransition' in s ||\n                            'MozTransition' in s ||\n                            'msTransition' in s ||\n                            'OTransition' in s;\n                    s = null;\n                    return r;\n                })(),\n            // WebUploader实例\n                uploader,\n                actionUrl = editor.getActionUrl(editor.getOpt('videoActionName')),\n                fileMaxSize = editor.getOpt('videoMaxSize'),\n                acceptExtensions = (editor.getOpt('videoAllowFiles') || []).join('').replace(/\\./g, ',').replace(/^[,]/, '');;\n\n            if (!WebUploader.Uploader.support()) {\n                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();\n                return;\n            } else if (!editor.getOpt('videoActionName')) {\n                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();\n                return;\n            }\n\n            uploader = _this.uploader = WebUploader.create({\n                pick: {\n                    id: '#filePickerReady',\n                    label: lang.uploadSelectFile\n                },\n                swf: '../../third-party/webuploader/Uploader.swf',\n                server: actionUrl,\n                fileVal: editor.getOpt('videoFieldName'),\n                duplicate: true,\n                fileSingleSizeLimit: fileMaxSize,\n                compress: false\n            });\n            uploader.addButton({\n                id: '#filePickerBlock'\n            });\n            uploader.addButton({\n                id: '#filePickerBtn',\n                label: lang.uploadAddFile\n            });\n\n            setState('pedding');\n\n            // 当有文件添加进来时执行，负责view的创建\n            function addFile(file) {\n                var $li = $('<li id=\"' + file.id + '\">' +\n                        '<p class=\"title\">' + file.name + '</p>' +\n                        '<p class=\"imgWrap\"></p>' +\n                        '<p class=\"progress\"><span></span></p>' +\n                        '</li>'),\n\n                    $btns = $('<div class=\"file-panel\">' +\n                        '<span class=\"cancel\">' + lang.uploadDelete + '</span>' +\n                        '<span class=\"rotateRight\">' + lang.uploadTurnRight + '</span>' +\n                        '<span class=\"rotateLeft\">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),\n                    $prgress = $li.find('p.progress span'),\n                    $wrap = $li.find('p.imgWrap'),\n                    $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n\n                    showError = function (code) {\n                        switch (code) {\n                            case 'exceed_size':\n                                text = lang.errorExceedSize;\n                                break;\n                            case 'interrupt':\n                                text = lang.errorInterrupt;\n                                break;\n                            case 'http':\n                                text = lang.errorHttp;\n                                break;\n                            case 'not_allow_type':\n                                text = lang.errorFileType;\n                                break;\n                            default:\n                                text = lang.errorUploadRetry;\n                                break;\n                        }\n                        $info.text(text).show();\n                    };\n\n                if (file.getStatus() === 'invalid') {\n                    showError(file.statusText);\n                } else {\n                    $wrap.text(lang.uploadPreview);\n                    if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) {\n                        $wrap.empty().addClass('notimage').append('<i class=\"file-preview file-type-' + file.ext.toLowerCase() + '\"></i>' +\n                            '<span class=\"file-title\">' + file.name + '</span>');\n                    } else {\n                        if (browser.ie && browser.version <= 7) {\n                            $wrap.text(lang.uploadNoPreview);\n                        } else {\n                            uploader.makeThumb(file, function (error, src) {\n                                if (error || !src || (/^data:/.test(src) && browser.ie && browser.version <= 7)) {\n                                    $wrap.text(lang.uploadNoPreview);\n                                } else {\n                                    var $img = $('<img src=\"' + src + '\">');\n                                    $wrap.empty().append($img);\n                                    $img.on('error', function () {\n                                        $wrap.text(lang.uploadNoPreview);\n                                    });\n                                }\n                            }, thumbnailWidth, thumbnailHeight);\n                        }\n                    }\n                    percentages[ file.id ] = [ file.size, 0 ];\n                    file.rotation = 0;\n\n                    /* 检查文件格式 */\n                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {\n                        showError('not_allow_type');\n                        uploader.removeFile(file);\n                    }\n                }\n\n                file.on('statuschange', function (cur, prev) {\n                    if (prev === 'progress') {\n                        $prgress.hide().width(0);\n                    } else if (prev === 'queued') {\n                        $li.off('mouseenter mouseleave');\n                        $btns.remove();\n                    }\n                    // 成功\n                    if (cur === 'error' || cur === 'invalid') {\n                        showError(file.statusText);\n                        percentages[ file.id ][ 1 ] = 1;\n                    } else if (cur === 'interrupt') {\n                        showError('interrupt');\n                    } else if (cur === 'queued') {\n                        percentages[ file.id ][ 1 ] = 0;\n                    } else if (cur === 'progress') {\n                        $info.hide();\n                        $prgress.css('display', 'block');\n                    } else if (cur === 'complete') {\n                    }\n\n                    $li.removeClass('state-' + prev).addClass('state-' + cur);\n                });\n\n                $li.on('mouseenter', function () {\n                    $btns.stop().animate({height: 30});\n                });\n                $li.on('mouseleave', function () {\n                    $btns.stop().animate({height: 0});\n                });\n\n                $btns.on('click', 'span', function () {\n                    var index = $(this).index(),\n                        deg;\n\n                    switch (index) {\n                        case 0:\n                            uploader.removeFile(file);\n                            return;\n                        case 1:\n                            file.rotation += 90;\n                            break;\n                        case 2:\n                            file.rotation -= 90;\n                            break;\n                    }\n\n                    if (supportTransition) {\n                        deg = 'rotate(' + file.rotation + 'deg)';\n                        $wrap.css({\n                            '-webkit-transform': deg,\n                            '-mos-transform': deg,\n                            '-o-transform': deg,\n                            'transform': deg\n                        });\n                    } else {\n                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');\n                    }\n\n                });\n\n                $li.insertBefore($filePickerBlock);\n            }\n\n            // 负责view的销毁\n            function removeFile(file) {\n                var $li = $('#' + file.id);\n                delete percentages[ file.id ];\n                updateTotalProgress();\n                $li.off().find('.file-panel').off().end().remove();\n            }\n\n            function updateTotalProgress() {\n                var loaded = 0,\n                    total = 0,\n                    spans = $progress.children(),\n                    percent;\n\n                $.each(percentages, function (k, v) {\n                    total += v[ 0 ];\n                    loaded += v[ 0 ] * v[ 1 ];\n                });\n\n                percent = total ? loaded / total : 0;\n\n                spans.eq(0).text(Math.round(percent * 100) + '%');\n                spans.eq(1).css('width', Math.round(percent * 100) + '%');\n                updateStatus();\n            }\n\n            function setState(val, files) {\n\n                if (val != state) {\n\n                    var stats = uploader.getStats();\n\n                    $upload.removeClass('state-' + state);\n                    $upload.addClass('state-' + val);\n\n                    switch (val) {\n\n                        /* 未选择文件 */\n                        case 'pedding':\n                            $queue.addClass('element-invisible');\n                            $statusBar.addClass('element-invisible');\n                            $placeHolder.removeClass('element-invisible');\n                            $progress.hide(); $info.hide();\n                            uploader.refresh();\n                            break;\n\n                        /* 可以开始上传 */\n                        case 'ready':\n                            $placeHolder.addClass('element-invisible');\n                            $queue.removeClass('element-invisible');\n                            $statusBar.removeClass('element-invisible');\n                            $progress.hide(); $info.show();\n                            $upload.text(lang.uploadStart);\n                            uploader.refresh();\n                            break;\n\n                        /* 上传中 */\n                        case 'uploading':\n                            $progress.show(); $info.hide();\n                            $upload.text(lang.uploadPause);\n                            break;\n\n                        /* 暂停上传 */\n                        case 'paused':\n                            $progress.show(); $info.hide();\n                            $upload.text(lang.uploadContinue);\n                            break;\n\n                        case 'confirm':\n                            $progress.show(); $info.hide();\n                            $upload.text(lang.uploadStart);\n\n                            stats = uploader.getStats();\n                            if (stats.successNum && !stats.uploadFailNum) {\n                                setState('finish');\n                                return;\n                            }\n                            break;\n\n                        case 'finish':\n                            $progress.hide(); $info.show();\n                            if (stats.uploadFailNum) {\n                                $upload.text(lang.uploadRetry);\n                            } else {\n                                $upload.text(lang.uploadStart);\n                            }\n                            break;\n                    }\n\n                    state = val;\n                    updateStatus();\n\n                }\n\n                if (!_this.getQueueCount()) {\n                    $upload.addClass('disabled')\n                } else {\n                    $upload.removeClass('disabled')\n                }\n\n            }\n\n            function updateStatus() {\n                var text = '', stats;\n\n                if (state === 'ready') {\n                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));\n                } else if (state === 'confirm') {\n                    stats = uploader.getStats();\n                    if (stats.uploadFailNum) {\n                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);\n                    }\n                } else {\n                    stats = uploader.getStats();\n                    text = lang.updateStatusFinish.replace('_', fileCount).\n                        replace('_KB', WebUploader.formatSize(fileSize)).\n                        replace('_', stats.successNum);\n\n                    if (stats.uploadFailNum) {\n                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);\n                    }\n                }\n\n                $info.html(text);\n            }\n\n            uploader.on('fileQueued', function (file) {\n                fileCount++;\n                fileSize += file.size;\n\n                if (fileCount === 1) {\n                    $placeHolder.addClass('element-invisible');\n                    $statusBar.show();\n                }\n\n                addFile(file);\n            });\n\n            uploader.on('fileDequeued', function (file) {\n                fileCount--;\n                fileSize -= file.size;\n\n                removeFile(file);\n                updateTotalProgress();\n            });\n\n            uploader.on('filesQueued', function (file) {\n                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {\n                    setState('ready');\n                }\n                updateTotalProgress();\n            });\n\n            uploader.on('all', function (type, files) {\n                switch (type) {\n                    case 'uploadFinished':\n                        setState('confirm', files);\n                        break;\n                    case 'startUpload':\n                        /* 添加额外的GET参数 */\n                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);\n                        uploader.option('server', url);\n                        setState('uploading', files);\n                        break;\n                    case 'stopUpload':\n                        setState('paused', files);\n                        break;\n                }\n            });\n\n            uploader.on('uploadBeforeSend', function (file, data, header) {\n                //这里可以通过data对象添加POST参数\n                header['X_Requested_With'] = 'XMLHttpRequest';\n            });\n\n            uploader.on('uploadProgress', function (file, percentage) {\n                var $li = $('#' + file.id),\n                    $percent = $li.find('.progress span');\n\n                $percent.css('width', percentage * 100 + '%');\n                percentages[ file.id ][ 1 ] = percentage;\n                updateTotalProgress();\n            });\n\n            uploader.on('uploadSuccess', function (file, ret) {\n                var $file = $('#' + file.id);\n                try {\n                    var responseText = (ret._raw || ret),\n                        json = utils.str2json(responseText);\n                    if (json.state == 'SUCCESS') {\n                        uploadVideoList.push({\n                            'url': json.url,\n                            'type': json.type,\n                            'original':json.original\n                        });\n                        $file.append('<span class=\"success\"></span>');\n                    } else {\n                        $file.find('.error').text(json.state).show();\n                    }\n                } catch (e) {\n                    $file.find('.error').text(lang.errorServerUpload).show();\n                }\n            });\n\n            uploader.on('uploadError', function (file, code) {\n            });\n            uploader.on('error', function (code, file) {\n                if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {\n                    addFile(file);\n                }\n            });\n            uploader.on('uploadComplete', function (file, ret) {\n            });\n\n            $upload.on('click', function () {\n                if ($(this).hasClass('disabled')) {\n                    return false;\n                }\n\n                if (state === 'ready') {\n                    uploader.upload();\n                } else if (state === 'paused') {\n                    uploader.upload();\n                } else if (state === 'uploading') {\n                    uploader.stop();\n                }\n            });\n\n            $upload.addClass('state-' + state);\n            updateTotalProgress();\n        },\n        getQueueCount: function () {\n            var file, i, status, readyFile = 0, files = this.uploader.getFiles();\n            for (i = 0; file = files[i++]; ) {\n                status = file.getStatus();\n                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;\n            }\n            return readyFile;\n        },\n        refresh: function(){\n            this.uploader.refresh();\n        }\n    };\n\n})();\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/webapp/webapp.html",
    "content": "<!DOCTYPE>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .wrapper{width: 540px; margin: 10px auto;}\n        #appShow {border: 1px solid #ddd;}\n        .errorMsg{font-size: 13px;margin: 10px;color: #dd0000}\n    </style>\n</head>\n<body>\n    <div class=\"wrapper\">\n        <div id=\"appShow\"></div>\n    </div>\n    <script type=\"text/javascript\">\n        //此处配置您在百度上申请到的appkey。\n        var apikey = editor.options.webAppKey;\n        if ( apikey && apikey.length == 24 ) {\n            var searchConfig = {\n                container:'appShow', //容器ID\n                tips:\"\", //该值用于自动清空\n                search:1, //是否显示搜索框\n                ps:12, //每页显示的条数\n                suggest:1, //是否开启搜索自动完成\n                limit:0, //搜索结果显示条数，0表示无限制\n                searchNow:0, //是否在初始化完成时立即搜索\n                apikey:apikey, //每人得\n                pager:1,\n                cid:7134562,\n                outputHTML:1\n            },baiduApp;\n\n            function clickCallback() {\n                baiduApp.addEventListener( 'getAppHTML', function ( e, data ) {\n                    var url = 'http://app.baidu.com/app/enter?appid='+data.data['app_id'] +'&tn=app_canvas&app_spce_id=1&apikey='+apikey+'&api_key=' + apikey;\n                    editor.execCommand( \"webapp\", {url:url,width:data.uniWidth,height:data.uniHeight+60,logo:data.data['app_logo'],title:data.data['app_name']});\n                    dialog.close();\n                } );\n            }\n\n            var script = document.createElement( \"script\" );\n            script.type = \"text/javascript\";\n            script.src = \"http://app.baidu.com/appweb/api/search?auto=yes&container=container&apikey=\" + apikey + \"&instanceName=baiduApp&callback=clickCallback&config=searchConfig\";\n            document.body.appendChild( script );\n        } else {\n            $G( \"appShow\" ).innerHTML = \"<p class='errorMsg'>\"+lang.tip1+\"<a title='\"+lang.anthorApi+\"' href='http://app.baidu.com/static/cms/getapikey.html' target='_blank'>\"+lang.applyFor+\"</a></p><p class='errorMsg'>\"+lang.tip2+\"</p>\" ;\n        }\n\n    </script>\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/wordimage/tangram.js",
    "content": "// Copyright (c) 2009, Baidu Inc. All rights reserved.\n// \n// Licensed under the BSD 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:// tangram.baidu.com/license.html\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 * @namespace T Tangram七巧板\n * @name T\n * @version 1.6.0\n*/\n\n/**\n * 声明baidu包\n * @author: allstar, erik, meizz, berg\n */\nvar T,\n    baidu = T = baidu || {version: \"1.5.0\"};\nbaidu.guid = \"$BAIDU$\";\nbaidu.$$ = window[baidu.guid] = window[baidu.guid] || {global:{}};\n\n/**\n * 使用flash资源封装的一些功能\n * @namespace baidu.flash\n */\nbaidu.flash = baidu.flash || {};\n\n/**\n * 操作dom的方法\n * @namespace baidu.dom \n */\nbaidu.dom = baidu.dom || {};\n\n\n/**\n * 从文档中获取指定的DOM元素\n * @name baidu.dom.g\n * @function\n * @grammar baidu.dom.g(id)\n * @param {string|HTMLElement} id 元素的id或DOM元素.\n * @shortcut g,T.G\n * @meta standard\n * @see baidu.dom.q\n *\n * @return {HTMLElement|null} 获取的元素，查找不到时返回null,如果参数不合法，直接返回参数.\n */\nbaidu.dom.g = function(id) {\n    if (!id) return null;\n    if ('string' == typeof id || id instanceof String) {\n        return document.getElementById(id);\n    } else if (id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) {\n        return id;\n    }\n    return null;\n};\nbaidu.g = baidu.G = baidu.dom.g;\n\n\n/**\n * 操作数组的方法\n * @namespace baidu.array\n */\n\nbaidu.array = baidu.array || {};\n\n\n/**\n * 遍历数组中所有元素\n * @name baidu.array.each\n * @function\n * @grammar baidu.array.each(source, iterator[, thisObject])\n * @param {Array} source 需要遍历的数组\n * @param {Function} iterator 对每个数组元素进行调用的函数，该函数有两个参数，第一个为数组元素，第二个为数组索引值，function (item, index)。\n * @param {Object} [thisObject] 函数调用时的this指针，如果没有此参数，默认是当前遍历的数组\n * @remark\n * each方法不支持对Object的遍历,对Object的遍历使用baidu.object.each 。\n * @shortcut each\n * @meta standard\n *             \n * @returns {Array} 遍历的数组\n */\n \nbaidu.each = baidu.array.forEach = baidu.array.each = function (source, iterator, thisObject) {\n    var returnValue, item, i, len = source.length;\n    \n    if ('function' == typeof iterator) {\n        for (i = 0; i < len; i++) {\n            item = source[i];\n            returnValue = iterator.call(thisObject || source, item, i);\n    \n            if (returnValue === false) {\n                break;\n            }\n        }\n    }\n    return source;\n};\n\n/**\n * 对语言层面的封装，包括类型判断、模块扩展、继承基类以及对象自定义事件的支持。\n * @namespace baidu.lang\n */\nbaidu.lang = baidu.lang || {};\n\n\n/**\n * 判断目标参数是否为function或Function实例\n * @name baidu.lang.isFunction\n * @function\n * @grammar baidu.lang.isFunction(source)\n * @param {Any} source 目标参数\n * @version 1.2\n * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate\n * @meta standard\n * @returns {boolean} 类型判断结果\n */\nbaidu.lang.isFunction = function (source) {\n    return '[object Function]' == Object.prototype.toString.call(source);\n};\n\n/**\n * 判断目标参数是否string类型或String对象\n * @name baidu.lang.isString\n * @function\n * @grammar baidu.lang.isString(source)\n * @param {Any} source 目标参数\n * @shortcut isString\n * @meta standard\n * @see baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate\n *             \n * @returns {boolean} 类型判断结果\n */\nbaidu.lang.isString = function (source) {\n    return '[object String]' == Object.prototype.toString.call(source);\n};\nbaidu.isString = baidu.lang.isString;\n\n\n/**\n * 判断浏览器类型和特性的属性\n * @namespace baidu.browser\n */\nbaidu.browser = baidu.browser || {};\n\n\n/**\n * 判断是否为opera浏览器\n * @property opera opera版本号\n * @grammar baidu.browser.opera\n * @meta standard\n * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.safari,baidu.browser.chrome\n * @returns {Number} opera版本号\n */\n\n/**\n * opera 从10开始不是用opera后面的字符串进行版本的判断\n * 在Browser identification最后添加Version + 数字进行版本标识\n * opera后面的数字保持在9.80不变\n */\nbaidu.browser.opera = /opera(\\/| )(\\d+(\\.\\d+)?)(.+?(version\\/(\\d+(\\.\\d+)?)))?/i.test(navigator.userAgent) ?  + ( RegExp[\"\\x246\"] || RegExp[\"\\x242\"] ) : undefined;\n\n\n/**\n * 在目标元素的指定位置插入HTML代码\n * @name baidu.dom.insertHTML\n * @function\n * @grammar baidu.dom.insertHTML(element, position, html)\n * @param {HTMLElement|string} element 目标元素或目标元素的id\n * @param {string} position 插入html的位置信息，取值为beforeBegin,afterBegin,beforeEnd,afterEnd\n * @param {string} html 要插入的html\n * @remark\n * \n * 对于position参数，大小写不敏感<br>\n * 参数的意思：beforeBegin&lt;span&gt;afterBegin   this is span! beforeEnd&lt;/span&gt; afterEnd <br />\n * 此外，如果使用本函数插入带有script标签的HTML字符串，script标签对应的脚本将不会被执行。\n * \n * @shortcut insertHTML\n * @meta standard\n *             \n * @returns {HTMLElement} 目标元素\n */\nbaidu.dom.insertHTML = function (element, position, html) {\n    element = baidu.dom.g(element);\n    var range,begin;\n    if (element.insertAdjacentHTML && !baidu.browser.opera) {\n        element.insertAdjacentHTML(position, html);\n    } else {\n        range = element.ownerDocument.createRange();\n        position = position.toUpperCase();\n        if (position == 'AFTERBEGIN' || position == 'BEFOREEND') {\n            range.selectNodeContents(element);\n            range.collapse(position == 'AFTERBEGIN');\n        } else {\n            begin = position == 'BEFOREBEGIN';\n            range[begin ? 'setStartBefore' : 'setEndAfter'](element);\n            range.collapse(begin);\n        }\n        range.insertNode(range.createContextualFragment(html));\n    }\n    return element;\n};\n\nbaidu.insertHTML = baidu.dom.insertHTML;\n\n/**\n * 操作flash对象的方法，包括创建flash对象、获取flash对象以及判断flash插件的版本号\n * @namespace baidu.swf\n */\nbaidu.swf = baidu.swf || {};\n\n\n/**\n * 浏览器支持的flash插件版本\n * @property version 浏览器支持的flash插件版本\n * @grammar baidu.swf.version\n * @return {String} 版本号\n * @meta standard\n */\nbaidu.swf.version = (function () {\n    var n = navigator;\n    if (n.plugins && n.mimeTypes.length) {\n        var plugin = n.plugins[\"Shockwave Flash\"];\n        if (plugin && plugin.description) {\n            return plugin.description\n                    .replace(/([a-zA-Z]|\\s)+/, \"\")\n                    .replace(/(\\s)+r/, \".\") + \".0\";\n        }\n    } else if (window.ActiveXObject && !window.opera) {\n        for (var i = 12; i >= 2; i--) {\n            try {\n                var c = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.' + i);\n                if (c) {\n                    var version = c.GetVariable(\"$version\");\n                    return version.replace(/WIN/g,'').replace(/,/g,'.');\n                }\n            } catch(e) {}\n        }\n    }\n})();\n\n/**\n * 操作字符串的方法\n * @namespace baidu.string\n */\nbaidu.string = baidu.string || {};\n\n\n/**\n * 对目标字符串进行html编码\n * @name baidu.string.encodeHTML\n * @function\n * @grammar baidu.string.encodeHTML(source)\n * @param {string} source 目标字符串\n * @remark\n * 编码字符有5个：&<>\"'\n * @shortcut encodeHTML\n * @meta standard\n * @see baidu.string.decodeHTML\n *             \n * @returns {string} html编码后的字符串\n */\nbaidu.string.encodeHTML = function (source) {\n    return String(source)\n                .replace(/&/g,'&amp;')\n                .replace(/</g,'&lt;')\n                .replace(/>/g,'&gt;')\n                .replace(/\"/g, \"&quot;\")\n                .replace(/'/g, \"&#39;\");\n};\n\nbaidu.encodeHTML = baidu.string.encodeHTML;\n\n/**\n * 创建flash对象的html字符串\n * @name baidu.swf.createHTML\n * @function\n * @grammar baidu.swf.createHTML(options)\n * \n * @param {Object} \toptions \t\t\t\t\t创建flash的选项参数\n * @param {string} \toptions.id \t\t\t\t\t要创建的flash的标识\n * @param {string} \toptions.url \t\t\t\tflash文件的url\n * @param {String} \toptions.errorMessage \t\t未安装flash player或flash player版本号过低时的提示\n * @param {string} \toptions.ver \t\t\t\t最低需要的flash player版本号\n * @param {string} \toptions.width \t\t\t\tflash的宽度\n * @param {string} \toptions.height \t\t\t\tflash的高度\n * @param {string} \toptions.align \t\t\t\tflash的对齐方式，允许值：middle/left/right/top/bottom\n * @param {string} \toptions.base \t\t\t\t设置用于解析swf文件中的所有相对路径语句的基本目录或URL\n * @param {string} \toptions.bgcolor \t\t\tswf文件的背景色\n * @param {string} \toptions.salign \t\t\t\t设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值：l/r/t/b/tl/tr/bl/br\n * @param {boolean} options.menu \t\t\t\t是否显示右键菜单，允许值：true/false\n * @param {boolean} options.loop \t\t\t\t播放到最后一帧时是否重新播放，允许值： true/false\n * @param {boolean} options.play \t\t\t\tflash是否在浏览器加载时就开始播放。允许值：true/false\n * @param {string} \toptions.quality \t\t\t设置flash播放的画质，允许值：low/medium/high/autolow/autohigh/best\n * @param {string} \toptions.scale \t\t\t\t设置flash内容如何缩放来适应设置的宽高。允许值：showall/noborder/exactfit\n * @param {string} \toptions.wmode \t\t\t\t设置flash的显示模式。允许值：window/opaque/transparent\n * @param {string} \toptions.allowscriptaccess \t设置flash与页面的通信权限。允许值：always/never/sameDomain\n * @param {string} \toptions.allownetworking \t设置swf文件中允许使用的网络API。允许值：all/internal/none\n * @param {boolean} options.allowfullscreen \t是否允许flash全屏。允许值：true/false\n * @param {boolean} options.seamlesstabbing \t允许设置执行无缝跳格，从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值：true/false\n * @param {boolean} options.devicefont \t\t\t设置静态文本对象是否以设备字体呈现。允许值：true/false\n * @param {boolean} options.swliveconnect \t\t第一次加载flash时浏览器是否应启动Java。允许值：true/false\n * @param {Object} \toptions.vars \t\t\t\t要传递给flash的参数，支持JSON或string类型。\n * \n * @see baidu.swf.create\n * @meta standard\n * @returns {string} flash对象的html字符串\n */\nbaidu.swf.createHTML = function (options) {\n    options = options || {};\n    var version = baidu.swf.version, \n        needVersion = options['ver'] || '6.0.0', \n        vUnit1, vUnit2, i, k, len, item, tmpOpt = {},\n        encodeHTML = baidu.string.encodeHTML;\n    for (k in options) {\n        tmpOpt[k] = options[k];\n    }\n    options = tmpOpt;\n    if (version) {\n        version = version.split('.');\n        needVersion = needVersion.split('.');\n        for (i = 0; i < 3; i++) {\n            vUnit1 = parseInt(version[i], 10);\n            vUnit2 = parseInt(needVersion[i], 10);\n            if (vUnit2 < vUnit1) {\n                break;\n            } else if (vUnit2 > vUnit1) {\n                return '';\n            }\n        }\n    } else {\n        return '';\n    }\n    \n    var vars = options['vars'],\n        objProperties = ['classid', 'codebase', 'id', 'width', 'height', 'align'];\n    options['align'] = options['align'] || 'middle';\n    options['classid'] = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';\n    options['codebase'] = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0';\n    options['movie'] = options['url'] || '';\n    delete options['vars'];\n    delete options['url'];\n    if ('string' == typeof vars) {\n        options['flashvars'] = vars;\n    } else {\n        var fvars = [];\n        for (k in vars) {\n            item = vars[k];\n            fvars.push(k + \"=\" + encodeURIComponent(item));\n        }\n        options['flashvars'] = fvars.join('&');\n    }\n    var str = ['<object '];\n    for (i = 0, len = objProperties.length; i < len; i++) {\n        item = objProperties[i];\n        str.push(' ', item, '=\"', encodeHTML(options[item]), '\"');\n    }\n    str.push('>');\n    var params = {\n        'wmode'             : 1,\n        'scale'             : 1,\n        'quality'           : 1,\n        'play'              : 1,\n        'loop'              : 1,\n        'menu'              : 1,\n        'salign'            : 1,\n        'bgcolor'           : 1,\n        'base'              : 1,\n        'allowscriptaccess' : 1,\n        'allownetworking'   : 1,\n        'allowfullscreen'   : 1,\n        'seamlesstabbing'   : 1,\n        'devicefont'        : 1,\n        'swliveconnect'     : 1,\n        'flashvars'         : 1,\n        'movie'             : 1\n    };\n    \n    for (k in options) {\n        item = options[k];\n        k = k.toLowerCase();\n        if (params[k] && (item || item === false || item === 0)) {\n            str.push('<param name=\"' + k + '\" value=\"' + encodeHTML(item) + '\" />');\n        }\n    }\n    options['src']  = options['movie'];\n    options['name'] = options['id'];\n    delete options['id'];\n    delete options['movie'];\n    delete options['classid'];\n    delete options['codebase'];\n    options['type'] = 'application/x-shockwave-flash';\n    options['pluginspage'] = 'http://www.macromedia.com/go/getflashplayer';\n    str.push('<embed');\n    var salign;\n    for (k in options) {\n        item = options[k];\n        if (item || item === false || item === 0) {\n            if ((new RegExp(\"^salign\\x24\", \"i\")).test(k)) {\n                salign = item;\n                continue;\n            }\n            \n            str.push(' ', k, '=\"', encodeHTML(item), '\"');\n        }\n    }\n    \n    if (salign) {\n        str.push(' salign=\"', encodeHTML(salign), '\"');\n    }\n    str.push('></embed></object>');\n    \n    return str.join('');\n};\n\n\n/**\n * 在页面中创建一个flash对象\n * @name baidu.swf.create\n * @function\n * @grammar baidu.swf.create(options[, container])\n * \n * @param {Object} \toptions \t\t\t\t\t创建flash的选项参数\n * @param {string} \toptions.id \t\t\t\t\t要创建的flash的标识\n * @param {string} \toptions.url \t\t\t\tflash文件的url\n * @param {String} \toptions.errorMessage \t\t未安装flash player或flash player版本号过低时的提示\n * @param {string} \toptions.ver \t\t\t\t最低需要的flash player版本号\n * @param {string} \toptions.width \t\t\t\tflash的宽度\n * @param {string} \toptions.height \t\t\t\tflash的高度\n * @param {string} \toptions.align \t\t\t\tflash的对齐方式，允许值：middle/left/right/top/bottom\n * @param {string} \toptions.base \t\t\t\t设置用于解析swf文件中的所有相对路径语句的基本目录或URL\n * @param {string} \toptions.bgcolor \t\t\tswf文件的背景色\n * @param {string} \toptions.salign \t\t\t\t设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值：l/r/t/b/tl/tr/bl/br\n * @param {boolean} options.menu \t\t\t\t是否显示右键菜单，允许值：true/false\n * @param {boolean} options.loop \t\t\t\t播放到最后一帧时是否重新播放，允许值： true/false\n * @param {boolean} options.play \t\t\t\tflash是否在浏览器加载时就开始播放。允许值：true/false\n * @param {string} \toptions.quality \t\t\t设置flash播放的画质，允许值：low/medium/high/autolow/autohigh/best\n * @param {string} \toptions.scale \t\t\t\t设置flash内容如何缩放来适应设置的宽高。允许值：showall/noborder/exactfit\n * @param {string} \toptions.wmode \t\t\t\t设置flash的显示模式。允许值：window/opaque/transparent\n * @param {string} \toptions.allowscriptaccess \t设置flash与页面的通信权限。允许值：always/never/sameDomain\n * @param {string} \toptions.allownetworking \t设置swf文件中允许使用的网络API。允许值：all/internal/none\n * @param {boolean} options.allowfullscreen \t是否允许flash全屏。允许值：true/false\n * @param {boolean} options.seamlesstabbing \t允许设置执行无缝跳格，从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值：true/false\n * @param {boolean} options.devicefont \t\t\t设置静态文本对象是否以设备字体呈现。允许值：true/false\n * @param {boolean} options.swliveconnect \t\t第一次加载flash时浏览器是否应启动Java。允许值：true/false\n * @param {Object} \toptions.vars \t\t\t\t要传递给flash的参数，支持JSON或string类型。\n * \n * @param {HTMLElement|string} [container] \t\tflash对象的父容器元素，不传递该参数时在当前代码位置创建flash对象。\n * @meta standard\n * @see baidu.swf.createHTML,baidu.swf.getMovie\n */\nbaidu.swf.create = function (options, target) {\n    options = options || {};\n    var html = baidu.swf.createHTML(options) \n               || options['errorMessage'] \n               || '';\n                \n    if (target && 'string' == typeof target) {\n        target = document.getElementById(target);\n    }\n    baidu.dom.insertHTML( target || document.body ,'beforeEnd',html );\n};\n/**\n * 判断是否为ie浏览器\n * @name baidu.browser.ie\n * @field\n * @grammar baidu.browser.ie\n * @returns {Number} IE版本号\n */\nbaidu.browser.ie = baidu.ie = /msie (\\d+\\.\\d+)/i.test(navigator.userAgent) ? (document.documentMode || + RegExp['\\x241']) : undefined;\n\n/**\n * 移除数组中的项\n * @name baidu.array.remove\n * @function\n * @grammar baidu.array.remove(source, match)\n * @param {Array} source 需要移除项的数组\n * @param {Any} match 要移除的项\n * @meta standard\n * @see baidu.array.removeAt\n *             \n * @returns {Array} 移除后的数组\n */\nbaidu.array.remove = function (source, match) {\n    var len = source.length;\n        \n    while (len--) {\n        if (len in source && source[len] === match) {\n            source.splice(len, 1);\n        }\n    }\n    return source;\n};\n\n/**\n * 判断目标参数是否Array对象\n * @name baidu.lang.isArray\n * @function\n * @grammar baidu.lang.isArray(source)\n * @param {Any} source 目标参数\n * @meta standard\n * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate\n *             \n * @returns {boolean} 类型判断结果\n */\nbaidu.lang.isArray = function (source) {\n    return '[object Array]' == Object.prototype.toString.call(source);\n};\n\n\n\n/**\n * 将一个变量转换成array\n * @name baidu.lang.toArray\n * @function\n * @grammar baidu.lang.toArray(source)\n * @param {mix} source 需要转换成array的变量\n * @version 1.3\n * @meta standard\n * @returns {array} 转换后的array\n */\nbaidu.lang.toArray = function (source) {\n    if (source === null || source === undefined)\n        return [];\n    if (baidu.lang.isArray(source))\n        return source;\n    if (typeof source.length !== 'number' || typeof source === 'string' || baidu.lang.isFunction(source)) {\n        return [source];\n    }\n    if (source.item) {\n        var l = source.length, array = new Array(l);\n        while (l--)\n            array[l] = source[l];\n        return array;\n    }\n\n    return [].slice.call(source);\n};\n\n/**\n * 获得flash对象的实例\n * @name baidu.swf.getMovie\n * @function\n * @grammar baidu.swf.getMovie(name)\n * @param {string} name flash对象的名称\n * @see baidu.swf.create\n * @meta standard\n * @returns {HTMLElement} flash对象的实例\n */\nbaidu.swf.getMovie = function (name) {\n\tvar movie = document[name], ret;\n    return baidu.browser.ie == 9 ?\n    \tmovie && movie.length ? \n    \t\t(ret = baidu.array.remove(baidu.lang.toArray(movie),function(item){\n    \t\t\treturn item.tagName.toLowerCase() != \"embed\";\n    \t\t})).length == 1 ? ret[0] : ret\n    \t\t: movie\n    \t: movie || window[name];\n};\n\n\nbaidu.flash._Base = (function(){\n   \n    var prefix = 'bd__flash__';\n\n    /**\n     * 创建一个随机的字符串\n     * @private\n     * @return {String}\n     */\n    function _createString(){\n        return  prefix + Math.floor(Math.random() * 2147483648).toString(36);\n    };\n   \n    /**\n     * 检查flash状态\n     * @private\n     * @param {Object} target flash对象\n     * @return {Boolean}\n     */\n    function _checkReady(target){\n        if(typeof target !== 'undefined' && typeof target.flashInit !== 'undefined' && target.flashInit()){\n            return true;\n        }else{\n            return false;\n        }\n    };\n\n    /**\n     * 调用之前进行压栈的函数\n     * @private\n     * @param {Array} callQueue 调用队列\n     * @param {Object} target flash对象\n     * @return {Null}\n     */\n    function _callFn(callQueue, target){\n        var result = null;\n        \n        callQueue = callQueue.reverse();\n        baidu.each(callQueue, function(item){\n            result = target.call(item.fnName, item.params);\n            item.callBack(result);\n        });\n    };\n\n    /**\n     * 为传入的匿名函数创建函数名\n     * @private\n     * @param {String|Function} fun 传入的匿名函数或者函数名\n     * @return {String}\n     */\n    function _createFunName(fun){\n        var name = '';\n\n        if(baidu.lang.isFunction(fun)){\n            name = _createString();\n            window[name] = function(){\n                fun.apply(window, arguments);\n            };\n\n            return name;\n        }else if(baidu.lang.isString){\n            return fun;\n        }\n    };\n\n    /**\n     * 绘制flash\n     * @private\n     * @param {Object} options 创建参数\n     * @return {Object} \n     */\n    function _render(options){\n        if(!options.id){\n            options.id = _createString();\n        }\n        \n        var container = options.container || '';\n        delete(options.container);\n        \n        baidu.swf.create(options, container);\n        \n        return baidu.swf.getMovie(options.id);\n    };\n\n    return function(options, callBack){\n        var me = this,\n            autoRender = (typeof options.autoRender !== 'undefined' ? options.autoRender : true),\n            createOptions = options.createOptions || {},\n            target = null,\n            isReady = false,\n            callQueue = [],\n            timeHandle = null,\n            callBack = callBack || [];\n\n        /**\n         * 将flash文件绘制到页面上\n         * @public\n         * @return {Null}\n         */\n        me.render = function(){\n            target = _render(createOptions);\n            \n            if(callBack.length > 0){\n                baidu.each(callBack, function(funName, index){\n                    callBack[index] = _createFunName(options[funName] || new Function());\n                });    \n            }\n            me.call('setJSFuncName', [callBack]);\n        };\n\n        /**\n         * 返回flash状态\n         * @return {Boolean}\n         */\n        me.isReady = function(){\n            return isReady;\n        };\n\n        /**\n         * 调用flash接口的统一入口\n         * @param {String} fnName 调用的函数名\n         * @param {Array} params 传入的参数组成的数组,若不许要参数，需传入空数组\n         * @param {Function} [callBack] 异步调用后将返回值作为参数的调用回调函数，如无返回值，可以不传入此参数\n         * @return {Null}\n        */\n        me.call = function(fnName, params, callBack){\n            if(!fnName) return null;\n            callBack = callBack || new Function();\n\n            var result = null;\n    \n            if(isReady){\n                result = target.call(fnName, params);\n                callBack(result);\n            }else{\n                callQueue.push({\n                    fnName: fnName,\n                    params: params,\n                    callBack: callBack\n                });\n    \n                (!timeHandle) && (timeHandle = setInterval(_check, 200));\n            }\n        };\n    \n        /**\n         * 为传入的匿名函数创建函数名\n         * @public\n         * @param {String|Function} fun 传入的匿名函数或者函数名\n         * @return {String}\n         */\n        me.createFunName = function(fun){\n            return _createFunName(fun);    \n        };\n\n        /**\n         * 检查flash是否ready， 并进行调用\n         * @private\n         * @return {Null}\n         */\n        function _check(){\n            if(_checkReady(target)){\n                clearInterval(timeHandle);\n                timeHandle = null;\n                _call();\n\n                isReady = true;\n            }               \n        };\n\n        /**\n         * 调用之前进行压栈的函数\n         * @private\n         * @return {Null}\n         */\n        function _call(){\n            _callFn(callQueue, target);\n            callQueue = [];\n        }\n\n        autoRender && me.render(); \n    };\n})();\n\n\n\n/**\n * 创建flash based imageUploader\n * @class\n * @grammar baidu.flash.imageUploader(options)\n * @param {Object} createOptions 创建flash时需要的参数，请参照baidu.swf.create文档\n * @config {Object} vars 创建imageUploader时所需要的参数\n * @config {Number} vars.gridWidth 每一个预览图片所占的宽度，应该为flash寛的整除\n * @config {Number} vars.gridHeight 每一个预览图片所占的高度，应该为flash高的整除\n * @config {Number} vars.picWidth 单张预览图片的宽度\n * @config {Number} vars.picHeight 单张预览图片的高度\n * @config {String} vars.uploadDataFieldName POST请求中图片数据的key,默认值'picdata'\n * @config {String} vars.picDescFieldName POST请求中图片描述的key,默认值'picDesc'\n * @config {Number} vars.maxSize 文件的最大体积,单位'MB'\n * @config {Number} vars.compressSize 上传前如果图片体积超过该值，会先压缩\n * @config {Number} vars.maxNum:32 最大上传多少个文件\n * @config {Number} vars.compressLength 能接受的最大边长，超过该值会等比压缩\n * @config {String} vars.url 上传的url地址\n * @config {Number} vars.mode mode == 0时，是使用滚动条，mode == 1时，拉伸flash, 默认值为0\n * @see baidu.swf.createHTML\n * @param {String} backgroundUrl 背景图片路径\n * @param {String} listBacgroundkUrl 布局控件背景\n * @param {String} buttonUrl 按钮图片不背景\n * @param {String|Function} selectFileCallback 选择文件的回调\n * @param {String|Function} exceedFileCallback文件超出限制的最大体积时的回调\n * @param {String|Function} deleteFileCallback 删除文件的回调\n * @param {String|Function} startUploadCallback 开始上传某个文件时的回调\n * @param {String|Function} uploadCompleteCallback 某个文件上传完成的回调\n * @param {String|Function} uploadErrorCallback 某个文件上传失败的回调\n * @param {String|Function} allCompleteCallback 全部上传完成时的回调\n * @param {String|Function} changeFlashHeight 改变Flash的高度，mode==1的时候才有用\n */ \nbaidu.flash.imageUploader = baidu.flash.imageUploader || function(options){\n   \n    var me = this,\n        options = options || {},\n        _flash = new baidu.flash._Base(options, [\n            'selectFileCallback', \n            'exceedFileCallback', \n            'deleteFileCallback', \n            'startUploadCallback',\n            'uploadCompleteCallback',\n            'uploadErrorCallback',\n            'allCompleteCallback',\n            'changeFlashHeight'\n        ]);\n    /**\n     * 开始或回复上传图片\n     * @public\n     * @return {Null}\n     */\n    me.upload = function(){\n        _flash.call('upload');\n    };\n\n    /**\n     * 暂停上传图片\n     * @public\n     * @return {Null}\n     */\n    me.pause = function(){\n        _flash.call('pause');\n    };\n    me.addCustomizedParams = function(index,obj){\n        _flash.call('addCustomizedParams',[index,obj]);\n    }\n};\n\n/**\n * 操作原生对象的方法\n * @namespace baidu.object\n */\nbaidu.object = baidu.object || {};\n\n\n/**\n * 将源对象的所有属性拷贝到目标对象中\n * @author erik\n * @name baidu.object.extend\n * @function\n * @grammar baidu.object.extend(target, source)\n * @param {Object} target 目标对象\n * @param {Object} source 源对象\n * @see baidu.array.merge\n * @remark\n * \n1.目标对象中，与源对象key相同的成员将会被覆盖。<br>\n2.源对象的prototype成员不会拷贝。\n\t\t\n * @shortcut extend\n * @meta standard\n *             \n * @returns {Object} 目标对象\n */\nbaidu.extend =\nbaidu.object.extend = function (target, source) {\n    for (var p in source) {\n        if (source.hasOwnProperty(p)) {\n            target[p] = source[p];\n        }\n    }\n    \n    return target;\n};\n\n\n\n\n\n/**\n * 创建flash based fileUploader\n * @class\n * @grammar baidu.flash.fileUploader(options)\n * @param {Object} options\n * @config {Object} createOptions 创建flash时需要的参数，请参照baidu.swf.create文档\n * @config {String} createOptions.width\n * @config {String} createOptions.height\n * @config {Number} maxNum 最大可选文件数\n * @config {Function|String} selectFile\n * @config {Function|String} exceedMaxSize\n * @config {Function|String} deleteFile\n * @config {Function|String} uploadStart\n * @config {Function|String} uploadComplete\n * @config {Function|String} uploadError\n * @config {Function|String} uploadProgress\n */\nbaidu.flash.fileUploader = baidu.flash.fileUploader || function(options){\n    var me = this,\n        options = options || {};\n    \n    options.createOptions = baidu.extend({\n        wmod: 'transparent'\n    },options.createOptions || {});\n    \n    var _flash = new baidu.flash._Base(options, [\n        'selectFile',\n        'exceedMaxSize',\n        'deleteFile',\n        'uploadStart',\n        'uploadComplete',\n        'uploadError', \n        'uploadProgress'\n    ]);\n\n    _flash.call('setMaxNum', options.maxNum ? [options.maxNum] : [1]);\n\n    /**\n     * 设置当鼠标移动到flash上时，是否变成手型\n     * @public\n     * @param {Boolean} isCursor\n     * @return {Null}\n     */\n    me.setHandCursor = function(isCursor){\n        _flash.call('setHandCursor', [isCursor || false]);\n    };\n\n    /**\n     * 设置鼠标相应函数名\n     * @param {String|Function} fun\n     */\n    me.setMSFunName = function(fun){\n        _flash.call('setMSFunName',[_flash.createFunName(fun)]);\n    }; \n\n    /**\n     * 执行上传操作\n     * @param {String} url 上传的url\n     * @param {String} fieldName 上传的表单字段名\n     * @param {Object} postData 键值对，上传的POST数据\n     * @param {Number|Array|null|-1} [index]上传的文件序列\n     *                            Int值上传该文件\n     *                            Array一次串行上传该序列文件\n     *                            -1/null上传所有文件\n     * @return {Null}\n     */\n    me.upload = function(url, fieldName, postData, index){\n\n        if(typeof url !== 'string' || typeof fieldName !== 'string') return null;\n        if(typeof index === 'undefined') index = -1;\n\n        _flash.call('upload', [url, fieldName, postData, index]);\n    };\n\n    /**\n     * 取消上传操作\n     * @public\n     * @param {Number|-1} index\n     */\n    me.cancel = function(index){\n        if(typeof index === 'undefined') index = -1;\n        _flash.call('cancel', [index]);\n    };\n\n    /**\n     * 删除文件\n     * @public\n     * @param {Number|Array} [index] 要删除的index，不传则全部删除\n     * @param {Function} callBack\n     * */\n    me.deleteFile = function(index, callBack){\n\n        var callBackAll = function(list){\n                callBack && callBack(list);\n            };\n\n        if(typeof index === 'undefined'){\n            _flash.call('deleteFilesAll', [], callBackAll);\n            return;\n        };\n        \n        if(typeof index === 'Number') index = [index];\n        index.sort(function(a,b){\n            return b-a;\n        });\n        baidu.each(index, function(item){\n            _flash.call('deleteFileBy', item, callBackAll);\n        });\n    };\n\n    /**\n     * 添加文件类型，支持macType\n     * @public\n     * @param {Object|Array[Object]} type {description:String, extention:String}\n     * @return {Null};\n     */\n    me.addFileType = function(type){\n        var type = type || [[]];\n        \n        if(type instanceof Array) type = [type];\n        else type = [[type]];\n        _flash.call('addFileTypes', type);\n    };\n    \n    /**\n     * 设置文件类型，支持macType\n     * @public\n     * @param {Object|Array[Object]} type {description:String, extention:String}\n     * @return {Null};\n     */\n    me.setFileType = function(type){\n        var type = type || [[]];\n        \n        if(type instanceof Array) type = [type];\n        else type = [[type]];\n        _flash.call('setFileTypes', type);\n    };\n\n    /**\n     * 设置可选文件的数量限制\n     * @public\n     * @param {Number} num\n     * @return {Null}\n     */\n    me.setMaxNum = function(num){\n        _flash.call('setMaxNum', [num]);\n    };\n\n    /**\n     * 设置可选文件大小限制，以兆M为单位\n     * @public\n     * @param {Number} num,0为无限制\n     * @return {Null}\n     */\n    me.setMaxSize = function(num){\n        _flash.call('setMaxSize', [num]);\n    };\n\n    /**\n     * @public\n     */\n    me.getFileAll = function(callBack){\n        _flash.call('getFileAll', [], callBack);\n    };\n\n    /**\n     * @public\n     * @param {Number} index\n     * @param {Function} [callBack]\n     */\n    me.getFileByIndex = function(index, callBack){\n        _flash.call('getFileByIndex', [], callBack);\n    };\n\n    /**\n     * @public\n     * @param {Number} index\n     * @param {function} [callBack]\n     */\n    me.getStatusByIndex = function(index, callBack){\n        _flash.call('getStatusByIndex', [], callBack);\n    };\n};\n\n/**\n * 使用动态script标签请求服务器资源，包括由服务器端的回调和浏览器端的回调\n * @namespace baidu.sio\n */\nbaidu.sio = baidu.sio || {};\n\n/**\n * \n * @param {HTMLElement} src script节点\n * @param {String} url script节点的地址\n * @param {String} [charset] 编码\n */\nbaidu.sio._createScriptTag = function(scr, url, charset){\n    scr.setAttribute('type', 'text/javascript');\n    charset && scr.setAttribute('charset', charset);\n    scr.setAttribute('src', url);\n    document.getElementsByTagName('head')[0].appendChild(scr);\n};\n\n/**\n * 删除script的属性，再删除script标签，以解决修复内存泄漏的问题\n * \n * @param {HTMLElement} src script节点\n */\nbaidu.sio._removeScriptTag = function(scr){\n    if (scr.clearAttributes) {\n        scr.clearAttributes();\n    } else {\n        for (var attr in scr) {\n            if (scr.hasOwnProperty(attr)) {\n                delete scr[attr];\n            }\n        }\n    }\n    if(scr && scr.parentNode){\n        scr.parentNode.removeChild(scr);\n    }\n    scr = null;\n};\n\n\n/**\n * 通过script标签加载数据，加载完成由浏览器端触发回调\n * @name baidu.sio.callByBrowser\n * @function\n * @grammar baidu.sio.callByBrowser(url, opt_callback, opt_options)\n * @param {string} url 加载数据的url\n * @param {Function|string} opt_callback 数据加载结束时调用的函数或函数名\n * @param {Object} opt_options 其他可选项\n * @config {String} [charset] script的字符集\n * @config {Integer} [timeOut] 超时时间，超过这个时间将不再响应本请求，并触发onfailure函数\n * @config {Function} [onfailure] timeOut设定后才生效，到达超时时间时触发本函数\n * @remark\n * 1、与callByServer不同，callback参数只支持Function类型，不支持string。\n * 2、如果请求了一个不存在的页面，callback函数在IE/opera下也会被调用，因此使用者需要在onsuccess函数中判断数据是否正确加载。\n * @meta standard\n * @see baidu.sio.callByServer\n */\nbaidu.sio.callByBrowser = function (url, opt_callback, opt_options) {\n    var scr = document.createElement(\"SCRIPT\"),\n        scriptLoaded = 0,\n        options = opt_options || {},\n        charset = options['charset'],\n        callback = opt_callback || function(){},\n        timeOut = options['timeOut'] || 0,\n        timer;\n    scr.onload = scr.onreadystatechange = function () {\n        if (scriptLoaded) {\n            return;\n        }\n        \n        var readyState = scr.readyState;\n        if ('undefined' == typeof readyState\n            || readyState == \"loaded\"\n            || readyState == \"complete\") {\n            scriptLoaded = 1;\n            try {\n                callback();\n                clearTimeout(timer);\n            } finally {\n                scr.onload = scr.onreadystatechange = null;\n                baidu.sio._removeScriptTag(scr);\n            }\n        }\n    };\n\n    if( timeOut ){\n        timer = setTimeout(function(){\n            scr.onload = scr.onreadystatechange = null;\n            baidu.sio._removeScriptTag(scr);\n            options.onfailure && options.onfailure();\n        }, timeOut);\n    }\n    \n    baidu.sio._createScriptTag(scr, url, charset);\n};\n\n/**\n * 通过script标签加载数据，加载完成由服务器端触发回调\n * @name baidu.sio.callByServer\n * @function\n * @grammar baidu.sio.callByServer(url, callback[, opt_options])\n * @param {string} url 加载数据的url.\n * @param {Function|string} callback 服务器端调用的函数或函数名。如果没有指定本参数，将在URL中寻找options['queryField']做为callback的方法名.\n * @param {Object} opt_options 加载数据时的选项.\n * @config {string} [charset] script的字符集\n * @config {string} [queryField] 服务器端callback请求字段名，默认为callback\n * @config {Integer} [timeOut] 超时时间(单位：ms)，超过这个时间将不再响应本请求，并触发onfailure函数\n * @config {Function} [onfailure] timeOut设定后才生效，到达超时时间时触发本函数\n * @remark\n * 如果url中已经包含key为“options['queryField']”的query项，将会被替换成callback中参数传递或自动生成的函数名。\n * @meta standard\n * @see baidu.sio.callByBrowser\n */\nbaidu.sio.callByServer = /**@function*/function(url, callback, opt_options) {\n    var scr = document.createElement('SCRIPT'),\n        prefix = 'bd__cbs__',\n        callbackName,\n        callbackImpl,\n        options = opt_options || {},\n        charset = options['charset'],\n        queryField = options['queryField'] || 'callback',\n        timeOut = options['timeOut'] || 0,\n        timer,\n        reg = new RegExp('(\\\\?|&)' + queryField + '=([^&]*)'),\n        matches;\n\n    if (baidu.lang.isFunction(callback)) {\n        callbackName = prefix + Math.floor(Math.random() * 2147483648).toString(36);\n        window[callbackName] = getCallBack(0);\n    } else if(baidu.lang.isString(callback)){\n        callbackName = callback;\n    } else {\n        if (matches = reg.exec(url)) {\n            callbackName = matches[2];\n        }\n    }\n\n    if( timeOut ){\n        timer = setTimeout(getCallBack(1), timeOut);\n    }\n    url = url.replace(reg, '\\x241' + queryField + '=' + callbackName);\n    \n    if (url.search(reg) < 0) {\n        url += (url.indexOf('?') < 0 ? '?' : '&') + queryField + '=' + callbackName;\n    }\n    baidu.sio._createScriptTag(scr, url, charset);\n\n    /*\n     * 返回一个函数，用于立即（挂在window上）或者超时（挂在setTimeout中）时执行\n     */\n    function getCallBack(onTimeOut){\n        /*global callbackName, callback, scr, options;*/\n        return function(){\n            try {\n                if( onTimeOut ){\n                    options.onfailure && options.onfailure();\n                }else{\n                    callback.apply(window, arguments);\n                    clearTimeout(timer);\n                }\n                window[callbackName] = null;\n                delete window[callbackName];\n            } catch (exception) {\n            } finally {\n                baidu.sio._removeScriptTag(scr);\n            }\n        }\n    }\n};\n\n/**\n * 通过请求一个图片的方式令服务器存储一条日志\n * @function\n * @grammar baidu.sio.log(url)\n * @param {string} url 要发送的地址.\n * @author: int08h,leeight\n */\nbaidu.sio.log = function(url) {\n  var img = new Image(),\n      key = 'tangram_sio_log_' + Math.floor(Math.random() *\n            2147483648).toString(36);\n  window[key] = img;\n\n  img.onload = img.onerror = img.onabort = function() {\n    img.onload = img.onerror = img.onabort = null;\n\n    window[key] = null;\n    img = null;\n  };\n  img.src = url;\n};\n\n\n\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json.js\n * author: erik\n * version: 1.1.0\n * date: 2009/12/02\n */\n\n\n/**\n * 操作json对象的方法\n * @namespace baidu.json\n */\nbaidu.json = baidu.json || {};\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/parse.js\n * author: erik, berg\n * version: 1.2\n * date: 2009/11/23\n */\n\n\n\n/**\n * 将字符串解析成json对象。注：不会自动祛除空格\n * @name baidu.json.parse\n * @function\n * @grammar baidu.json.parse(data)\n * @param {string} source 需要解析的字符串\n * @remark\n * 该方法的实现与ecma-262第五版中规定的JSON.parse不同，暂时只支持传入一个参数。后续会进行功能丰富。\n * @meta standard\n * @see baidu.json.stringify,baidu.json.decode\n *             \n * @returns {JSON} 解析结果json对象\n */\nbaidu.json.parse = function (data) {\n    //2010/12/09：更新至不使用原生parse，不检测用户输入是否正确\n    return (new Function(\"return (\" + data + \")\"))();\n};\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/decode.js\n * author: erik, cat\n * version: 1.3.4\n * date: 2010/12/23\n */\n\n\n\n/**\n * 将字符串解析成json对象，为过时接口，今后会被baidu.json.parse代替\n * @name baidu.json.decode\n * @function\n * @grammar baidu.json.decode(source)\n * @param {string} source 需要解析的字符串\n * @meta out\n * @see baidu.json.encode,baidu.json.parse\n *             \n * @returns {JSON} 解析结果json对象\n */\nbaidu.json.decode = baidu.json.parse;\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/stringify.js\n * author: erik\n * version: 1.1.0\n * date: 2010/01/11\n */\n\n\n\n/**\n * 将json对象序列化\n * @name baidu.json.stringify\n * @function\n * @grammar baidu.json.stringify(value)\n * @param {JSON} value 需要序列化的json对象\n * @remark\n * 该方法的实现与ecma-262第五版中规定的JSON.stringify不同，暂时只支持传入一个参数。后续会进行功能丰富。\n * @meta standard\n * @see baidu.json.parse,baidu.json.encode\n *             \n * @returns {string} 序列化后的字符串\n */\nbaidu.json.stringify = (function () {\n    /**\n     * 字符串处理时需要转义的字符表\n     * @private\n     */\n    var escapeMap = {\n        \"\\b\": '\\\\b',\n        \"\\t\": '\\\\t',\n        \"\\n\": '\\\\n',\n        \"\\f\": '\\\\f',\n        \"\\r\": '\\\\r',\n        '\"' : '\\\\\"',\n        \"\\\\\": '\\\\\\\\'\n    };\n    \n    /**\n     * 字符串序列化\n     * @private\n     */\n    function encodeString(source) {\n        if (/[\"\\\\\\x00-\\x1f]/.test(source)) {\n            source = source.replace(\n                /[\"\\\\\\x00-\\x1f]/g, \n                function (match) {\n                    var c = escapeMap[match];\n                    if (c) {\n                        return c;\n                    }\n                    c = match.charCodeAt();\n                    return \"\\\\u00\" \n                            + Math.floor(c / 16).toString(16) \n                            + (c % 16).toString(16);\n                });\n        }\n        return '\"' + source + '\"';\n    }\n    \n    /**\n     * 数组序列化\n     * @private\n     */\n    function encodeArray(source) {\n        var result = [\"[\"], \n            l = source.length,\n            preComma, i, item;\n            \n        for (i = 0; i < l; i++) {\n            item = source[i];\n            \n            switch (typeof item) {\n            case \"undefined\":\n            case \"function\":\n            case \"unknown\":\n                break;\n            default:\n                if(preComma) {\n                    result.push(',');\n                }\n                result.push(baidu.json.stringify(item));\n                preComma = 1;\n            }\n        }\n        result.push(\"]\");\n        return result.join(\"\");\n    }\n    \n    /**\n     * 处理日期序列化时的补零\n     * @private\n     */\n    function pad(source) {\n        return source < 10 ? '0' + source : source;\n    }\n    \n    /**\n     * 日期序列化\n     * @private\n     */\n    function encodeDate(source){\n        return '\"' + source.getFullYear() + \"-\" \n                + pad(source.getMonth() + 1) + \"-\" \n                + pad(source.getDate()) + \"T\" \n                + pad(source.getHours()) + \":\" \n                + pad(source.getMinutes()) + \":\" \n                + pad(source.getSeconds()) + '\"';\n    }\n    \n    return function (value) {\n        switch (typeof value) {\n        case 'undefined':\n            return 'undefined';\n            \n        case 'number':\n            return isFinite(value) ? String(value) : \"null\";\n            \n        case 'string':\n            return encodeString(value);\n            \n        case 'boolean':\n            return String(value);\n            \n        default:\n            if (value === null) {\n                return 'null';\n            } else if (value instanceof Array) {\n                return encodeArray(value);\n            } else if (value instanceof Date) {\n                return encodeDate(value);\n            } else {\n                var result = ['{'],\n                    encode = baidu.json.stringify,\n                    preComma,\n                    item;\n                    \n                for (var key in value) {\n                    if (Object.prototype.hasOwnProperty.call(value, key)) {\n                        item = value[key];\n                        switch (typeof item) {\n                        case 'undefined':\n                        case 'unknown':\n                        case 'function':\n                            break;\n                        default:\n                            if (preComma) {\n                                result.push(',');\n                            }\n                            preComma = 1;\n                            result.push(encode(key) + ':' + encode(item));\n                        }\n                    }\n                }\n                result.push('}');\n                return result.join('');\n            }\n        }\n    };\n})();\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/encode.js\n * author: erik, cat\n * version: 1.3.4\n * date: 2010/12/23\n */\n\n\n\n/**\n * 将json对象序列化，为过时接口，今后会被baidu.json.stringify代替\n * @name baidu.json.encode\n * @function\n * @grammar baidu.json.encode(value)\n * @param {JSON} value 需要序列化的json对象\n * @meta out\n * @see baidu.json.decode,baidu.json.stringify\n *             \n * @returns {string} 序列化后的字符串\n */\nbaidu.json.encode = baidu.json.stringify;\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/wordimage/wordimage.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .wrapper{width: 600px;padding: 10px;height: 352px;overflow: hidden;position: relative;border-bottom: 1px solid #d7d7d7}\n        .localPath input{float: left;width: 350px;line-height: 20px;height: 20px;}\n        #clipboard{float:left;width: 70px;height: 30px; }\n        .description{ color: #0066cc; margin-top: 2px; width: 450px; height: 45px;float: left;line-height: 22px}\n        #upload{width: 100px;height: 30px;float: right; margin:10px 2px 0 0;cursor: pointer;}\n        #msg{ width: 140px; height: 30px; line-height:25px;float: left;color: red}\n    </style>\n</head>\n<body>\n    <div class=\"wrapper\">\n        <div class=\"localPath\">\n            <input id=\"localPath\" type=\"text\" readonly />\n            <div id=\"clipboard\"></div>\n            <div id=\"msg\"></div>\n        </div>\n        <div id=\"flashContainer\"></div>\n        <div>\n            <div id=\"upload\" style=\"display: none\" ><img id=\"uploadBtn\"></div>\n            <div class=\"description\">\n                <span style=\"color: red\"><var id=\"lang_resave\"></var>: </span><var id=\"lang_step\"></var>\n            </div>\n          </div>\n    </div>\n    <script type=\"text/javascript\" src=\"tangram.js\"></script>\n    <script type=\"text/javascript\" src=\"wordimage.js\"></script>\n    <script type=\"text/javascript\">\n        editor.setOpt({\n            wordImageFieldName:\"upfile\",\n            compressSide:0,\n            maxImageSideLength:900\n        });\n\n            //全局变量\n        var imageUrls = [],          //用于保存从服务器返回的图片信息数组\n            selectedImageCount = 0,  //当前已选择的但未上传的图片数量\n            optImageUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n            optImageFieldName = editor.getOpt('imageFieldName'),\n            optImageCompressBorder = editor.getOpt('imageCompressEnable') ? editor.getOpt('imageCompressBorder'):null,\n            maxSize = editor.getOpt('imageMaxSize') / 1024,\n            extension = editor.getOpt('imageAllowFiles').join(';').replace(/\\./g, '*.');\n\n        /* 添加额外的GET参数 */\n        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n            urlWidthParams = optImageUrl + (optImageUrl.indexOf('?') == -1 ? '?':'&') + params;\n\n        utils.domReady(function(){\n            //创建Flash相关的参数集合\n            var flashOptions = {\n                container:\"flashContainer\",                                                    //flash容器id\n                url:urlWidthParams,                                           // 上传处理页面的url地址\n                ext:editor.queryCommandValue('serverParam') || {},                                 //可向服务器提交的自定义参数列表\n                fileType:'{\"description\":\"'+lang.fileType+'\", \"extension\":\"' + extension + '\"}',     //上传文件格式限制\n                flashUrl:'imageUploader.swf',                                                  //上传用的flash组件地址\n                width:600,          //flash的宽度\n                height:272,         //flash的高度\n                gridWidth:120,     // 每一个预览图片所占的宽度\n                gridHeight:120,    // 每一个预览图片所占的高度\n                picWidth:100,      // 单张预览图片的宽度\n                picHeight:100,     // 单张预览图片的高度\n                uploadDataFieldName: optImageFieldName,    // POST请求中图片数据的key\n                picDescFieldName:'pictitle',      // POST请求中图片描述的key\n                maxSize: maxSize,                         // 文件的最大体积,单位M\n                compressSize:1,                   // 上传前如果图片体积超过该值，会先压缩,单位M\n                maxNum:32,                         // 单次最大可上传多少个文件\n                compressSide: 0,                 //等比压缩的基准，0为按照最长边，1为按照宽度，2为按照高度\n                compressLength: optImageCompressBorder        //能接受的最大边长，超过该值Flash会自动等比压缩\n            };\n            //回调函数集合，支持传递函数名的字符串、函数句柄以及函数本身三种类型\n            var callbacks={\n                selectFileCallback: function(selectFiles){                // 选择文件的回调\n                    selectedImageCount += selectFiles.length;\n                    if(selectedImageCount) baidu.g(\"upload\").style.display = \"\";\n                    dialog.buttons[0].setDisabled(true); //初始化时置灰确定按钮\n                },\n                deleteFileCallback: function(delFiles){                 // 删除文件的回调\n                    selectedImageCount -= delFiles.length;\n                    if (!selectedImageCount) {\n                        baidu.g(\"upload\").style.display = \"none\";\n                        dialog.buttons[0].setDisabled(false);         //没有选择图片时重新点亮按钮\n                    }\n                },\n                uploadCompleteCallback: function(data){               // 单个文件上传完成的回调\n                    try{var info = eval(\"(\" + data.info + \")\");\n                    info && imageUrls.push(info);\n                    selectedImageCount--;\n                    }catch(e){}\n                },\n                uploadErrorCallback: function (data){         // 单个文件上传失败的回调,\n                    console && console.log(data);\n                },\n                allCompleteCallback: function(){              // 全部上传完成时的回调\n                    dialog.buttons[0].setDisabled(false);    //上传完毕后点亮按钮\n                }\n                //exceedFileCallback: 'exceedFileCallback',   // 文件超出限制的最大体积时的回调\n                //startUploadCallback: startUploadCallback    // 开始上传某个文件时的回调\n            };\n            wordImage.init(flashOptions,callbacks);\n        });\n\n    </script>\n\n</body>\n</html>"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/dialogs/wordimage/wordimage.js",
    "content": "/**\n * Created by JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-1-30\n * Time: 下午12:50\n * To change this template use File | Settings | File Templates.\n */\n\n\n\nvar wordImage = {};\n//(function(){\nvar g = baidu.g,\n\tflashObj,flashContainer;\n\nwordImage.init = function(opt, callbacks) {\n\tshowLocalPath(\"localPath\");\n\t//createCopyButton(\"clipboard\",\"localPath\");\n\tcreateFlashUploader(opt, callbacks);\n\taddUploadListener();\n\taddOkListener();\n};\n\nfunction hideFlash(){\n    flashObj = null;\n    flashContainer.innerHTML = \"\";\n}\nfunction addOkListener() {\n\tdialog.onok = function() {\n\t\tif (!imageUrls.length) return;\n\t\tvar urlPrefix = editor.getOpt('imageUrlPrefix'),\n            images = domUtils.getElementsByTagName(editor.document,\"img\");\n        editor.fireEvent('saveScene');\n\t\tfor (var i = 0,img; img = images[i++];) {\n\t\t\tvar src = img.getAttribute(\"word_img\");\n\t\t\tif (!src) continue;\n\t\t\tfor (var j = 0,url; url = imageUrls[j++];) {\n\t\t\t\tif (src.indexOf(url.original.replace(\" \",\"\")) != -1) {\n\t\t\t\t\timg.src = urlPrefix + url.url;\n\t\t\t\t\timg.setAttribute(\"_src\", urlPrefix + url.url);  //同时修改\"_src\"属性\n\t\t\t\t\timg.setAttribute(\"title\",url.title);\n                    domUtils.removeAttributes(img, [\"word_img\",\"style\",\"width\",\"height\"]);\n\t\t\t\t\teditor.fireEvent(\"selectionchange\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n        editor.fireEvent('saveScene');\n        hideFlash();\n\t};\n    dialog.oncancel = function(){\n        hideFlash();\n    }\n}\n\n/**\n * 绑定开始上传事件\n */\nfunction addUploadListener() {\n\tg(\"upload\").onclick = function () {\n\t\tflashObj.upload();\n\t\tthis.style.display = \"none\";\n\t};\n}\n\nfunction showLocalPath(id) {\n    //单张编辑\n    var img = editor.selection.getRange().getClosedNode();\n    var images = editor.execCommand('wordimage');\n    if(images.length==1 || img && img.tagName == 'IMG'){\n        g(id).value = images[0];\n        return;\n    }\n\tvar path = images[0];\n    var leftSlashIndex  = path.lastIndexOf(\"/\")||0,  //不同版本的doc和浏览器都可能影响到这个符号，故直接判断两种\n        rightSlashIndex = path.lastIndexOf(\"\\\\\")||0,\n        separater = leftSlashIndex > rightSlashIndex ? \"/\":\"\\\\\" ;\n\n\tpath = path.substring(0, path.lastIndexOf(separater)+1);\n\tg(id).value = path;\n}\n\nfunction createFlashUploader(opt, callbacks) {\n    //由于lang.flashI18n是静态属性，不可以直接进行修改，否则会影响到后续内容\n    var i18n = utils.extend({},lang.flashI18n);\n    //处理图片资源地址的编码，补全等问题\n    for(var i in i18n){\n        if(!(i in {\"lang\":1,\"uploadingTF\":1,\"imageTF\":1,\"textEncoding\":1}) && i18n[i]){\n            i18n[i] = encodeURIComponent(editor.options.langPath + editor.options.lang + \"/images/\" + i18n[i]);\n        }\n    }\n    opt = utils.extend(opt,i18n,false);\n\tvar option = {\n\t\tcreateOptions:{\n\t\t\tid:'flash',\n\t\t\turl:opt.flashUrl,\n\t\t\twidth:opt.width,\n\t\t\theight:opt.height,\n\t\t\terrorMessage:lang.flashError,\n\t\t\twmode:browser.safari ? 'transparent' : 'window',\n\t\t\tver:'10.0.0',\n\t\t\tvars:opt,\n\t\t\tcontainer:opt.container\n\t\t}\n\t};\n\n\toption = extendProperty(callbacks, option);\n\tflashObj = new baidu.flash.imageUploader(option);\n    flashContainer = $G(opt.container);\n}\n\nfunction extendProperty(fromObj, toObj) {\n\tfor (var i in fromObj) {\n\t\tif (!toObj[i]) {\n\t\t\ttoObj[i] = fromObj[i];\n\t\t}\n\t}\n\treturn toObj;\n}\n\n//})();\n\nfunction getPasteData(id) {\n\tbaidu.g(\"msg\").innerHTML = lang.copySuccess + \"</br>\";\n\tsetTimeout(function() {\n\t\tbaidu.g(\"msg\").innerHTML = \"\";\n\t}, 5000);\n\treturn baidu.g(id).value;\n}\n\nfunction createCopyButton(id, dataFrom) {\n\tbaidu.swf.create({\n\t\t\tid:\"copyFlash\",\n\t\t\turl:\"fClipboard_ueditor.swf\",\n\t\t\twidth:\"58\",\n\t\t\theight:\"25\",\n\t\t\terrorMessage:\"\",\n\t\t\tbgColor:\"#CBCBCB\",\n\t\t\twmode:\"transparent\",\n\t\t\tver:\"10.0.0\",\n\t\t\tvars:{\n\t\t\t\ttid:dataFrom\n\t\t\t}\n\t\t}, id\n\t);\n\n\tvar clipboard = baidu.swf.getMovie(\"copyFlash\");\n\tvar clipinterval = setInterval(function() {\n\t\tif (clipboard && clipboard.flashInit) {\n\t\t\tclearInterval(clipinterval);\n\t\t\tclipboard.setHandCursor(true);\n\t\t\tclipboard.setContentFuncName(\"getPasteData\");\n\t\t\t//clipboard.setMEFuncName(\"mouseEventHandler\");\n\t\t}\n\t}, 500);\n}\ncreateCopyButton(\"clipboard\", \"localPath\");"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/lang/en/en.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-6-12\n * Time: 下午6:57\n * To change this template use File | Settings | File Templates.\n */\nUE.I18N['en'] = {\n    'labelMap':{\n        'anchor':'Anchor', 'undo':'Undo', 'redo':'Redo', 'bold':'Bold', 'indent':'Indent', 'snapscreen':'SnapScreen',\n        'italic':'Italic', 'underline':'Underline', 'strikethrough':'Strikethrough', 'subscript':'SubScript','fontborder':'text border',\n        'superscript':'SuperScript', 'formatmatch':'Format Match', 'source':'Source', 'blockquote':'BlockQuote',\n        'pasteplain':'PastePlain', 'selectall':'SelectAll', 'print':'Print', 'preview':'Preview',\n        'horizontal':'Horizontal', 'removeformat':'RemoveFormat', 'time':'Time', 'date':'Date',\n        'unlink':'Unlink', 'insertrow':'InsertRow', 'insertcol':'InsertCol', 'mergeright':'MergeRight', 'mergedown':'MergeDown',\n        'deleterow':'DeleteRow', 'deletecol':'DeleteCol', 'splittorows':'SplitToRows','insertcode':'insert code',\n        'splittocols':'SplitToCols', 'splittocells':'SplitToCells','deletecaption':'DeleteCaption','inserttitle':'InsertTitle',\n        'mergecells':'MergeCells', 'deletetable':'DeleteTable', 'cleardoc':'Clear', 'insertparagraphbeforetable':\"InsertParagraphBeforeTable\",\n        'fontfamily':'FontFamily', 'fontsize':'FontSize', 'paragraph':'Paragraph','simpleupload':'Single Image','insertimage':'Multi Image','edittable':'Edit Table', 'edittd':'Edit Td','link':'Link',\n        'emotion':'Emotion', 'spechars':'Spechars', 'searchreplace':'SearchReplace', 'map':'BaiduMap', 'gmap':'GoogleMap',\n        'insertvideo':'Video', 'help':'Help', 'justifyleft':'JustifyLeft', 'justifyright':'JustifyRight', 'justifycenter':'JustifyCenter',\n        'justifyjustify':'Justify', 'forecolor':'FontColor', 'backcolor':'BackColor', 'insertorderedlist':'OL',\n        'insertunorderedlist':'UL', 'fullscreen':'FullScreen', 'directionalityltr':'EnterFromLeft', 'directionalityrtl':'EnterFromRight',\n        'rowspacingtop':'RowSpacingTop', 'rowspacingbottom':'RowSpacingBottom', 'pagebreak':'PageBreak', 'insertframe':'Iframe', 'imagenone':'Default',\n        'imageleft':'ImageLeft', 'imageright':'ImageRight', 'attachment':'Attachment', 'imagecenter':'ImageCenter', 'wordimage':'WordImage',\n        'lineheight':'LineHeight','edittip':'EditTip','customstyle':'CustomStyle', 'scrawl':'Scrawl', 'autotypeset':'AutoTypeset',\n        'webapp':'WebAPP', 'touppercase':'UpperCase', 'tolowercase':'LowerCase','template':'Template','background':'Background','inserttable':'InsertTable',\n        'music':'Music', 'charts': 'charts','drafts': 'Load from Drafts'\n    },\n    'insertorderedlist':{\n        'num':'1,2,3...',\n        'num1':'1),2),3)...',\n        'num2':'(1),(2),(3)...',\n        'cn':'一,二,三....',\n        'cn1':'一),二),三)....',\n        'cn2':'(一),(二),(三)....',\n        'decimal':'1,2,3...',\n        'lower-alpha':'a,b,c...',\n        'lower-roman':'i,ii,iii...',\n        'upper-alpha':'A,B,C...',\n        'upper-roman':'I,II,III...'\n    },\n    'insertunorderedlist':{\n        'circle':'○ Circle',\n        'disc':'● Circle dot',\n        'square':'■ Rectangle ',\n        'dash' :'－ Dash',\n        'dot' : '。dot'\n    },\n    'paragraph':{'p':'Paragraph', 'h1':'Title 1', 'h2':'Title 2', 'h3':'Title 3', 'h4':'Title 4', 'h5':'Title 5', 'h6':'Title 6'},\n    'fontfamily':{\n        'songti':'Sim Sun',\n        'kaiti':'Sim Kai',\n        'heiti':'Sim Hei',\n        'lishu':'Sim Li',\n        'yahei': 'Microsoft YaHei',\n        'andaleMono':'Andale Mono',\n        'arial': 'Arial',\n        'arialBlack':'Arial Black',\n        'comicSansMs':'Comic Sans MS',\n        'impact':'Impact',\n        'timesNewRoman':'Times New Roman'\n    },\n    'customstyle':{\n        'tc':'Title center',\n        'tl':'Title left',\n        'im':'Important',\n        'hi':'Highlight'\n    },\n    'autoupload': {\n        'exceedSizeError': 'File Size Exceed',\n        'exceedTypeError': 'File Type Not Allow',\n        'jsonEncodeError': 'Server Return Format Error',\n        'loading':\"loading...\",\n        'loadError':\"load error\",\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n    },\n    'simpleupload':{\n        'exceedSizeError': 'File Size Exceed',\n        'exceedTypeError': 'File Type Not Allow',\n        'jsonEncodeError': 'Server Return Format Error',\n        'loading':\"loading...\",\n        'loadError':\"load error\",\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n    },\n    'elementPathTip':\"Path\",\n    'wordCountTip':\"Word Count\",\n    'wordCountMsg':'{#count} characters entered,{#leave} left. ',\n    'wordOverFlowMsg':'<span style=\"color:red;\">The number of characters has exceeded allowable maximum values, the server may refuse to save!</span>',\n    'ok':\"OK\",\n    'cancel':\"Cancel\",\n    'closeDialog':\"closeDialog\",\n    'tableDrag':\"You must import the file uiUtils.js before drag! \",\n    'autofloatMsg':\"The plugin AutoFloat depends on EditorUI!\",\n    'loadconfigError': 'Get server config error.',\n    'loadconfigFormatError': 'Server config format error.',\n    'loadconfigHttpError': 'Get server config http error.',\n    'snapScreen_plugin':{\n        'browserMsg':\"Only IE supported!\",\n        'callBackErrorMsg':\"The callback data is wrong,please check the config!\",\n        'uploadErrorMsg':\"Upload error,please check your server environment! \"\n    },\n    'insertcode':{\n        'as3':'ActionScript 3',\n        'bash':'Bash/Shell',\n        'cpp':'C/C++',\n        'css':'CSS',\n        'cf':'ColdFusion',\n        'c#':'C#',\n        'delphi':'Delphi',\n        'diff':'Diff',\n        'erlang':'Erlang',\n        'groovy':'Groovy',\n        'html':'HTML',\n        'java':'Java',\n        'jfx':'JavaFX',\n        'js':'JavaScript',\n        'pl':'Perl',\n        'php':'PHP',\n        'plain':'Plain Text',\n        'ps':'PowerShell',\n        'python':'Python',\n        'ruby':'Ruby',\n        'scala':'Scala',\n        'sql':'SQL',\n        'vb':'Visual Basic',\n        'xml':'XML'\n    },\n    'confirmClear':\"Do you confirm to clear the Document?\",\n    'contextMenu':{\n        'delete':\"Delete\",\n        'selectall':\"Select all\",\n        'deletecode':\"Delete Code\",\n        'cleardoc':\"Clear Document\",\n        'confirmclear':\"Do you confirm to clear the Document?\",\n        'unlink':\"Unlink\",\n        'paragraph':\"Paragraph\",\n        'edittable':\"Table property\",\n        'aligncell':'Align cell',\n        'aligntable':'Table alignment',\n        'tableleft':'Left float',\n        'tablecenter':'Center',\n        'tableright':'Right float',\n        'aligntd':'Cell alignment',\n        'edittd':\"Cell property\",\n        'setbordervisible':'set table edge visible',\n        'table':\"Table\",\n        'justifyleft':'Justify Left',\n        'justifyright':'Justify Right',\n        'justifycenter':'Justify Center',\n        'justifyjustify':'Default',\n        'deletetable':\"Delete table\",\n        'insertparagraphbefore':\"InsertedBeforeLine\",\n        'insertparagraphafter':'InsertedAfterLine',\n        'inserttable':'Insert table',\n        'insertcaption':'Insert caption',\n        'deletecaption':'Delete Caption',\n        'inserttitle':'Insert Title',\n        'deletetitle':'Delete Title',\n        'inserttitlecol':'Insert Title Col',\n        'deletetitlecol':'Delete Title Col',\n        'averageDiseRow':'AverageDise Row',\n        'averageDisCol':'AverageDis Col',\n        'deleterow':\"Delete row\",\n        'deletecol':\"Delete col\",\n        'insertrow':\"Insert row\",\n        'insertcol':\"Insert col\",\n        'insertrownext':'Insert Row Next',\n        'insertcolnext':'Insert Col Next',\n        'mergeright':\"Merge right\",\n        'mergeleft':\"Merge left\",\n        'mergedown':\"Merge down\",\n        'mergecells':\"Merge cells\",\n        'splittocells':\"Split to cells\",\n        'splittocols':\"Split to Cols\",\n        'splittorows':\"Split to Rows\",\n        'tablesort':'Table sorting',\n        'enablesort':'Sorting Enable',\n        'disablesort':'Sorting Disable',\n        'reversecurrent':'Reverse current',\n        'orderbyasc':'Order By ASCII',\n        'reversebyasc':'Reverse By ASCII',\n        'orderbynum':'Order By Num',\n        'reversebynum':'Reverse By Num',\n        'borderbk':'Border shading',\n        'setcolor':'interlaced color',\n        'unsetcolor':'Cancel interlacedcolor',\n        'setbackground':'Background interlaced',\n        'unsetbackground':'Cancel Bk interlaced',\n        'redandblue':'Blue and red',\n        'threecolorgradient':'Three-color gradient',\n        'copy':\"Copy(Ctrl + c)\",\n        'copymsg':\"Browser does not support. Please use 'Ctrl + c' instead!\",\n        'paste':\"Paste(Ctrl + v)\",\n        'pastemsg':\"Browser does not support. Please use 'Ctrl + v' instead!\"\n    },\n    'copymsg': \"Browser does not support. Please use 'Ctrl + c' instead!\",\n    'pastemsg': \"Browser does not support. Please use 'Ctrl + v' instead!\",\n    'anthorMsg':\"Link\",\n    'clearColor':'Clear',\n    'standardColor':'Standard color',\n    'themeColor':'Theme color',\n    'property':'Property',\n    'default':'Default',\n    'modify':'Modify',\n    'justifyleft':'Justify Left',\n    'justifyright':'Justify Right',\n    'justifycenter':'Justify Center',\n    'justify':'Default',\n    'clear':'Clear',\n    'anchorMsg':'Anchor',\n    'delete':'Delete',\n    'clickToUpload':\"Click to upload\",\n    'unset':'Language hasn\\'t been set!',\n    't_row':'row',\n    't_col':'col',\n    'pasteOpt':'Paste Option',\n    'pasteSourceFormat':\"Keep Source Formatting\",\n    'tagFormat':'Keep tag',\n    'pasteTextFormat':'Keep Text only',\n    'more':'More',\n    'autoTypeSet':{\n        'mergeLine':\"Merge empty line\",\n        'delLine':\"Del empty line\",\n        'removeFormat':\"Remove format\",\n        'indent':\"Indent\",\n        'alignment':\"Alignment\",\n        'imageFloat':\"Image float\",\n        'removeFontsize':\"Remove font size\",\n        'removeFontFamily':\"Remove fontFamily\",\n        'removeHtml':\"Remove redundant HTML code\",\n        'pasteFilter':\"Paste filter\",\n        'run':\"Done\",\n        'symbol':'Symbol Conversion',\n        'bdc2sb':'Full-width to Half-width',\n        'tobdc':'Half-width to Full-width'\n    },\n\n    'background':{\n        'static':{\n            'lang_background_normal':'Normal',\n            'lang_background_local':'Online',\n            'lang_background_set':'Background Set',\n            'lang_background_none':'No Background',\n            'lang_background_colored':'Colored Background',\n            'lang_background_color':'Color Set',\n            'lang_background_netimg':'Net-Image',\n            'lang_background_align':'Align Type',\n            'lang_background_position':'Position',\n            'repeatType':{'options':[\"Center\", \"Repeat-x\", \"Repeat-y\", \"Tile\",\"Custom\"]}\n        },\n        'noUploadImage':\"No pictures has been uploaded！\",\n        'toggleSelect':'Change the active state by click!\\n Image Size: '\n    },\n    //===============dialog i18N=======================\n    'insertimage':{\n        'static':{\n            'lang_tab_remote':\"Insert\",\n            'lang_tab_upload':\"Local\",\n            'lang_tab_online':\"Manager\",\n            'lang_tab_search':\"Search\",\n            'lang_input_url':\"Address:\",\n            'lang_input_size':\"Size:\",\n            'lang_input_width':\"Width\",\n            'lang_input_height':\"Height\",\n            'lang_input_border':\"Border:\",\n            'lang_input_vhspace':\"Margins:\",\n            'lang_input_title':\"Title:\",\n            'lang_input_align':'Image Float Style:',\n            'lang_imgLoading':\"Loading...\",\n            'lang_start_upload':\"Start Upload\",\n            'lock':{'title':\"Lock rate\"},\n            'searchType':{'title':\"ImageType\", 'options':[\"News\", \"Wallpaper\", \"emotions\", \"photo\"]},\n            'searchTxt':{'value':\"Enter the search keyword!\"},\n            'searchBtn':{'value':\"Search\"},\n            'searchReset':{'value':\"Clear\"},\n            'noneAlign':{'title':'None Float'},\n            'leftAlign':{'title':'Left Float'},\n            'rightAlign':{'title':'Right Float'},\n            'centerAlign':{'title':'Center In A Line'}\n        },\n        'uploadSelectFile':'Select File',\n        'uploadAddFile':'Add File',\n        'uploadStart':'Start Upload',\n        'uploadPause':'Pause Upload',\n        'uploadContinue':'Continue Upload',\n        'uploadRetry':'Retry Upload',\n        'uploadDelete':'Delete',\n        'uploadTurnLeft':'Turn Left',\n        'uploadTurnRight':'Turn Right',\n        'uploadPreview':'Doing Preview',\n        'uploadNoPreview':'Can Not Preview',\n        'updateStatusReady': 'Selected _ pictures, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ pictures (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize':'File Size Exceed',\n        'errorFileType':'File Type Not Allow',\n        'errorInterrupt':'File Upload Interrupted',\n        'errorUploadRetry':'Upload Error, Please Retry.',\n        'errorHttp':'Http Error',\n        'errorServerUpload':'Server Result Error.',\n        'remoteLockError':\"Cannot Lock the Proportion between width and height\",\n        'numError':\"Please enter the correct Num. e.g 123,400\",\n        'imageUrlError':\"The image format may be wrong!\",\n        'imageLoadError':\"Error,please check the network or URL！\",\n        'searchRemind':\"Enter the search keyword!\",\n        'searchLoading':\"Image is loading,please wait...\",\n        'searchRetry':\" Sorry,can't find the image,please try again!\"\n    },\n    'attachment':{\n        'static':{\n            'lang_tab_upload': 'Upload',\n            'lang_tab_online': 'Online',\n            'lang_start_upload':\"Start upload\",\n            'lang_drop_remind':\"You can drop files here, a single maximum of 300 files\"\n        },\n        'uploadSelectFile':'Select File',\n        'uploadAddFile':'Add File',\n        'uploadStart':'Start Upload',\n        'uploadPause':'Pause Upload',\n        'uploadContinue':'Continue Upload',\n        'uploadRetry':'Retry Upload',\n        'uploadDelete':'Delete',\n        'uploadTurnLeft':'Turn Left',\n        'uploadTurnRight':'Turn Right',\n        'uploadPreview':'Doing Preview',\n        'updateStatusReady': 'Selected _ files, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ files (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize':'File Size Exceed',\n        'errorFileType':'File Type Not Allow',\n        'errorInterrupt':'File Upload Interrupted',\n        'errorUploadRetry':'Upload Error, Please Retry.',\n        'errorHttp':'Http Error',\n        'errorServerUpload':'Server Result Error.'\n    },\n\n    'insertvideo':{\n        'static':{\n            'lang_tab_insertV':\"Video\",\n            'lang_tab_searchV':\"Search\",\n            'lang_tab_uploadV':\"Upload\",\n            'lang_video_url':\" URL \",\n            'lang_video_size':\"Video Size\",\n            'lang_videoW':\"Width\",\n            'lang_videoH':\"Height\",\n            'lang_alignment':\"Alignment\",\n            'videoSearchTxt':{'value':\"Enter the search keyword!\"},\n            'videoType':{'options':[\"All\", \"Hot\", \"Entertainment\", \"Funny\", \"Sports\", \"Science\", \"variety\"]},\n            'videoSearchBtn':{'value':\"Search in Baidu\"},\n            'videoSearchReset':{'value':\"Clear result\"},\n\n            'lang_input_fileStatus':' No file uploaded!',\n            'startUpload':{'style':\"background:url(upload.png) no-repeat;\"},\n\n            'lang_upload_size':\"Video Size\",\n            'lang_upload_width':\"Width\",\n            'lang_upload_height':\"Height\",\n            'lang_upload_alignment':\"Alignment\",\n            'lang_format_advice':\"Recommends mp4 format.\"\n        },\n        'numError':\"Please enter the correct Num. e.g 123,400\",\n        'floatLeft':\"Float left\",\n        'floatRight':\"Float right\",\n        'default':\"Default\",\n        'block':\"Display in block\",\n        'urlError':\"The video url format may be wrong!\",\n        'loading':\" &nbsp;The video is loading, please wait…\",\n        'clickToSelect':\"Click to select\",\n        'goToSource':'Visit source video ',\n        'noVideo':\" &nbsp; &nbsp;Sorry,can't find the video,please try again!\",\n\n        'browseFiles':'Open files',\n        'uploadSuccess':'Upload Successful!',\n        'delSuccessFile':'Remove from the success of the queue',\n        'delFailSaveFile':'Remove the save failed file',\n        'statusPrompt':' file(s) uploaded! ',\n        'flashVersionError':'The current Flash version is too low, please update FlashPlayer,then try again!',\n        'flashLoadingError':'The Flash failed loading! Please check the path or network state',\n        'fileUploadReady':'Wait for uploading...',\n        'delUploadQueue':'Remove from the uploading queue ',\n        'limitPrompt1':'Can not choose more than single',\n        'limitPrompt2':'file(s)！Please choose again！',\n        'delFailFile':'Remove failure file',\n        'fileSizeLimit':'File size exceeds the limit！',\n        'emptyFile':'Can not upload an empty file！',\n        'fileTypeError':'File type error！',\n        'unknownError':'Unknown error！',\n        'fileUploading':'Uploading,please wait...',\n        'cancelUpload':'Cancel upload',\n        'netError':'Network error',\n        'failUpload':'Upload failed',\n        'serverIOError':'Server IO error！',\n        'noAuthority':'No Permission！',\n        'fileNumLimit':'Upload limit to the number',\n        'failCheck':'Authentication fails, the upload is skipped!',\n        'fileCanceling':'Cancel, please wait...',\n        'stopUploading':'Upload has stopped...',\n\n        'uploadSelectFile':'Select File',\n        'uploadAddFile':'Add File',\n        'uploadStart':'Start Upload',\n        'uploadPause':'Pause Upload',\n        'uploadContinue':'Continue Upload',\n        'uploadRetry':'Retry Upload',\n        'uploadDelete':'Delete',\n        'uploadTurnLeft':'Turn Left',\n        'uploadTurnRight':'Turn Right',\n        'uploadPreview':'Doing Preview',\n        'updateStatusReady': 'Selected _ files, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ files (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize':'File Size Exceed',\n        'errorFileType':'File Type Not Allow',\n        'errorInterrupt':'File Upload Interrupted',\n        'errorUploadRetry':'Upload Error, Please Retry.',\n        'errorHttp':'Http Error',\n        'errorServerUpload':'Server Result Error.'\n    },\n    'webapp':{\n        'tip1':\"This function provided by Baidu APP,please apply for baidu APPKey webmaster first!\",\n        'tip2':\"And then open the file ueditor.config.js to set it! \",\n        'applyFor':\"APPLY FOR\",\n        'anthorApi':\"Baidu API\"\n    },\n    'template':{\n        'static':{\n            'lang_template_bkcolor':'Background Color',\n            'lang_template_clear' : 'Keep Content',\n            'lang_template_select':'Select Template'\n        },\n        'blank':\"Blank\",\n        'blog':\"Blog\",\n        'resume':\"Resume\",\n        'richText':\"Rich Text\",\n        'scrPapers':\"Scientific Papers\"\n    },\n    scrawl:{\n        'static':{\n            'lang_input_previousStep':\"Previous\",\n            'lang_input_nextsStep':\"Next\",\n            'lang_input_clear':'Clear',\n            'lang_input_addPic':'AddImage',\n            'lang_input_ScalePic':'ScaleImage',\n            'lang_input_removePic':'RemoveImage',\n            'J_imgTxt':{title:'Add background image'}\n        },\n        'noScarwl':\"No paint, a white paper...\",\n        'scrawlUpLoading':\"Image is uploading, please wait...\",\n        'continueBtn':\"Try again\",\n        'imageError':\"Image failed to load!\",\n        'backgroundUploading':'Image is uploading,please wait...'\n    },\n    'music':{\n        'static':{\n            'lang_input_tips':\"Input singer/song/album, search you interested in music!\",\n            'J_searchBtn':{value:'Search songs'}\n        },\n        'emptyTxt':'Not search to the relevant music results, please change a keyword try.',\n        'chapter':'Songs',\n        'singer':'Singer',\n        'special':'Album',\n        'listenTest':'Audition'\n    },\n    anchor:{\n        'static':{\n            'lang_input_anchorName':'Anchor Name:'\n        }\n    },\n    'charts':{\n        'static':{\n            'lang_data_source':'Data source:',\n            'lang_chart_format': 'Chart format:',\n            'lang_data_align': 'Align',\n            'lang_chart_align_same': 'Consistent with the X-axis Y-axis',\n            'lang_chart_align_reverse': 'X-axis Y-axis opposite',\n            'lang_chart_title': 'Title',\n            'lang_chart_main_title': 'main title:',\n            'lang_chart_sub_title': 'sub title:',\n            'lang_chart_x_title': 'X-axis title:',\n            'lang_chart_y_title': 'Y-axis title:',\n            'lang_chart_tip': 'Prompt',\n            'lang_cahrt_tip_prefix': 'prefix:',\n            'lang_cahrt_tip_description': '仅饼图有效， 当鼠标移动到饼图中相应的块上时，提示框内的文字的前缀',\n            'lang_chart_data_unit': 'Unit',\n            'lang_chart_data_unit_title': 'unit:',\n            'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位， 比如： 温度的单位 ℃',\n            'lang_chart_type': 'Chart type:',\n            'lang_prev_btn': 'Previous',\n            'lang_next_btn': 'Next'\n        }\n    },\n    emotion:{\n        'static':{\n            'lang_input_choice':'Choice',\n            'lang_input_Tuzki':'Tuzki',\n            'lang_input_lvdouwa':'LvDouWa',\n            'lang_input_BOBO':'BOBO',\n            'lang_input_babyCat':'BabyCat',\n            'lang_input_bubble':'Bubble',\n            'lang_input_youa':'YouA'\n        }\n    },\n    gmap:{\n        'static':{\n            'lang_input_address':'Address:',\n            'lang_input_search':'Search',\n            'address':{value:\"Beijing\"}\n        },\n        searchError:'Unable to locate the address!'\n    },\n    help:{\n        'static':{\n            'lang_input_about':'About',\n            'lang_input_shortcuts':'Shortcuts',\n            'lang_input_introduction':\"UEditor is developed by Baidu Co.ltd.  It is lightweight, customizable , focusing on user experience and etc. , UEditor is based on open source BSD license , allowing free use and redistribution.\",\n            'lang_Txt_shortcuts':'Shortcuts',\n            'lang_Txt_func':'Function',\n            'lang_Txt_bold':'Bold',\n            'lang_Txt_copy':'Copy',\n            'lang_Txt_cut':'Cut',\n            'lang_Txt_Paste':'Paste',\n            'lang_Txt_undo':'Undo',\n            'lang_Txt_redo':'Redo',\n            'lang_Txt_italic':'Italic',\n            'lang_Txt_underline':'Underline',\n            'lang_Txt_selectAll':'Select All',\n            'lang_Txt_visualEnter':'Submit',\n            'lang_Txt_fullscreen':'Fullscreen'\n        }\n    },\n    insertframe:{\n        'static':{\n            'lang_input_address':'Address：',\n            'lang_input_width':'Width：',\n            'lang_input_height':'height：',\n            'lang_input_isScroll':'Enable scrollbars：',\n            'lang_input_frameborder':'Show frame border：',\n            'lang_input_alignMode':'Alignment：',\n            'align':{title:\"Alignment\", options:[\"Default\", \"Left\", \"Right\", \"Center\"]}\n        },\n        'enterAddress':'Please enter an address!'\n    },\n    link:{\n        'static':{\n            'lang_input_text':'Text：',\n            'lang_input_url':'URL：',\n            'lang_input_title':'Title：',\n            'lang_input_target':'open in new window：'\n        },\n        'validLink':'Supports only effective when a link is selected',\n        'httpPrompt':'The hyperlink you enter should start with \"http|https|ftp://\"!'\n    },\n    map:{\n        'static':{\n            lang_city:\"City\",\n            lang_address:\"Address\",\n            city:{value:\"Beijing\"},\n            lang_search:\"Search\",\n            lang_dynamicmap:\"Dynamic map\"\n        },\n        cityMsg:\"Please enter the city name!\",\n        errorMsg:\"Can't find the place!\"\n    },\n    searchreplace:{\n        'static':{\n            lang_tab_search:\"Search\",\n            lang_tab_replace:\"Replace\",\n            lang_search1:\"Search\",\n            lang_search2:\"Search\",\n            lang_replace:\"Replace\",\n            lang_searchReg:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',\n            lang_searchReg1:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',\n            lang_case_sensitive1:\"Case sense\",\n            lang_case_sensitive2:\"Case sense\",\n            nextFindBtn:{value:\"Next\"},\n            preFindBtn:{value:\"Preview\"},\n            nextReplaceBtn:{value:\"Next\"},\n            preReplaceBtn:{value:\"Preview\"},\n            repalceBtn:{value:\"Replace\"},\n            repalceAllBtn:{value:\"Replace all\"}\n        },\n        getEnd:\"Has the search to the bottom!\",\n        getStart:\"Has the search to the top!\",\n        countMsg:\"Altogether replaced {#count} character(s)!\"\n    },\n    snapscreen:{\n        'static':{\n            lang_showMsg:\"You should install the UEditor screenshots program first!\",\n            lang_download:\"Download!\",\n            lang_step1:\"Step1:Download the program and then run it\",\n            lang_step2:\"Step2:After complete install,try to click the button again\"\n        }\n    },\n    spechars:{\n        'static':{},\n        tsfh:\"Special\",\n        lmsz:\"Roman\",\n        szfh:\"Numeral\",\n        rwfh:\"Japanese\",\n        xlzm:\"The Greek\",\n        ewzm:\"Russian\",\n        pyzm:\"Phonetic\",\n        yyyb:\"English\",\n        zyzf:\"Others\"\n    },\n    'edittable':{\n        'static':{\n            'lang_tableStyle':'Table style',\n            'lang_insertCaption':'Add table header row',\n            'lang_insertTitle':'Add table title row',\n            'lang_insertTitleCol':'Add table title col',\n            'lang_tableSize':'Automatically adjust table size',\n            'lang_autoSizeContent':'Adaptive by form text',\n            'lang_orderbycontent':\"Table of contents sortable\",\n            'lang_autoSizePage':'Page width adaptive',\n            'lang_example':'Example',\n            'lang_borderStyle':'Table Border',\n            'lang_color':'Color:'\n        },\n        captionName:'Caption',\n        titleName:'Title',\n        cellsName:'text',\n        errorMsg:'There are merged cells, can not sort.'\n    },\n    'edittip':{\n        'static':{\n            lang_delRow:'Delete entire row',\n            lang_delCol:'Delete entire col'\n        }\n    },\n    'edittd':{\n        'static':{\n            lang_tdBkColor:'Background Color:'\n        }\n    },\n    'formula':{\n        'static':{\n        }\n    },\n    wordimage:{\n        'static':{\n            lang_resave:\"The re-save step\",\n            uploadBtn:{src:\"upload.png\", alt:\"Upload\"},\n            clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},\n            lang_step:\" 1. Click top button to copy the url and then open the dialog to paste it. 2. Open after choose photos uploaded process.\"\n        },\n        fileType:\"Image\",\n        flashError:\"Flash initialization failed!\",\n        netError:\"Network error! Please try again!\",\n        copySuccess:\"URL has been copied!\",\n\n        'flashI18n':{\n            lang:encodeURI( '{\"UploadingState\":\"totalNum: ${a},uploadComplete: ${b}\", \"BeforeUpload\":\"waitingNum: ${a}\", \"ExceedSize\":\"Size exceed${a}\", \"ErrorInPreview\":\"Preview failed\", \"DefaultDescription\":\"Description\", \"LoadingImage\":\"Loading...\"}' ),\n            uploadingTF:encodeURI( '{\"font\":\"Arial\", \"size\":12, \"color\":\"0x000\", \"bold\":\"true\", \"italic\":\"false\", \"underline\":\"false\"}' ),\n            imageTF:encodeURI( '{\"font\":\"Arial\", \"size\":11, \"color\":\"red\", \"bold\":\"false\", \"italic\":\"false\", \"underline\":\"false\"}' ),\n            textEncoding:\"utf-8\",\n            addImageSkinURL:\"addImage.png\",\n            allDeleteBtnUpSkinURL:\"allDeleteBtnUpSkin.png\",\n            allDeleteBtnHoverSkinURL:\"allDeleteBtnHoverSkin.png\",\n            rotateLeftBtnEnableSkinURL:\"rotateLeftEnable.png\",\n            rotateLeftBtnDisableSkinURL:\"rotateLeftDisable.png\",\n            rotateRightBtnEnableSkinURL:\"rotateRightEnable.png\",\n            rotateRightBtnDisableSkinURL:\"rotateRightDisable.png\",\n            deleteBtnEnableSkinURL:\"deleteEnable.png\",\n            deleteBtnDisableSkinURL:\"deleteDisable.png\",\n            backgroundURL:'',\n            listBackgroundURL:'',\n            buttonURL:'button.png'\n        }\n    },\n    'autosave': {\n        'success':'Local conservation success'\n    }\n};\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/lang/zh-cn/zh-cn.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-6-12\n * Time: 下午5:02\n * To change this template use File | Settings | File Templates.\n */\nUE.I18N['zh-cn'] = {\n    'labelMap':{\n        'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图',\n        'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框',\n        'superscript':'上标', 'formatmatch':'格式刷', 'source':'源代码', 'blockquote':'引用',\n        'pasteplain':'纯文本粘贴模式', 'selectall':'全选', 'print':'打印', 'preview':'预览',\n        'horizontal':'分隔线', 'removeformat':'清除格式', 'time':'时间', 'date':'日期',\n        'unlink':'取消链接', 'insertrow':'前插入行', 'insertcol':'前插入列', 'mergeright':'右合并单元格', 'mergedown':'下合并单元格',\n        'deleterow':'删除行', 'deletecol':'删除列', 'splittorows':'拆分成行',\n        'splittocols':'拆分成列', 'splittocells':'完全拆分单元格','deletecaption':'删除表格标题','inserttitle':'插入标题',\n        'mergecells':'合并多个单元格', 'deletetable':'删除表格', 'cleardoc':'清空文档','insertparagraphbeforetable':\"表格前插入行\",'insertcode':'代码语言',\n        'fontfamily':'字体', 'fontsize':'字号', 'paragraph':'段落格式', 'simpleupload':'单图上传', 'insertimage':'多图上传','edittable':'表格属性','edittd':'单元格属性', 'link':'超链接',\n        'emotion':'表情', 'spechars':'特殊字符', 'searchreplace':'查询替换', 'map':'Baidu地图', 'gmap':'Google地图',\n        'insertvideo':'视频', 'help':'帮助', 'justifyleft':'居左对齐', 'justifyright':'居右对齐', 'justifycenter':'居中对齐',\n        'justifyjustify':'两端对齐', 'forecolor':'字体颜色', 'backcolor':'背景色', 'insertorderedlist':'有序列表',\n        'insertunorderedlist':'无序列表', 'fullscreen':'全屏', 'directionalityltr':'从左向右输入', 'directionalityrtl':'从右向左输入',\n        'rowspacingtop':'段前距', 'rowspacingbottom':'段后距',  'pagebreak':'分页', 'insertframe':'插入Iframe', 'imagenone':'默认',\n        'imageleft':'左浮动', 'imageright':'右浮动', 'attachment':'附件', 'imagecenter':'居中', 'wordimage':'图片转存',\n        'lineheight':'行间距','edittip' :'编辑提示','customstyle':'自定义标题', 'autotypeset':'自动排版',\n        'webapp':'百度应用','touppercase':'字母大写', 'tolowercase':'字母小写','background':'背景','template':'模板','scrawl':'涂鸦',\n        'music':'音乐','inserttable':'插入表格','drafts': '从草稿箱加载', 'charts': '图表'\n    },\n    'insertorderedlist':{\n        'num':'1,2,3...',\n        'num1':'1),2),3)...',\n        'num2':'(1),(2),(3)...',\n        'cn':'一,二,三....',\n        'cn1':'一),二),三)....',\n        'cn2':'(一),(二),(三)....',\n        'decimal':'1,2,3...',\n        'lower-alpha':'a,b,c...',\n        'lower-roman':'i,ii,iii...',\n        'upper-alpha':'A,B,C...',\n        'upper-roman':'I,II,III...'\n    },\n    'insertunorderedlist':{\n        'circle':'○ 大圆圈',\n        'disc':'● 小黑点',\n        'square':'■ 小方块 ',\n        'dash' :'— 破折号',\n        'dot':' 。 小圆圈'\n    },\n    'paragraph':{'p':'段落', 'h1':'标题 1', 'h2':'标题 2', 'h3':'标题 3', 'h4':'标题 4', 'h5':'标题 5', 'h6':'标题 6'},\n    'fontfamily':{\n        'songti':'宋体',\n        'kaiti':'楷体',\n        'heiti':'黑体',\n        'lishu':'隶书',\n        'yahei':'微软雅黑',\n        'andaleMono':'andale mono',\n        'arial': 'arial',\n        'arialBlack':'arial black',\n        'comicSansMs':'comic sans ms',\n        'impact':'impact',\n        'timesNewRoman':'times new roman'\n    },\n    'customstyle':{\n        'tc':'标题居中',\n        'tl':'标题居左',\n        'im':'强调',\n        'hi':'明显强调'\n    },\n    'autoupload': {\n        'exceedSizeError': '文件大小超出限制',\n        'exceedTypeError': '文件格式不允许',\n        'jsonEncodeError': '服务器返回格式错误',\n        'loading':\"正在上传...\",\n        'loadError':\"上传错误\",\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！'\n    },\n    'simpleupload':{\n        'exceedSizeError': '文件大小超出限制',\n        'exceedTypeError': '文件格式不允许',\n        'jsonEncodeError': '服务器返回格式错误',\n        'loading':\"正在上传...\",\n        'loadError':\"上传错误\",\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！'\n    },\n    'elementPathTip':\"元素路径\",\n    'wordCountTip':\"字数统计\",\n    'wordCountMsg':'当前已输入{#count}个字符, 您还可以输入{#leave}个字符。 ',\n    'wordOverFlowMsg':'<span style=\"color:red;\">字数超出最大允许值，服务器可能拒绝保存！</span>',\n    'ok':\"确认\",\n    'cancel':\"取消\",\n    'closeDialog':\"关闭对话框\",\n    'tableDrag':\"表格拖动必须引入uiUtils.js文件！\",\n    'autofloatMsg':\"工具栏浮动依赖编辑器UI，您首先需要引入UI文件!\",\n    'loadconfigError': '获取后台配置项请求出错，上传功能将不能正常使用！',\n    'loadconfigFormatError': '后台配置项返回格式出错，上传功能将不能正常使用！',\n    'loadconfigHttpError': '请求后台配置项http错误，上传功能将不能正常使用！',\n    'snapScreen_plugin':{\n        'browserMsg':\"仅支持IE浏览器！\",\n        'callBackErrorMsg':\"服务器返回数据有误，请检查配置项之后重试。\",\n        'uploadErrorMsg':\"截图上传失败，请检查服务器端环境! \"\n    },\n    'insertcode':{\n        'as3':'ActionScript 3',\n        'bash':'Bash/Shell',\n        'cpp':'C/C++',\n        'css':'CSS',\n        'cf':'ColdFusion',\n        'c#':'C#',\n        'delphi':'Delphi',\n        'diff':'Diff',\n        'erlang':'Erlang',\n        'groovy':'Groovy',\n        'html':'HTML',\n        'java':'Java',\n        'jfx':'JavaFX',\n        'js':'JavaScript',\n        'pl':'Perl',\n        'php':'PHP',\n        'plain':'Plain Text',\n        'ps':'PowerShell',\n        'python':'Python',\n        'ruby':'Ruby',\n        'scala':'Scala',\n        'sql':'SQL',\n        'vb':'Visual Basic',\n        'xml':'XML'\n    },\n    'confirmClear':\"确定清空当前文档么？\",\n    'contextMenu':{\n        'delete':\"删除\",\n        'selectall':\"全选\",\n        'deletecode':\"删除代码\",\n        'cleardoc':\"清空文档\",\n        'confirmclear':\"确定清空当前文档么？\",\n        'unlink':\"删除超链接\",\n        'paragraph':\"段落格式\",\n        'edittable':\"表格属性\",\n        'aligntd':\"单元格对齐方式\",\n        'aligntable':'表格对齐方式',\n        'tableleft':'左浮动',\n        'tablecenter':'居中显示',\n        'tableright':'右浮动',\n        'edittd':\"单元格属性\",\n        'setbordervisible':'设置表格边线可见',\n        'justifyleft':'左对齐',\n        'justifyright':'右对齐',\n        'justifycenter':'居中对齐',\n        'justifyjustify':'两端对齐',\n        'table':\"表格\",\n        'inserttable':'插入表格',\n        'deletetable':\"删除表格\",\n        'insertparagraphbefore':\"前插入段落\",\n        'insertparagraphafter':'后插入段落',\n        'deleterow':\"删除当前行\",\n        'deletecol':\"删除当前列\",\n        'insertrow':\"前插入行\",\n        'insertcol':\"左插入列\",\n        'insertrownext':'后插入行',\n        'insertcolnext':'右插入列',\n        'insertcaption':'插入表格名称',\n        'deletecaption':'删除表格名称',\n        'inserttitle':'插入表格标题行',\n        'deletetitle':'删除表格标题行',\n        'inserttitlecol':'插入表格标题列',\n        'deletetitlecol':'删除表格标题列',\n        'averageDiseRow':'平均分布各行',\n        'averageDisCol':'平均分布各列',\n        'mergeright':\"向右合并\",\n        'mergeleft':\"向左合并\",\n        'mergedown':\"向下合并\",\n        'mergecells':\"合并单元格\",\n        'splittocells':\"完全拆分单元格\",\n        'splittocols':\"拆分成列\",\n        'splittorows':\"拆分成行\",\n        'tablesort':'表格排序',\n        'enablesort':'设置表格可排序',\n        'disablesort':'取消表格可排序',\n        'reversecurrent':'逆序当前',\n        'orderbyasc':'按ASCII字符升序',\n        'reversebyasc':'按ASCII字符降序',\n        'orderbynum':'按数值大小升序',\n        'reversebynum':'按数值大小降序',\n        'borderbk':'边框底纹',\n        'setcolor':'表格隔行变色',\n        'unsetcolor':'取消表格隔行变色',\n        'setbackground':'选区背景隔行',\n        'unsetbackground':'取消选区背景',\n        'redandblue':'红蓝相间',\n        'threecolorgradient':'三色渐变',\n        'copy':\"复制(Ctrl + c)\",\n        'copymsg': \"浏览器不支持,请使用 'Ctrl + c'\",\n        'paste':\"粘贴(Ctrl + v)\",\n         'pastemsg': \"浏览器不支持,请使用 'Ctrl + v'\"\n    },\n    'copymsg': \"浏览器不支持,请使用 'Ctrl + c'\",\n    'pastemsg': \"浏览器不支持,请使用 'Ctrl + v'\",\n    'anthorMsg':\"链接\",\n    'clearColor':'清空颜色',\n    'standardColor':'标准颜色',\n    'themeColor':'主题颜色',\n    'property':'属性',\n    'default':'默认',\n    'modify':'修改',\n    'justifyleft':'左对齐',\n    'justifyright':'右对齐',\n    'justifycenter':'居中',\n    'justify':'默认',\n    'clear':'清除',\n    'anchorMsg':'锚点',\n    'delete':'删除',\n    'clickToUpload':\"点击上传\",\n    'unset':'尚未设置语言文件',\n    't_row':'行',\n    't_col':'列',\n    'more':'更多',\n    'pasteOpt':'粘贴选项',\n    'pasteSourceFormat':\"保留源格式\",\n    'tagFormat':'只保留标签',\n    'pasteTextFormat':'只保留文本',\n    'autoTypeSet':{\n        'mergeLine':\"合并空行\",\n        'delLine':\"清除空行\",\n        'removeFormat':\"清除格式\",\n        'indent':\"首行缩进\",\n        'alignment':\"对齐方式\",\n        'imageFloat':\"图片浮动\",\n        'removeFontsize':\"清除字号\",\n        'removeFontFamily':\"清除字体\",\n        'removeHtml':\"清除冗余HTML代码\",\n        'pasteFilter':\"粘贴过滤\",\n        'run':\"执行\",\n        'symbol':'符号转换',\n        'bdc2sb':'全角转半角',\n        'tobdc':'半角转全角'\n    },\n\n    'background':{\n        'static':{\n            'lang_background_normal':'背景设置',\n            'lang_background_local':'在线图片',\n            'lang_background_set':'选项',\n            'lang_background_none':'无背景色',\n            'lang_background_colored':'有背景色',\n            'lang_background_color':'颜色设置',\n            'lang_background_netimg':'网络图片',\n            'lang_background_align':'对齐方式',\n            'lang_background_position':'精确定位',\n            'repeatType':{'options':[\"居中\", \"横向重复\", \"纵向重复\", \"平铺\",\"自定义\"]}\n\n        },\n        'noUploadImage':\"当前未上传过任何图片！\",\n        'toggleSelect':\"单击可切换选中状态\\n原图尺寸: \"\n    },\n    //===============dialog i18N=======================\n    'insertimage':{\n        'static':{\n            'lang_tab_remote':\"插入图片\", //节点\n            'lang_tab_upload':\"本地上传\",\n            'lang_tab_online':\"在线管理\",\n            'lang_tab_search':\"图片搜索\",\n            'lang_input_url':\"地 址：\",\n            'lang_input_size':\"大 小：\",\n            'lang_input_width':\"宽度\",\n            'lang_input_height':\"高度\",\n            'lang_input_border':\"边 框：\",\n            'lang_input_vhspace':\"边 距：\",\n            'lang_input_title':\"描 述：\",\n            'lang_input_align':'图片浮动方式：',\n            'lang_imgLoading':\"　图片加载中……\",\n            'lang_start_upload':\"开始上传\",\n            'lock':{'title':\"锁定宽高比例\"}, //属性\n            'searchType':{'title':\"图片类型\", 'options':[\"新闻\", \"壁纸\", \"表情\", \"头像\"]}, //select的option\n            'searchTxt':{'value':\"请输入搜索关键词\"},\n            'searchBtn':{'value':\"百度一下\"},\n            'searchReset':{'value':\"清空搜索\"},\n            'noneAlign':{'title':'无浮动'},\n            'leftAlign':{'title':'左浮动'},\n            'rightAlign':{'title':'右浮动'},\n            'centerAlign':{'title':'居中独占一行'}\n        },\n        'uploadSelectFile':'点击选择图片',\n        'uploadAddFile':'继续添加',\n        'uploadStart':'开始上传',\n        'uploadPause':'暂停上传',\n        'uploadContinue':'继续上传',\n        'uploadRetry':'重试上传',\n        'uploadDelete':'删除',\n        'uploadTurnLeft':'向左旋转',\n        'uploadTurnRight':'向右旋转',\n        'uploadPreview':'预览中',\n        'uploadNoPreview':'不能预览',\n        'updateStatusReady': '选中_张图片，共_KB。',\n        'updateStatusConfirm': '已成功上传_张照片，_张照片上传失败',\n        'updateStatusFinish': '共_张（_KB），_张上传成功',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize':'文件大小超出',\n        'errorFileType':'文件格式不允许',\n        'errorInterrupt':'文件传输中断',\n        'errorUploadRetry':'上传失败，请重试',\n        'errorHttp':'http请求错误',\n        'errorServerUpload':'服务器返回出错',\n        'remoteLockError':\"宽高不正确,不能所定比例\",\n        'numError':\"请输入正确的长度或者宽度值！例如：123，400\",\n        'imageUrlError':\"不允许的图片格式或者图片域！\",\n        'imageLoadError':\"图片加载失败！请检查链接地址或网络状态！\",\n        'searchRemind':\"请输入搜索关键词\",\n        'searchLoading':\"图片加载中，请稍后……\",\n        'searchRetry':\" :( ，抱歉，没有找到图片！请重试一次！\"\n    },\n    'attachment':{\n        'static':{\n            'lang_tab_upload': '上传附件',\n            'lang_tab_online': '在线附件',\n            'lang_start_upload':\"开始上传\",\n            'lang_drop_remind':\"可以将文件拖到这里，单次最多可选100个文件\"\n        },\n        'uploadSelectFile':'点击选择文件',\n        'uploadAddFile':'继续添加',\n        'uploadStart':'开始上传',\n        'uploadPause':'暂停上传',\n        'uploadContinue':'继续上传',\n        'uploadRetry':'重试上传',\n        'uploadDelete':'删除',\n        'uploadTurnLeft':'向左旋转',\n        'uploadTurnRight':'向右旋转',\n        'uploadPreview':'预览中',\n        'updateStatusReady': '选中_个文件，共_KB。',\n        'updateStatusConfirm': '已成功上传_个文件，_个文件上传失败',\n        'updateStatusFinish': '共_个（_KB），_个上传成功',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize':'文件大小超出',\n        'errorFileType':'文件格式不允许',\n        'errorInterrupt':'文件传输中断',\n        'errorUploadRetry':'上传失败，请重试',\n        'errorHttp':'http请求错误',\n        'errorServerUpload':'服务器返回出错'\n    },\n    'insertvideo':{\n        'static':{\n            'lang_tab_insertV':\"插入视频\",\n            'lang_tab_searchV':\"搜索视频\",\n            'lang_tab_uploadV':\"上传视频\",\n            'lang_video_url':\"视频网址\",\n            'lang_video_size':\"视频尺寸\",\n            'lang_videoW':\"宽度\",\n            'lang_videoH':\"高度\",\n            'lang_alignment':\"对齐方式\",\n            'videoSearchTxt':{'value':\"请输入搜索关键字！\"},\n            'videoType':{'options':[\"全部\", \"热门\", \"娱乐\", \"搞笑\", \"体育\", \"科技\", \"综艺\"]},\n            'videoSearchBtn':{'value':\"百度一下\"},\n            'videoSearchReset':{'value':\"清空结果\"},\n\n            'lang_input_fileStatus':' 当前未上传文件',\n            'startUpload':{'style':\"background:url(upload.png) no-repeat;\"},\n\n            'lang_upload_size':\"视频尺寸\",\n            'lang_upload_width':\"宽度\",\n            'lang_upload_height':\"高度\",\n            'lang_upload_alignment':\"对齐方式\",\n            'lang_format_advice':\"建议使用mp4格式.\"\n\n        },\n        'numError':\"请输入正确的数值，如123,400\",\n        'floatLeft':\"左浮动\",\n        'floatRight':\"右浮动\",\n        '\"default\"':\"默认\",\n        'block':\"独占一行\",\n        'urlError':\"输入的视频地址有误，请检查后再试！\",\n        'loading':\" &nbsp;视频加载中，请等待……\",\n        'clickToSelect':\"点击选中\",\n        'goToSource':'访问源视频',\n        'noVideo':\" &nbsp; &nbsp;抱歉，找不到对应的视频，请重试！\",\n\n        'browseFiles':'浏览文件',\n        'uploadSuccess':'上传成功!',\n        'delSuccessFile':'从成功队列中移除',\n        'delFailSaveFile':'移除保存失败文件',\n        'statusPrompt':' 个文件已上传！ ',\n        'flashVersionError':'当前Flash版本过低，请更新FlashPlayer后重试！',\n        'flashLoadingError':'Flash加载失败!请检查路径或网络状态',\n        'fileUploadReady':'等待上传……',\n        'delUploadQueue':'从上传队列中移除',\n        'limitPrompt1':'单次不能选择超过',\n        'limitPrompt2':'个文件！请重新选择！',\n        'delFailFile':'移除失败文件',\n        'fileSizeLimit':'文件大小超出限制！',\n        'emptyFile':'空文件无法上传！',\n        'fileTypeError':'文件类型不允许！',\n        'unknownError':'未知错误！',\n        'fileUploading':'上传中，请等待……',\n        'cancelUpload':'取消上传',\n        'netError':'网络错误',\n        'failUpload':'上传失败!',\n        'serverIOError':'服务器IO错误！',\n        'noAuthority':'无权限！',\n        'fileNumLimit':'上传个数限制',\n        'failCheck':'验证失败，本次上传被跳过！',\n        'fileCanceling':'取消中，请等待……',\n        'stopUploading':'上传已停止……',\n\n        'uploadSelectFile':'点击选择文件',\n        'uploadAddFile':'继续添加',\n        'uploadStart':'开始上传',\n        'uploadPause':'暂停上传',\n        'uploadContinue':'继续上传',\n        'uploadRetry':'重试上传',\n        'uploadDelete':'删除',\n        'uploadTurnLeft':'向左旋转',\n        'uploadTurnRight':'向右旋转',\n        'uploadPreview':'预览中',\n        'updateStatusReady': '选中_个文件，共_KB。',\n        'updateStatusConfirm': '成功上传_个，_个失败',\n        'updateStatusFinish': '共_个(_KB)，_个成功上传',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize':'文件大小超出',\n        'errorFileType':'文件格式不允许',\n        'errorInterrupt':'文件传输中断',\n        'errorUploadRetry':'上传失败，请重试',\n        'errorHttp':'http请求错误',\n        'errorServerUpload':'服务器返回出错'\n    },\n    'webapp':{\n        'tip1':\"本功能由百度APP提供，如看到此页面，请各位站长首先申请百度APPKey!\",\n        'tip2':\"申请完成之后请至ueditor.config.js中配置获得的appkey! \",\n        'applyFor':\"点此申请\",\n        'anthorApi':\"百度API\"\n    },\n    'template':{\n        'static':{\n            'lang_template_bkcolor':'背景颜色',\n            'lang_template_clear' : '保留原有内容',\n            'lang_template_select' : '选择模板'\n        },\n        'blank':\"空白文档\",\n        'blog':\"博客文章\",\n        'resume':\"个人简历\",\n        'richText':\"图文混排\",\n        'sciPapers':\"科技论文\"\n\n\n    },\n    'scrawl':{\n        'static':{\n            'lang_input_previousStep':\"上一步\",\n            'lang_input_nextsStep':\"下一步\",\n            'lang_input_clear':'清空',\n            'lang_input_addPic':'添加背景',\n            'lang_input_ScalePic':'缩放背景',\n            'lang_input_removePic':'删除背景',\n            'J_imgTxt':{title:'添加背景图片'}\n        },\n        'noScarwl':\"尚未作画，白纸一张~\",\n        'scrawlUpLoading':\"涂鸦上传中,别急哦~\",\n        'continueBtn':\"继续\",\n        'imageError':\"糟糕，图片读取失败了！\",\n        'backgroundUploading':'背景图片上传中,别急哦~'\n    },\n    'music':{\n        'static':{\n            'lang_input_tips':\"输入歌手/歌曲/专辑，搜索您感兴趣的音乐！\",\n            'J_searchBtn':{value:'搜索歌曲'}\n        },\n        'emptyTxt':'未搜索到相关音乐结果，请换一个关键词试试。',\n        'chapter':'歌曲',\n        'singer':'歌手',\n        'special':'专辑',\n        'listenTest':'试听'\n    },\n    'anchor':{\n        'static':{\n            'lang_input_anchorName':'锚点名字：'\n        }\n    },\n    'charts':{\n        'static':{\n            'lang_data_source':'数据源：',\n            'lang_chart_format': '图表格式：',\n            'lang_data_align': '数据对齐方式',\n            'lang_chart_align_same': '数据源与图表X轴Y轴一致',\n            'lang_chart_align_reverse': '数据源与图表X轴Y轴相反',\n            'lang_chart_title': '图表标题',\n            'lang_chart_main_title': '主标题：',\n            'lang_chart_sub_title': '子标题：',\n            'lang_chart_x_title': 'X轴标题：',\n            'lang_chart_y_title': 'Y轴标题：',\n            'lang_chart_tip': '提示文字',\n            'lang_cahrt_tip_prefix': '提示文字前缀：',\n            'lang_cahrt_tip_description': '仅饼图有效， 当鼠标移动到饼图中相应的块上时，提示框内的文字的前缀',\n            'lang_chart_data_unit': '数据单位',\n            'lang_chart_data_unit_title': '单位：',\n            'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位， 比如： 温度的单位 ℃',\n            'lang_chart_type': '图表类型：',\n            'lang_prev_btn': '上一个',\n            'lang_next_btn': '下一个'\n        }\n    },\n    'emotion':{\n        'static':{\n            'lang_input_choice':'精选',\n            'lang_input_Tuzki':'兔斯基',\n            'lang_input_BOBO':'BOBO',\n            'lang_input_lvdouwa':'绿豆蛙',\n            'lang_input_babyCat':'baby猫',\n            'lang_input_bubble':'泡泡',\n            'lang_input_youa':'有啊'\n        }\n    },\n    'gmap':{\n        'static':{\n            'lang_input_address':'地址',\n            'lang_input_search':'搜索',\n            'address':{value:\"北京\"}\n        },\n        searchError:'无法定位到该地址!'\n    },\n    'help':{\n        'static':{\n            'lang_input_about':'关于UEditor',\n            'lang_input_shortcuts':'快捷键',\n            'lang_input_introduction':'UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器，具有轻量，可定制，注重用户体验等特点。开源基于BSD协议，允许自由使用和修改代码。',\n            'lang_Txt_shortcuts':'快捷键',\n            'lang_Txt_func':'功能',\n            'lang_Txt_bold':'给选中字设置为加粗',\n            'lang_Txt_copy':'复制选中内容',\n            'lang_Txt_cut':'剪切选中内容',\n            'lang_Txt_Paste':'粘贴',\n            'lang_Txt_undo':'重新执行上次操作',\n            'lang_Txt_redo':'撤销上一次操作',\n            'lang_Txt_italic':'给选中字设置为斜体',\n            'lang_Txt_underline':'给选中字加下划线',\n            'lang_Txt_selectAll':'全部选中',\n            'lang_Txt_visualEnter':'软回车',\n            'lang_Txt_fullscreen':'全屏'\n        }\n    },\n    'insertframe':{\n        'static':{\n            'lang_input_address':'地址：',\n            'lang_input_width':'宽度：',\n            'lang_input_height':'高度：',\n            'lang_input_isScroll':'允许滚动条：',\n            'lang_input_frameborder':'显示框架边框：',\n            'lang_input_alignMode':'对齐方式：',\n            'align':{title:\"对齐方式\", options:[\"默认\", \"左对齐\", \"右对齐\", \"居中\"]}\n        },\n        'enterAddress':'请输入地址!'\n    },\n    'link':{\n        'static':{\n            'lang_input_text':'文本内容：',\n            'lang_input_url':'链接地址：',\n            'lang_input_title':'标题：',\n            'lang_input_target':'是否在新窗口打开：'\n        },\n        'validLink':'只支持选中一个链接时生效',\n        'httpPrompt':'您输入的超链接中不包含http等协议名称，默认将为您添加http://前缀'\n    },\n    'map':{\n        'static':{\n            lang_city:\"城市\",\n            lang_address:\"地址\",\n            city:{value:\"北京\"},\n            lang_search:\"搜索\",\n            lang_dynamicmap:\"插入动态地图\"\n        },\n        cityMsg:\"请选择城市\",\n        errorMsg:\"抱歉，找不到该位置！\"\n    },\n    'searchreplace':{\n        'static':{\n            lang_tab_search:\"查找\",\n            lang_tab_replace:\"替换\",\n            lang_search1:\"查找\",\n            lang_search2:\"查找\",\n            lang_replace:\"替换\",\n            lang_searchReg:'支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”',\n            lang_searchReg1:'支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”',\n            lang_case_sensitive1:\"区分大小写\",\n            lang_case_sensitive2:\"区分大小写\",\n            nextFindBtn:{value:\"下一个\"},\n            preFindBtn:{value:\"上一个\"},\n            nextReplaceBtn:{value:\"下一个\"},\n            preReplaceBtn:{value:\"上一个\"},\n            repalceBtn:{value:\"替换\"},\n            repalceAllBtn:{value:\"全部替换\"}\n        },\n        getEnd:\"已经搜索到文章末尾！\",\n        getStart:\"已经搜索到文章头部\",\n        countMsg:\"总共替换了{#count}处！\"\n    },\n    'snapscreen':{\n        'static':{\n            lang_showMsg:\"截图功能需要首先安装UEditor截图插件！ \",\n            lang_download:\"点此下载\",\n            lang_step1:\"第一步，下载UEditor截图插件并运行安装。\",\n            lang_step2:\"第二步，插件安装完成后即可使用，如不生效，请重启浏览器后再试！\"\n        }\n    },\n    'spechars':{\n        'static':{},\n        tsfh:\"特殊字符\",\n        lmsz:\"罗马字符\",\n        szfh:\"数学字符\",\n        rwfh:\"日文字符\",\n        xlzm:\"希腊字母\",\n        ewzm:\"俄文字符\",\n        pyzm:\"拼音字母\",\n        yyyb:\"英语音标\",\n        zyzf:\"其他\"\n    },\n    'edittable':{\n        'static':{\n            'lang_tableStyle':'表格样式',\n            'lang_insertCaption':'添加表格名称行',\n            'lang_insertTitle':'添加表格标题行',\n            'lang_insertTitleCol':'添加表格标题列',\n            'lang_orderbycontent':\"使表格内容可排序\",\n            'lang_tableSize':'自动调整表格尺寸',\n            'lang_autoSizeContent':'按表格文字自适应',\n            'lang_autoSizePage':'按页面宽度自适应',\n            'lang_example':'示例',\n            'lang_borderStyle':'表格边框',\n            'lang_color':'颜色:'\n        },\n        captionName:'表格名称',\n        titleName:'标题',\n        cellsName:'内容',\n        errorMsg:'有合并单元格，不可排序'\n    },\n    'edittip':{\n        'static':{\n            lang_delRow:'删除整行',\n            lang_delCol:'删除整列'\n        }\n    },\n    'edittd':{\n        'static':{\n            lang_tdBkColor:'背景颜色:'\n        }\n    },\n    'formula':{\n        'static':{\n        }\n    },\n    'wordimage':{\n        'static':{\n            lang_resave:\"转存步骤\",\n            uploadBtn:{src:\"upload.png\",alt:\"上传\"},\n            clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},\n            lang_step:\"1、点击顶部复制按钮，将地址复制到剪贴板；2、点击添加照片按钮，在弹出的对话框中使用Ctrl+V粘贴地址；3、点击打开后选择图片上传流程。\"\n        },\n        'fileType':\"图片\",\n        'flashError':\"FLASH初始化失败，请检查FLASH插件是否正确安装！\",\n        'netError':\"网络连接错误，请重试！\",\n        'copySuccess':\"图片地址已经复制！\",\n        'flashI18n':{} //留空默认中文\n    },\n    'autosave': {\n        'saving':'保存中...',\n        'success':'本地保存成功'\n    }\n};\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/themes/default/css/ueditor.css",
    "content": "/*基础UI构建\n*/\n/* common layer */\n.edui-default .edui-box {\n    border: none;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n}\n\n.edui-default a.edui-box {\n    display: block;\n    text-decoration: none;\n    color: black;\n}\n\n.edui-default a.edui-box:hover {\n    text-decoration: none;\n}\n\n.edui-default a.edui-box:active {\n    text-decoration: none;\n}\n\n.edui-default table.edui-box {\n    border-collapse: collapse;\n}\n\n.edui-default ul.edui-box {\n    list-style-type: none;\n}\n\ndiv.edui-box {\n    position: relative;\n    display: -moz-inline-box !important;\n    display: inline-block !important;\n    vertical-align: top;\n}\n\n.edui-default .edui-clearfix {\n    zoom: 1\n}\n\n.edui-default .edui-clearfix:after {\n    content: '\\20';\n    display: block;\n    clear: both;\n}\n\n * html div.edui-box {\n    display: inline !important;\n}\n\n*:first-child+html div.edui-box {\n    display: inline !important;\n}\n\n/* control layout */\n.edui-default .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body {\n    position: relative;\n}\n\n.edui-default .edui-popup {\n    position: absolute;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n}\n\n.edui-default .edui-popup .edui-shadow {\n    position: absolute;\n    z-index: -1;\n}\n\n.edui-default .edui-popup .edui-bordereraser {\n    position: absolute;\n    overflow: hidden;\n}\n\n.edui-default .edui-tablepicker .edui-canvas {\n    position: relative;\n}\n\n.edui-default .edui-tablepicker .edui-canvas .edui-overlay {\n    position: absolute;\n}\n\n.edui-default .edui-dialog-modalmask, .edui-dialog-dragmask {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.edui-default .edui-toolbar {\n    position: relative;\n}\n\n/*\n * default theme\n */\n.edui-default .edui-label {\n    cursor: default;\n}\n\n.edui-default span.edui-clickable {\n    color: blue;\n    cursor: pointer;\n    text-decoration: underline;\n}\n\n.edui-default span.edui-unclickable {\n    color: gray;\n    cursor: default;\n}\n/* 工具栏 */\n.edui-default .edui-toolbar {\n    cursor: default;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    padding: 1px;\n    overflow: hidden; /*全屏下单独一行不占位*/\n    zoom: 1;\n    width:auto;\n    height:auto;\n}\n\n.edui-default .edui-toolbar .edui-button,\n.edui-default .edui-toolbar .edui-splitbutton,\n.edui-default .edui-toolbar .edui-menubutton,\n.edui-default .edui-toolbar .edui-combox {\n    margin: 1px;\n}\n/*UI工具栏、编辑区域、底部*/\n.edui-default .edui-editor {\n    border: 1px solid #d4d4d4;\n    background-color: white;\n    position: relative;\n    overflow: visible;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n.edui-editor div{\n    width:auto;\n    height:auto;\n}\n.edui-default .edui-editor-toolbarbox {\n    position: relative;\n    zoom: 1;\n    -webkit-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);\n    -moz-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);\n    box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);\n    border-top-left-radius:2px;\n    border-top-right-radius:2px;\n}\n\n.edui-default .edui-editor-toolbarboxouter {\n    border-bottom: 1px solid #d4d4d4;\n    background-color: #fafafa;\n    background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);\n    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));\n    background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);\n    background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);\n    background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);\n    background-repeat: repeat-x;\n    /*border: 1px solid #d4d4d4;*/\n    -webkit-border-radius: 4px 4px 0 0;\n    -moz-border-radius: 4px 4px 0 0;\n    border-radius: 4px 4px 0 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);\n    *zoom: 1;\n    -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);\n    -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);\n    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);\n}\n\n.edui-default .edui-editor-toolbarboxinner {\n    padding: 2px;\n}\n\n.edui-default .edui-editor-iframeholder {\n    position: relative;\n    /*for fix ie6 toolbarmsg under iframe bug. relative -> static */\n    /*_position: static !important;*\n}\n\n.edui-default .edui-editor-iframeholder textarea {\n    font-family: consolas, \"Courier New\", \"lucida console\", monospace;\n    font-size: 12px;\n    line-height: 18px;\n}\n\n.edui-default .edui-editor-bottombar {\n    /*border-top: 1px solid #ccc;*/\n    /*height: 20px;*/\n    /*width: 40%;*/\n    /*float: left;*/\n    /*overflow: hidden;*/\n}\n\n.edui-default .edui-editor-bottomContainer {\n    overflow: hidden;\n}\n\n.edui-default .edui-editor-bottomContainer table {\n    width: 100%;\n    height: 0;\n    overflow: hidden;\n    border-spacing: 0;\n}\n\n.edui-default .edui-editor-bottomContainer td {\n    white-space: nowrap;\n    border-top: 1px solid #ccc;\n    line-height: 20px;\n    font-size: 12px;\n    font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif;\n}\n\n.edui-default .edui-editor-wordcount {\n    text-align: right;\n    margin-right: 5px;\n    color: #aaa;\n}\n.edui-default .edui-editor-scale {\n    width: 12px;\n}\n.edui-default .edui-editor-scale .edui-editor-icon {\n    float: right;\n    width: 100%;\n    height: 12px;\n    margin-top: 10px;\n    background: url(../images/scale.png) no-repeat;\n    cursor: se-resize;\n}\n.edui-default .edui-editor-breadcrumb {\n    margin: 2px 0 0 3px;\n}\n\n.edui-default .edui-editor-breadcrumb span {\n    cursor: pointer;\n    text-decoration: underline;\n    color: blue;\n}\n\n.edui-default .edui-toolbar .edui-for-fullscreen {\n    float: right;\n}\n\n.edui-default .edui-bubble .edui-popup-content {\n    border: 1px solid #DCAC6C;\n    background-color: #fff6d9;\n    padding: 5px;\n    font-size: 10pt;\n    font-family: \"宋体\";\n}\n\n.edui-default .edui-bubble .edui-shadow {\n    /*box-shadow: 1px 1px 3px #818181;*/\n    /*-webkit-box-shadow: 2px 2px 3px #818181;*/\n    /*-moz-box-shadow: 2px 2px 3px #818181;*/\n    /*filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '2', MakeShadow = 'true', ShadowOpacity = '0.5');*/\n}\n\n.edui-default .edui-editor-toolbarmsg {\n    background-color: #FFF6D9;\n    border-bottom: 1px solid #ccc;\n    position: absolute;\n    bottom: -25px;\n    left: 0;\n    z-index: 1009;\n    width: 99.9%;\n}\n\n.edui-default .edui-editor-toolbarmsg-upload {\n    font-size: 14px;\n    color: blue;\n    width: 100px;\n    height: 16px;\n    line-height: 16px;\n    cursor: pointer;\n    position: absolute;\n    top: 5px;\n    left: 350px;\n}\n\n.edui-default .edui-editor-toolbarmsg-label {\n    font-size: 12px;\n    line-height: 16px;\n    padding: 4px;\n}\n\n.edui-default .edui-editor-toolbarmsg-close {\n    float: right;\n    width: 20px;\n    height: 16px;\n    line-height: 16px;\n    cursor: pointer;\n    color: red;\n}\n/*可选中菜单按钮*/\n.edui-default .edui-list .edui-bordereraser {\n    display: none;\n}\n\n.edui-default .edui-listitem {\n    padding: 1px;\n    white-space: nowrap;\n}\n\n.edui-default .edui-list .edui-state-hover {\n    position: relative;\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n    padding: 0;\n}\n\n.edui-default .edui-for-fontfamily .edui-listitem-label {\n    min-width: 130px;\n    _width: 120px;\n    font-size: 12px;\n    height: 22px;\n    line-height: 22px;\n    padding-left: 5px;\n}\n.edui-default .edui-for-insertcode .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    font-size: 12px;\n    height: 22px;\n    line-height: 22px;\n    padding-left: 5px;\n}\n.edui-default .edui-for-underline .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    padding: 3px 5px;\n    font-size: 12px;\n}\n\n.edui-default .edui-for-fontsize .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    padding: 3px 5px;\n\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label {\n    min-width: 200px;\n    _width: 200px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-rowspacingtop .edui-listitem-label,\n.edui-default .edui-for-rowspacingbottom .edui-listitem-label {\n    min-width: 53px;\n    _width: 53px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-lineheight .edui-listitem-label {\n    min-width: 53px;\n    _width: 53px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-customstyle .edui-listitem-label {\n    min-width: 200px;\n    _width: 200px;\n    width: 200px !important;\n    padding: 2px 5px;\n}\n/* 可选中按钮弹出菜单*/\n.edui-default .edui-menu {\n    z-index: 3000;\n}\n\n.edui-default .edui-menu .edui-popup-content {\n    padding: 3px;\n}\n\n.edui-default .edui-menu-body {\n    _width: 150px;\n    min-width: 170px;\n    background: url(\"../images/sparator_v.png\") repeat-y 25px;\n}\n\n.edui-default .edui-menuitem-body {\n}\n\n.edui-default .edui-menuitem {\n    height: 20px;\n    cursor: default;\n    vertical-align: top;\n}\n\n.edui-default .edui-menuitem .edui-icon {\n    width: 20px !important;\n    height: 20px !important;\n    background: url(../images/icons.png) 0 -4000px;\n    background: url(../images/icons.gif) 0 -4000px\\9;\n}\n\n.edui-default .edui-menuitem .edui-label {\n    font-size: 12px;\n    line-height: 20px;\n    height: 20px;\n    padding-left: 10px;\n}\n\n.edui-default .edui-state-checked .edui-menuitem-body {\n    background: url(\"../images/icons-all.gif\") no-repeat 6px -205px;\n}\n\n.edui-default .edui-state-disabled .edui-menuitem-label {\n    color: gray;\n}\n\n\n/*不可选中菜单按钮 */\n.edui-default .edui-toolbar .edui-combox-body .edui-button-body {\n    width: 60px;\n    font-size: 12px;\n    height: 20px;\n    line-height: 20px;\n    padding-left: 5px;\n    white-space: nowrap;\n    margin: 0 3px 0 0;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-arrow {\n    background: url(../images/icons.png) -741px 0;\n    _background: url(../images/icons.gif) -741px 0;\n    height: 20px;\n    width: 9px;\n}\n\n.edui-default .edui-toolbar .edui-combox .edui-combox-body {\n    border: 1px solid #CCC;\n    background-color: white;\n    border-radius: 2px;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-splitborder {\n    display: none;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-arrow {\n    border-left: 1px solid #CCC;\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-combox-body {\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow {\n    border-left: 1px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-state-checked .edui-combox-body {\n    background-color: #FFE69F;\n    border: 1px solid #DCAC6C;\n}\n\n.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow {\n    border-left: 1px solid #DCAC6C;\n}\n\n.edui-toolbar .edui-state-disabled .edui-combox-body {\n    background-color: #F0F0EE;\n    opacity: 0.3;\n    filter: alpha(opacity = 30);\n}\n\n.edui-toolbar .edui-state-opened .edui-combox-body {\n    background-color: white;\n    border: 1px solid gray;\n}\n/*普通按钮样式及状态*/\n.edui-default .edui-toolbar .edui-button .edui-icon,\n.edui-default .edui-toolbar .edui-menubutton .edui-icon,\n.edui-default .edui-toolbar .edui-splitbutton .edui-icon {\n    height: 20px !important;\n    width: 20px !important;\n    background-image: url(../images/icons.png);\n    background-image: url(../images/icons.gif) \\9;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-button-wrap {\n    padding: 1px;\n    position: relative;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap {\n    background-color: #fff5d4;\n    padding: 0;\n    border: 1px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap {\n    background-color: #ffe69f;\n    padding: 0;\n    border: 1px solid #dcac6c;\n    border-radius: 2px;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap {\n    background-color: #ffffff;\n    padding: 0;\n    border: 1px solid gray;\n}\n.edui-default .edui-toolbar .edui-state-disabled .edui-label {\n    color: #ccc;\n}\n.edui-default .edui-toolbar .edui-state-disabled .edui-icon {\n    opacity: 0.3;\n    filter: alpha(opacity = 30);\n}\n\n/* toolbar icons */\n.edui-default .edui-for-undo .edui-icon {\n    background-position: -160px 0;\n}\n\n.edui-default  .edui-for-redo .edui-icon {\n    background-position: -100px 0;\n}\n\n.edui-default  .edui-for-bold .edui-icon {\n    background-position: 0 0;\n}\n\n.edui-default  .edui-for-italic .edui-icon {\n    background-position: -60px 0;\n}\n\n.edui-default  .edui-for-fontborder .edui-icon {\n    background-position:-160px -40px;\n}\n.edui-default  .edui-for-underline .edui-icon {\n    background-position: -140px 0;\n}\n\n.edui-default  .edui-for-strikethrough .edui-icon {\n    background-position: -120px 0;\n}\n\n.edui-default  .edui-for-subscript .edui-icon {\n    background-position: -600px 0;\n}\n\n.edui-default  .edui-for-superscript .edui-icon {\n    background-position: -620px 0;\n}\n\n.edui-default  .edui-for-blockquote .edui-icon {\n    background-position: -220px 0;\n}\n\n.edui-default  .edui-for-forecolor .edui-icon {\n    background-position: -720px 0;\n}\n\n.edui-default  .edui-for-backcolor .edui-icon {\n    background-position: -760px 0;\n}\n\n.edui-default  .edui-for-inserttable .edui-icon {\n    background-position: -580px -20px;\n}\n\n.edui-default  .edui-for-autotypeset .edui-icon {\n    background-position: -640px -40px;\n}\n\n.edui-default  .edui-for-justifyleft .edui-icon {\n    background-position: -460px 0;\n}\n\n.edui-default  .edui-for-justifycenter .edui-icon {\n    background-position: -420px 0;\n}\n\n.edui-default  .edui-for-justifyright .edui-icon {\n    background-position: -480px 0;\n}\n\n.edui-default  .edui-for-justifyjustify .edui-icon {\n    background-position: -440px 0;\n}\n\n.edui-default  .edui-for-insertorderedlist .edui-icon {\n    background-position: -80px 0;\n}\n\n.edui-default  .edui-for-insertunorderedlist .edui-icon {\n    background-position: -20px 0;\n}\n\n.edui-default  .edui-for-lineheight .edui-icon {\n    background-position: -725px -40px;\n}\n\n.edui-default  .edui-for-rowspacingbottom .edui-icon {\n    background-position: -745px -40px;\n}\n\n.edui-default  .edui-for-rowspacingtop .edui-icon {\n    background-position: -765px -40px;\n}\n\n.edui-default  .edui-for-horizontal .edui-icon {\n    background-position: -360px 0;\n}\n\n.edui-default  .edui-for-link .edui-icon {\n    background-position: -500px 0;\n}\n\n.edui-default  .edui-for-code .edui-icon {\n    background-position: -440px -40px;\n}\n\n.edui-default  .edui-for-insertimage .edui-icon {\n    background-position: -726px -77px;\n}\n\n.edui-default  .edui-for-insertframe .edui-icon {\n    background-position: -240px -40px;\n}\n\n.edui-default  .edui-for-emoticon .edui-icon {\n    background-position: -60px -20px;\n}\n\n.edui-default  .edui-for-spechars .edui-icon {\n    background-position: -240px 0;\n}\n\n.edui-default  .edui-for-help .edui-icon {\n    background-position: -340px 0;\n}\n\n.edui-default  .edui-for-print .edui-icon {\n    background-position: -440px -20px;\n}\n\n.edui-default  .edui-for-preview .edui-icon {\n    background-position: -420px -20px;\n}\n\n.edui-default  .edui-for-selectall .edui-icon {\n    background-position: -400px -20px;\n}\n\n.edui-default  .edui-for-searchreplace .edui-icon {\n    background-position: -520px -20px;\n}\n\n.edui-default  .edui-for-map .edui-icon {\n    background-position: -40px -40px;\n}\n\n.edui-default  .edui-for-gmap .edui-icon {\n    background-position: -260px -40px;\n}\n\n.edui-default  .edui-for-insertvideo .edui-icon {\n    background-position: -320px -20px;\n}\n\n.edui-default  .edui-for-time .edui-icon {\n    background-position: -160px -20px;\n}\n\n.edui-default  .edui-for-date .edui-icon {\n    background-position: -140px -20px;\n}\n\n.edui-default  .edui-for-cut .edui-icon {\n    background-position: -680px 0;\n}\n\n.edui-default  .edui-for-copy .edui-icon {\n    background-position: -700px 0;\n}\n\n.edui-default  .edui-for-paste .edui-icon {\n    background-position: -560px 0;\n}\n\n.edui-default  .edui-for-formatmatch .edui-icon {\n    background-position: -40px 0;\n}\n\n.edui-default  .edui-for-pasteplain .edui-icon {\n    background-position: -360px -20px;\n}\n\n.edui-default  .edui-for-directionalityltr .edui-icon {\n    background-position: -20px -20px;\n}\n\n.edui-default  .edui-for-directionalityrtl .edui-icon {\n    background-position: -40px -20px;\n}\n\n.edui-default  .edui-for-source .edui-icon {\n    background-position: -261px -0px;\n}\n\n.edui-default  .edui-for-removeformat .edui-icon {\n    background-position: -580px 0;\n}\n\n.edui-default  .edui-for-unlink .edui-icon {\n    background-position: -640px 0;\n}\n\n.edui-default  .edui-for-touppercase .edui-icon {\n    background-position: -786px 0;\n}\n\n.edui-default  .edui-for-tolowercase .edui-icon {\n    background-position: -806px 0;\n}\n\n.edui-default  .edui-for-insertrow .edui-icon {\n    background-position: -478px -76px;\n}\n\n.edui-default  .edui-for-insertrownext .edui-icon {\n    background-position: -498px -76px;\n}\n\n.edui-default  .edui-for-insertcol .edui-icon {\n    background-position: -455px -76px;\n}\n\n.edui-default  .edui-for-insertcolnext  .edui-icon {\n    background-position: -429px -76px;\n}\n\n.edui-default  .edui-for-mergeright .edui-icon {\n    background-position: -60px -40px;\n}\n\n.edui-default  .edui-for-mergedown .edui-icon {\n    background-position: -80px -40px;\n}\n\n.edui-default  .edui-for-splittorows .edui-icon {\n    background-position: -100px -40px;\n}\n\n.edui-default  .edui-for-splittocols .edui-icon {\n    background-position: -120px -40px;\n}\n\n.edui-default  .edui-for-insertparagraphbeforetable .edui-icon {\n    background-position: -140px -40px;\n}\n\n.edui-default  .edui-for-deleterow .edui-icon {\n    background-position: -660px -20px;\n}\n\n.edui-default  .edui-for-deletecol .edui-icon {\n    background-position: -640px -20px;\n}\n\n.edui-default  .edui-for-splittocells .edui-icon {\n    background-position: -800px -20px;\n}\n\n.edui-default  .edui-for-mergecells .edui-icon {\n    background-position: -760px -20px;\n}\n\n.edui-default  .edui-for-deletetable .edui-icon {\n    background-position: -620px -20px;\n}\n\n.edui-default  .edui-for-cleardoc .edui-icon {\n    background-position: -520px 0;\n}\n\n.edui-default  .edui-for-fullscreen .edui-icon {\n    background-position: -100px -20px;\n}\n\n.edui-default  .edui-for-anchor .edui-icon {\n    background-position: -200px 0;\n}\n\n.edui-default  .edui-for-pagebreak .edui-icon {\n    background-position: -460px -40px;\n}\n\n.edui-default  .edui-for-imagenone .edui-icon {\n    background-position: -480px -40px;\n}\n\n.edui-default  .edui-for-imageleft .edui-icon {\n    background-position: -500px -40px;\n}\n\n.edui-default  .edui-for-wordimage .edui-icon {\n    background-position: -660px -40px;\n}\n\n.edui-default  .edui-for-imageright .edui-icon {\n    background-position: -520px -40px;\n}\n\n.edui-default  .edui-for-imagecenter .edui-icon {\n    background-position: -540px -40px;\n}\n\n.edui-default  .edui-for-indent .edui-icon {\n    background-position: -400px 0;\n}\n\n.edui-default  .edui-for-outdent .edui-icon {\n    background-position: -540px 0;\n}\n\n.edui-default  .edui-for-webapp .edui-icon {\n    background-position: -601px -40px\n}\n\n.edui-default  .edui-for-table .edui-icon {\n    background-position: -580px -20px;\n}\n\n.edui-default  .edui-for-edittable .edui-icon {\n    background-position: -420px -40px;\n}\n\n.edui-default  .edui-for-template .edui-icon {\n    background-position: -339px -40px;\n}\n\n.edui-default  .edui-for-delete .edui-icon {\n    background-position: -360px -40px;\n}\n\n.edui-default  .edui-for-attachment .edui-icon {\n    background-position: -620px -40px;\n}\n\n.edui-default  .edui-for-edittd .edui-icon {\n    background-position: -700px -40px;\n}\n\n.edui-default  .edui-for-snapscreen .edui-icon {\n    background-position: -581px -40px\n}\n\n.edui-default  .edui-for-scrawl .edui-icon {\n    background-position: -801px -41px\n}\n\n.edui-default  .edui-for-background .edui-icon {\n    background-position: -680px -40px;\n}\n\n.edui-default  .edui-for-music .edui-icon {\n    background-position: -18px -40px\n}\n\n.edui-default  .edui-for-formula .edui-icon {\n    background-position: -200px -40px\n}\n\n.edui-default  .edui-for-aligntd  .edui-icon {\n    background-position: -236px -76px;\n}\n\n.edui-default  .edui-for-insertparagraphtrue  .edui-icon {\n    background-position: -625px -76px;\n}\n\n.edui-default  .edui-for-insertparagraph  .edui-icon {\n    background-position: -602px -76px;\n}\n\n.edui-default  .edui-for-insertcaption  .edui-icon {\n    background-position: -336px -76px;\n}\n\n.edui-default  .edui-for-deletecaption  .edui-icon {\n    background-position: -362px -76px;\n}\n\n.edui-default  .edui-for-inserttitle  .edui-icon {\n    background-position: -286px -76px;\n}\n\n.edui-default  .edui-for-deletetitle  .edui-icon {\n    background-position: -311px -76px;\n}\n\n.edui-default  .edui-for-aligntable  .edui-icon {\n    background-position: -440px 0;\n}\n\n.edui-default  .edui-for-tablealignment-left  .edui-icon {\n    background-position: -460px 0;\n}\n\n.edui-default  .edui-for-tablealignment-center  .edui-icon {\n    background-position: -420px 0;\n}\n\n.edui-default  .edui-for-tablealignment-right  .edui-icon {\n    background-position: -480px 0;\n}\n\n.edui-default  .edui-for-drafts  .edui-icon {\n    background-position: -560px 0;\n}\n\n.edui-default  .edui-for-charts  .edui-icon {\n    background: url( ../images/charts.png ) no-repeat 2px 3px!important;\n}\n\n.edui-default  .edui-for-inserttitlecol  .edui-icon {\n    background-position: -673px -76px;\n}\n\n.edui-default  .edui-for-deletetitlecol  .edui-icon {\n    background-position: -698px -76px;\n}\n\n.edui-default  .edui-for-simpleupload  .edui-icon {\n    background-position: -380px 0px;\n}\n/*splitbutton*/\n.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,\n.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow {\n    background: url(../images/icons.png) -741px 0;\n    _background: url(../images/icons.gif) -741px 0;\n    height: 20px;\n    width: 9px;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body {\n    padding: 1px;\n}\n\n.edui-default .edui-toolbar .edui-splitborder {\n    width: 1px;\n    height: 20px;\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-splitborder {\n    width: 1px;\n    border-left: 0px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-state-active .edui-splitborder {\n    width: 0;\n    border-left: 1px solid gray;\n}\n\n.edui-default .edui-toolbar .edui-state-opened .edui-splitborder {\n    width: 1px;\n    border: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body {\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n    padding: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body {\n    background-color: #FFE69F;\n    border: 1px solid #DCAC6C;\n    padding: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body {\n    background-color: #ffffff;\n    border: 1px solid gray;\n    padding: 0;\n}\n\n.edui-default .edui-state-disabled .edui-arrow {\n    opacity: 0.3;\n    _filter: alpha(opacity = 30);\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body {\n    background-color: white;\n    border: 1px solid gray;\n    padding: 0;\n}\n\n.edui-default .edui-for-insertorderedlist .edui-bordereraser,\n.edui-default .edui-for-lineheight .edui-bordereraser,\n.edui-default .edui-for-rowspacingtop .edui-bordereraser,\n.edui-default .edui-for-rowspacingbottom .edui-bordereraser,\n.edui-default .edui-for-insertunorderedlist .edui-bordereraser {\n    background-color: white;\n}\n\n/* 解决嵌套导致的图标问题 */\n.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,\n.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,\n.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,\n.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,\n.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon {\n    /*background-position: 0 -40px;*/\n    background-image: none  ;\n}\n\n/* 弹出菜单 */\n.edui-default .edui-popup {\n    z-index: 3000;\n    background-color: #ffffff;\n    width:auto;\n    height:auto;\n\n}\n\n.edui-default .edui-popup .edui-shadow {\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.edui-default .edui-popup-content {\n    border:1px solid #ccc;\n    border: 1px solid rgba(0, 0, 0, 0.2);\n    *border-right-width: 2px;\n    *border-bottom-width: 2px;\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 6px;\n    -webkit-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);\n    -moz-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);\n    box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);\n    -webkit-background-clip: padding-box;\n    -moz-background-clip: padding;\n    background-clip: padding-box;\n    padding: 5px;\n    background:#ffffff;\n}\n\n.edui-default .edui-popup .edui-bordereraser {\n    background-color: white;\n    height: 3px;\n}\n\n.edui-default .edui-menu .edui-bordereraser {\n    height: 3px;\n}\n\n.edui-default .edui-anchor-topleft .edui-bordereraser {\n    left: 1px;\n    top: -2px;\n}\n\n.edui-default .edui-anchor-topright .edui-bordereraser {\n    right: 1px;\n    top: -2px;\n}\n\n.edui-default .edui-anchor-bottomleft .edui-bordereraser {\n    left: 0;\n    bottom: -6px;\n    height: 7px;\n    border-left: 1px solid gray;\n    border-right: 1px solid gray;\n}\n\n.edui-default .edui-anchor-bottomright .edui-bordereraser {\n    right: 0;\n    bottom: -6px;\n    height: 7px;\n    border-left: 1px solid gray;\n    border-right: 1px solid gray;\n}\n\n.edui-popup div{\n    width:auto;\n    height:auto;\n}\n.edui-default .edui-editor-messageholder {\n    display: block;\n    width: 150px;\n    height: auto;\n    border: 0;\n    margin: 0;\n    padding: 0;\n    position: absolute;\n    top: 28px;\n    right: 3px;\n}\n\n.edui-default .edui-message{\n    min-height: 10px;\n    text-shadow: 0 1px 0 rgba(255,255,255,0.5);\n    padding: 0;\n    margin-bottom: 3px;\n    position: relative;\n}\n.edui-default .edui-message-body{\n    border-radius: 3px;\n    padding: 8px 15px 8px 8px;\n    color: #c09853;\n    background-color: #fcf8e3;\n    border: 1px solid #fbeed5;\n}\n.edui-default .edui-message-type-info{\n    color: #3a87ad;\n    background-color: #d9edf7;\n    border-color: #bce8f1\n}\n.edui-default .edui-message-type-success{\n    color: #468847;\n    background-color: #dff0d8;\n    border-color: #d6e9c6\n}\n.edui-default .edui-message-type-danger,\n.edui-default .edui-message-type-error{\n    color: #b94a48;\n    background-color: #f2dede;\n    border-color: #eed3d7\n}\n.edui-default .edui-message .edui-message-closer {\n    display: block;\n    width: 16px;\n    height: 16px;\n    line-height: 16px;\n    position: absolute;\n    top: 0;\n    right: 0;\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    float: right;\n    font-size: 20px;\n    font-weight: bold;\n    color: #999;\n    text-shadow: 0 1px 0 #fff;\n    font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n}\n.edui-default .edui-message .edui-message-content {\n    font-size: 10pt;\n    word-wrap: break-word;\n    word-break: normal;\n}\n/* 弹出对话框按钮和对话框大小 */\n.edui-default .edui-dialog {\n    z-index: 2000;\n    position: absolute;\n\n}\n\n.edui-dialog div{\n    width:auto;\n}\n\n.edui-default .edui-dialog-wrap {\n    margin-right: 6px;\n    margin-bottom: 6px;\n}\n\n.edui-default .edui-dialog-fullscreen-flag {\n    margin-right: 0;\n    margin-bottom: 0;\n}\n\n.edui-default .edui-dialog-body {\n    position: relative;\n    padding:2px 0 0 2px;\n    _zoom: 1;\n}\n\n.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body {\n    padding: 0;\n}\n\n.edui-default .edui-dialog-shadow {\n    position: absolute;\n    z-index: -1;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    background-color: #ffffff;\n    border: 1px solid #ccc;\n    border: 1px solid rgba(0, 0, 0, 0.2);\n    *border-right-width: 2px;\n    *border-bottom-width: 2px;\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 6px;\n    -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    -webkit-background-clip: padding-box;\n    -moz-background-clip: padding;\n    background-clip: padding-box;\n}\n\n.edui-default .edui-dialog-foot {\n    background-color: white;\n}\n\n.edui-default .edui-dialog-titlebar {\n    height: 26px;\n    border-bottom: 1px solid #c6c6c6;\n    background: url(../images/dialog-title-bg.png) repeat-x bottom;\n    position: relative;\n    cursor: move;\n}\n.edui-default .edui-dialog-caption {\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 26px;\n    padding-left: 5px;\n}\n\n.edui-default .edui-dialog-draghandle {\n    height: 26px;\n}\n\n.edui-default .edui-dialog-closebutton {\n    position: absolute !important;\n    right: 5px;\n    top: 3px;\n}\n\n.edui-default .edui-dialog-closebutton .edui-button-body {\n    height: 20px;\n    width: 20px;\n    cursor: pointer;\n    background: url(\"../images/icons-all.gif\") no-repeat 0 -59px;\n}\n\n.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body {\n    background: url(\"../images/icons-all.gif\") no-repeat 0 -89px;\n}\n\n.edui-default .edui-dialog-foot {\n    height: 40px;\n}\n\n.edui-default .edui-dialog-buttons {\n    position: absolute;\n    right: 0;\n}\n\n.edui-default .edui-dialog-buttons .edui-button {\n    margin-right: 10px;\n}\n\n.edui-default .edui-dialog-buttons .edui-button .edui-button-body {\n    background: url(\"../images/icons-all.gif\") no-repeat;\n    height: 24px;\n    width: 96px;\n    font-size: 12px;\n    line-height: 24px;\n    text-align: center;\n    cursor: default;\n}\n\n.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body {\n    background: url(\"../images/icons-all.gif\") no-repeat 0 -30px;\n}\n\n.edui-default .edui-dialog iframe {\n    border: 0;\n    padding: 0;\n    margin: 0;\n    vertical-align: top;\n}\n\n.edui-default .edui-dialog-modalmask {\n    opacity: 0.3;\n    filter: alpha(opacity = 30);\n    background-color: #ccc;\n    position: absolute;\n    /*z-index: 1999;*/\n}\n\n.edui-default .edui-dialog-dragmask {\n    position: absolute;\n    /*z-index: 2001;*/\n    background-color: transparent;\n    cursor: move;\n}\n\n.edui-default .edui-dialog-content {\n    position: relative;\n}\n\n.edui-default .dialogcontmask {\n    cursor: move;\n    visibility: hidden;\n    display: block;\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    opacity: 0;\n    filter: alpha(opacity = 0);\n}\n\n/*link-dialog*/\n.edui-default .edui-for-link .edui-dialog-content {\n    width: 420px;\n    height: 200px;\n    overflow: hidden;\n}\n/*background-dialog*/\n.edui-default .edui-for-background .edui-dialog-content {\n    width: 440px;\n    height: 280px;\n    overflow: hidden;\n}\n\n/*template-dialog*/\n.edui-default .edui-for-template .edui-dialog-content {\n    width: 630px;\n    height: 390px;\n    overflow: hidden;\n}\n\n/*scrawl-dialog*/\n.edui-default .edui-for-scrawl .edui-dialog-content {\n    width: 515px;\n    *width: 506px;\n    height: 360px;\n}\n\n/*spechars-dialog*/\n.edui-default .edui-for-spechars .edui-dialog-content {\n    width: 620px;\n    height: 500px;\n    *width: 630px;\n    *height: 570px;\n}\n\n/*image-dialog*/\n.edui-default .edui-for-insertimage .edui-dialog-content {\n    width: 650px;\n    height: 400px;\n    overflow: hidden;\n}\n/*webapp-dialog*/\n.edui-default .edui-for-webapp .edui-dialog-content {\n    width: 560px;\n    _width: 565px;\n    height: 450px;\n    overflow: hidden;\n}\n\n/*image-insertframe*/\n.edui-default .edui-for-insertframe .edui-dialog-content {\n    width: 350px;\n    height: 200px;\n    overflow: hidden;\n}\n\n/*wordImage-dialog*/\n.edui-default .edui-for-wordimage .edui-dialog-content {\n    width: 620px;\n    height: 380px;\n    overflow: hidden;\n}\n\n/*attachment-dialog*/\n.edui-default .edui-for-attachment .edui-dialog-content {\n    width: 650px;\n    height: 400px;\n    overflow: hidden;\n}\n\n\n/*map-dialog*/\n.edui-default .edui-for-map .edui-dialog-content {\n    width: 550px;\n    height: 400px;\n}\n\n/*gmap-dialog*/\n.edui-default .edui-for-gmap .edui-dialog-content {\n    width: 550px;\n    height: 400px;\n}\n\n/*video-dialog*/\n.edui-default .edui-for-insertvideo .edui-dialog-content {\n    width: 590px;\n    height: 390px;\n}\n\n/*anchor-dialog*/\n.edui-default .edui-for-anchor .edui-dialog-content {\n    width: 320px;\n    height: 60px;\n    overflow: hidden;\n}\n\n/*searchreplace-dialog*/\n.edui-default .edui-for-searchreplace .edui-dialog-content {\n    width: 400px;\n    height: 220px;\n}\n\n/*help-dialog*/\n.edui-default .edui-for-help .edui-dialog-content {\n    width: 400px;\n    height: 420px;\n}\n\n/*edittable-dialog*/\n.edui-default .edui-for-edittable .edui-dialog-content {\n    width: 540px;\n    _width:590px;\n    height: 335px;\n}\n\n/*edittip-dialog*/\n.edui-default .edui-for-edittip .edui-dialog-content {\n    width: 225px;\n    height: 60px;\n}\n\n/*edittd-dialog*/\n.edui-default .edui-for-edittd .edui-dialog-content {\n    width: 240px;\n    height: 50px;\n}\n/*snapscreen-dialog*/\n.edui-default .edui-for-snapscreen .edui-dialog-content {\n    width: 400px;\n    height: 220px;\n}\n\n/*music-dialog*/\n.edui-default .edui-for-music .edui-dialog-content {\n    width: 515px;\n    height: 360px;\n}\n\n/*段落弹出菜单*/\n.edui-default .edui-for-paragraph .edui-listitem-label {\n    font-family: Tahoma, Verdana, Arial, Helvetica;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p {\n    font-size: 22px;\n    line-height: 27px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1 {\n    font-weight: bolder;\n    font-size: 32px;\n    line-height: 36px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2 {\n    font-weight: bolder;\n    font-size: 27px;\n    line-height: 29px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3 {\n    font-weight: bolder;\n    font-size: 19px;\n    line-height: 23px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4 {\n    font-weight: bolder;\n    font-size: 16px;\n    line-height: 19px\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5 {\n    font-weight: bolder;\n    font-size: 13px;\n    line-height: 16px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6 {\n    font-weight: bolder;\n    font-size: 12px;\n    line-height: 14px;\n}\n/* 表格弹出菜单 */\n.edui-default .edui-for-inserttable .edui-splitborder {\n    display: none\n}\n.edui-default .edui-for-inserttable  .edui-splitbutton-body .edui-arrow {\n    width: 0\n}\n.edui-default .edui-toolbar .edui-for-inserttable  .edui-state-active .edui-splitborder{\n    border-left: 1px solid transparent;\n}\n.edui-default .edui-tablepicker .edui-infoarea {\n    height: 14px;\n    line-height: 14px;\n    font-size: 12px;\n    width: 220px;\n    margin-bottom: 3px;\n    clear: both;\n}\n\n.edui-default .edui-tablepicker .edui-infoarea .edui-label {\n    float: left;\n}\n\n.edui-default .edui-dialog-buttons .edui-label {\n    line-height: 24px;\n}\n\n.edui-default .edui-tablepicker .edui-infoarea .edui-clickable {\n    float: right;\n}\n\n.edui-default .edui-tablepicker .edui-pickarea {\n    background: url(\"../images/unhighlighted.gif\") repeat;\n    height: 220px;\n    width: 220px;\n}\n\n.edui-default .edui-tablepicker .edui-pickarea .edui-overlay {\n    background: url(\"../images/highlighted.gif\") repeat;\n}\n\n/* 颜色弹出菜单 */\n.edui-default .edui-colorpicker-topbar {\n    height: 27px;\n    width: 200px;\n    /*border-bottom: 1px gray dashed;*/\n}\n\n.edui-default .edui-colorpicker-preview {\n    height: 20px;\n    border: 1px inset black;\n    margin-left: 1px;\n    width: 128px;\n    float: left;\n}\n\n.edui-default .edui-colorpicker-nocolor {\n    float: right;\n    margin-right: 1px;\n    font-size: 12px;\n    line-height: 14px;\n    height: 14px;\n    border: 1px solid #333;\n    padding: 3px 5px;\n    cursor: pointer;\n}\n\n.edui-default .edui-colorpicker-tablefirstrow {\n    height: 30px;\n}\n\n.edui-default .edui-colorpicker-colorcell {\n    width: 14px;\n    height: 14px;\n    display: block;\n    margin: 0;\n    cursor: pointer;\n}\n\n.edui-default .edui-colorpicker-colorcell:hover {\n    width: 14px;\n    height: 14px;\n    margin: 0;\n}\n.edui-default .edui-colorpicker-advbtn{\n    display: block;\n    text-align: center;\n    cursor: pointer;\n    height:20px;\n}\n.arrow_down{\n    background: white url('../images/arrow_down.png') no-repeat center;\n}\n.arrow_up{\n    background: white url('../images/arrow_up.png') no-repeat center;\n}\n/*高级的样式*/\n.edui-colorpicker-adv{\n    position: relative;\n    overflow: hidden;\n    height: 180px;\n    display: none;\n}\n.edui-colorpicker-plant, .edui-colorpicker-hue {\n    border: solid 1px #666;\n}\n.edui-colorpicker-pad {\n    width: 150px;\n    height: 150px;\n    left: 14px;\n    top: 13px;\n    position: absolute;\n    background: red;\n    overflow: hidden;\n    cursor: crosshair;\n}\n.edui-colorpicker-cover{\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 150px;\n    height: 150px;\n    background: url(\"../images/tangram-colorpicker.png\") -160px -200px;\n}\n.edui-colorpicker-padDot{\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 11px;\n    height: 11px;\n    overflow: hidden;\n    background: url(../images/tangram-colorpicker.png) 0px -200px repeat-x;\n    z-index: 1000;\n\n}\n.edui-colorpicker-sliderMain {\n    position: absolute;\n    left: 171px;\n    top: 13px;\n    width: 19px;\n    height: 152px;\n    background: url(../images/tangram-colorpicker.png) -179px -12px no-repeat;\n\n}\n.edui-colorpicker-slider {\n    width: 100%;\n    height: 100%;\n    cursor: pointer;\n}\n.edui-colorpicker-thumb{\n    position: absolute;\n    top: 0;\n    cursor: pointer;\n    height: 3px;\n    left: -1px;\n    right: -1px;\n    border: 1px solid black;\n    background: white;\n    opacity: .8;\n}\n/*自动排版弹出菜单*/\n.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body {\n    font-size: 12px;\n    margin-bottom: 3px;\n    clear: both;\n}\n\n.edui-default .edui-autotypesetpicker-body table {\n    border-collapse: separate;\n    border-spacing: 2px;\n}\n\n.edui-default .edui-autotypesetpicker-body td {\n    font-size: 12px;\n    word-wrap:break-word;\n}\n\n.edui-default .edui-autotypesetpicker-body td input {\n    margin: 3px 3px 3px 4px;\n    *margin: 1px 0 0 0;\n}\n/*自动排版弹出菜单*/\n.edui-default .edui-cellalignpicker .edui-cellalignpicker-body {\n    width: 70px;\n    font-size: 12px;\n    cursor: default;\n}\n\n.edui-default .edui-cellalignpicker-body table {\n    border-collapse: separate;\n    border-spacing: 0;\n}\n.edui-default .edui-cellalignpicker-body td{\n    padding: 1px;\n}\n.edui-default .edui-cellalignpicker-body .edui-icon{\n    height: 20px;\n    width: 20px;\n    padding: 1px;\n    background-image: url(../images/table-cell-align.png);\n}\n\n.edui-default .edui-cellalignpicker-body .edui-left{\n    background-position: 0 0;\n}\n\n.edui-default .edui-cellalignpicker-body .edui-center{\n    background-position: -25px 0;\n}\n.edui-default .edui-cellalignpicker-body .edui-right{\n    background-position: -51px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{\n    background-position: -73px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{\n    background-position: -98px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{\n    background-position: -124px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left {\n    background-position: -146px 0;\n    background-color: #f1f4f5;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center {\n    background-position: -245px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right {\n    background-position: -271px 0;\n}\n/*分隔线*/\n.edui-default .edui-toolbar .edui-separator {\n    width: 2px;\n    height: 20px;\n    margin: 2px 4px 2px 3px;\n    background: url(../images/icons.png) -181px 0;\n    background: url(../images/icons.gif) -181px 0 \\9;\n}\n\n/*颜色按钮 */\n.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump {\n    position: absolute;\n    overflow: hidden;\n    bottom: 1px;\n    left: 1px;\n    width: 18px;\n    height: 4px;\n}\n/*表情按钮及弹出菜单*/\n/*去除了表情的下拉箭头*/\n.edui-default .edui-for-emotion .edui-icon {\n    background-position: -60px -20px;\n}\n.edui-default .edui-for-emotion .edui-popup-content iframe\n{\n    width: 514px;\n    height: 380px;\n    overflow: hidden;\n}\n.edui-default .edui-for-emotion .edui-popup-content\n{\n    position: relative;\n    z-index: 555\n}\n\n.edui-default .edui-for-emotion .edui-splitborder {\n    display: none\n}\n\n.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow\n{\n    width: 0\n}\n.edui-default .edui-toolbar .edui-for-emotion  .edui-state-active .edui-splitborder\n{\n    border-left: 1px solid transparent;\n}\n/*contextmenu*/\n.edui-default .edui-hassubmenu .edui-arrow {\n    height: 20px;\n    width: 20px;\n    float: right;\n    background: url(\"../images/icons-all.gif\") no-repeat 10px -233px;\n}\n\n.edui-default .edui-menu-body .edui-menuitem {\n    padding: 1px;\n}\n\n.edui-default .edui-menuseparator {\n    margin: 2px 0;\n    height: 1px;\n    overflow: hidden;\n}\n\n.edui-default .edui-menuseparator-inner {\n    border-bottom: 1px solid #e2e3e3;\n    margin-left: 29px;\n    margin-right: 1px;\n}\n\n.edui-default .edui-menu-body .edui-state-hover {\n    padding: 0 !important;\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n}\n/*弹出菜单*/\n.edui-default .edui-shortcutmenu {\n    padding: 2px;\n    width: 190px;\n    height: 50px;\n    background-color: #fff;\n    border: 1px solid #ccc;\n    border-radius: 5px;\n}\n\n/*粘贴弹出菜单*/\n.edui-default .edui-wordpastepop .edui-popup-content{\n    border: none;\n    padding: 0;\n    width: 54px;\n    height: 21px;\n}\n.edui-default  .edui-pasteicon {\n    width: 100%;\n    height: 100%;\n    background-image: url('../images/wordpaste.png');\n    background-position: 0 0;\n}\n\n.edui-default  .edui-pasteicon.edui-state-opened {\n    background-position: 0 -34px;\n}\n\n.edui-default  .edui-pastecontainer {\n    position: relative;\n    visibility: hidden;\n    width: 97px;\n    background: #fff;\n    border: 1px solid #ccc;\n}\n\n.edui-default  .edui-pastecontainer .edui-title {\n    font-weight: bold;\n    background: #F8F8FF;\n    height: 25px;\n    line-height: 25px;\n    font-size: 12px;\n    padding-left: 5px;\n}\n\n.edui-default  .edui-pastecontainer .edui-button {\n    overflow: hidden;\n    margin: 3px 0;\n}\n\n.edui-default  .edui-pastecontainer .edui-button .edui-richtxticon,\n.edui-default  .edui-pastecontainer .edui-button .edui-tagicon,\n.edui-default  .edui-pastecontainer .edui-button .edui-plaintxticon{\n    float: left;\n    cursor: pointer;\n    width: 29px;\n    height: 29px;\n    margin-left: 5px;\n    background-image: url('../images/wordpaste.png');\n    background-repeat: no-repeat;\n}\n.edui-default  .edui-pastecontainer .edui-button .edui-richtxticon {\n    margin-left: 0;\n    background-position: -109px 0;\n}\n.edui-default  .edui-pastecontainer .edui-button .edui-tagicon {\n    background-position: -148px 1px;\n}\n\n.edui-default  .edui-pastecontainer .edui-button .edui-plaintxticon {\n    background-position: -72px 0;\n}\n\n.edui-default  .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon {\n    background-position: -109px -34px;\n}\n.edui-default  .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{\n    background-position: -148px -34px;\n}\n.edui-default  .edui-pastecontainer .edui-button  .edui-state-hover .edui-plaintxticon{\n    background-position: -72px -34px;\n}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/themes/default/dialogbase.css",
    "content": "/*弹出对话框页面样式组件\n*/\n\n/*reset\n*/\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, font, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td {\n    margin: 0;\n    padding: 0;\n    outline: 0;\n    font-size: 100%;\n}\n\nbody {\n    line-height: 1;\n}\n\nol, ul {\n    list-style: none;\n}\n\nblockquote, q {\n    quotes: none;\n}\n\nins {\n    text-decoration: none;\n}\n\ndel {\n    text-decoration: line-through;\n}\n\ntable {\n    border-collapse: collapse;\n    border-spacing: 0;\n}\n\n/*module\n*/\nbody {\n    background-color: #fff;\n    font: 12px/1.5 sans-serif, \"宋体\", \"Arial Narrow\", HELVETICA;\n    color: #646464;\n}\n\n/*tab*/\n.tabhead {\n    position: relative;\n    z-index: 10;\n}\n\n.tabhead span {\n    display: inline-block;\n    padding: 0 5px;\n    height: 30px;\n    border: 1px solid #ccc;\n    background: url(\"images/dialog-title-bg.png\") repeat-x;\n    text-align: center;\n    line-height: 30px;\n    cursor: pointer;\n    *margin-right: 5px;\n}\n\n.tabhead span.focus {\n    height: 31px;\n    border-bottom: none;\n    background: #fff;\n}\n\n.tabbody {\n    position: relative;\n    top: -1px;\n    margin: 0 auto;\n    border: 1px solid #ccc;\n}\n\n/*button*/\na.button {\n    display: block;\n    text-align: center;\n    line-height: 24px;\n    text-decoration: none;\n    height: 24px;\n    width: 95px;\n    border: 0;\n    color: #838383;\n    background: url(../../themes/default/images/icons-all.gif) no-repeat;\n}\n\na.button:hover {\n    background-position: 0 -30px;\n}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/themes/iframe.css",
    "content": "/*可以在这里添加你自己的css*/\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/SyntaxHighlighter/shCore.js",
    "content": "// XRegExp 1.5.1\n// (c) 2007-2012 Steven Levithan\n// MIT License\n// <http://xregexp.com>\n// Provides an augmented, extensible, cross-browser implementation of regular expressions,\n// including support for additional syntax, flags, and methods\n\nvar XRegExp;\n\nif (XRegExp) {\n    // Avoid running twice, since that would break references to native globals\n    throw Error(\"can't load XRegExp twice in the same frame\");\n}\n\n// Run within an anonymous function to protect variables and avoid new globals\n(function (undefined) {\n\n    //---------------------------------\n    //  Constructor\n    //---------------------------------\n\n    // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native\n    // regular expression in that additional syntax and flags are supported and cross-browser\n    // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and\n    // converts to type XRegExp\n    XRegExp = function (pattern, flags) {\n        var output = [],\n            currScope = XRegExp.OUTSIDE_CLASS,\n            pos = 0,\n            context, tokenResult, match, chr, regex;\n\n        if (XRegExp.isRegExp(pattern)) {\n            if (flags !== undefined)\n                throw TypeError(\"can't supply flags when constructing one RegExp from another\");\n            return clone(pattern);\n        }\n        // Tokens become part of the regex construction process, so protect against infinite\n        // recursion when an XRegExp is constructed within a token handler or trigger\n        if (isInsideConstructor)\n            throw Error(\"can't call the XRegExp constructor within token definition functions\");\n\n        flags = flags || \"\";\n        context = { // `this` object for custom tokens\n            hasNamedCapture: false,\n            captureNames: [],\n            hasFlag: function (flag) {return flags.indexOf(flag) > -1;},\n            setFlag: function (flag) {flags += flag;}\n        };\n\n        while (pos < pattern.length) {\n            // Check for custom tokens at the current position\n            tokenResult = runTokens(pattern, pos, currScope, context);\n\n            if (tokenResult) {\n                output.push(tokenResult.output);\n                pos += (tokenResult.match[0].length || 1);\n            } else {\n                // Check for native multicharacter metasequences (excluding character classes) at\n                // the current position\n                if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) {\n                    output.push(match[0]);\n                    pos += match[0].length;\n                } else {\n                    chr = pattern.charAt(pos);\n                    if (chr === \"[\")\n                        currScope = XRegExp.INSIDE_CLASS;\n                    else if (chr === \"]\")\n                        currScope = XRegExp.OUTSIDE_CLASS;\n                    // Advance position one character\n                    output.push(chr);\n                    pos++;\n                }\n            }\n        }\n\n        regex = RegExp(output.join(\"\"), nativ.replace.call(flags, flagClip, \"\"));\n        regex._xregexp = {\n            source: pattern,\n            captureNames: context.hasNamedCapture ? context.captureNames : null\n        };\n        return regex;\n    };\n\n\n    //---------------------------------\n    //  Public properties\n    //---------------------------------\n\n    XRegExp.version = \"1.5.1\";\n\n    // Token scope bitflags\n    XRegExp.INSIDE_CLASS = 1;\n    XRegExp.OUTSIDE_CLASS = 2;\n\n\n    //---------------------------------\n    //  Private variables\n    //---------------------------------\n\n    var replacementToken = /\\$(?:(\\d\\d?|[$&`'])|{([$\\w]+)})/g,\n        flagClip = /[^gimy]+|([\\s\\S])(?=[\\s\\S]*\\1)/g, // Nonnative and duplicate flags\n        quantifier = /^(?:[?*+]|{\\d+(?:,\\d*)?})\\??/,\n        isInsideConstructor = false,\n        tokens = [],\n    // Copy native globals for reference (\"native\" is an ES3 reserved keyword)\n        nativ = {\n            exec: RegExp.prototype.exec,\n            test: RegExp.prototype.test,\n            match: String.prototype.match,\n            replace: String.prototype.replace,\n            split: String.prototype.split\n        },\n        compliantExecNpcg = nativ.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n        compliantLastIndexIncrement = function () {\n            var x = /^/g;\n            nativ.test.call(x, \"\");\n            return !x.lastIndex;\n        }(),\n        hasNativeY = RegExp.prototype.sticky !== undefined,\n        nativeTokens = {};\n\n    // `nativeTokens` match native multicharacter metasequences only (including deprecated octals,\n    // excluding character classes)\n    nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S]))/;\n    nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S])|\\(\\?[:=!]|[?*+]\\?|{\\d+(?:,\\d*)?}\\??)/;\n\n\n    //---------------------------------\n    //  Public methods\n    //---------------------------------\n\n    // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by\n    // the XRegExp library and can be used to create XRegExp plugins. This function is intended for\n    // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can\n    // be disabled by `XRegExp.freezeTokens`\n    XRegExp.addToken = function (regex, handler, scope, trigger) {\n        tokens.push({\n            pattern: clone(regex, \"g\" + (hasNativeY ? \"y\" : \"\")),\n            handler: handler,\n            scope: scope || XRegExp.OUTSIDE_CLASS,\n            trigger: trigger || null\n        });\n    };\n\n    // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag\n    // combination has previously been cached, the cached copy is returned; otherwise the newly\n    // created regex is cached\n    XRegExp.cache = function (pattern, flags) {\n        var key = pattern + \"/\" + (flags || \"\");\n        return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags));\n    };\n\n    // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh\n    // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global`\n    // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve\n    // special properties required for named capture\n    XRegExp.copyAsGlobal = function (regex) {\n        return clone(regex, \"g\");\n    };\n\n    // Accepts a string; returns the string with regex metacharacters escaped. The returned string\n    // can safely be used at any point within a regex to match the provided literal string. Escaped\n    // characters are [ ] { } ( ) * + ? - . , \\ ^ $ | # and whitespace\n    XRegExp.escape = function (str) {\n        return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n    };\n\n    // Accepts a string to search, regex to search with, position to start the search within the\n    // string (default: 0), and an optional Boolean indicating whether matches must start at-or-\n    // after the position or at the specified position only. This function ignores the `lastIndex`\n    // of the provided regex in its own handling, but updates the property for compatibility\n    XRegExp.execAt = function (str, regex, pos, anchored) {\n        var r2 = clone(regex, \"g\" + ((anchored && hasNativeY) ? \"y\" : \"\")),\n            match;\n        r2.lastIndex = pos = pos || 0;\n        match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.)\n        if (anchored && match && match.index !== pos)\n            match = null;\n        if (regex.global)\n            regex.lastIndex = match ? r2.lastIndex : 0;\n        return match;\n    };\n\n    // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing\n    // syntax and flag changes. Should be run after XRegExp and any plugins are loaded\n    XRegExp.freezeTokens = function () {\n        XRegExp.addToken = function () {\n            throw Error(\"can't run addToken after freezeTokens\");\n        };\n    };\n\n    // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object.\n    // Note that this is also `true` for regex literals and regexes created by the `XRegExp`\n    // constructor. This works correctly for variables created in another frame, when `instanceof`\n    // and `constructor` checks would fail to work as intended\n    XRegExp.isRegExp = function (o) {\n        return Object.prototype.toString.call(o) === \"[object RegExp]\";\n    };\n\n    // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to\n    // iterate over regex matches compared to the traditional approaches of subverting\n    // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop\n    XRegExp.iterate = function (str, regex, callback, context) {\n        var r2 = clone(regex, \"g\"),\n            i = -1, match;\n        while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)\n            if (regex.global)\n                regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback`\n            callback.call(context, match, ++i, str, regex);\n            if (r2.lastIndex === match.index)\n                r2.lastIndex++;\n        }\n        if (regex.global)\n            regex.lastIndex = 0;\n    };\n\n    // Accepts a string and an array of regexes; returns the result of using each successive regex\n    // to search within the matches of the previous regex. The array of regexes can also contain\n    // objects with `regex` and `backref` properties, in which case the named or numbered back-\n    // references specified are passed forward to the next regex or returned. E.g.:\n    // var xregexpImgFileNames = XRegExp.matchChain(html, [\n    //     {regex: /<img\\b([^>]+)>/i, backref: 1}, // <img> tag attributes\n    //     {regex: XRegExp('(?ix) \\\\s src=\" (?<src> [^\"]+ )'), backref: \"src\"}, // src attribute values\n    //     {regex: XRegExp(\"^http://xregexp\\\\.com(/[^#?]+)\", \"i\"), backref: 1}, // xregexp.com paths\n    //     /[^\\/]+$/ // filenames (strip directory paths)\n    // ]);\n    XRegExp.matchChain = function (str, chain) {\n        return function recurseChain (values, level) {\n            var item = chain[level].regex ? chain[level] : {regex: chain[level]},\n                regex = clone(item.regex, \"g\"),\n                matches = [], i;\n            for (i = 0; i < values.length; i++) {\n                XRegExp.iterate(values[i], regex, function (match) {\n                    matches.push(item.backref ? (match[item.backref] || \"\") : match[0]);\n                });\n            }\n            return ((level === chain.length - 1) || !matches.length) ?\n                matches : recurseChain(matches, level + 1);\n        }([str], 0);\n    };\n\n\n    //---------------------------------\n    //  New RegExp prototype methods\n    //---------------------------------\n\n    // Accepts a context object and arguments array; returns the result of calling `exec` with the\n    // first value in the arguments array. the context is ignored but is accepted for congruity\n    // with `Function.prototype.apply`\n    RegExp.prototype.apply = function (context, args) {\n        return this.exec(args[0]);\n    };\n\n    // Accepts a context object and string; returns the result of calling `exec` with the provided\n    // string. the context is ignored but is accepted for congruity with `Function.prototype.call`\n    RegExp.prototype.call = function (context, str) {\n        return this.exec(str);\n    };\n\n\n    //---------------------------------\n    //  Overriden native methods\n    //---------------------------------\n\n    // Adds named capture support (with backreferences returned as `result.name`), and fixes two\n    // cross-browser issues per ES3:\n    // - Captured values for nonparticipating capturing groups should be returned as `undefined`,\n    //   rather than the empty string.\n    // - `lastIndex` should not be incremented after zero-length matches.\n    RegExp.prototype.exec = function (str) {\n        var match, name, r2, origLastIndex;\n        if (!this.global)\n            origLastIndex = this.lastIndex;\n        match = nativ.exec.apply(this, arguments);\n        if (match) {\n            // Fix browsers whose `exec` methods don't consistently return `undefined` for\n            // nonparticipating capturing groups\n            if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n                r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), \"g\", \"\"));\n                // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed\n                // matching due to characters outside the match\n                nativ.replace.call((str + \"\").slice(match.index), r2, function () {\n                    for (var i = 1; i < arguments.length - 2; i++) {\n                        if (arguments[i] === undefined)\n                            match[i] = undefined;\n                    }\n                });\n            }\n            // Attach named capture properties\n            if (this._xregexp && this._xregexp.captureNames) {\n                for (var i = 1; i < match.length; i++) {\n                    name = this._xregexp.captureNames[i - 1];\n                    if (name)\n                        match[name] = match[i];\n                }\n            }\n            // Fix browsers that increment `lastIndex` after zero-length matches\n            if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n        }\n        if (!this.global)\n            this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        return match;\n    };\n\n    // Fix browser bugs in native method\n    RegExp.prototype.test = function (str) {\n        // Use the native `exec` to skip some processing overhead, even though the altered\n        // `exec` would take care of the `lastIndex` fixes\n        var match, origLastIndex;\n        if (!this.global)\n            origLastIndex = this.lastIndex;\n        match = nativ.exec.call(this, str);\n        // Fix browsers that increment `lastIndex` after zero-length matches\n        if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n            this.lastIndex--;\n        if (!this.global)\n            this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        return !!match;\n    };\n\n    // Adds named capture support and fixes browser bugs in native method\n    String.prototype.match = function (regex) {\n        if (!XRegExp.isRegExp(regex))\n            regex = RegExp(regex); // Native `RegExp`\n        if (regex.global) {\n            var result = nativ.match.apply(this, arguments);\n            regex.lastIndex = 0; // Fix IE bug\n            return result;\n        }\n        return regex.exec(this); // Run the altered `exec`\n    };\n\n    // Adds support for `${n}` tokens for named and numbered backreferences in replacement text,\n    // and provides named backreferences to replacement functions as `arguments[0].name`. Also\n    // fixes cross-browser differences in replacement text syntax when performing a replacement\n    // using a nonregex search value, and the value of replacement regexes' `lastIndex` property\n    // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary\n    // third (`flags`) parameter\n    String.prototype.replace = function (search, replacement) {\n        var isRegex = XRegExp.isRegExp(search),\n            captureNames, result, str, origLastIndex;\n\n        // There are too many combinations of search/replacement types/values and browser bugs that\n        // preclude passing to native `replace`, so don't try\n        //if (...)\n        //    return nativ.replace.apply(this, arguments);\n\n        if (isRegex) {\n            if (search._xregexp)\n                captureNames = search._xregexp.captureNames; // Array or `null`\n            if (!search.global)\n                origLastIndex = search.lastIndex;\n        } else {\n            search = search + \"\"; // Type conversion\n        }\n\n        if (Object.prototype.toString.call(replacement) === \"[object Function]\") {\n            result = nativ.replace.call(this + \"\", search, function () {\n                if (captureNames) {\n                    // Change the `arguments[0]` string primitive to a String object which can store properties\n                    arguments[0] = new String(arguments[0]);\n                    // Store named backreferences on `arguments[0]`\n                    for (var i = 0; i < captureNames.length; i++) {\n                        if (captureNames[i])\n                            arguments[0][captureNames[i]] = arguments[i + 1];\n                    }\n                }\n                // Update `lastIndex` before calling `replacement` (fix browsers)\n                if (isRegex && search.global)\n                    search.lastIndex = arguments[arguments.length - 2] + arguments[0].length;\n                return replacement.apply(null, arguments);\n            });\n        } else {\n            str = this + \"\"; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`)\n            result = nativ.replace.call(str, search, function () {\n                var args = arguments; // Keep this function's `arguments` available through closure\n                return nativ.replace.call(replacement + \"\", replacementToken, function ($0, $1, $2) {\n                    // Numbered backreference (without delimiters) or special variable\n                    if ($1) {\n                        switch ($1) {\n                            case \"$\": return \"$\";\n                            case \"&\": return args[0];\n                            case \"`\": return args[args.length - 1].slice(0, args[args.length - 2]);\n                            case \"'\": return args[args.length - 1].slice(args[args.length - 2] + args[0].length);\n                            // Numbered backreference\n                            default:\n                                // What does \"$10\" mean?\n                                // - Backreference 10, if 10 or more capturing groups exist\n                                // - Backreference 1 followed by \"0\", if 1-9 capturing groups exist\n                                // - Otherwise, it's the string \"$10\"\n                                // Also note:\n                                // - Backreferences cannot be more than two digits (enforced by `replacementToken`)\n                                // - \"$01\" is equivalent to \"$1\" if a capturing group exists, otherwise it's the string \"$01\"\n                                // - There is no \"$0\" token (\"$&\" is the entire match)\n                                var literalNumbers = \"\";\n                                $1 = +$1; // Type conversion; drop leading zero\n                                if (!$1) // `$1` was \"0\" or \"00\"\n                                    return $0;\n                                while ($1 > args.length - 3) {\n                                    literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers;\n                                    $1 = Math.floor($1 / 10); // Drop the last digit\n                                }\n                                return ($1 ? args[$1] || \"\" : \"$\") + literalNumbers;\n                        }\n                        // Named backreference or delimited numbered backreference\n                    } else {\n                        // What does \"${n}\" mean?\n                        // - Backreference to numbered capture n. Two differences from \"$n\":\n                        //   - n can be more than two digits\n                        //   - Backreference 0 is allowed, and is the entire match\n                        // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture\n                        // - Otherwise, it's the string \"${n}\"\n                        var n = +$2; // Type conversion; drop leading zeros\n                        if (n <= args.length - 3)\n                            return args[n];\n                        n = captureNames ? indexOf(captureNames, $2) : -1;\n                        return n > -1 ? args[n + 1] : $0;\n                    }\n                });\n            });\n        }\n\n        if (isRegex) {\n            if (search.global)\n                search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows)\n            else\n                search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        }\n\n        return result;\n    };\n\n    // A consistent cross-browser, ES3 compliant `split`\n    String.prototype.split = function (s /* separator */, limit) {\n        // If separator `s` is not a regex, use the native `split`\n        if (!XRegExp.isRegExp(s))\n            return nativ.split.apply(this, arguments);\n\n        var str = this + \"\", // Type conversion\n            output = [],\n            lastLastIndex = 0,\n            match, lastLength;\n\n        // Behavior for `limit`: if it's...\n        // - `undefined`: No limit\n        // - `NaN` or zero: Return an empty array\n        // - A positive number: Use `Math.floor(limit)`\n        // - A negative number: No limit\n        // - Other: Type-convert, then use the above rules\n        if (limit === undefined || +limit < 0) {\n            limit = Infinity;\n        } else {\n            limit = Math.floor(+limit);\n            if (!limit)\n                return [];\n        }\n\n        // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero\n        // and restore it to its original value when we're done using the regex\n        s = XRegExp.copyAsGlobal(s);\n\n        while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)\n            if (s.lastIndex > lastLastIndex) {\n                output.push(str.slice(lastLastIndex, match.index));\n\n                if (match.length > 1 && match.index < str.length)\n                    Array.prototype.push.apply(output, match.slice(1));\n\n                lastLength = match[0].length;\n                lastLastIndex = s.lastIndex;\n\n                if (output.length >= limit)\n                    break;\n            }\n\n            if (s.lastIndex === match.index)\n                s.lastIndex++;\n        }\n\n        if (lastLastIndex === str.length) {\n            if (!nativ.test.call(s, \"\") || lastLength)\n                output.push(\"\");\n        } else {\n            output.push(str.slice(lastLastIndex));\n        }\n\n        return output.length > limit ? output.slice(0, limit) : output;\n    };\n\n\n    //---------------------------------\n    //  Private helper functions\n    //---------------------------------\n\n    // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp`\n    // instance with a fresh `lastIndex` (set to zero), preserving properties required for named\n    // capture. Also allows adding new flags in the process of copying the regex\n    function clone (regex, additionalFlags) {\n        if (!XRegExp.isRegExp(regex))\n            throw TypeError(\"type RegExp expected\");\n        var x = regex._xregexp;\n        regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || \"\"));\n        if (x) {\n            regex._xregexp = {\n                source: x.source,\n                captureNames: x.captureNames ? x.captureNames.slice(0) : null\n            };\n        }\n        return regex;\n    }\n\n    function getNativeFlags (regex) {\n        return (regex.global     ? \"g\" : \"\") +\n            (regex.ignoreCase ? \"i\" : \"\") +\n            (regex.multiline  ? \"m\" : \"\") +\n            (regex.extended   ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n            (regex.sticky     ? \"y\" : \"\");\n    }\n\n    function runTokens (pattern, index, scope, context) {\n        var i = tokens.length,\n            result, match, t;\n        // Protect against constructing XRegExps within token handler and trigger functions\n        isInsideConstructor = true;\n        // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws\n        try {\n            while (i--) { // Run in reverse order\n                t = tokens[i];\n                if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) {\n                    t.pattern.lastIndex = index;\n                    match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc.\n                    if (match && match.index === index) {\n                        result = {\n                            output: t.handler.call(context, match, scope),\n                            match: match\n                        };\n                        break;\n                    }\n                }\n            }\n        } catch (err) {\n            throw err;\n        } finally {\n            isInsideConstructor = false;\n        }\n        return result;\n    }\n\n    function indexOf (array, item, from) {\n        if (Array.prototype.indexOf) // Use the native array method if available\n            return array.indexOf(item, from);\n        for (var i = from || 0; i < array.length; i++) {\n            if (array[i] === item)\n                return i;\n        }\n        return -1;\n    }\n\n\n    //---------------------------------\n    //  Built-in tokens\n    //---------------------------------\n\n    // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the\n    // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS`\n\n    // Comment pattern: (?# )\n    XRegExp.addToken(\n        /\\(\\?#[^)]*\\)/,\n        function (match) {\n            // Keep tokens separated unless the following token is a quantifier\n            return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? \"\" : \"(?:)\";\n        }\n    );\n\n    // Capturing group (match the opening parenthesis only).\n    // Required for support of named capturing groups\n    XRegExp.addToken(\n        /\\((?!\\?)/,\n        function () {\n            this.captureNames.push(null);\n            return \"(\";\n        }\n    );\n\n    // Named capturing group (match the opening delimiter only): (?<name>\n    XRegExp.addToken(\n        /\\(\\?<([$\\w]+)>/,\n        function (match) {\n            this.captureNames.push(match[1]);\n            this.hasNamedCapture = true;\n            return \"(\";\n        }\n    );\n\n    // Named backreference: \\k<name>\n    XRegExp.addToken(\n        /\\\\k<([\\w$]+)>/,\n        function (match) {\n            var index = indexOf(this.captureNames, match[1]);\n            // Keep backreferences separate from subsequent literal numbers. Preserve back-\n            // references to named groups that are undefined at this point as literal strings\n            return index > -1 ?\n                \"\\\\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? \"\" : \"(?:)\") :\n                match[0];\n        }\n    );\n\n    // Empty character class: [] or [^]\n    XRegExp.addToken(\n        /\\[\\^?]/,\n        function (match) {\n            // For cross-browser compatibility with ES3, convert [] to \\b\\B and [^] to [\\s\\S].\n            // (?!) should work like \\b\\B, but is unreliable in Firefox\n            return match[0] === \"[]\" ? \"\\\\b\\\\B\" : \"[\\\\s\\\\S]\";\n        }\n    );\n\n    // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx)\n    // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc.\n    XRegExp.addToken(\n        /^\\(\\?([imsx]+)\\)/,\n        function (match) {\n            this.setFlag(match[1]);\n            return \"\";\n        }\n    );\n\n    // Whitespace and comments, in free-spacing (aka extended) mode only\n    XRegExp.addToken(\n        /(?:\\s+|#.*)+/,\n        function (match) {\n            // Keep tokens separated unless the following token is a quantifier\n            return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? \"\" : \"(?:)\";\n        },\n        XRegExp.OUTSIDE_CLASS,\n        function () {return this.hasFlag(\"x\");}\n    );\n\n    // Dot, in dotall (aka singleline) mode only\n    XRegExp.addToken(\n        /\\./,\n        function () {return \"[\\\\s\\\\S]\";},\n        XRegExp.OUTSIDE_CLASS,\n        function () {return this.hasFlag(\"s\");}\n    );\n\n\n    //---------------------------------\n    //  Backward compatibility\n    //---------------------------------\n\n    // Uncomment the following block for compatibility with XRegExp 1.0-1.2:\n    /*\n     XRegExp.matchWithinChain = XRegExp.matchChain;\n     RegExp.prototype.addFlags = function (s) {return clone(this, s);};\n     RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;};\n     RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);};\n     RegExp.prototype.validate = function (s) {var r = RegExp(\"^(?:\" + this.source + \")$(?!\\\\s)\", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;};\n     */\n\n})();\n\n//\n// Begin anonymous function. This is used to contain local scope variables without polutting global scope.\n//\nif (typeof(SyntaxHighlighter) == 'undefined') var SyntaxHighlighter = function() {\n\n// CommonJS\n    if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined')\n    {\n        XRegExp = require('XRegExp').XRegExp;\n    }\n\n// Shortcut object which will be assigned to the SyntaxHighlighter variable.\n// This is a shorthand for local reference in order to avoid long namespace\n// references to SyntaxHighlighter.whatever...\n    var sh = {\n        defaults : {\n            /** Additional CSS class names to be added to highlighter elements. */\n            'class-name' : '',\n\n            /** First line number. */\n            'first-line' : 1,\n\n            /**\n             * Pads line numbers. Possible values are:\n             *\n             *   false - don't pad line numbers.\n             *   true  - automaticaly pad numbers with minimum required number of leading zeroes.\n             *   [int] - length up to which pad line numbers.\n             */\n            'pad-line-numbers' : false,\n\n            /** Lines to highlight. */\n            'highlight' : false,\n\n            /** Title to be displayed above the code block. */\n            'title' : null,\n\n            /** Enables or disables smart tabs. */\n            'smart-tabs' : true,\n\n            /** Gets or sets tab size. */\n            'tab-size' : 4,\n\n            /** Enables or disables gutter. */\n            'gutter' : true,\n\n            /** Enables or disables toolbar. */\n            'toolbar' : true,\n\n            /** Enables quick code copy and paste from double click. */\n            'quick-code' : true,\n\n            /** Forces code view to be collapsed. */\n            'collapse' : false,\n\n            /** Enables or disables automatic links. */\n            'auto-links' : false,\n\n            /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */\n            'light' : false,\n\n            'unindent' : true,\n\n            'html-script' : false\n        },\n\n        config : {\n            space : '&nbsp;',\n\n            /** Enables use of <SCRIPT type=\"syntaxhighlighter\" /> tags. */\n            useScriptTags : true,\n\n            /** Blogger mode flag. */\n            bloggerMode : false,\n\n            stripBrs : false,\n\n            /** Name of the tag that SyntaxHighlighter will automatically look for. */\n            tagName : 'pre',\n\n            strings : {\n                expandSource : 'expand source',\n                help : '?',\n                alert: 'SyntaxHighlighter\\n\\n',\n                noBrush : 'Can\\'t find brush for: ',\n                brushNotHtmlScript : 'Brush wasn\\'t configured for html-script option: ',\n\n                // this is populated by the build script\n                aboutDialog : '@ABOUT@'\n            }\n        },\n\n        /** Internal 'global' variables. */\n        vars : {\n            discoveredBrushes : null,\n            highlighters : {}\n        },\n\n        /** This object is populated by user included external brush files. */\n        brushes : {},\n\n        /** Common regular expressions. */\n        regexLib : {\n            multiLineCComments\t\t\t: /\\/\\*[\\s\\S]*?\\*\\//gm,\n            singleLineCComments\t\t\t: /\\/\\/.*$/gm,\n            singleLinePerlComments\t\t: /#.*$/gm,\n            doubleQuotedString\t\t\t: /\"([^\\\\\"\\n]|\\\\.)*\"/g,\n            singleQuotedString\t\t\t: /'([^\\\\'\\n]|\\\\.)*'/g,\n            multiLineDoubleQuotedString\t: new XRegExp('\"([^\\\\\\\\\"]|\\\\\\\\.)*\"', 'gs'),\n            multiLineSingleQuotedString\t: new XRegExp(\"'([^\\\\\\\\']|\\\\\\\\.)*'\", 'gs'),\n            xmlComments\t\t\t\t\t: /(&lt;|<)!--[\\s\\S]*?--(&gt;|>)/gm,\n            url\t\t\t\t\t\t\t: /\\w+:\\/\\/[\\w-.\\/?%&=:@;#]*/g,\n\n            /** <?= ?> tags. */\n            phpScriptTags \t\t\t\t: { left: /(&lt;|<)\\?(?:=|php)?/g, right: /\\?(&gt;|>)/g, 'eof' : true },\n\n            /** <%= %> tags. */\n            aspScriptTags\t\t\t\t: { left: /(&lt;|<)%=?/g, right: /%(&gt;|>)/g },\n\n            /** <script> tags. */\n            scriptScriptTags\t\t\t: { left: /(&lt;|<)\\s*script.*?(&gt;|>)/gi, right: /(&lt;|<)\\/\\s*script\\s*(&gt;|>)/gi }\n        },\n\n        toolbar: {\n            /**\n             * Generates HTML markup for the toolbar.\n             * @param {Highlighter} highlighter Highlighter instance.\n             * @return {String} Returns HTML markup.\n             */\n            getHtml: function(highlighter)\n            {\n                var html = '<div class=\"toolbar\">',\n                    items = sh.toolbar.items,\n                    list = items.list\n                    ;\n\n                function defaultGetHtml(highlighter, name)\n                {\n                    return sh.toolbar.getButtonHtml(highlighter, name, sh.config.strings[name]);\n                };\n\n                for (var i = 0; i < list.length; i++)\n                    html += (items[list[i]].getHtml || defaultGetHtml)(highlighter, list[i]);\n\n                html += '</div>';\n\n                return html;\n            },\n\n            /**\n             * Generates HTML markup for a regular button in the toolbar.\n             * @param {Highlighter} highlighter Highlighter instance.\n             * @param {String} commandName\t\tCommand name that would be executed.\n             * @param {String} label\t\t\tLabel text to display.\n             * @return {String}\t\t\t\t\tReturns HTML markup.\n             */\n            getButtonHtml: function(highlighter, commandName, label)\n            {\n                return '<span><a href=\"#\" class=\"toolbar_item'\n                    + ' command_' + commandName\n                    + ' ' + commandName\n                    + '\">' + label + '</a></span>'\n                    ;\n            },\n\n            /**\n             * Event handler for a toolbar anchor.\n             */\n            handler: function(e)\n            {\n                var target = e.target,\n                    className = target.className || ''\n                    ;\n\n                function getValue(name)\n                {\n                    var r = new RegExp(name + '_(\\\\w+)'),\n                        match = r.exec(className)\n                        ;\n\n                    return match ? match[1] : null;\n                };\n\n                var highlighter = getHighlighterById(findParentElement(target, '.syntaxhighlighter').id),\n                    commandName = getValue('command')\n                    ;\n\n                // execute the toolbar command\n                if (highlighter && commandName)\n                    sh.toolbar.items[commandName].execute(highlighter);\n\n                // disable default A click behaviour\n                e.preventDefault();\n            },\n\n            /** Collection of toolbar items. */\n            items : {\n                // Ordered lis of items in the toolbar. Can't expect `for (var n in items)` to be consistent.\n                list: ['expandSource', 'help'],\n\n                expandSource: {\n                    getHtml: function(highlighter)\n                    {\n                        if (highlighter.getParam('collapse') != true)\n                            return '';\n\n                        var title = highlighter.getParam('title');\n                        return sh.toolbar.getButtonHtml(highlighter, 'expandSource', title ? title : sh.config.strings.expandSource);\n                    },\n\n                    execute: function(highlighter)\n                    {\n                        var div = getHighlighterDivById(highlighter.id);\n                        removeClass(div, 'collapsed');\n                    }\n                },\n\n                /** Command to display the about dialog window. */\n                help: {\n                    execute: function(highlighter)\n                    {\n                        var wnd = popup('', '_blank', 500, 250, 'scrollbars=0'),\n                            doc = wnd.document\n                            ;\n\n                        doc.write(sh.config.strings.aboutDialog);\n                        doc.close();\n                        wnd.focus();\n                    }\n                }\n            }\n        },\n\n        /**\n         * Finds all elements on the page which should be processes by SyntaxHighlighter.\n         *\n         * @param {Object} globalParams\t\tOptional parameters which override element's\n         * \t\t\t\t\t\t\t\t\tparameters. Only used if element is specified.\n         *\n         * @param {Object} element\tOptional element to highlight. If none is\n         * \t\t\t\t\t\t\tprovided, all elements in the current document\n         * \t\t\t\t\t\t\tare returned which qualify.\n         *\n         * @return {Array}\tReturns list of <code>{ target: DOMElement, params: Object }</code> objects.\n         */\n        findElements: function(globalParams, element)\n        {\n            var elements = element ? [element] : toArray(document.getElementsByTagName(sh.config.tagName)),\n                conf = sh.config,\n                result = []\n                ;\n\n            // support for <SCRIPT TYPE=\"syntaxhighlighter\" /> feature\n            if (conf.useScriptTags)\n                elements = elements.concat(getSyntaxHighlighterScriptTags());\n\n            if (elements.length === 0)\n                return result;\n\n            for (var i = 0; i < elements.length; i++)\n            {\n                var item = {\n                    target: elements[i],\n                    // local params take precedence over globals\n                    params: merge(globalParams, parseParams(elements[i].className))\n                };\n\n                if (item.params['brush'] == null)\n                    continue;\n\n                result.push(item);\n            }\n\n            return result;\n        },\n\n        /**\n         * Shorthand to highlight all elements on the page that are marked as\n         * SyntaxHighlighter source code.\n         *\n         * @param {Object} globalParams\t\tOptional parameters which override element's\n         * \t\t\t\t\t\t\t\t\tparameters. Only used if element is specified.\n         *\n         * @param {Object} element\tOptional element to highlight. If none is\n         * \t\t\t\t\t\t\tprovided, all elements in the current document\n         * \t\t\t\t\t\t\tare highlighted.\n         */\n        highlight: function(globalParams, element)\n        {\n            var elements = this.findElements(globalParams, element),\n                propertyName = 'innerHTML',\n                highlighter = null,\n                conf = sh.config\n                ;\n\n            if (elements.length === 0)\n                return;\n\n            for (var i = 0; i < elements.length; i++)\n            {\n                var element = elements[i],\n                    target = element.target,\n                    params = element.params,\n                    brushName = params.brush,\n                    code\n                    ;\n\n                if (brushName == null)\n                    continue;\n\n                // Instantiate a brush\n                if (params['html-script'] == 'true' || sh.defaults['html-script'] == true)\n                {\n                    highlighter = new sh.HtmlScript(brushName);\n                    brushName = 'htmlscript';\n                }\n                else\n                {\n                    var brush = findBrush(brushName);\n\n                    if (brush)\n                        highlighter = new brush();\n                    else\n                        continue;\n                }\n\n                code = target[propertyName];\n\n                // remove CDATA from <SCRIPT/> tags if it's present\n                if (conf.useScriptTags)\n                    code = stripCData(code);\n\n                // Inject title if the attribute is present\n                if ((target.title || '') != '')\n                    params.title = target.title;\n\n                params['brush'] = brushName;\n                highlighter.init(params);\n                element = highlighter.getDiv(code);\n\n                // carry over ID\n                if ((target.id || '') != '')\n                    element.id = target.id;\n                //by zhanyi 去掉多余的外围div\n                var tmp = element.firstChild.firstChild;\n                tmp.className = element.firstChild.className;\n\n                target.parentNode.replaceChild(tmp, target);\n            }\n        },\n\n        /**\n         * Main entry point for the SyntaxHighlighter.\n         * @param {Object} params Optional params to apply to all highlighted elements.\n         */\n        all: function(params)\n        {\n            attachEvent(\n                window,\n                'load',\n                function() { sh.highlight(params); }\n            );\n        }\n    }; // end of sh\n\n    /**\n     * Checks if target DOM elements has specified CSS class.\n     * @param {DOMElement} target Target DOM element to check.\n     * @param {String} className Name of the CSS class to check for.\n     * @return {Boolean} Returns true if class name is present, false otherwise.\n     */\n    function hasClass(target, className)\n    {\n        return target.className.indexOf(className) != -1;\n    };\n\n    /**\n     * Adds CSS class name to the target DOM element.\n     * @param {DOMElement} target Target DOM element.\n     * @param {String} className New CSS class to add.\n     */\n    function addClass(target, className)\n    {\n        if (!hasClass(target, className))\n            target.className += ' ' + className;\n    };\n\n    /**\n     * Removes CSS class name from the target DOM element.\n     * @param {DOMElement} target Target DOM element.\n     * @param {String} className CSS class to remove.\n     */\n    function removeClass(target, className)\n    {\n        target.className = target.className.replace(className, '');\n    };\n\n    /**\n     * Converts the source to array object. Mostly used for function arguments and\n     * lists returned by getElementsByTagName() which aren't Array objects.\n     * @param {List} source Source list.\n     * @return {Array} Returns array.\n     */\n    function toArray(source)\n    {\n        var result = [];\n\n        for (var i = 0; i < source.length; i++)\n            result.push(source[i]);\n\n        return result;\n    };\n\n    /**\n     * Splits block of text into lines.\n     * @param {String} block Block of text.\n     * @return {Array} Returns array of lines.\n     */\n    function splitLines(block)\n    {\n        return block.split(/\\r?\\n/);\n    }\n\n    /**\n     * Generates HTML ID for the highlighter.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {String} Returns HTML ID.\n     */\n    function getHighlighterId(id)\n    {\n        var prefix = 'highlighter_';\n        return id.indexOf(prefix) == 0 ? id : prefix + id;\n    };\n\n    /**\n     * Finds Highlighter instance by ID.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {Highlighter} Returns instance of the highlighter.\n     */\n    function getHighlighterById(id)\n    {\n        return sh.vars.highlighters[getHighlighterId(id)];\n    };\n\n    /**\n     * Finds highlighter's DIV container.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {Element} Returns highlighter's DIV element.\n     */\n    function getHighlighterDivById(id)\n    {\n        return document.getElementById(getHighlighterId(id));\n    };\n\n    /**\n     * Stores highlighter so that getHighlighterById() can do its thing. Each\n     * highlighter must call this method to preserve itself.\n     * @param {Highilghter} highlighter Highlighter instance.\n     */\n    function storeHighlighter(highlighter)\n    {\n        sh.vars.highlighters[getHighlighterId(highlighter.id)] = highlighter;\n    };\n\n    /**\n     * Looks for a child or parent node which has specified classname.\n     * Equivalent to jQuery's $(container).find(\".className\")\n     * @param {Element} target Target element.\n     * @param {String} search Class name or node name to look for.\n     * @param {Boolean} reverse If set to true, will go up the node tree instead of down.\n     * @return {Element} Returns found child or parent element on null.\n     */\n    function findElement(target, search, reverse /* optional */)\n    {\n        if (target == null)\n            return null;\n\n        var nodes\t\t\t= reverse != true ? target.childNodes : [ target.parentNode ],\n            propertyToFind\t= { '#' : 'id', '.' : 'className' }[search.substr(0, 1)] || 'nodeName',\n            expectedValue,\n            found\n            ;\n\n        expectedValue = propertyToFind != 'nodeName'\n            ? search.substr(1)\n            : search.toUpperCase()\n        ;\n\n        // main return of the found node\n        if ((target[propertyToFind] || '').indexOf(expectedValue) != -1)\n            return target;\n\n        for (var i = 0; nodes && i < nodes.length && found == null; i++)\n            found = findElement(nodes[i], search, reverse);\n\n        return found;\n    };\n\n    /**\n     * Looks for a parent node which has specified classname.\n     * This is an alias to <code>findElement(container, className, true)</code>.\n     * @param {Element} target Target element.\n     * @param {String} className Class name to look for.\n     * @return {Element} Returns found parent element on null.\n     */\n    function findParentElement(target, className)\n    {\n        return findElement(target, className, true);\n    };\n\n    /**\n     * Finds an index of element in the array.\n     * @ignore\n     * @param {Object} searchElement\n     * @param {Number} fromIndex\n     * @return {Number} Returns index of element if found; -1 otherwise.\n     */\n    function indexOf(array, searchElement, fromIndex)\n    {\n        fromIndex = Math.max(fromIndex || 0, 0);\n\n        for (var i = fromIndex; i < array.length; i++)\n            if(array[i] == searchElement)\n                return i;\n\n        return -1;\n    };\n\n    /**\n     * Generates a unique element ID.\n     */\n    function guid(prefix)\n    {\n        return (prefix || '') + Math.round(Math.random() * 1000000).toString();\n    };\n\n    /**\n     * Merges two objects. Values from obj2 override values in obj1.\n     * Function is NOT recursive and works only for one dimensional objects.\n     * @param {Object} obj1 First object.\n     * @param {Object} obj2 Second object.\n     * @return {Object} Returns combination of both objects.\n     */\n    function merge(obj1, obj2)\n    {\n        var result = {}, name;\n\n        for (name in obj1)\n            result[name] = obj1[name];\n\n        for (name in obj2)\n            result[name] = obj2[name];\n\n        return result;\n    };\n\n    /**\n     * Attempts to convert string to boolean.\n     * @param {String} value Input string.\n     * @return {Boolean} Returns true if input was \"true\", false if input was \"false\" and value otherwise.\n     */\n    function toBoolean(value)\n    {\n        var result = { \"true\" : true, \"false\" : false }[value];\n        return result == null ? value : result;\n    };\n\n    /**\n     * Opens up a centered popup window.\n     * @param {String} url\t\tURL to open in the window.\n     * @param {String} name\t\tPopup name.\n     * @param {int} width\t\tPopup width.\n     * @param {int} height\t\tPopup height.\n     * @param {String} options\twindow.open() options.\n     * @return {Window}\t\t\tReturns window instance.\n     */\n    function popup(url, name, width, height, options)\n    {\n        var x = (screen.width - width) / 2,\n            y = (screen.height - height) / 2\n            ;\n\n        options +=\t', left=' + x +\n            ', top=' + y +\n            ', width=' + width +\n            ', height=' + height\n        ;\n        options = options.replace(/^,/, '');\n\n        var win = window.open(url, name, options);\n        win.focus();\n        return win;\n    };\n\n    /**\n     * Adds event handler to the target object.\n     * @param {Object} obj\t\tTarget object.\n     * @param {String} type\t\tName of the event.\n     * @param {Function} func\tHandling function.\n     */\n    function attachEvent(obj, type, func, scope)\n    {\n        function handler(e)\n        {\n            e = e || window.event;\n\n            if (!e.target)\n            {\n                e.target = e.srcElement;\n                e.preventDefault = function()\n                {\n                    this.returnValue = false;\n                };\n            }\n\n            func.call(scope || window, e);\n        };\n\n        if (obj.attachEvent)\n        {\n            obj.attachEvent('on' + type, handler);\n        }\n        else\n        {\n            obj.addEventListener(type, handler, false);\n        }\n    };\n\n    /**\n     * Displays an alert.\n     * @param {String} str String to display.\n     */\n    function alert(str)\n    {\n        window.alert(sh.config.strings.alert + str);\n    };\n\n    /**\n     * Finds a brush by its alias.\n     *\n     * @param {String} alias\t\tBrush alias.\n     * @param {Boolean} showAlert\tSuppresses the alert if false.\n     * @return {Brush}\t\t\t\tReturns bursh constructor if found, null otherwise.\n     */\n    function findBrush(alias, showAlert)\n    {\n        var brushes = sh.vars.discoveredBrushes,\n            result = null\n            ;\n\n        if (brushes == null)\n        {\n            brushes = {};\n\n            // Find all brushes\n            for (var brush in sh.brushes)\n            {\n                var info = sh.brushes[brush],\n                    aliases = info.aliases\n                    ;\n\n                if (aliases == null)\n                    continue;\n\n                // keep the brush name\n                info.brushName = brush.toLowerCase();\n\n                for (var i = 0; i < aliases.length; i++)\n                    brushes[aliases[i]] = brush;\n            }\n\n            sh.vars.discoveredBrushes = brushes;\n        }\n\n        result = sh.brushes[brushes[alias]];\n\n        if (result == null && showAlert)\n            alert(sh.config.strings.noBrush + alias);\n\n        return result;\n    };\n\n    /**\n     * Executes a callback on each line and replaces each line with result from the callback.\n     * @param {Object} str\t\t\tInput string.\n     * @param {Object} callback\t\tCallback function taking one string argument and returning a string.\n     */\n    function eachLine(str, callback)\n    {\n        var lines = splitLines(str);\n\n        for (var i = 0; i < lines.length; i++)\n            lines[i] = callback(lines[i], i);\n\n        // include \\r to enable copy-paste on windows (ie8) without getting everything on one line\n        return lines.join('\\r\\n');\n    };\n\n    /**\n     * This is a special trim which only removes first and last empty lines\n     * and doesn't affect valid leading space on the first line.\n     *\n     * @param {String} str   Input string\n     * @return {String}      Returns string without empty first and last lines.\n     */\n    function trimFirstAndLastLines(str)\n    {\n        return str.replace(/^[ ]*[\\n]+|[\\n]*[ ]*$/g, '');\n    };\n\n    /**\n     * Parses key/value pairs into hash object.\n     *\n     * Understands the following formats:\n     * - name: word;\n     * - name: [word, word];\n     * - name: \"string\";\n     * - name: 'string';\n     *\n     * For example:\n     *   name1: value; name2: [value, value]; name3: 'value'\n     *\n     * @param {String} str    Input string.\n     * @return {Object}       Returns deserialized object.\n     */\n    function parseParams(str)\n    {\n        var match,\n            result = {},\n            arrayRegex = new XRegExp(\"^\\\\[(?<values>(.*?))\\\\]$\"),\n            regex = new XRegExp(\n                \"(?<name>[\\\\w-]+)\" +\n                    \"\\\\s*:\\\\s*\" +\n                    \"(?<value>\" +\n                    \"[\\\\w-%#]+|\" +\t\t// word\n                    \"\\\\[.*?\\\\]|\" +\t\t// [] array\n                    '\".*?\"|' +\t\t\t// \"\" string\n                    \"'.*?'\" +\t\t\t// '' string\n                    \")\\\\s*;?\",\n                \"g\"\n            )\n            ;\n\n        while ((match = regex.exec(str)) != null)\n        {\n            var value = match.value\n                    .replace(/^['\"]|['\"]$/g, '') // strip quotes from end of strings\n                ;\n\n            // try to parse array value\n            if (value != null && arrayRegex.test(value))\n            {\n                var m = arrayRegex.exec(value);\n                value = m.values.length > 0 ? m.values.split(/\\s*,\\s*/) : [];\n            }\n\n            result[match.name] = value;\n        }\n\n        return result;\n    };\n\n    /**\n     * Wraps each line of the string into <code/> tag with given style applied to it.\n     *\n     * @param {String} str   Input string.\n     * @param {String} css   Style name to apply to the string.\n     * @return {String}      Returns input string with each line surrounded by <span/> tag.\n     */\n    function wrapLinesWithCode(str, css)\n    {\n        if (str == null || str.length == 0 || str == '\\n')\n            return str;\n\n        str = str.replace(/</g, '&lt;');\n\n        // Replace two or more sequential spaces with &nbsp; leaving last space untouched.\n        str = str.replace(/ {2,}/g, function(m)\n        {\n            var spaces = '';\n\n            for (var i = 0; i < m.length - 1; i++)\n                spaces += sh.config.space;\n\n            return spaces + ' ';\n        });\n\n        // Split each line and apply <span class=\"...\">...</span> to them so that\n        // leading spaces aren't included.\n        if (css != null)\n            str = eachLine(str, function(line)\n            {\n                if (line.length == 0)\n                    return '';\n\n                var spaces = '';\n\n                line = line.replace(/^(&nbsp;| )+/, function(s)\n                {\n                    spaces = s;\n                    return '';\n                });\n\n                if (line.length == 0)\n                    return spaces;\n\n                return spaces + '<code class=\"' + css + '\">' + line + '</code>';\n            });\n\n        return str;\n    };\n\n    /**\n     * Pads number with zeros until it's length is the same as given length.\n     *\n     * @param {Number} number\tNumber to pad.\n     * @param {Number} length\tMax string length with.\n     * @return {String}\t\t\tReturns a string padded with proper amount of '0'.\n     */\n    function padNumber(number, length)\n    {\n        var result = number.toString();\n\n        while (result.length < length)\n            result = '0' + result;\n\n        return result;\n    };\n\n    /**\n     * Replaces tabs with spaces.\n     *\n     * @param {String} code\t\tSource code.\n     * @param {Number} tabSize\tSize of the tab.\n     * @return {String}\t\t\tReturns code with all tabs replaces by spaces.\n     */\n    function processTabs(code, tabSize)\n    {\n        var tab = '';\n\n        for (var i = 0; i < tabSize; i++)\n            tab += ' ';\n\n        return code.replace(/\\t/g, tab);\n    };\n\n    /**\n     * Replaces tabs with smart spaces.\n     *\n     * @param {String} code    Code to fix the tabs in.\n     * @param {Number} tabSize Number of spaces in a column.\n     * @return {String}        Returns code with all tabs replaces with roper amount of spaces.\n     */\n    function processSmartTabs(code, tabSize)\n    {\n        var lines = splitLines(code),\n            tab = '\\t',\n            spaces = ''\n            ;\n\n        // Create a string with 1000 spaces to copy spaces from...\n        // It's assumed that there would be no indentation longer than that.\n        for (var i = 0; i < 50; i++)\n            spaces += '                    '; // 20 spaces * 50\n\n        // This function inserts specified amount of spaces in the string\n        // where a tab is while removing that given tab.\n        function insertSpaces(line, pos, count)\n        {\n            return line.substr(0, pos)\n                + spaces.substr(0, count)\n                + line.substr(pos + 1, line.length) // pos + 1 will get rid of the tab\n                ;\n        };\n\n        // Go through all the lines and do the 'smart tabs' magic.\n        code = eachLine(code, function(line)\n        {\n            if (line.indexOf(tab) == -1)\n                return line;\n\n            var pos = 0;\n\n            while ((pos = line.indexOf(tab)) != -1)\n            {\n                // This is pretty much all there is to the 'smart tabs' logic.\n                // Based on the position within the line and size of a tab,\n                // calculate the amount of spaces we need to insert.\n                var spaces = tabSize - pos % tabSize;\n                line = insertSpaces(line, pos, spaces);\n            }\n\n            return line;\n        });\n\n        return code;\n    };\n\n    /**\n     * Performs various string fixes based on configuration.\n     */\n    function fixInputString(str)\n    {\n        var br = /<br\\s*\\/?>|&lt;br\\s*\\/?&gt;/gi;\n\n        if (sh.config.bloggerMode == true)\n            str = str.replace(br, '\\n');\n\n        if (sh.config.stripBrs == true)\n            str = str.replace(br, '');\n\n        return str;\n    };\n\n    /**\n     * Removes all white space at the begining and end of a string.\n     *\n     * @param {String} str   String to trim.\n     * @return {String}      Returns string without leading and following white space characters.\n     */\n    function trim(str)\n    {\n        return str.replace(/^\\s+|\\s+$/g, '');\n    };\n\n    /**\n     * Unindents a block of text by the lowest common indent amount.\n     * @param {String} str   Text to unindent.\n     * @return {String}      Returns unindented text block.\n     */\n    function unindent(str)\n    {\n        var lines = splitLines(fixInputString(str)),\n            indents = new Array(),\n            regex = /^\\s*/,\n            min = 1000\n            ;\n\n        // go through every line and check for common number of indents\n        for (var i = 0; i < lines.length && min > 0; i++)\n        {\n            var line = lines[i];\n\n            if (trim(line).length == 0)\n                continue;\n\n            var matches = regex.exec(line);\n\n            // In the event that just one line doesn't have leading white space\n            // we can't unindent anything, so bail completely.\n            if (matches == null)\n                return str;\n\n            min = Math.min(matches[0].length, min);\n        }\n\n        // trim minimum common number of white space from the begining of every line\n        if (min > 0)\n            for (var i = 0; i < lines.length; i++)\n                lines[i] = lines[i].substr(min);\n\n        return lines.join('\\n');\n    };\n\n    /**\n     * Callback method for Array.sort() which sorts matches by\n     * index position and then by length.\n     *\n     * @param {Match} m1\tLeft object.\n     * @param {Match} m2    Right object.\n     * @return {Number}     Returns -1, 0 or -1 as a comparison result.\n     */\n    function matchesSortCallback(m1, m2)\n    {\n        // sort matches by index first\n        if(m1.index < m2.index)\n            return -1;\n        else if(m1.index > m2.index)\n            return 1;\n        else\n        {\n            // if index is the same, sort by length\n            if(m1.length < m2.length)\n                return -1;\n            else if(m1.length > m2.length)\n                return 1;\n        }\n\n        return 0;\n    };\n\n    /**\n     * Executes given regular expression on provided code and returns all\n     * matches that are found.\n     *\n     * @param {String} code    Code to execute regular expression on.\n     * @param {Object} regex   Regular expression item info from <code>regexList</code> collection.\n     * @return {Array}         Returns a list of Match objects.\n     */\n    function getMatches(code, regexInfo)\n    {\n        function defaultAdd(match, regexInfo)\n        {\n            return match[0];\n        };\n\n        var index = 0,\n            match = null,\n            matches = [],\n            func = regexInfo.func ? regexInfo.func : defaultAdd\n            ;\n\n        while((match = regexInfo.regex.exec(code)) != null)\n        {\n            var resultMatch = func(match, regexInfo);\n\n            if (typeof(resultMatch) == 'string')\n                resultMatch = [new sh.Match(resultMatch, match.index, regexInfo.css)];\n\n            matches = matches.concat(resultMatch);\n        }\n\n        return matches;\n    };\n\n    /**\n     * Turns all URLs in the code into <a/> tags.\n     * @param {String} code Input code.\n     * @return {String} Returns code with </a> tags.\n     */\n    function processUrls(code)\n    {\n        var gt = /(.*)((&gt;|&lt;).*)/;\n\n        return code.replace(sh.regexLib.url, function(m)\n        {\n            var suffix = '',\n                match = null\n                ;\n\n            // We include &lt; and &gt; in the URL for the common cases like <http://google.com>\n            // The problem is that they get transformed into &lt;http://google.com&gt;\n            // Where as &gt; easily looks like part of the URL string.\n\n            if (match = gt.exec(m))\n            {\n                m = match[1];\n                suffix = match[2];\n            }\n\n            return '<a href=\"' + m + '\">' + m + '</a>' + suffix;\n        });\n    };\n\n    /**\n     * Finds all <SCRIPT TYPE=\"syntaxhighlighter\" /> elementss.\n     * @return {Array} Returns array of all found SyntaxHighlighter tags.\n     */\n    function getSyntaxHighlighterScriptTags()\n    {\n        var tags = document.getElementsByTagName('script'),\n            result = []\n            ;\n\n        for (var i = 0; i < tags.length; i++)\n            if (tags[i].type == 'syntaxhighlighter')\n                result.push(tags[i]);\n\n        return result;\n    };\n\n    /**\n     * Strips <![CDATA[]]> from <SCRIPT /> content because it should be used\n     * there in most cases for XHTML compliance.\n     * @param {String} original\tInput code.\n     * @return {String} Returns code without leading <![CDATA[]]> tags.\n     */\n    function stripCData(original)\n    {\n        var left = '<![CDATA[',\n            right = ']]>',\n        // for some reason IE inserts some leading blanks here\n            copy = trim(original),\n            changed = false,\n            leftLength = left.length,\n            rightLength = right.length\n            ;\n\n        if (copy.indexOf(left) == 0)\n        {\n            copy = copy.substring(leftLength);\n            changed = true;\n        }\n\n        var copyLength = copy.length;\n\n        if (copy.indexOf(right) == copyLength - rightLength)\n        {\n            copy = copy.substring(0, copyLength - rightLength);\n            changed = true;\n        }\n\n        return changed ? copy : original;\n    };\n\n\n    /**\n     * Quick code mouse double click handler.\n     */\n    function quickCodeHandler(e)\n    {\n        var target = e.target,\n            highlighterDiv = findParentElement(target, '.syntaxhighlighter'),\n            container = findParentElement(target, '.container'),\n            textarea = document.createElement('textarea'),\n            highlighter\n            ;\n\n        if (!container || !highlighterDiv || findElement(container, 'textarea'))\n            return;\n\n        highlighter = getHighlighterById(highlighterDiv.id);\n\n        // add source class name\n        addClass(highlighterDiv, 'source');\n\n        // Have to go over each line and grab it's text, can't just do it on the\n        // container because Firefox loses all \\n where as Webkit doesn't.\n        var lines = container.childNodes,\n            code = []\n            ;\n\n        for (var i = 0; i < lines.length; i++)\n            code.push(lines[i].innerText || lines[i].textContent);\n\n        // using \\r instead of \\r or \\r\\n makes this work equally well on IE, FF and Webkit\n        code = code.join('\\r');\n\n        // For Webkit browsers, replace nbsp with a breaking space\n        code = code.replace(/\\u00a0/g, \" \");\n\n        // inject <textarea/> tag\n        textarea.appendChild(document.createTextNode(code));\n        container.appendChild(textarea);\n\n        // preselect all text\n        textarea.focus();\n        textarea.select();\n\n        // set up handler for lost focus\n        attachEvent(textarea, 'blur', function(e)\n        {\n            textarea.parentNode.removeChild(textarea);\n            removeClass(highlighterDiv, 'source');\n        });\n    };\n\n    /**\n     * Match object.\n     */\n    sh.Match = function(value, index, css)\n    {\n        this.value = value;\n        this.index = index;\n        this.length = value.length;\n        this.css = css;\n        this.brushName = null;\n    };\n\n    sh.Match.prototype.toString = function()\n    {\n        return this.value;\n    };\n\n    /**\n     * Simulates HTML code with a scripting language embedded.\n     *\n     * @param {String} scriptBrushName Brush name of the scripting language.\n     */\n    sh.HtmlScript = function(scriptBrushName)\n    {\n        var brushClass = findBrush(scriptBrushName),\n            scriptBrush,\n            xmlBrush = new sh.brushes.Xml(),\n            bracketsRegex = null,\n            ref = this,\n            methodsToExpose = 'getDiv getHtml init'.split(' ')\n            ;\n\n        if (brushClass == null)\n            return;\n\n        scriptBrush = new brushClass();\n\n        for(var i = 0; i < methodsToExpose.length; i++)\n            // make a closure so we don't lose the name after i changes\n            (function() {\n                var name = methodsToExpose[i];\n\n                ref[name] = function()\n                {\n                    return xmlBrush[name].apply(xmlBrush, arguments);\n                };\n            })();\n\n        if (scriptBrush.htmlScript == null)\n        {\n            alert(sh.config.strings.brushNotHtmlScript + scriptBrushName);\n            return;\n        }\n\n        xmlBrush.regexList.push(\n            { regex: scriptBrush.htmlScript.code, func: process }\n        );\n\n        function offsetMatches(matches, offset)\n        {\n            for (var j = 0; j < matches.length; j++)\n                matches[j].index += offset;\n        }\n\n        function process(match, info)\n        {\n            var code = match.code,\n                matches = [],\n                regexList = scriptBrush.regexList,\n                offset = match.index + match.left.length,\n                htmlScript = scriptBrush.htmlScript,\n                result\n                ;\n\n            // add all matches from the code\n            for (var i = 0; i < regexList.length; i++)\n            {\n                result = getMatches(code, regexList[i]);\n                offsetMatches(result, offset);\n                matches = matches.concat(result);\n            }\n\n            // add left script bracket\n            if (htmlScript.left != null && match.left != null)\n            {\n                result = getMatches(match.left, htmlScript.left);\n                offsetMatches(result, match.index);\n                matches = matches.concat(result);\n            }\n\n            // add right script bracket\n            if (htmlScript.right != null && match.right != null)\n            {\n                result = getMatches(match.right, htmlScript.right);\n                offsetMatches(result, match.index + match[0].lastIndexOf(match.right));\n                matches = matches.concat(result);\n            }\n\n            for (var j = 0; j < matches.length; j++)\n                matches[j].brushName = brushClass.brushName;\n\n            return matches;\n        }\n    };\n\n    /**\n     * Main Highlither class.\n     * @constructor\n     */\n    sh.Highlighter = function()\n    {\n        // not putting any code in here because of the prototype inheritance\n    };\n\n    sh.Highlighter.prototype = {\n        /**\n         * Returns value of the parameter passed to the highlighter.\n         * @param {String} name\t\t\t\tName of the parameter.\n         * @param {Object} defaultValue\t\tDefault value.\n         * @return {Object}\t\t\t\t\tReturns found value or default value otherwise.\n         */\n        getParam: function(name, defaultValue)\n        {\n            var result = this.params[name];\n            return toBoolean(result == null ? defaultValue : result);\n        },\n\n        /**\n         * Shortcut to document.createElement().\n         * @param {String} name\t\tName of the element to create (DIV, A, etc).\n         * @return {HTMLElement}\tReturns new HTML element.\n         */\n        create: function(name)\n        {\n            return document.createElement(name);\n        },\n\n        /**\n         * Applies all regular expression to the code and stores all found\n         * matches in the `this.matches` array.\n         * @param {Array} regexList\t\tList of regular expressions.\n         * @param {String} code\t\t\tSource code.\n         * @return {Array}\t\t\t\tReturns list of matches.\n         */\n        findMatches: function(regexList, code)\n        {\n            var result = [];\n\n            if (regexList != null)\n                for (var i = 0; i < regexList.length; i++)\n                    // BUG: length returns len+1 for array if methods added to prototype chain (oising@gmail.com)\n                    if (typeof (regexList[i]) == \"object\")\n                        result = result.concat(getMatches(code, regexList[i]));\n\n            // sort and remove nested the matches\n            return this.removeNestedMatches(result.sort(matchesSortCallback));\n        },\n\n        /**\n         * Checks to see if any of the matches are inside of other matches.\n         * This process would get rid of highligted strings inside comments,\n         * keywords inside strings and so on.\n         */\n        removeNestedMatches: function(matches)\n        {\n            // Optimized by Jose Prado (http://joseprado.com)\n            for (var i = 0; i < matches.length; i++)\n            {\n                if (matches[i] === null)\n                    continue;\n\n                var itemI = matches[i],\n                    itemIEndPos = itemI.index + itemI.length\n                    ;\n\n                for (var j = i + 1; j < matches.length && matches[i] !== null; j++)\n                {\n                    var itemJ = matches[j];\n\n                    if (itemJ === null)\n                        continue;\n                    else if (itemJ.index > itemIEndPos)\n                        break;\n                    else if (itemJ.index == itemI.index && itemJ.length > itemI.length)\n                        matches[i] = null;\n                    else if (itemJ.index >= itemI.index && itemJ.index < itemIEndPos)\n                        matches[j] = null;\n                }\n            }\n\n            return matches;\n        },\n\n        /**\n         * Creates an array containing integer line numbers starting from the 'first-line' param.\n         * @return {Array} Returns array of integers.\n         */\n        figureOutLineNumbers: function(code)\n        {\n            var lines = [],\n                firstLine = parseInt(this.getParam('first-line'))\n                ;\n\n            eachLine(code, function(line, index)\n            {\n                lines.push(index + firstLine);\n            });\n\n            return lines;\n        },\n\n        /**\n         * Determines if specified line number is in the highlighted list.\n         */\n        isLineHighlighted: function(lineNumber)\n        {\n            var list = this.getParam('highlight', []);\n\n            if (typeof(list) != 'object' && list.push == null)\n                list = [ list ];\n\n            return indexOf(list, lineNumber.toString()) != -1;\n        },\n\n        /**\n         * Generates HTML markup for a single line of code while determining alternating line style.\n         * @param {Integer} lineNumber\tLine number.\n         * @param {String} code Line\tHTML markup.\n         * @return {String}\t\t\t\tReturns HTML markup.\n         */\n        getLineHtml: function(lineIndex, lineNumber, code)\n        {\n            var classes = [\n                'line',\n                'number' + lineNumber,\n                'index' + lineIndex,\n                'alt' + (lineNumber % 2 == 0 ? 1 : 2).toString()\n            ];\n\n            if (this.isLineHighlighted(lineNumber))\n                classes.push('highlighted');\n\n            if (lineNumber == 0)\n                classes.push('break');\n\n            return '<div class=\"' + classes.join(' ') + '\">' + code + '</div>';\n        },\n\n        /**\n         * Generates HTML markup for line number column.\n         * @param {String} code\t\t\tComplete code HTML markup.\n         * @param {Array} lineNumbers\tCalculated line numbers.\n         * @return {String}\t\t\t\tReturns HTML markup.\n         */\n        getLineNumbersHtml: function(code, lineNumbers)\n        {\n            var html = '',\n                count = splitLines(code).length,\n                firstLine = parseInt(this.getParam('first-line')),\n                pad = this.getParam('pad-line-numbers')\n                ;\n\n            if (pad == true)\n                pad = (firstLine + count - 1).toString().length;\n            else if (isNaN(pad) == true)\n                pad = 0;\n\n            for (var i = 0; i < count; i++)\n            {\n                var lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i,\n                    code = lineNumber == 0 ? sh.config.space : padNumber(lineNumber, pad)\n                    ;\n\n                html += this.getLineHtml(i, lineNumber, code);\n            }\n\n            return html;\n        },\n\n        /**\n         * Splits block of text into individual DIV lines.\n         * @param {String} code\t\t\tCode to highlight.\n         * @param {Array} lineNumbers\tCalculated line numbers.\n         * @return {String}\t\t\t\tReturns highlighted code in HTML form.\n         */\n        getCodeLinesHtml: function(html, lineNumbers)\n        {\n            html = trim(html);\n\n            var lines = splitLines(html),\n                padLength = this.getParam('pad-line-numbers'),\n                firstLine = parseInt(this.getParam('first-line')),\n                html = '',\n                brushName = this.getParam('brush')\n                ;\n\n            for (var i = 0; i < lines.length; i++)\n            {\n                var line = lines[i],\n                    indent = /^(&nbsp;|\\s)+/.exec(line),\n                    spaces = null,\n                    lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i;\n                ;\n\n                if (indent != null)\n                {\n                    spaces = indent[0].toString();\n                    line = line.substr(spaces.length);\n                    spaces = spaces.replace(' ', sh.config.space);\n                }\n\n                line = trim(line);\n\n                if (line.length == 0)\n                    line = sh.config.space;\n\n                html += this.getLineHtml(\n                    i,\n                    lineNumber,\n                    (spaces != null ? '<code class=\"' + brushName + ' spaces\">' + spaces + '</code>' : '') + line\n                );\n            }\n\n            return html;\n        },\n\n        /**\n         * Returns HTML for the table title or empty string if title is null.\n         */\n        getTitleHtml: function(title)\n        {\n            return title ? '<caption>' + title + '</caption>' : '';\n        },\n\n        /**\n         * Finds all matches in the source code.\n         * @param {String} code\t\tSource code to process matches in.\n         * @param {Array} matches\tDiscovered regex matches.\n         * @return {String} Returns formatted HTML with processed mathes.\n         */\n        getMatchesHtml: function(code, matches)\n        {\n            var pos = 0,\n                result = '',\n                brushName = this.getParam('brush', '')\n                ;\n\n            function getBrushNameCss(match)\n            {\n                var result = match ? (match.brushName || brushName) : brushName;\n                return result ? result + ' ' : '';\n            };\n\n            // Finally, go through the final list of matches and pull the all\n            // together adding everything in between that isn't a match.\n            for (var i = 0; i < matches.length; i++)\n            {\n                var match = matches[i],\n                    matchBrushName\n                    ;\n\n                if (match === null || match.length === 0)\n                    continue;\n\n                matchBrushName = getBrushNameCss(match);\n\n                result += wrapLinesWithCode(code.substr(pos, match.index - pos), matchBrushName + 'plain')\n                    + wrapLinesWithCode(match.value, matchBrushName + match.css)\n                ;\n\n                pos = match.index + match.length + (match.offset || 0);\n            }\n\n            // don't forget to add whatever's remaining in the string\n            result += wrapLinesWithCode(code.substr(pos), getBrushNameCss() + 'plain');\n\n            return result;\n        },\n\n        /**\n         * Generates HTML markup for the whole syntax highlighter.\n         * @param {String} code Source code.\n         * @return {String} Returns HTML markup.\n         */\n        getHtml: function(code)\n        {\n            var html = '',\n                classes = [ 'syntaxhighlighter' ],\n                tabSize,\n                matches,\n                lineNumbers\n                ;\n\n            // process light mode\n            if (this.getParam('light') == true)\n                this.params.toolbar = this.params.gutter = false;\n\n            className = 'syntaxhighlighter';\n\n            if (this.getParam('collapse') == true)\n                classes.push('collapsed');\n\n            if ((gutter = this.getParam('gutter')) == false)\n                classes.push('nogutter');\n\n            // add custom user style name\n            classes.push(this.getParam('class-name'));\n\n            // add brush alias to the class name for custom CSS\n            classes.push(this.getParam('brush'));\n\n            code = trimFirstAndLastLines(code)\n                .replace(/\\r/g, ' ') // IE lets these buggers through\n            ;\n\n            tabSize = this.getParam('tab-size');\n\n            // replace tabs with spaces\n            code = this.getParam('smart-tabs') == true\n                ? processSmartTabs(code, tabSize)\n                : processTabs(code, tabSize)\n            ;\n\n            // unindent code by the common indentation\n            if (this.getParam('unindent'))\n                code = unindent(code);\n\n            if (gutter)\n                lineNumbers = this.figureOutLineNumbers(code);\n\n            // find matches in the code using brushes regex list\n            matches = this.findMatches(this.regexList, code);\n            // processes found matches into the html\n            html = this.getMatchesHtml(code, matches);\n            // finally, split all lines so that they wrap well\n            html = this.getCodeLinesHtml(html, lineNumbers);\n\n            // finally, process the links\n            if (this.getParam('auto-links'))\n                html = processUrls(html);\n\n            if (typeof(navigator) != 'undefined' && navigator.userAgent && navigator.userAgent.match(/MSIE/))\n                classes.push('ie');\n\n            html =\n                '<div id=\"' + getHighlighterId(this.id) + '\" class=\"' + classes.join(' ') + '\">'\n                    + (this.getParam('toolbar') ? sh.toolbar.getHtml(this) : '')\n                    + '<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">'\n                    + this.getTitleHtml(this.getParam('title'))\n                    + '<tbody>'\n                    + '<tr>'\n                    + (gutter ? '<td class=\"gutter\">' + this.getLineNumbersHtml(code) + '</td>' : '')\n                    + '<td class=\"code\">'\n                    + '<div class=\"container\">'\n                    + html\n                    + '</div>'\n                    + '</td>'\n                    + '</tr>'\n                    + '</tbody>'\n                    + '</table>'\n                    + '</div>'\n            ;\n\n            return html;\n        },\n\n        /**\n         * Highlights the code and returns complete HTML.\n         * @param {String} code     Code to highlight.\n         * @return {Element}        Returns container DIV element with all markup.\n         */\n        getDiv: function(code)\n        {\n            if (code === null)\n                code = '';\n\n            this.code = code;\n\n            var div = this.create('div');\n\n            // create main HTML\n            div.innerHTML = this.getHtml(code);\n\n            // set up click handlers\n            if (this.getParam('toolbar'))\n                attachEvent(findElement(div, '.toolbar'), 'click', sh.toolbar.handler);\n\n            if (this.getParam('quick-code'))\n                attachEvent(findElement(div, '.code'), 'dblclick', quickCodeHandler);\n\n            return div;\n        },\n\n        /**\n         * Initializes the highlighter/brush.\n         *\n         * Constructor isn't used for initialization so that nothing executes during necessary\n         * `new SyntaxHighlighter.Highlighter()` call when setting up brush inheritence.\n         *\n         * @param {Hash} params Highlighter parameters.\n         */\n        init: function(params)\n        {\n            this.id = guid();\n\n            // register this instance in the highlighters list\n            storeHighlighter(this);\n\n            // local params take precedence over defaults\n            this.params = merge(sh.defaults, params || {})\n\n            // process light mode\n            if (this.getParam('light') == true)\n                this.params.toolbar = this.params.gutter = false;\n        },\n\n        /**\n         * Converts space separated list of keywords into a regular expression string.\n         * @param {String} str    Space separated keywords.\n         * @return {String}       Returns regular expression string.\n         */\n        getKeywords: function(str)\n        {\n            str = str\n                .replace(/^\\s+|\\s+$/g, '')\n                .replace(/\\s+/g, '|')\n            ;\n\n            return '\\\\b(?:' + str + ')\\\\b';\n        },\n\n        /**\n         * Makes a brush compatible with the `html-script` functionality.\n         * @param {Object} regexGroup Object containing `left` and `right` regular expressions.\n         */\n        forHtmlScript: function(regexGroup)\n        {\n            var regex = { 'end' : regexGroup.right.source };\n\n            if(regexGroup.eof)\n                regex.end = \"(?:(?:\" + regex.end + \")|$)\";\n\n            this.htmlScript = {\n                left : { regex: regexGroup.left, css: 'script' },\n                right : { regex: regexGroup.right, css: 'script' },\n                code : new XRegExp(\n                    \"(?<left>\" + regexGroup.left.source + \")\" +\n                        \"(?<code>.*?)\" +\n                        \"(?<right>\" + regex.end + \")\",\n                    \"sgi\"\n                )\n            };\n        }\n    }; // end of Highlighter\n\n    return sh;\n}(); // end of anonymous function\n\n// CommonJS\ntypeof(exports) != 'undefined' ? exports.SyntaxHighlighter = SyntaxHighlighter : null;\n\n;(function()\n{\n    // CommonJS\n    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n    function Brush()\n    {\n        // Created by Peter Atoria @ http://iAtoria.com\n\n        var inits \t =  'class interface function package';\n\n        var keywords =\t'-Infinity ...rest Array as AS3 Boolean break case catch const continue Date decodeURI ' +\n                'decodeURIComponent default delete do dynamic each else encodeURI encodeURIComponent escape ' +\n                'extends false final finally flash_proxy for get if implements import in include Infinity ' +\n                'instanceof int internal is isFinite isNaN isXMLName label namespace NaN native new null ' +\n                'Null Number Object object_proxy override parseFloat parseInt private protected public ' +\n                'return set static String super switch this throw true try typeof uint undefined unescape ' +\n                'use void while with'\n            ;\n\n        this.regexList = [\n            { regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t// one line comments\n            { regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t// multiline comments\n            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// double quoted strings\n            { regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// single quoted strings\n            { regex: /\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,\t\t\t\tcss: 'value' },\t\t\t// numbers\n            { regex: new RegExp(this.getKeywords(inits), 'gm'),\t\t\tcss: 'color3' },\t\t// initializations\n            { regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n            { regex: new RegExp('var', 'gm'),\t\t\t\t\t\t\tcss: 'variable' },\t\t// variable\n            { regex: new RegExp('trace', 'gm'),\t\t\t\t\t\t\tcss: 'color1' }\t\t\t// trace\n        ];\n\n        this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags);\n    };\n\n    Brush.prototype\t= new SyntaxHighlighter.Highlighter();\n    Brush.aliases\t= ['actionscript3', 'as3'];\n\n    SyntaxHighlighter.brushes.AS3 = Brush;\n\n    // CommonJS\n    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n\n;(function()\n{\n    // CommonJS\n    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n    function Brush()\n    {\n        // AppleScript brush by David Chambers\n        // http://davidchambersdesign.com/\n        var keywords   = 'after before beginning continue copy each end every from return get global in local named of set some that the then times to where whose with without';\n        var ordinals   = 'first second third fourth fifth sixth seventh eighth ninth tenth last front back middle';\n        var specials   = 'activate add alias AppleScript ask attachment boolean class constant delete duplicate empty exists false id integer list make message modal modified new no paragraph pi properties quit real record remove rest result reveal reverse run running save string true word yes';\n\n        this.regexList = [\n\n            { regex: /(--|#).*$/gm,\n                css: 'comments' },\n\n            { regex: /\\(\\*(?:[\\s\\S]*?\\(\\*[\\s\\S]*?\\*\\))*[\\s\\S]*?\\*\\)/gm, // support nested comments\n                css: 'comments' },\n\n            { regex: /\"[\\s\\S]*?\"/gm,\n                css: 'string' },\n\n            { regex: /(?:,|:|¬|'s\\b|\\(|\\)|\\{|\\}|«|\\b\\w*»)/g,\n                css: 'color1' },\n\n            { regex: /(-)?(\\d)+(\\.(\\d)?)?(E\\+(\\d)+)?/g, // numbers\n                css: 'color1' },\n\n            { regex: /(?:&(amp;|gt;|lt;)?|=|� |>|<|≥|>=|≤|<=|\\*|\\+|-|\\/|÷|\\^)/g,\n                css: 'color2' },\n\n            { regex: /\\b(?:and|as|div|mod|not|or|return(?!\\s&)(ing)?|equals|(is(n't| not)? )?equal( to)?|does(n't| not) equal|(is(n't| not)? )?(greater|less) than( or equal( to)?)?|(comes|does(n't| not) come) (after|before)|is(n't| not)?( in)? (back|front) of|is(n't| not)? behind|is(n't| not)?( (in|contained by))?|does(n't| not) contain|contain(s)?|(start|begin|end)(s)? with|((but|end) )?(consider|ignor)ing|prop(erty)?|(a )?ref(erence)?( to)?|repeat (until|while|with)|((end|exit) )?repeat|((else|end) )?if|else|(end )?(script|tell|try)|(on )?error|(put )?into|(of )?(it|me)|its|my|with (timeout( of)?|transaction)|end (timeout|transaction))\\b/g,\n                css: 'keyword' },\n\n            { regex: /\\b\\d+(st|nd|rd|th)\\b/g, // ordinals\n                css: 'keyword' },\n\n            { regex: /\\b(?:about|above|against|around|at|below|beneath|beside|between|by|(apart|aside) from|(instead|out) of|into|on(to)?|over|since|thr(ough|u)|under)\\b/g,\n                css: 'color3' },\n\n            { regex: /\\b(?:adding folder items to|after receiving|choose( ((remote )?application|color|folder|from list|URL))?|clipboard info|set the clipboard to|(the )?clipboard|entire contents|display(ing| (alert|dialog|mode))?|document( (edited|file|nib name))?|file( (name|type))?|(info )?for|giving up after|(name )?extension|quoted form|return(ed)?|second(?! item)(s)?|list (disks|folder)|text item(s| delimiters)?|(Unicode )?text|(disk )?item(s)?|((current|list) )?view|((container|key) )?window|with (data|icon( (caution|note|stop))?|parameter(s)?|prompt|properties|seed|title)|case|diacriticals|hyphens|numeric strings|punctuation|white space|folder creation|application(s( folder)?| (processes|scripts position|support))?|((desktop )?(pictures )?|(documents|downloads|favorites|home|keychain|library|movies|music|public|scripts|sites|system|users|utilities|workflows) )folder|desktop|Folder Action scripts|font(s| panel)?|help|internet plugins|modem scripts|(system )?preferences|printer descriptions|scripting (additions|components)|shared (documents|libraries)|startup (disk|items)|temporary items|trash|on server|in AppleTalk zone|((as|long|short) )?user name|user (ID|locale)|(with )?password|in (bundle( with identifier)?|directory)|(close|open for) access|read|write( permission)?|(g|s)et eof|using( delimiters)?|starting at|default (answer|button|color|country code|entr(y|ies)|identifiers|items|name|location|script editor)|hidden( answer)?|open(ed| (location|untitled))?|error (handling|reporting)|(do( shell)?|load|run|store) script|administrator privileges|altering line endings|get volume settings|(alert|boot|input|mount|output|set) volume|output muted|(fax|random )?number|round(ing)?|up|down|toward zero|to nearest|as taught in school|system (attribute|info)|((AppleScript( Studio)?|system) )?version|(home )?directory|(IPv4|primary Ethernet) address|CPU (type|speed)|physical memory|time (stamp|to GMT)|replacing|ASCII (character|number)|localized string|from table|offset|summarize|beep|delay|say|(empty|multiple) selections allowed|(of|preferred) type|invisibles|showing( package contents)?|editable URL|(File|FTP|News|Media|Web) [Ss]ervers|Telnet hosts|Directory services|Remote applications|waiting until completion|saving( (in|to))?|path (for|to( (((current|frontmost) )?application|resource))?)|POSIX (file|path)|(background|RGB) color|(OK|cancel) button name|cancel button|button(s)?|cubic ((centi)?met(re|er)s|yards|feet|inches)|square ((kilo)?met(re|er)s|miles|yards|feet)|(centi|kilo)?met(re|er)s|miles|yards|feet|inches|lit(re|er)s|gallons|quarts|(kilo)?grams|ounces|pounds|degrees (Celsius|Fahrenheit|Kelvin)|print( (dialog|settings))?|clos(e(able)?|ing)|(de)?miniaturized|miniaturizable|zoom(ed|able)|attribute run|action (method|property|title)|phone|email|((start|end)ing|home) page|((birth|creation|current|custom|modification) )?date|((((phonetic )?(first|last|middle))|computer|host|maiden|related) |nick)?name|aim|icq|jabber|msn|yahoo|address(es)?|save addressbook|should enable action|city|country( code)?|formatte(r|d address)|(palette )?label|state|street|zip|AIM [Hh]andle(s)?|my card|select(ion| all)?|unsaved|(alpha )?value|entr(y|ies)|group|(ICQ|Jabber|MSN) handle|person|people|company|department|icon image|job title|note|organization|suffix|vcard|url|copies|collating|pages (across|down)|request print time|target( printer)?|((GUI Scripting|Script menu) )?enabled|show Computer scripts|(de)?activated|awake from nib|became (key|main)|call method|of (class|object)|center|clicked toolbar item|closed|for document|exposed|(can )?hide|idle|keyboard (down|up)|event( (number|type))?|launch(ed)?|load (image|movie|nib|sound)|owner|log|mouse (down|dragged|entered|exited|moved|up)|move|column|localization|resource|script|register|drag (info|types)|resigned (active|key|main)|resiz(e(d)?|able)|right mouse (down|dragged|up)|scroll wheel|(at )?index|should (close|open( untitled)?|quit( after last window closed)?|zoom)|((proposed|screen) )?bounds|show(n)?|behind|in front of|size (mode|to fit)|update(d| toolbar item)?|was (hidden|miniaturized)|will (become active|close|finish launching|hide|miniaturize|move|open|quit|(resign )?active|((maximum|minimum|proposed) )?size|show|zoom)|bundle|data source|movie|pasteboard|sound|tool(bar| tip)|(color|open|save) panel|coordinate system|frontmost|main( (bundle|menu|window))?|((services|(excluded from )?windows) )?menu|((executable|frameworks|resource|scripts|shared (frameworks|support)) )?path|(selected item )?identifier|data|content(s| view)?|character(s)?|click count|(command|control|option|shift) key down|context|delta (x|y|z)|key( code)?|location|pressure|unmodified characters|types|(first )?responder|playing|(allowed|selectable) identifiers|allows customization|(auto saves )?configuration|visible|image( name)?|menu form representation|tag|user(-| )defaults|associated file name|(auto|needs) display|current field editor|floating|has (resize indicator|shadow)|hides when deactivated|level|minimized (image|title)|opaque|position|release when closed|sheet|title(d)?)\\b/g,\n                css: 'color3' },\n\n            { regex: new RegExp(this.getKeywords(specials), 'gm'), css: 'color3' },\n            { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' },\n            { regex: new RegExp(this.getKeywords(ordinals), 'gm'), css: 'keyword' }\n        ];\n    };\n\n    Brush.prototype = new SyntaxHighlighter.Highlighter();\n    Brush.aliases = ['applescript'];\n\n    SyntaxHighlighter.brushes.AppleScript = Brush;\n\n    // CommonJS\n    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'if fi then elif else for do done until while break continue case esac function return in eq ne ge le';\n\t\tvar commands =  'alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chroot' +\n\t\t\t\t\t\t'cksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df ' +\n\t\t\t\t\t\t'diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval ' +\n\t\t\t\t\t\t'exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format ' +\n\t\t\t\t\t\t'free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig ' +\n\t\t\t\t\t\t'import install join kill less let ln local locate logname logout look lpc lpr lprint ' +\n\t\t\t\t\t\t'lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools ' +\n\t\t\t\t\t\t'mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap ' +\n\t\t\t\t\t\t'printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice ' +\n\t\t\t\t\t\t'remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown ' +\n\t\t\t\t\t\t'sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time ' +\n\t\t\t\t\t\t'times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias ' +\n\t\t\t\t\t\t'uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir ' +\n\t\t\t\t\t\t'vi watch wc whereis which who whoami Wget xargs yes'\n\t\t\t\t\t\t;\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /^#!.*$/gm,\t\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor bold' },\n\t\t\t{ regex: /\\/[\\w-\\/]+/gm,\t\t\t\t\t\t\t\t\t\tcss: 'plain' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\t\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(this.getKeywords(commands), 'gm'),\t\t\tcss: 'functions' }\t\t// commands\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['bash', 'shell', 'sh'];\n\n\tSyntaxHighlighter.brushes.Bash = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Jen\n\t\t// http://www.jensbits.com/2009/05/14/coldfusion-brush-for-syntaxhighlighter-plus\n\t\n\t\tvar funcs\t=\t'Abs ACos AddSOAPRequestHeader AddSOAPResponseHeader AjaxLink AjaxOnLoad ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt ' + \n\t\t\t\t\t\t'ArrayInsertAt ArrayIsDefined ArrayIsEmpty ArrayLen ArrayMax ArrayMin ArraySet ArraySort ArraySum ArraySwap ArrayToList ' + \n\t\t\t\t\t\t'Asc ASin Atn BinaryDecode BinaryEncode BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot BitOr BitSHLN BitSHRN BitXor ' + \n\t\t\t\t\t\t'Ceiling CharsetDecode CharsetEncode Chr CJustify Compare CompareNoCase Cos CreateDate CreateDateTime CreateObject ' + \n\t\t\t\t\t\t'CreateODBCDate CreateODBCDateTime CreateODBCTime CreateTime CreateTimeSpan CreateUUID DateAdd DateCompare DateConvert ' + \n\t\t\t\t\t\t'DateDiff DateFormat DatePart Day DayOfWeek DayOfWeekAsString DayOfYear DaysInMonth DaysInYear DE DecimalFormat DecrementValue ' + \n\t\t\t\t\t\t'Decrypt DecryptBinary DeleteClientVariable DeserializeJSON DirectoryExists DollarFormat DotNetToCFType Duplicate Encrypt ' + \n\t\t\t\t\t\t'EncryptBinary Evaluate Exp ExpandPath FileClose FileCopy FileDelete FileExists FileIsEOF FileMove FileOpen FileRead ' + \n\t\t\t\t\t\t'FileReadBinary FileReadLine FileSetAccessMode FileSetAttribute FileSetLastModified FileWrite Find FindNoCase FindOneOf ' + \n\t\t\t\t\t\t'FirstDayOfMonth Fix FormatBaseN GenerateSecretKey GetAuthUser GetBaseTagData GetBaseTagList GetBaseTemplatePath ' + \n\t\t\t\t\t\t'GetClientVariablesList GetComponentMetaData GetContextRoot GetCurrentTemplatePath GetDirectoryFromPath GetEncoding ' + \n\t\t\t\t\t\t'GetException GetFileFromPath GetFileInfo GetFunctionList GetGatewayHelper GetHttpRequestData GetHttpTimeString ' + \n\t\t\t\t\t\t'GetK2ServerDocCount GetK2ServerDocCountLimit GetLocale GetLocaleDisplayName GetLocalHostIP GetMetaData GetMetricData ' + \n\t\t\t\t\t\t'GetPageContext GetPrinterInfo GetProfileSections GetProfileString GetReadableImageFormats GetSOAPRequest GetSOAPRequestHeader ' + \n\t\t\t\t\t\t'GetSOAPResponse GetSOAPResponseHeader GetTempDirectory GetTempFile GetTemplatePath GetTickCount GetTimeZoneInfo GetToken ' + \n\t\t\t\t\t\t'GetUserRoles GetWriteableImageFormats Hash Hour HTMLCodeFormat HTMLEditFormat IIf ImageAddBorder ImageBlur ImageClearRect ' + \n\t\t\t\t\t\t'ImageCopy ImageCrop ImageDrawArc ImageDrawBeveledRect ImageDrawCubicCurve ImageDrawLine ImageDrawLines ImageDrawOval ' + \n\t\t\t\t\t\t'ImageDrawPoint ImageDrawQuadraticCurve ImageDrawRect ImageDrawRoundRect ImageDrawText ImageFlip ImageGetBlob ImageGetBufferedImage ' + \n\t\t\t\t\t\t'ImageGetEXIFTag ImageGetHeight ImageGetIPTCTag ImageGetWidth ImageGrayscale ImageInfo ImageNegative ImageNew ImageOverlay ImagePaste ' + \n\t\t\t\t\t\t'ImageRead ImageReadBase64 ImageResize ImageRotate ImageRotateDrawingAxis ImageScaleToFit ImageSetAntialiasing ImageSetBackgroundColor ' + \n\t\t\t\t\t\t'ImageSetDrawingColor ImageSetDrawingStroke ImageSetDrawingTransparency ImageSharpen ImageShear ImageShearDrawingAxis ImageTranslate ' + \n\t\t\t\t\t\t'ImageTranslateDrawingAxis ImageWrite ImageWriteBase64 ImageXORDrawingMode IncrementValue InputBaseN Insert Int IsArray IsBinary ' + \n\t\t\t\t\t\t'IsBoolean IsCustomFunction IsDate IsDDX IsDebugMode IsDefined IsImage IsImageFile IsInstanceOf IsJSON IsLeapYear IsLocalHost ' + \n\t\t\t\t\t\t'IsNumeric IsNumericDate IsObject IsPDFFile IsPDFObject IsQuery IsSimpleValue IsSOAPRequest IsStruct IsUserInAnyRole IsUserInRole ' + \n\t\t\t\t\t\t'IsUserLoggedIn IsValid IsWDDX IsXML IsXmlAttribute IsXmlDoc IsXmlElem IsXmlNode IsXmlRoot JavaCast JSStringFormat LCase Left Len ' + \n\t\t\t\t\t\t'ListAppend ListChangeDelims ListContains ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst ListGetAt ListInsertAt ' + \n\t\t\t\t\t\t'ListLast ListLen ListPrepend ListQualify ListRest ListSetAt ListSort ListToArray ListValueCount ListValueCountNoCase LJustify Log ' + \n\t\t\t\t\t\t'Log10 LSCurrencyFormat LSDateFormat LSEuroCurrencyFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat LSParseCurrency LSParseDateTime ' + \n\t\t\t\t\t\t'LSParseEuroCurrency LSParseNumber LSTimeFormat LTrim Max Mid Min Minute Month MonthAsString Now NumberFormat ParagraphFormat ParseDateTime ' + \n\t\t\t\t\t\t'Pi PrecisionEvaluate PreserveSingleQuotes Quarter QueryAddColumn QueryAddRow QueryConvertForGrid QueryNew QuerySetCell QuotedValueList Rand ' + \n\t\t\t\t\t\t'Randomize RandRange REFind REFindNoCase ReleaseComObject REMatch REMatchNoCase RemoveChars RepeatString Replace ReplaceList ReplaceNoCase ' + \n\t\t\t\t\t\t'REReplace REReplaceNoCase Reverse Right RJustify Round RTrim Second SendGatewayMessage SerializeJSON SetEncoding SetLocale SetProfileString ' + \n\t\t\t\t\t\t'SetVariable Sgn Sin Sleep SpanExcluding SpanIncluding Sqr StripCR StructAppend StructClear StructCopy StructCount StructDelete StructFind ' + \n\t\t\t\t\t\t'StructFindKey StructFindValue StructGet StructInsert StructIsEmpty StructKeyArray StructKeyExists StructKeyList StructKeyList StructNew ' + \n\t\t\t\t\t\t'StructSort StructUpdate Tan TimeFormat ToBase64 ToBinary ToScript ToString Trim UCase URLDecode URLEncodedFormat URLSessionFormat Val ' + \n\t\t\t\t\t\t'ValueList VerifyClient Week Wrap Wrap WriteOutput XmlChildPos XmlElemNew XmlFormat XmlGetNodeType XmlNew XmlParse XmlSearch XmlTransform ' + \n\t\t\t\t\t\t'XmlValidate Year YesNoFormat';\n\n\t\tvar keywords =\t'cfabort cfajaximport cfajaxproxy cfapplet cfapplication cfargument cfassociate cfbreak cfcache cfcalendar ' + \n\t\t\t\t\t\t'cfcase cfcatch cfchart cfchartdata cfchartseries cfcol cfcollection cfcomponent cfcontent cfcookie cfdbinfo ' + \n\t\t\t\t\t\t'cfdefaultcase cfdirectory cfdiv cfdocument cfdocumentitem cfdocumentsection cfdump cfelse cfelseif cferror ' + \n\t\t\t\t\t\t'cfexchangecalendar cfexchangeconnection cfexchangecontact cfexchangefilter cfexchangemail cfexchangetask ' + \n\t\t\t\t\t\t'cfexecute cfexit cffeed cffile cfflush cfform cfformgroup cfformitem cfftp cffunction cfgrid cfgridcolumn ' + \n\t\t\t\t\t\t'cfgridrow cfgridupdate cfheader cfhtmlhead cfhttp cfhttpparam cfif cfimage cfimport cfinclude cfindex ' + \n\t\t\t\t\t\t'cfinput cfinsert cfinterface cfinvoke cfinvokeargument cflayout cflayoutarea cfldap cflocation cflock cflog ' + \n\t\t\t\t\t\t'cflogin cfloginuser cflogout cfloop cfmail cfmailparam cfmailpart cfmenu cfmenuitem cfmodule cfNTauthenticate ' + \n\t\t\t\t\t\t'cfobject cfobjectcache cfoutput cfparam cfpdf cfpdfform cfpdfformparam cfpdfparam cfpdfsubform cfpod cfpop ' + \n\t\t\t\t\t\t'cfpresentation cfpresentationslide cfpresenter cfprint cfprocessingdirective cfprocparam cfprocresult ' + \n\t\t\t\t\t\t'cfproperty cfquery cfqueryparam cfregistry cfreport cfreportparam cfrethrow cfreturn cfsavecontent cfschedule ' + \n\t\t\t\t\t\t'cfscript cfsearch cfselect cfset cfsetting cfsilent cfslider cfsprydataset cfstoredproc cfswitch cftable ' + \n\t\t\t\t\t\t'cftextarea cfthread cfthrow cftimer cftooltip cftrace cftransaction cftree cftreeitem cftry cfupdate cfwddx ' + \n\t\t\t\t\t\t'cfwindow cfxml cfzip cfzipparam';\n\n\t\tvar operators =\t'all and any between cross in join like not null or outer some';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp('--(.*)$', 'gm'),\t\t\t\t\t\tcss: 'comments' },  // one line and multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.xmlComments,\t\t\tcss: 'comments' },    // single quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },    // double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },    // single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' }, // functions\n\t\t\t{ regex: new RegExp(this.getKeywords(operators), 'gmi'),\tcss: 'color1' },    // operators and such\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\tcss: 'keyword' }    // keyword\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['coldfusion','cf'];\n\t\n\tSyntaxHighlighter.brushes.ColdFusion = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Copyright 2006 Shin, YoungJin\n\t\n\t\tvar datatypes =\t'ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' +\n\t\t\t\t\t\t'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH ' +\n\t\t\t\t\t\t'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP ' +\n\t\t\t\t\t\t'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY ' +\n\t\t\t\t\t\t'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT ' +\n\t\t\t\t\t\t'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE ' +\n\t\t\t\t\t\t'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF ' +\n\t\t\t\t\t\t'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR ' +\n\t\t\t\t\t\t'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR ' +\n\t\t\t\t\t\t'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT ' +\n\t\t\t\t\t\t'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 ' +\n\t\t\t\t\t\t'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR ' +\n\t\t\t\t\t\t'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 ' +\n\t\t\t\t\t\t'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT ' +\n\t\t\t\t\t\t'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ' +\n\t\t\t\t\t\t'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM ' +\n\t\t\t\t\t\t'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' +\n\t\t\t\t\t\t'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS ' +\n\t\t\t\t\t\t'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t ' +\n\t\t\t\t\t\t'__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t ' +\n\t\t\t\t\t\t'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler ' +\n\t\t\t\t\t\t'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function ' +\n\t\t\t\t\t\t'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf ' +\n\t\t\t\t\t\t'va_list wchar_t wctrans_t wctype_t wint_t signed';\n\n\t\tvar keywords =\t'auto break case catch class const decltype __finally __exception __try ' +\n\t\t\t\t\t\t'const_cast continue private public protected __declspec ' +\n\t\t\t\t\t\t'default delete deprecated dllexport dllimport do dynamic_cast ' +\n\t\t\t\t\t\t'else enum explicit extern if for friend goto inline ' +\n\t\t\t\t\t\t'mutable naked namespace new noinline noreturn nothrow ' +\n\t\t\t\t\t\t'register reinterpret_cast return selectany ' +\n\t\t\t\t\t\t'sizeof static static_cast struct switch template this ' +\n\t\t\t\t\t\t'thread throw true false try typedef typeid typename union ' +\n\t\t\t\t\t\t'using uuid virtual void volatile whcar_t while';\n\t\t\t\t\t\n\t\tvar functions =\t'assert isalnum isalpha iscntrl isdigit isgraph islower isprint' +\n\t\t\t\t\t\t'ispunct isspace isupper isxdigit tolower toupper errno localeconv ' +\n\t\t\t\t\t\t'setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod ' +\n\t\t\t\t\t\t'frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf ' +\n\t\t\t\t\t\t'longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start ' +\n\t\t\t\t\t\t'clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen ' +\n\t\t\t\t\t\t'fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell ' +\n\t\t\t\t\t\t'fwrite getc getchar gets perror printf putc putchar puts remove ' +\n\t\t\t\t\t\t'rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ' +\n\t\t\t\t\t\t'ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol ' +\n\t\t\t\t\t\t'bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs ' +\n\t\t\t\t\t\t'mbtowc qsort rand realloc srand strtod strtol strtoul system ' +\n\t\t\t\t\t\t'wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr ' +\n\t\t\t\t\t\t'strcmp strcoll strcpy strcspn strerror strlen strncat strncmp ' +\n\t\t\t\t\t\t'strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime ' +\n\t\t\t\t\t\t'clock ctime difftime gmtime localtime mktime strftime time';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^ *#.*/gm,\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\n\t\t\t{ regex: new RegExp(this.getKeywords(datatypes), 'gm'),\t\tcss: 'color1 bold' },\n\t\t\t{ regex: new RegExp(this.getKeywords(functions), 'gm'),\t\tcss: 'functions bold' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword bold' }\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['cpp', 'c'];\n\n\tSyntaxHighlighter.brushes.Cpp = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abstract as base bool break byte case catch char checked class const ' +\n\t\t\t\t\t\t'continue decimal default delegate do double else enum event explicit volatile ' +\n\t\t\t\t\t\t'extern false finally fixed float for foreach get goto if implicit in int ' +\n\t\t\t\t\t\t'interface internal is lock long namespace new null object operator out ' +\n\t\t\t\t\t\t'override params private protected public readonly ref return sbyte sealed set ' +\n\t\t\t\t\t\t'short sizeof stackalloc static string struct switch this throw true try ' +\n\t\t\t\t\t\t'typeof uint ulong unchecked unsafe ushort using virtual void while var ' +\n\t\t\t\t\t\t'from group by into select let where orderby join on equals ascending descending';\n\n\t\tfunction fixComments(match, regexInfo)\n\t\t{\n\t\t\tvar css = (match[0].indexOf(\"///\") == 0)\n\t\t\t\t? 'color1'\n\t\t\t\t: 'comments'\n\t\t\t\t;\n\t\t\t\n\t\t\treturn [new SyntaxHighlighter.Match(match[0], match.index, css)];\n\t\t}\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tfunc : fixComments },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: /@\"(?:[^\"]|\"\")*\"/g,\t\t\t\t\t\t\t\tcss: 'string' },\t\t\t// @-quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^\\s*#.*/gm,\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t\t// c# keyword\n\t\t\t{ regex: /\\bpartial(?=\\s+(?:class|interface|struct)\\b)/g,\tcss: 'keyword' },\t\t\t// contextual keyword: 'partial'\n\t\t\t{ regex: /\\byield(?=\\s+(?:return|break)\\b)/g,\t\t\t\tcss: 'keyword' }\t\t\t// contextual keyword: 'yield'\n\t\t\t];\n\t\t\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['c#', 'c-sharp', 'csharp'];\n\n\tSyntaxHighlighter.brushes.CSharp = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction getKeywordsCSS(str)\n\t\t{\n\t\t\treturn '\\\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)') + '(?=:)\\\\b';\n\t\t};\n\t\n\t\tfunction getValuesCSS(str)\n\t\t{\n\t\t\treturn '\\\\b' + str.replace(/ /g, '(?!-)(?!:)\\\\b|\\\\b()') + '\\:\\\\b';\n\t\t};\n\n\t\tvar keywords =\t'ascent azimuth background-attachment background-color background-image background-position ' +\n\t\t\t\t\t\t'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +\n\t\t\t\t\t\t'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +\n\t\t\t\t\t\t'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +\n\t\t\t\t\t\t'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +\n\t\t\t\t\t\t'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +\n\t\t\t\t\t\t'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +\n\t\t\t\t\t\t'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +\n\t\t\t\t\t\t'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +\n\t\t\t\t\t\t'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +\n\t\t\t\t\t\t'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +\n\t\t\t\t\t\t'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +\n\t\t\t\t\t\t'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +\n\t\t\t\t\t\t'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';\n\n\t\tvar values =\t'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+\n\t\t\t\t\t\t'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+\n\t\t\t\t\t\t'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+\n\t\t\t\t\t\t'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+\n\t\t\t\t\t\t'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+\n\t\t\t\t\t\t'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+\n\t\t\t\t\t\t'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+\n\t\t\t\t\t\t'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+\n\t\t\t\t\t\t'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+\n\t\t\t\t\t\t'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+\n\t\t\t\t\t\t'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+\n\t\t\t\t\t\t'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+\n\t\t\t\t\t\t'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+\n\t\t\t\t\t\t'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';\n\n\t\tvar fonts =\t\t'[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t// single quoted strings\n\t\t\t{ regex: /\\#[a-fA-F0-9]{3,6}/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t// html colors\n\t\t\t{ regex: /(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)/g,\t\t\t\tcss: 'value' },\t\t// sizes\n\t\t\t{ regex: /!important/g,\t\t\t\t\t\t\t\t\t\tcss: 'color3' },\t// !important\n\t\t\t{ regex: new RegExp(getKeywordsCSS(keywords), 'gm'),\t\tcss: 'keyword' },\t// keywords\n\t\t\t{ regex: new RegExp(getValuesCSS(values), 'g'),\t\t\t\tcss: 'value' },\t\t// values\n\t\t\t{ regex: new RegExp(this.getKeywords(fonts), 'g'),\t\t\tcss: 'color1' }\t\t// fonts\n\t\t\t];\n\n\t\tthis.forHtmlScript({ \n\t\t\tleft: /(&lt;|<)\\s*style.*?(&gt;|>)/gi, \n\t\t\tright: /(&lt;|<)\\/\\s*style\\s*(&gt;|>)/gi \n\t\t\t});\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['css'];\n\n\tSyntaxHighlighter.brushes.CSS = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' +\n\t\t\t\t\t\t'case char class comp const constructor currency destructor div do double ' +\n\t\t\t\t\t\t'downto else end except exports extended false file finalization finally ' +\n\t\t\t\t\t\t'for function goto if implementation in inherited int64 initialization ' +\n\t\t\t\t\t\t'integer interface is label library longint longword mod nil not object ' +\n\t\t\t\t\t\t'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' +\n\t\t\t\t\t\t'pint64 pointer private procedure program property pshortstring pstring ' +\n\t\t\t\t\t\t'pvariant pwidechar pwidestring protected public published raise real real48 ' +\n\t\t\t\t\t\t'record repeat set shl shortint shortstring shr single smallint string then ' +\n\t\t\t\t\t\t'threadvar to true try type unit until uses val var varirnt while widechar ' +\n\t\t\t\t\t\t'widestring with word write writeln xor';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /\\(\\*[\\s\\S]*?\\*\\)/gm,\t\t\t\t\t\t\t\tcss: 'comments' },  \t// multiline comments (* *)\n\t\t\t{ regex: /{(?!\\$)[\\s\\S]*?}/gm,\t\t\t\t\t\t\t\tcss: 'comments' },  \t// multiline comments { }\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },  \t// one line\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\\{\\$[a-zA-Z]+ .+\\}/g,\t\t\t\t\t\t\t\tcss: 'color1' },\t\t// compiler Directives and Region tags\n\t\t\t{ regex: /\\b[\\d\\.]+\\b/g,\t\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// numbers 12345\n\t\t\t{ regex: /\\$[a-zA-Z0-9]+\\b/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// numbers $F5D3\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\tcss: 'keyword' }\t\t// keyword\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['delphi', 'pascal', 'pas'];\n\n\tSyntaxHighlighter.brushes.Delphi = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tthis.regexList = [\n\t\t\t{ regex: /^\\+\\+\\+ .*$/gm,\tcss: 'color2' },\t// new file\n\t\t\t{ regex: /^\\-\\-\\- .*$/gm,\tcss: 'color2' },\t// old file\n\t\t\t{ regex: /^\\s.*$/gm,\t\tcss: 'color1' },\t// unchanged\n\t\t\t{ regex: /^@@.*@@.*$/gm,\tcss: 'variable' },\t// location\n\t\t\t{ regex: /^\\+.*$/gm,\t\tcss: 'string' },\t// additions\n\t\t\t{ regex: /^\\-.*$/gm,\t\tcss: 'color3' }\t\t// deletions\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['diff', 'patch'];\n\n\tSyntaxHighlighter.brushes.Diff = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Jean-Lou Dupont\n\t\t// http://jldupont.blogspot.com/2009/06/erlang-syntax-highlighter.html  \n\n\t\t// According to: http://erlang.org/doc/reference_manual/introduction.html#1.5\n\t\tvar keywords = 'after and andalso band begin bnot bor bsl bsr bxor '+\n\t\t\t'case catch cond div end fun if let not of or orelse '+\n\t\t\t'query receive rem try when xor'+\n\t\t\t// additional\n\t\t\t' module export import define';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp(\"[A-Z][A-Za-z0-9_]+\", 'g'), \t\t\tcss: 'constants' },\n\t\t\t{ regex: new RegExp(\"\\\\%.+\", 'gm'), \t\t\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: new RegExp(\"\\\\?[A-Za-z0-9_]+\", 'g'), \t\t\t\tcss: 'preprocessor' },\n\t\t\t{ regex: new RegExp(\"[a-z0-9_]+:[a-z0-9_]+\", 'g'), \t\t\tcss: 'functions' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords),\t'gm'),\t\tcss: 'keyword' }\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['erl', 'erlang'];\n\n\tSyntaxHighlighter.brushes.Erland = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Andres Almiray\n\t\t// http://jroller.com/aalmiray/entry/nice_source_code_syntax_highlighter\n\n\t\tvar keywords =\t'as assert break case catch class continue def default do else extends finally ' +\n\t\t\t\t\t\t'if in implements import instanceof interface new package property return switch ' +\n\t\t\t\t\t\t'throw throws try while public protected private static';\n\t\tvar types    =  'void boolean byte char short int long float double';\n\t\tvar constants = 'null';\n\t\tvar methods   = 'allProperties count get size '+\n\t\t\t\t\t\t'collect each eachProperty eachPropertyName eachWithIndex find findAll ' +\n\t\t\t\t\t\t'findIndexOf grep inject max min reverseEach sort ' +\n\t\t\t\t\t\t'asImmutable asSynchronized flatten intersect join pop reverse subMap toList ' +\n\t\t\t\t\t\t'padRight padLeft contains eachMatch toCharacter toLong toUrl tokenize ' +\n\t\t\t\t\t\t'eachFile eachFileRecurse eachB yte eachLine readBytes readLine getText ' +\n\t\t\t\t\t\t'splitEachLine withReader append encodeBase64 decodeBase64 filterLine ' +\n\t\t\t\t\t\t'transformChar transformLine withOutputStream withPrintWriter withStream ' +\n\t\t\t\t\t\t'withStreams withWriter withWriterAppend write writeLine '+\n\t\t\t\t\t\t'dump inspect invokeMethod print println step times upto use waitForOrKill '+\n\t\t\t\t\t\t'getText';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\t\t\t\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\t\t\t\tcss: 'comments' },\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\t\t\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\t\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\"\"\".*\"\"\"/g,\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'string' },\t\t// GStrings\n\t\t\t{ regex: new RegExp('\\\\b([\\\\d]+(\\\\.[\\\\d]+)?|0x[a-f0-9]+)\\\\b', 'gi'),\tcss: 'value' },\t\t\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\t\t\tcss: 'keyword' },\t\t// goovy keyword\n\t\t\t{ regex: new RegExp(this.getKeywords(types), 'gm'),\t\t\t\t\t\tcss: 'color1' },\t\t// goovy/java type\n\t\t\t{ regex: new RegExp(this.getKeywords(constants), 'gm'),\t\t\t\t\tcss: 'constants' },\t\t// constants\n\t\t\t{ regex: new RegExp(this.getKeywords(methods), 'gm'),\t\t\t\t\tcss: 'functions' }\t\t// methods\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['groovy'];\n\n\tSyntaxHighlighter.brushes.Groovy = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abstract assert boolean break byte case catch char class const ' +\n\t\t\t\t\t\t'continue default do double else enum extends ' +\n\t\t\t\t\t\t'false final finally float for goto if implements import ' +\n\t\t\t\t\t\t'instanceof int interface long native new null ' +\n\t\t\t\t\t\t'package private protected public return ' +\n\t\t\t\t\t\t'short static strictfp super switch synchronized this throw throws true ' +\n\t\t\t\t\t\t'transient try void volatile while';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: /\\/\\*([^\\*][\\s\\S]*)?\\*\\//gm,\t\t\t\t\t\tcss: 'comments' },\t \t// multiline comments\n\t\t\t{ regex: /\\/\\*(?!\\*\\/)\\*[\\s\\S]*?\\*\\//gm,\t\t\t\t\tcss: 'preprocessor' },\t// documentation comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,\t\t\t\tcss: 'value' },\t\t\t// numbers\n\t\t\t{ regex: /(?!\\@interface\\b)\\@[\\$\\w]+\\b/g,\t\t\t\t\tcss: 'color1' },\t\t// annotation @anno\n\t\t\t{ regex: /\\@interface\\b/g,\t\t\t\t\t\t\t\t\tcss: 'color2' },\t\t// @interface keyword\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\t\t// java keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript({\n\t\t\tleft\t: /(&lt;|<)%[@!=]?/g, \n\t\t\tright\t: /%(&gt;|>)/g \n\t\t});\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['java'];\n\n\tSyntaxHighlighter.brushes.Java = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Patrick Webster\n\t\t// http://patrickwebster.blogspot.com/2009/04/javafx-brush-for-syntaxhighlighter.html\n\t\tvar datatypes =\t'Boolean Byte Character Double Duration '\n\t\t\t\t\t\t+ 'Float Integer Long Number Short String Void'\n\t\t\t\t\t\t;\n\n\t\tvar keywords = 'abstract after and as assert at before bind bound break catch class '\n\t\t\t\t\t\t+ 'continue def delete else exclusive extends false finally first for from '\n\t\t\t\t\t\t+ 'function if import in indexof init insert instanceof into inverse last '\n\t\t\t\t\t\t+ 'lazy mixin mod nativearray new not null on or override package postinit '\n\t\t\t\t\t\t+ 'protected public public-init public-read replace return reverse sizeof '\n\t\t\t\t\t\t+ 'step super then this throw true try tween typeof var where while with '\n\t\t\t\t\t\t+ 'attribute let private readonly static trigger'\n\t\t\t\t\t\t;\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: /(-?\\.?)(\\b(\\d*\\.?\\d+|\\d+\\.?\\d*)(e[+-]?\\d+)?|0x[a-f\\d]+)\\b\\.?/gi, css: 'color2' },\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(datatypes), 'gm'),\t\tcss: 'variable' },\t// datatypes\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\n\t\t];\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['jfx', 'javafx'];\n\n\tSyntaxHighlighter.brushes.JavaFX = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'break case catch continue ' +\n\t\t\t\t\t\t'default delete do else false  ' +\n\t\t\t\t\t\t'for function if in instanceof ' +\n\t\t\t\t\t\t'new null return super switch ' +\n\t\t\t\t\t\t'this throw true try typeof var while with'\n\t\t\t\t\t\t;\n\n\t\tvar r = SyntaxHighlighter.regexLib;\n\t\t\n\t\tthis.regexList = [\n\t\t\t{ regex: r.multiLineDoubleQuotedString,\t\t\t\t\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: r.multiLineSingleQuotedString,\t\t\t\t\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: r.singleLineCComments,\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: r.multiLineCComments,\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: /\\s*#.*/gm,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\t\t\t// keywords\n\t\t\t];\n\t\n\t\tthis.forHtmlScript(r.scriptScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['js', 'jscript', 'javascript'];\n\n\tSyntaxHighlighter.brushes.JScript = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by David Simmons-Duffin and Marty Kube\n\t\n\t\tvar funcs = \n\t\t\t'abs accept alarm atan2 bind binmode chdir chmod chomp chop chown chr ' + \n\t\t\t'chroot close closedir connect cos crypt defined delete each endgrent ' + \n\t\t\t'endhostent endnetent endprotoent endpwent endservent eof exec exists ' + \n\t\t\t'exp fcntl fileno flock fork format formline getc getgrent getgrgid ' + \n\t\t\t'getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr ' + \n\t\t\t'getnetbyname getnetent getpeername getpgrp getppid getpriority ' + \n\t\t\t'getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid ' + \n\t\t\t'getservbyname getservbyport getservent getsockname getsockopt glob ' + \n\t\t\t'gmtime grep hex index int ioctl join keys kill lc lcfirst length link ' + \n\t\t\t'listen localtime lock log lstat map mkdir msgctl msgget msgrcv msgsnd ' + \n\t\t\t'oct open opendir ord pack pipe pop pos print printf prototype push ' + \n\t\t\t'quotemeta rand read readdir readline readlink readpipe recv rename ' + \n\t\t\t'reset reverse rewinddir rindex rmdir scalar seek seekdir select semctl ' + \n\t\t\t'semget semop send setgrent sethostent setnetent setpgrp setpriority ' + \n\t\t\t'setprotoent setpwent setservent setsockopt shift shmctl shmget shmread ' + \n\t\t\t'shmwrite shutdown sin sleep socket socketpair sort splice split sprintf ' + \n\t\t\t'sqrt srand stat study substr symlink syscall sysopen sysread sysseek ' + \n\t\t\t'system syswrite tell telldir time times tr truncate uc ucfirst umask ' + \n\t\t\t'undef unlink unpack unshift utime values vec wait waitpid warn write ' +\n\t\t\t// feature\n\t\t\t'say';\n    \n\t\tvar keywords =  \n\t\t\t'bless caller continue dbmclose dbmopen die do dump else elsif eval exit ' +\n\t\t\t'for foreach goto if import last local my next no our package redo ref ' + \n\t\t\t'require return sub tie tied unless untie until use wantarray while ' +\n\t\t\t// feature\n\t\t\t'given when default ' +\n\t\t\t// Try::Tiny\n\t\t\t'try catch finally ' +\n\t\t\t// Moose\n\t\t\t'has extends with before after around override augment';\n    \n\t\tthis.regexList = [\n\t\t\t{ regex: /(<<|&lt;&lt;)((\\w+)|(['\"])(.+?)\\4)[\\s\\S]+?\\n\\3\\5\\n/g,\tcss: 'string' },\t// here doc (maybe html encoded)\n\t\t\t{ regex: /#.*$/gm,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: /^#!.*\\n/g,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t// shebang\n\t\t\t{ regex: /-?\\w+(?=\\s*=(>|&gt;))/g,\tcss: 'string' }, // fat comma\n\n\t\t\t// is this too much?\n\t\t\t{ regex: /\\bq[qwxr]?\\([\\s\\S]*?\\)/g,\tcss: 'string' }, // quote-like operators ()\n\t\t\t{ regex: /\\bq[qwxr]?\\{[\\s\\S]*?\\}/g,\tcss: 'string' }, // quote-like operators {}\n\t\t\t{ regex: /\\bq[qwxr]?\\[[\\s\\S]*?\\]/g,\tcss: 'string' }, // quote-like operators []\n\t\t\t{ regex: /\\bq[qwxr]?(<|&lt;)[\\s\\S]*?(>|&gt;)/g,\tcss: 'string' }, // quote-like operators <>\n\t\t\t{ regex: /\\bq[qwxr]?([^\\w({<[])[\\s\\S]*?\\1/g,\tcss: 'string' }, // quote-like operators non-paired\n\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\tcss: 'string' },\n\t\t\t// currently ignoring single quote package separator and utf8 names\n\t\t\t{ regex: /(?:&amp;|[$@%*]|\\$#)[a-zA-Z_](\\w+|::)*/g,   \t\tcss: 'variable' },\n\t\t\t{ regex: /\\b__(?:END|DATA)__\\b[\\s\\S]*$/g,\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: /(^|\\n)=\\w[\\s\\S]*?(\\n=cut\\s*\\n|$)/g,\t\t\t\tcss: 'comments' },\t\t// pod\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gm'),\t\tcss: 'functions' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\n\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t\t= ['perl', 'Perl', 'pl'];\n\n\tSyntaxHighlighter.brushes.Perl = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar funcs\t=\t'abs acos acosh addcslashes addslashes ' +\n\t\t\t\t\t\t'array_change_key_case array_chunk array_combine array_count_values array_diff '+\n\t\t\t\t\t\t'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+\n\t\t\t\t\t\t'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+\n\t\t\t\t\t\t'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+\n\t\t\t\t\t\t'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+\n\t\t\t\t\t\t'array_push array_rand array_reduce array_reverse array_search array_shift '+\n\t\t\t\t\t\t'array_slice array_splice array_sum array_udiff array_udiff_assoc '+\n\t\t\t\t\t\t'array_udiff_uassoc array_uintersect array_uintersect_assoc '+\n\t\t\t\t\t\t'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+\n\t\t\t\t\t\t'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+\n\t\t\t\t\t\t'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+\n\t\t\t\t\t\t'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+\n\t\t\t\t\t\t'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+\n\t\t\t\t\t\t'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+\n\t\t\t\t\t\t'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+\n\t\t\t\t\t\t'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+\n\t\t\t\t\t\t'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+\n\t\t\t\t\t\t'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+\n\t\t\t\t\t\t'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+\n\t\t\t\t\t\t'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+\n\t\t\t\t\t\t'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+\n\t\t\t\t\t\t'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+\n\t\t\t\t\t\t'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+\n\t\t\t\t\t\t'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+\n\t\t\t\t\t\t'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+\n\t\t\t\t\t\t'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+\n\t\t\t\t\t\t'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+\n\t\t\t\t\t\t'parse_ini_file parse_str parse_url passthru pathinfo print readlink realpath rewind rewinddir rmdir '+\n\t\t\t\t\t\t'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+\n\t\t\t\t\t\t'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+\n\t\t\t\t\t\t'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+\n\t\t\t\t\t\t'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+\n\t\t\t\t\t\t'strtoupper strtr strval substr substr_compare';\n\n\t\tvar keywords =\t'abstract and array as break case catch cfunction class clone const continue declare default die do ' +\n\t\t\t\t\t\t'else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach ' +\n\t\t\t\t\t\t'function global goto if implements include include_once interface instanceof insteadof namespace new ' +\n\t\t\t\t\t\t'old_function or private protected public return require require_once static switch ' +\n\t\t\t\t\t\t'trait throw try use var while xor ';\n\t\t\n\t\tvar constants\t= '__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: /\\$\\w+/g,\t\t\t\t\t\t\t\t\t\t\tcss: 'variable' },\t\t\t// variables\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' },\t\t\t// common functions\n\t\t\t{ regex: new RegExp(this.getKeywords(constants), 'gmi'),\tcss: 'constants' },\t\t\t// constants\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\t\t\t// keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['php'];\n\n\tSyntaxHighlighter.brushes.Php = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['text', 'plain'];\n\n\tSyntaxHighlighter.brushes.Plain = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Joel 'Jaykul' Bennett, http://PoshCode.org | http://HuddledMasses.org\n\t\tvar keywords =\t'while validateset validaterange validatepattern validatelength validatecount ' +\n\t\t\t\t\t\t'until trap switch return ref process param parameter in if global: '+\n\t\t\t\t\t\t'function foreach for finally filter end elseif else dynamicparam do default ' +\n\t\t\t\t\t\t'continue cmdletbinding break begin alias \\\\? % #script #private #local #global '+\n\t\t\t\t\t\t'mandatory parametersetname position valuefrompipeline ' +\n\t\t\t\t\t\t'valuefrompipelinebypropertyname valuefromremainingarguments helpmessage ';\n\n\t\tvar operators =\t' and as band bnot bor bxor casesensitive ccontains ceq cge cgt cle ' +\n\t\t\t\t\t\t'clike clt cmatch cne cnotcontains cnotlike cnotmatch contains ' +\n\t\t\t\t\t\t'creplace eq exact f file ge gt icontains ieq ige igt ile ilike ilt ' +\n\t\t\t\t\t\t'imatch ine inotcontains inotlike inotmatch ireplace is isnot le like ' +\n\t\t\t\t\t\t'lt match ne not notcontains notlike notmatch or regex replace wildcard';\n\t\t\t\t\t\t\n\t\tvar verbs =\t\t'write where wait use update unregister undo trace test tee take suspend ' +\n\t\t\t\t\t\t'stop start split sort skip show set send select scroll resume restore ' +\n\t\t\t\t\t\t'restart resolve resize reset rename remove register receive read push ' +\n\t\t\t\t\t\t'pop ping out new move measure limit join invoke import group get format ' +\n\t\t\t\t\t\t'foreach export expand exit enter enable disconnect disable debug cxnew ' +\n\t\t\t\t\t\t'copy convertto convertfrom convert connect complete compare clear ' +\n\t\t\t\t\t\t'checkpoint aggregate add';\n\n\t\t// I can't find a way to match the comment based help in multi-line comments, because SH won't highlight in highlights, and javascript doesn't support lookbehind\n\t\tvar commenthelp = ' component description example externalhelp forwardhelpcategory forwardhelptargetname forwardhelptargetname functionality inputs link notes outputs parameter remotehelprunspace role synopsis';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp('^\\\\s*#[#\\\\s]*\\\\.('+this.getKeywords(commenthelp)+').*$', 'gim'),\t\t\tcss: 'preprocessor help bold' },\t\t// comment-based help\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t\t\t\t// one line comments\n\t\t\t{ regex: /(&lt;|<)#[\\s\\S]*?#(&gt;|>)/gm,\t\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments here' },\t\t\t\t\t// multi-line comments\n\t\t\t\n\t\t\t{ regex: new RegExp('@\"\\\\n[\\\\s\\\\S]*?\\\\n\"@', 'gm'),\t\t\t\t\t\t\t\t\t\t\t\tcss: 'script string here' },\t\t\t// double quoted here-strings\n\t\t\t{ regex: new RegExp(\"@'\\\\n[\\\\s\\\\S]*?\\\\n'@\", 'gm'),\t\t\t\t\t\t\t\t\t\t\t\tcss: 'script string single here' },\t\t// single quoted here-strings\n\t\t\t{ regex: new RegExp('\"(?:\\\\$\\\\([^\\\\)]*\\\\)|[^\"]|`\"|\"\")*[^`]\"','g'),\t\t\t\t\t\t\t\tcss: 'string' },\t\t\t\t\t\t// double quoted strings\n\t\t\t{ regex: new RegExp(\"'(?:[^']|'')*'\", 'g'),\t\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'string single' },\t\t\t\t\t// single quoted strings\n\t\t\t\n\t\t\t{ regex: new RegExp('[\\\\$|@|@@](?:(?:global|script|private|env):)?[A-Z0-9_]+', 'gi'),\t\t\tcss: 'variable' },\t\t\t\t\t\t// $variables\n\t\t\t{ regex: new RegExp('(?:\\\\b'+verbs.replace(/ /g, '\\\\b|\\\\b')+')-[a-zA-Z_][a-zA-Z0-9_]*', 'gmi'),\tcss: 'functions' },\t\t\t\t\t\t// functions and cmdlets\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\t\t\t\t\t\t\t\t\t\tcss: 'keyword' },\t\t\t\t\t\t// keywords\n\t\t\t{ regex: new RegExp('-'+this.getKeywords(operators), 'gmi'),\t\t\t\t\t\t\t\t\tcss: 'operator value' },\t\t\t\t// operators\n\t\t\t{ regex: new RegExp('\\\\[[A-Z_\\\\[][A-Z0-9_. `,\\\\[\\\\]]*\\\\]', 'gi'),\t\t\t\t\t\t\t\tcss: 'constants' },\t\t\t\t\t\t// .Net [Type]s\n\t\t\t{ regex: new RegExp('\\\\s+-(?!'+this.getKeywords(operators)+')[a-zA-Z_][a-zA-Z0-9_]*', 'gmi'),\tcss: 'color1' },\t\t\t\t\t\t// parameters\t  \n\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['powershell', 'ps', 'posh'];\n\n\tSyntaxHighlighter.brushes.PowerShell = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Gheorghe Milas and Ahmad Sherif\n\t\n\t\tvar keywords =  'and assert break class continue def del elif else ' +\n\t\t\t\t\t\t'except exec finally for from global if import in is ' +\n\t\t\t\t\t\t'lambda not or pass print raise return try yield while';\n\n\t\tvar funcs = '__import__ abs all any apply basestring bin bool buffer callable ' +\n\t\t\t\t\t'chr classmethod cmp coerce compile complex delattr dict dir ' +\n\t\t\t\t\t'divmod enumerate eval execfile file filter float format frozenset ' +\n\t\t\t\t\t'getattr globals hasattr hash help hex id input int intern ' +\n\t\t\t\t\t'isinstance issubclass iter len list locals long map max min next ' +\n\t\t\t\t\t'object oct open ord pow print property range raw_input reduce ' +\n\t\t\t\t\t'reload repr reversed round set setattr slice sorted staticmethod ' +\n\t\t\t\t\t'str sum super tuple type type unichr unicode vars xrange zip';\n\n\t\tvar special =  'None True False self cls class_';\n\n\t\tthis.regexList = [\n\t\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' },\n\t\t\t\t{ regex: /^\\s*@\\w+/gm, \t\t\t\t\t\t\t\t\t\tcss: 'decorator' },\n\t\t\t\t{ regex: /(['\\\"]{3})([^\\1])*?\\1/gm, \t\t\t\t\t\tcss: 'comments' },\n\t\t\t\t{ regex: /\"(?!\")(?:\\.|\\\\\\\"|[^\\\"\"\\n])*\"/gm, \t\t\t\t\tcss: 'string' },\n\t\t\t\t{ regex: /'(?!')(?:\\.|(\\\\\\')|[^\\''\\n])*'/gm, \t\t\t\tcss: 'string' },\n\t\t\t\t{ regex: /\\+|\\-|\\*|\\/|\\%|=|==/gm, \t\t\t\t\t\t\tcss: 'keyword' },\n\t\t\t\t{ regex: /\\b\\d+\\.?\\w*/g, \t\t\t\t\t\t\t\t\tcss: 'value' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'), \t\tcss: 'keyword' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(special), 'gm'), \t\tcss: 'color1' }\n\t\t\t\t];\n\t\t\t\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['py', 'python'];\n\n\tSyntaxHighlighter.brushes.Python = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Erik Peterson.\n\t\n\t\tvar keywords =\t'alias and BEGIN begin break case class def define_method defined do each else elsif ' +\n\t\t\t\t\t\t'END end ensure false for if in module new next nil not or raise redo rescue retry return ' +\n\t\t\t\t\t\t'self super then throw true undef unless until when while yield';\n\n\t\tvar builtins =\t'Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload ' +\n\t\t\t\t\t\t'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ' +\n\t\t\t\t\t\t'ThreadGroup Thread Time TrueClass';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: /\\b[A-Z0-9_]+\\b/g,\t\t\t\t\t\t\t\t\tcss: 'constants' },\t\t// constants\n\t\t\t{ regex: /:[a-z][A-Za-z0-9_]*/g,\t\t\t\t\t\t\tcss: 'color2' },\t\t// symbols\n\t\t\t{ regex: /(\\$|@@|@)\\w+/g,\t\t\t\t\t\t\t\t\tcss: 'variable bold' },\t// $global, @instance, and @@class variables\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(this.getKeywords(builtins), 'gm'),\t\tcss: 'color1' }\t\t\t// builtins\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['ruby', 'rails', 'ror', 'rb'];\n\n\tSyntaxHighlighter.brushes.Ruby = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction getKeywordsCSS(str)\n\t\t{\n\t\t\treturn '\\\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)') + '(?=:)\\\\b';\n\t\t};\n\t\n\t\tfunction getValuesCSS(str)\n\t\t{\n\t\t\treturn '\\\\b' + str.replace(/ /g, '(?!-)(?!:)\\\\b|\\\\b()') + '\\:\\\\b';\n\t\t};\n\n\t\tvar keywords =\t'ascent azimuth background-attachment background-color background-image background-position ' +\n\t\t\t\t\t\t'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +\n\t\t\t\t\t\t'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +\n\t\t\t\t\t\t'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +\n\t\t\t\t\t\t'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +\n\t\t\t\t\t\t'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +\n\t\t\t\t\t\t'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +\n\t\t\t\t\t\t'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +\n\t\t\t\t\t\t'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +\n\t\t\t\t\t\t'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +\n\t\t\t\t\t\t'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +\n\t\t\t\t\t\t'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +\n\t\t\t\t\t\t'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +\n\t\t\t\t\t\t'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';\n\t\t\n\t\tvar values =\t'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+\n\t\t\t\t\t\t'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+\n\t\t\t\t\t\t'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero digits disc dotted double '+\n\t\t\t\t\t\t'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+\n\t\t\t\t\t\t'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+\n\t\t\t\t\t\t'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+\n\t\t\t\t\t\t'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+\n\t\t\t\t\t\t'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+\n\t\t\t\t\t\t'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+\n\t\t\t\t\t\t'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+\n\t\t\t\t\t\t'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+\n\t\t\t\t\t\t'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+\n\t\t\t\t\t\t'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+\n\t\t\t\t\t\t'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';\n\t\t\n\t\tvar fonts =\t\t'[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';\n\t\t\n\t\tvar statements\t\t= '!important !default';\n\t\tvar preprocessor\t= '@import @extend @debug @warn @if @for @while @mixin @include';\n\t\t\n\t\tvar r = SyntaxHighlighter.regexLib;\n\t\t\n\t\tthis.regexList = [\n\t\t\t{ regex: r.multiLineCComments,\t\t\t\t\t\t\t\tcss: 'comments' },\t\t// multiline comments\n\t\t\t{ regex: r.singleLineCComments,\t\t\t\t\t\t\t\tcss: 'comments' },\t\t// singleline comments\n\t\t\t{ regex: r.doubleQuotedString,\t\t\t\t\t\t\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: r.singleQuotedString,\t\t\t\t\t\t\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: /\\#[a-fA-F0-9]{3,6}/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// html colors\n\t\t\t{ regex: /\\b(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)\\b/g,\t\t\tcss: 'value' },\t\t\t// sizes\n\t\t\t{ regex: /\\$\\w+/g,\t\t\t\t\t\t\t\t\t\t\tcss: 'variable' },\t\t// variables\n\t\t\t{ regex: new RegExp(this.getKeywords(statements), 'g'),\t\tcss: 'color3' },\t\t// statements\n\t\t\t{ regex: new RegExp(this.getKeywords(preprocessor), 'g'),\tcss: 'preprocessor' },\t// preprocessor\n\t\t\t{ regex: new RegExp(getKeywordsCSS(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(getValuesCSS(values), 'g'),\t\t\t\tcss: 'value' },\t\t\t// values\n\t\t\t{ regex: new RegExp(this.getKeywords(fonts), 'g'),\t\t\tcss: 'color1' }\t\t\t// fonts\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['sass', 'scss'];\n\n\tSyntaxHighlighter.brushes.Sass = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Yegor Jbanov and David Bernard.\n\t\n\t\tvar keywords =\t'val sealed case def true trait implicit forSome import match object null finally super ' +\n\t\t\t\t\t\t'override try lazy for var catch throw type extends class while with new final yield abstract ' +\n\t\t\t\t\t\t'else do if return protected private this package false';\n\n\t\tvar keyops =\t'[_:=><%#@]+';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\t\t\tcss: 'comments' },\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\t\t\tcss: 'comments' },\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString,\tcss: 'string' },\t// multi-line strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,    css: 'string' },\t// double-quoted string\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\t\tcss: 'string' },\t// strings\n\t\t\t{ regex: /0x[a-f0-9]+|\\d+(\\.\\d+)?/gi,\t\t\t\t\t\t\t\tcss: 'value' },\t\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\t\tcss: 'keyword' },\t// keywords\n\t\t\t{ regex: new RegExp(keyops, 'gm'),\t\t\t\t\t\t\t\t\tcss: 'keyword' }\t// scala keyword\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['scala'];\n\n\tSyntaxHighlighter.brushes.Scala = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar funcs\t=\t'abs avg case cast coalesce convert count current_timestamp ' +\n\t\t\t\t\t\t'current_user day isnull left lower month nullif replace right ' +\n\t\t\t\t\t\t'session_user space substring sum system_user upper user year';\n\n\t\tvar keywords =\t'absolute action add after alter as asc at authorization begin bigint ' +\n\t\t\t\t\t\t'binary bit by cascade char character check checkpoint close collate ' +\n\t\t\t\t\t\t'column commit committed connect connection constraint contains continue ' +\n\t\t\t\t\t\t'create cube current current_date current_time cursor database date ' +\n\t\t\t\t\t\t'deallocate dec decimal declare default delete desc distinct double drop ' +\n\t\t\t\t\t\t'dynamic else end end-exec escape except exec execute false fetch first ' +\n\t\t\t\t\t\t'float for force foreign forward free from full function global goto grant ' +\n\t\t\t\t\t\t'group grouping having hour ignore index inner insensitive insert instead ' +\n\t\t\t\t\t\t'int integer intersect into is isolation key last level load local max min ' +\n\t\t\t\t\t\t'minute modify move name national nchar next no numeric of off on only ' +\n\t\t\t\t\t\t'open option order out output partial password precision prepare primary ' +\n\t\t\t\t\t\t'prior privileges procedure public read real references relative repeatable ' +\n\t\t\t\t\t\t'restrict return returns revoke rollback rollup rows rule schema scroll ' +\n\t\t\t\t\t\t'second section select sequence serializable set size smallint static ' +\n\t\t\t\t\t\t'statistics table temp temporary then time timestamp to top transaction ' +\n\t\t\t\t\t\t'translation trigger true truncate uncommitted union unique update values ' +\n\t\t\t\t\t\t'varchar varying view when where with work';\n\n\t\tvar operators =\t'all and any between cross in join like not null or outer some';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /--(.*)$/gm,\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line and multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString,\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\t\t\tcss: 'color2' },\t\t\t// functions\n\t\t\t{ regex: new RegExp(this.getKeywords(operators), 'gmi'),\t\t\tcss: 'color1' },\t\t\t// operators and such\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\t\t\tcss: 'keyword' }\t\t\t// keyword\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['sql'];\n\n\tSyntaxHighlighter.brushes.Sql = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto ' +\n\t\t\t\t\t\t'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate ' +\n\t\t\t\t\t\t'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType ' +\n\t\t\t\t\t\t'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each ' +\n\t\t\t\t\t\t'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend ' +\n\t\t\t\t\t\t'Function Get GetType GoSub GoTo Handles If Implements Imports In ' +\n\t\t\t\t\t\t'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module ' +\n\t\t\t\t\t\t'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing ' +\n\t\t\t\t\t\t'NotInheritable NotOverridable Object On Option Optional Or OrElse ' +\n\t\t\t\t\t\t'Overloads Overridable Overrides ParamArray Preserve Private Property ' +\n\t\t\t\t\t\t'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume ' +\n\t\t\t\t\t\t'Return Select Set Shadows Shared Short Single Static Step Stop String ' +\n\t\t\t\t\t\t'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until ' +\n\t\t\t\t\t\t'Variant When While With WithEvents WriteOnly Xor';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /'.*$/gm,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^\\s*#.*$/gm,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\t\t\t// vb keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['vb', 'vbnet'];\n\n\tSyntaxHighlighter.brushes.Vb = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction process(match, regexInfo)\n\t\t{\n\t\t\tvar constructor = SyntaxHighlighter.Match,\n\t\t\t\tcode = match[0],\n\t\t\t\ttag = new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(?<name>[:\\\\w-\\\\.]+)', 'xg').exec(code),\n\t\t\t\tresult = []\n\t\t\t\t;\n\t\t\n\t\t\tif (match.attributes != null) \n\t\t\t{\n\t\t\t\tvar attributes,\n\t\t\t\t\tregex = new XRegExp('(?<name> [\\\\w:\\\\-\\\\.]+)' +\n\t\t\t\t\t\t\t\t\t\t'\\\\s*=\\\\s*' +\n\t\t\t\t\t\t\t\t\t\t'(?<value> \".*?\"|\\'.*?\\'|\\\\w+)',\n\t\t\t\t\t\t\t\t\t\t'xg');\n\n\t\t\t\twhile ((attributes = regex.exec(code)) != null) \n\t\t\t\t{\n\t\t\t\t\tresult.push(new constructor(attributes.name, match.index + attributes.index, 'color1'));\n\t\t\t\t\tresult.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string'));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tag != null)\n\t\t\t\tresult.push(\n\t\t\t\t\tnew constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword')\n\t\t\t\t);\n\n\t\t\treturn result;\n\t\t}\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: new XRegExp('(\\\\&lt;|<)\\\\!\\\\[[\\\\w\\\\s]*?\\\\[(.|\\\\s)*?\\\\]\\\\](\\\\&gt;|>)', 'gm'),\t\t\tcss: 'color2' },\t// <![ ... [ ... ]]>\n\t\t\t{ regex: SyntaxHighlighter.regexLib.xmlComments,\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t// <!-- ... -->\n\t\t\t{ regex: new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(\\\\w+)(?<attributes>.*?)[\\\\s\\\\/\\\\?]*(&gt;|>)', 'sg'), func: process }\n\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['xml', 'xhtml', 'xslt', 'html'];\n\n\tSyntaxHighlighter.brushes.Xml = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/SyntaxHighlighter/shCoreDefault.css",
    "content": ".syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter,.syntaxhighlighter td,.syntaxhighlighter tr,.syntaxhighlighter tbody,.syntaxhighlighter thead,.syntaxhighlighter caption,.syntaxhighlighter textarea{-moz-border-radius:0 0 0 0!important;-webkit-border-radius:0 0 0 0!important;background:none!important;border:0!important;bottom:auto!important;float:none!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Monaco,Menlo,Consolas,\"Courier New\",monospace;font-weight:normal!important;font-style:normal!important;min-height:inherit!important;min-height:auto!important;font-size:13px!important}.syntaxhighlighter{width:100%!important;margin:.3em 0 .3em 0!important;position:relative!important;overflow:auto!important;background-color:#f5f5f5!important;border:1px solid #ccc!important;border-radius:4px!important;border-collapse:separate!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .bold{font-weight:bold!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .gutter div{white-space:pre!important;word-wrap:normal}.syntaxhighlighter caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter td.code{width:100%!important}.syntaxhighlighter td.code .container{position:relative!important}.syntaxhighlighter td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;border:none!important;background:white!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0 .8em!important;font-size:1em!important;position:static!important;width:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar span.title{display:inline!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;text-decoration:none!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0 1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:none!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content{color:black!important}.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.printing a{text-decoration:none!important}.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:black!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:blue!important}.syntaxhighlighter.printing .keyword{color:#ff7800!important;font-weight:bold!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .script{font-weight:bold!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:black!important}.syntaxhighlighter{background-color:#f5f5f5!important}.syntaxhighlighter .line.highlighted.number{color:black!important}.syntaxhighlighter caption{color:black!important}.syntaxhighlighter .gutter{color:#afafaf!important;background-color:#f7f7f9!important;border-right:1px solid #e1e1e8!important;padding:9.5px 0 9.5px 9.5px!important;border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;user-select:none!important;-moz-user-select:none!important;-webkit-user-select:none!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:white!important}.syntaxhighlighter.printing .line .content{border:none!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:blue!important;background:white!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:blue!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:white!important;background:#6ce26c!important;border:none!important}.syntaxhighlighter .toolbar a{color:white!important}.syntaxhighlighter .toolbar a:hover{color:black!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a{color:black!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:blue!important}.syntaxhighlighter .keyword{color:#ff7800!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{font-weight:bold!important;color:#ff7800!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}.syntaxhighlighter .keyword{font-weight:bold!important}"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/codemirror/codemirror.css",
    "content": ".CodeMirror {\n    line-height: 1em;\n    font-family: monospace;\n}\n\n.CodeMirror-scroll {\n    overflow: auto;\n    height: 300px;\n    /* This is needed to prevent an IE[67] bug where the scrolled content\n       is visible outside of the scrolling box. */\n    position: relative;\n}\n\n.CodeMirror-gutter {\n    position: absolute; left: 0; top: 0;\n    z-index: 10;\n    background-color: #f7f7f7;\n    border-right: 1px solid #eee;\n    min-width: 2em;\n    height: 100%;\n}\n.CodeMirror-gutter-text {\n    color: #aaa;\n    text-align: right;\n    padding: .4em .2em .4em .4em;\n    white-space: pre !important;\n}\n.CodeMirror-lines {\n    padding: .4em;\n}\n\n.CodeMirror pre {\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    -o-border-radius: 0;\n    border-radius: 0;\n    border-width: 0; margin: 0; padding: 0; background: transparent;\n    font-family: inherit;\n    font-size: inherit;\n    padding: 0; margin: 0;\n    white-space: pre;\n    word-wrap: normal;\n}\n\n.CodeMirror-wrap pre {\n    word-wrap: break-word;\n    white-space: pre-wrap;\n}\n.CodeMirror-wrap .CodeMirror-scroll {\n    overflow-x: hidden;\n}\n\n.CodeMirror textarea {\n    outline: none !important;\n}\n\n.CodeMirror pre.CodeMirror-cursor {\n    z-index: 10;\n    position: absolute;\n    visibility: hidden;\n    border-left: 1px solid black;\n}\n.CodeMirror-focused pre.CodeMirror-cursor {\n    visibility: visible;\n}\n\nspan.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused span.CodeMirror-selected { background: #d2dcf8; }\n\n.CodeMirror-searching {background: #ffa;}\n\n/* Default theme */\n\n.cm-s-default span.cm-keyword {color: #708;}\n.cm-s-default span.cm-atom {color: #219;}\n.cm-s-default span.cm-number {color: #164;}\n.cm-s-default span.cm-def {color: #00f;}\n.cm-s-default span.cm-variable {color: black;}\n.cm-s-default span.cm-variable-2 {color: #05a;}\n.cm-s-default span.cm-variable-3 {color: #085;}\n.cm-s-default span.cm-property {color: black;}\n.cm-s-default span.cm-operator {color: black;}\n.cm-s-default span.cm-comment {color: #a50;}\n.cm-s-default span.cm-string {color: #a11;}\n.cm-s-default span.cm-string-2 {color: #f50;}\n.cm-s-default span.cm-meta {color: #555;}\n.cm-s-default span.cm-error {color: #f00;}\n.cm-s-default span.cm-qualifier {color: #555;}\n.cm-s-default span.cm-builtin {color: #30a;}\n.cm-s-default span.cm-bracket {color: #cc7;}\n.cm-s-default span.cm-tag {color: #170;}\n.cm-s-default span.cm-attribute {color: #00c;}\n.cm-s-default span.cm-header {color: #a0a;}\n.cm-s-default span.cm-quote {color: #090;}\n.cm-s-default span.cm-hr {color: #999;}\n.cm-s-default span.cm-link {color: #00c;}\n\nspan.cm-header, span.cm-strong {font-weight: bold;}\nspan.cm-em {font-style: italic;}\nspan.cm-emstrong {font-style: italic; font-weight: bold;}\nspan.cm-link {text-decoration: underline;}\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/codemirror/codemirror.js",
    "content": "// CodeMirror version 2.2\n//\n// All functions that need access to the editor's state live inside\n// the CodeMirror function. Below that, at the bottom of the file,\n// some utilities are defined.\n\n// CodeMirror is the only global var we claim\nvar CodeMirror = (function() {\n    // This is the function that produces an editor instance. It's\n    // closure is used to store the editor state.\n    function CodeMirror(place, givenOptions) {\n        // Determine effective options based on given values and defaults.\n        var options = {}, defaults = CodeMirror.defaults;\n        for (var opt in defaults)\n            if (defaults.hasOwnProperty(opt))\n                options[opt] = (givenOptions && givenOptions.hasOwnProperty(opt) ? givenOptions : defaults)[opt];\n\n        var targetDocument = options[\"document\"];\n        // The element in which the editor lives.\n        var wrapper = targetDocument.createElement(\"div\");\n        wrapper.className = \"CodeMirror\" + (options.lineWrapping ? \" CodeMirror-wrap\" : \"\");\n        // This mess creates the base DOM structure for the editor.\n        wrapper.innerHTML =\n            '<div style=\"overflow: hidden; position: relative; width: 3px; height: 0px;\">' + // Wraps and hides input textarea\n                '<textarea style=\"position: absolute; padding: 0; width: 1px;\" wrap=\"off\" ' +\n                'autocorrect=\"off\" autocapitalize=\"off\"></textarea></div>' +\n                '<div class=\"CodeMirror-scroll\" tabindex=\"-1\">' +\n                '<div style=\"position: relative\">' + // Set to the height of the text, causes scrolling\n                '<div style=\"position: relative\">' + // Moved around its parent to cover visible view\n                '<div class=\"CodeMirror-gutter\"><div class=\"CodeMirror-gutter-text\"></div></div>' +\n                // Provides positioning relative to (visible) text origin\n                '<div class=\"CodeMirror-lines\"><div style=\"position: relative\">' +\n                '<div style=\"position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden\"></div>' +\n                '<pre class=\"CodeMirror-cursor\">&#160;</pre>' + // Absolutely positioned blinky cursor\n                '<div></div>' + // This DIV contains the actual code\n                '</div></div></div></div></div>';\n        if (place.appendChild) place.appendChild(wrapper); else place(wrapper);\n        // I've never seen more elegant code in my life.\n        var inputDiv = wrapper.firstChild, input = inputDiv.firstChild,\n            scroller = wrapper.lastChild, code = scroller.firstChild,\n            mover = code.firstChild, gutter = mover.firstChild, gutterText = gutter.firstChild,\n            lineSpace = gutter.nextSibling.firstChild, measure = lineSpace.firstChild,\n            cursor = measure.nextSibling, lineDiv = cursor.nextSibling;\n        themeChanged();\n        // Needed to hide big blue blinking cursor on Mobile Safari\n        if (/AppleWebKit/.test(navigator.userAgent) && /Mobile\\/\\w+/.test(navigator.userAgent)) input.style.width = \"0px\";\n        if (!webkit) lineSpace.draggable = true;\n        if (options.tabindex != null) input.tabIndex = options.tabindex;\n        if (!options.gutter && !options.lineNumbers) gutter.style.display = \"none\";\n\n        // Check for problem with IE innerHTML not working when we have a\n        // P (or similar) parent node.\n        try { stringWidth(\"x\"); }\n        catch (e) {\n            if (e.message.match(/runtime/i))\n                e = new Error(\"A CodeMirror inside a P-style element does not work in Internet Explorer. (innerHTML bug)\");\n            throw e;\n        }\n\n        // Delayed object wrap timeouts, making sure only one is active. blinker holds an interval.\n        var poll = new Delayed(), highlight = new Delayed(), blinker;\n\n        // mode holds a mode API object. doc is the tree of Line objects,\n        // work an array of lines that should be parsed, and history the\n        // undo history (instance of History constructor).\n        var mode, doc = new BranchChunk([new LeafChunk([new Line(\"\")])]), work, focused;\n        loadMode();\n        // The selection. These are always maintained to point at valid\n        // positions. Inverted is used to remember that the user is\n        // selecting bottom-to-top.\n        var sel = {from: {line: 0, ch: 0}, to: {line: 0, ch: 0}, inverted: false};\n        // Selection-related flags. shiftSelecting obviously tracks\n        // whether the user is holding shift.\n        var shiftSelecting, lastClick, lastDoubleClick, draggingText, overwrite = false;\n        // Variables used by startOperation/endOperation to track what\n        // happened during the operation.\n        var updateInput, userSelChange, changes, textChanged, selectionChanged, leaveInputAlone,\n            gutterDirty, callbacks;\n        // Current visible range (may be bigger than the view window).\n        var displayOffset = 0, showingFrom = 0, showingTo = 0, lastSizeC = 0;\n        // bracketHighlighted is used to remember that a backet has been\n        // marked.\n        var bracketHighlighted;\n        // Tracks the maximum line length so that the horizontal scrollbar\n        // can be kept static when scrolling.\n        var maxLine = \"\", maxWidth, tabText = computeTabText();\n\n        // Initialize the content.\n        operation(function(){setValue(options.value || \"\"); updateInput = false;})();\n        var history = new History();\n\n        // Register our event handlers.\n        connect(scroller, \"mousedown\", operation(onMouseDown));\n        connect(scroller, \"dblclick\", operation(onDoubleClick));\n        connect(lineSpace, \"dragstart\", onDragStart);\n        connect(lineSpace, \"selectstart\", e_preventDefault);\n        // Gecko browsers fire contextmenu *after* opening the menu, at\n        // which point we can't mess with it anymore. Context menu is\n        // handled in onMouseDown for Gecko.\n        if (!gecko) connect(scroller, \"contextmenu\", onContextMenu);\n        connect(scroller, \"scroll\", function() {\n            updateDisplay([]);\n            if (options.fixedGutter) gutter.style.left = scroller.scrollLeft + \"px\";\n            if (options.onScroll) options.onScroll(instance);\n        });\n        connect(window, \"resize\", function() {updateDisplay(true);});\n        connect(input, \"keyup\", operation(onKeyUp));\n        connect(input, \"input\", fastPoll);\n        connect(input, \"keydown\", operation(onKeyDown));\n        connect(input, \"keypress\", operation(onKeyPress));\n        connect(input, \"focus\", onFocus);\n        connect(input, \"blur\", onBlur);\n\n        connect(scroller, \"dragenter\", e_stop);\n        connect(scroller, \"dragover\", e_stop);\n        connect(scroller, \"drop\", operation(onDrop));\n        connect(scroller, \"paste\", function(){focusInput(); fastPoll();});\n        connect(input, \"paste\", fastPoll);\n        connect(input, \"cut\", operation(function(){replaceSelection(\"\");}));\n\n        // IE throws unspecified error in certain cases, when\n        // trying to access activeElement before onload\n        var hasFocus; try { hasFocus = (targetDocument.activeElement == input); } catch(e) { }\n        if (hasFocus) setTimeout(onFocus, 20);\n        else onBlur();\n\n        function isLine(l) {return l >= 0 && l < doc.size;}\n        // The instance object that we'll return. Mostly calls out to\n        // local functions in the CodeMirror function. Some do some extra\n        // range checking and/or clipping. operation is used to wrap the\n        // call so that changes it makes are tracked, and the display is\n        // updated afterwards.\n        var instance = wrapper.CodeMirror = {\n            getValue: getValue,\n            setValue: operation(setValue),\n            getSelection: getSelection,\n            replaceSelection: operation(replaceSelection),\n            focus: function(){focusInput(); onFocus(); fastPoll();},\n            setOption: function(option, value) {\n                var oldVal = options[option];\n                options[option] = value;\n                if (option == \"mode\" || option == \"indentUnit\") loadMode();\n                else if (option == \"readOnly\" && value) {onBlur(); input.blur();}\n                else if (option == \"theme\") themeChanged();\n                else if (option == \"lineWrapping\" && oldVal != value) operation(wrappingChanged)();\n                else if (option == \"tabSize\") operation(tabsChanged)();\n                if (option == \"lineNumbers\" || option == \"gutter\" || option == \"firstLineNumber\" || option == \"theme\")\n                    operation(gutterChanged)();\n            },\n            getOption: function(option) {return options[option];},\n            undo: operation(undo),\n            redo: operation(redo),\n            indentLine: operation(function(n, dir) {\n                if (isLine(n)) indentLine(n, dir == null ? \"smart\" : dir ? \"add\" : \"subtract\");\n            }),\n            indentSelection: operation(indentSelected),\n            historySize: function() {return {undo: history.done.length, redo: history.undone.length};},\n            clearHistory: function() {history = new History();},\n            matchBrackets: operation(function(){matchBrackets(true);}),\n            getTokenAt: operation(function(pos) {\n                pos = clipPos(pos);\n                return getLine(pos.line).getTokenAt(mode, getStateBefore(pos.line), pos.ch);\n            }),\n            getStateAfter: function(line) {\n                line = clipLine(line == null ? doc.size - 1: line);\n                return getStateBefore(line + 1);\n            },\n            cursorCoords: function(start){\n                if (start == null) start = sel.inverted;\n                return pageCoords(start ? sel.from : sel.to);\n            },\n            charCoords: function(pos){return pageCoords(clipPos(pos));},\n            coordsChar: function(coords) {\n                var off = eltOffset(lineSpace);\n                return coordsChar(coords.x - off.left, coords.y - off.top);\n            },\n            markText: operation(markText),\n            setBookmark: setBookmark,\n            setMarker: operation(addGutterMarker),\n            clearMarker: operation(removeGutterMarker),\n            setLineClass: operation(setLineClass),\n            hideLine: operation(function(h) {return setLineHidden(h, true);}),\n            showLine: operation(function(h) {return setLineHidden(h, false);}),\n            onDeleteLine: function(line, f) {\n                if (typeof line == \"number\") {\n                    if (!isLine(line)) return null;\n                    line = getLine(line);\n                }\n                (line.handlers || (line.handlers = [])).push(f);\n                return line;\n            },\n            lineInfo: lineInfo,\n            addWidget: function(pos, node, scroll, vert, horiz) {\n                pos = localCoords(clipPos(pos));\n                var top = pos.yBot, left = pos.x;\n                node.style.position = \"absolute\";\n                code.appendChild(node);\n                if (vert == \"over\") top = pos.y;\n                else if (vert == \"near\") {\n                    var vspace = Math.max(scroller.offsetHeight, doc.height * textHeight()),\n                        hspace = Math.max(code.clientWidth, lineSpace.clientWidth) - paddingLeft();\n                    if (pos.yBot + node.offsetHeight > vspace && pos.y > node.offsetHeight)\n                        top = pos.y - node.offsetHeight;\n                    if (left + node.offsetWidth > hspace)\n                        left = hspace - node.offsetWidth;\n                }\n                node.style.top = (top + paddingTop()) + \"px\";\n                node.style.left = node.style.right = \"\";\n                if (horiz == \"right\") {\n                    left = code.clientWidth - node.offsetWidth;\n                    node.style.right = \"0px\";\n                } else {\n                    if (horiz == \"left\") left = 0;\n                    else if (horiz == \"middle\") left = (code.clientWidth - node.offsetWidth) / 2;\n                    node.style.left = (left + paddingLeft()) + \"px\";\n                }\n                if (scroll)\n                    scrollIntoView(left, top, left + node.offsetWidth, top + node.offsetHeight);\n            },\n\n            lineCount: function() {return doc.size;},\n            clipPos: clipPos,\n            getCursor: function(start) {\n                if (start == null) start = sel.inverted;\n                return copyPos(start ? sel.from : sel.to);\n            },\n            somethingSelected: function() {return !posEq(sel.from, sel.to);},\n            setCursor: operation(function(line, ch, user) {\n                if (ch == null && typeof line.line == \"number\") setCursor(line.line, line.ch, user);\n                else setCursor(line, ch, user);\n            }),\n            setSelection: operation(function(from, to, user) {\n                (user ? setSelectionUser : setSelection)(clipPos(from), clipPos(to || from));\n            }),\n            getLine: function(line) {if (isLine(line)) return getLine(line).text;},\n            getLineHandle: function(line) {if (isLine(line)) return getLine(line);},\n            setLine: operation(function(line, text) {\n                if (isLine(line)) replaceRange(text, {line: line, ch: 0}, {line: line, ch: getLine(line).text.length});\n            }),\n            removeLine: operation(function(line) {\n                if (isLine(line)) replaceRange(\"\", {line: line, ch: 0}, clipPos({line: line+1, ch: 0}));\n            }),\n            replaceRange: operation(replaceRange),\n            getRange: function(from, to) {return getRange(clipPos(from), clipPos(to));},\n\n            execCommand: function(cmd) {return commands[cmd](instance);},\n            // Stuff used by commands, probably not much use to outside code.\n            moveH: operation(moveH),\n            deleteH: operation(deleteH),\n            moveV: operation(moveV),\n            toggleOverwrite: function() {overwrite = !overwrite;},\n\n            posFromIndex: function(off) {\n                var lineNo = 0, ch;\n                doc.iter(0, doc.size, function(line) {\n                    var sz = line.text.length + 1;\n                    if (sz > off) { ch = off; return true; }\n                    off -= sz;\n                    ++lineNo;\n                });\n                return clipPos({line: lineNo, ch: ch});\n            },\n            indexFromPos: function (coords) {\n                if (coords.line < 0 || coords.ch < 0) return 0;\n                var index = coords.ch;\n                doc.iter(0, coords.line, function (line) {\n                    index += line.text.length + 1;\n                });\n                return index;\n            },\n\n            operation: function(f){return operation(f)();},\n            refresh: function(){updateDisplay(true);},\n            getInputField: function(){return input;},\n            getWrapperElement: function(){return wrapper;},\n            getScrollerElement: function(){return scroller;},\n            getGutterElement: function(){return gutter;}\n        };\n\n        function getLine(n) { return getLineAt(doc, n); }\n        function updateLineHeight(line, height) {\n            gutterDirty = true;\n            var diff = height - line.height;\n            for (var n = line; n; n = n.parent) n.height += diff;\n        }\n\n        function setValue(code) {\n            var top = {line: 0, ch: 0};\n            updateLines(top, {line: doc.size - 1, ch: getLine(doc.size-1).text.length},\n                splitLines(code), top, top);\n            updateInput = true;\n        }\n        function getValue(code) {\n            var text = [];\n            doc.iter(0, doc.size, function(line) { text.push(line.text); });\n            return text.join(\"\\n\");\n        }\n\n        function onMouseDown(e) {\n            setShift(e.shiftKey);\n            // Check whether this is a click in a widget\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\n                if (n.parentNode == code && n != mover) return;\n\n            // See if this is a click in the gutter\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\n                if (n.parentNode == gutterText) {\n                    if (options.onGutterClick)\n                        options.onGutterClick(instance, indexOf(gutterText.childNodes, n) + showingFrom, e);\n                    return e_preventDefault(e);\n                }\n\n            var start = posFromMouse(e);\n\n            switch (e_button(e)) {\n                case 3:\n                    if (gecko && !mac) onContextMenu(e);\n                    return;\n                case 2:\n                    if (start) setCursor(start.line, start.ch, true);\n                    return;\n            }\n            // For button 1, if it was clicked inside the editor\n            // (posFromMouse returning non-null), we have to adjust the\n            // selection.\n            if (!start) {if (e_target(e) == scroller) e_preventDefault(e); return;}\n\n            if (!focused) onFocus();\n\n            var now = +new Date;\n            if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) {\n                e_preventDefault(e);\n                setTimeout(focusInput, 20);\n                return selectLine(start.line);\n            } else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) {\n                lastDoubleClick = {time: now, pos: start};\n                e_preventDefault(e);\n                return selectWordAt(start);\n            } else { lastClick = {time: now, pos: start}; }\n\n            var last = start, going;\n            if (dragAndDrop && !posEq(sel.from, sel.to) &&\n                !posLess(start, sel.from) && !posLess(sel.to, start)) {\n                // Let the drag handler handle this.\n                if (webkit) lineSpace.draggable = true;\n                var up = connect(targetDocument, \"mouseup\", operation(function(e2) {\n                    if (webkit) lineSpace.draggable = false;\n                    draggingText = false;\n                    up();\n                    if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {\n                        e_preventDefault(e2);\n                        setCursor(start.line, start.ch, true);\n                        focusInput();\n                    }\n                }), true);\n                draggingText = true;\n                return;\n            }\n            e_preventDefault(e);\n            setCursor(start.line, start.ch, true);\n\n            function extend(e) {\n                var cur = posFromMouse(e, true);\n                if (cur && !posEq(cur, last)) {\n                    if (!focused) onFocus();\n                    last = cur;\n                    setSelectionUser(start, cur);\n                    updateInput = false;\n                    var visible = visibleLines();\n                    if (cur.line >= visible.to || cur.line < visible.from)\n                        going = setTimeout(operation(function(){extend(e);}), 150);\n                }\n            }\n\n            var move = connect(targetDocument, \"mousemove\", operation(function(e) {\n                clearTimeout(going);\n                e_preventDefault(e);\n                extend(e);\n            }), true);\n            var up = connect(targetDocument, \"mouseup\", operation(function(e) {\n                clearTimeout(going);\n                var cur = posFromMouse(e);\n                if (cur) setSelectionUser(start, cur);\n                e_preventDefault(e);\n                focusInput();\n                updateInput = true;\n                move(); up();\n            }), true);\n        }\n        function onDoubleClick(e) {\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\n                if (n.parentNode == gutterText) return e_preventDefault(e);\n            var start = posFromMouse(e);\n            if (!start) return;\n            lastDoubleClick = {time: +new Date, pos: start};\n            e_preventDefault(e);\n            selectWordAt(start);\n        }\n        function onDrop(e) {\n            e.preventDefault();\n            var pos = posFromMouse(e, true), files = e.dataTransfer.files;\n            if (!pos || options.readOnly) return;\n            if (files && files.length && window.FileReader && window.File) {\n                function loadFile(file, i) {\n                    var reader = new FileReader;\n                    reader.onload = function() {\n                        text[i] = reader.result;\n                        if (++read == n) {\n                            pos = clipPos(pos);\n                            operation(function() {\n                                var end = replaceRange(text.join(\"\"), pos, pos);\n                                setSelectionUser(pos, end);\n                            })();\n                        }\n                    };\n                    reader.readAsText(file);\n                }\n                var n = files.length, text = Array(n), read = 0;\n                for (var i = 0; i < n; ++i) loadFile(files[i], i);\n            }\n            else {\n                try {\n                    var text = e.dataTransfer.getData(\"Text\");\n                    if (text) {\n                        var end = replaceRange(text, pos, pos);\n                        var curFrom = sel.from, curTo = sel.to;\n                        setSelectionUser(pos, end);\n                        if (draggingText) replaceRange(\"\", curFrom, curTo);\n                        focusInput();\n                    }\n                }\n                catch(e){}\n            }\n        }\n        function onDragStart(e) {\n            var txt = getSelection();\n            // This will reset escapeElement\n            htmlEscape(txt);\n            e.dataTransfer.setDragImage(escapeElement, 0, 0);\n            e.dataTransfer.setData(\"Text\", txt);\n        }\n        function handleKeyBinding(e) {\n            var name = keyNames[e.keyCode], next = keyMap[options.keyMap].auto, bound, dropShift;\n            if (name == null || e.altGraphKey) {\n                if (next) options.keyMap = next;\n                return null;\n            }\n            if (e.altKey) name = \"Alt-\" + name;\n            if (e.ctrlKey) name = \"Ctrl-\" + name;\n            if (e.metaKey) name = \"Cmd-\" + name;\n            if (e.shiftKey && (bound = lookupKey(\"Shift-\" + name, options.extraKeys, options.keyMap))) {\n                dropShift = true;\n            } else {\n                bound = lookupKey(name, options.extraKeys, options.keyMap);\n            }\n            if (typeof bound == \"string\") {\n                if (commands.propertyIsEnumerable(bound)) bound = commands[bound];\n                else bound = null;\n            }\n            if (next && (bound || !isModifierKey(e))) options.keyMap = next;\n            if (!bound) return false;\n            if (dropShift) {\n                var prevShift = shiftSelecting;\n                shiftSelecting = null;\n                bound(instance);\n                shiftSelecting = prevShift;\n            } else bound(instance);\n            e_preventDefault(e);\n            return true;\n        }\n        var lastStoppedKey = null;\n        function onKeyDown(e) {\n            if (!focused) onFocus();\n            var code = e.keyCode;\n            // IE does strange things with escape.\n            if (ie && code == 27) { e.returnValue = false; }\n            setShift(code == 16 || e.shiftKey);\n            // First give onKeyEvent option a chance to handle this.\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\n            var handled = handleKeyBinding(e);\n            if (window.opera) {\n                lastStoppedKey = handled ? e.keyCode : null;\n                // Opera has no cut event... we try to at least catch the key combo\n                if (!handled && (mac ? e.metaKey : e.ctrlKey) && e.keyCode == 88)\n                    replaceSelection(\"\");\n            }\n        }\n        function onKeyPress(e) {\n            if (window.opera && e.keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\n            if (window.opera && !e.which && handleKeyBinding(e)) return;\n            if (options.electricChars && mode.electricChars) {\n                var ch = String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode);\n                if (mode.electricChars.indexOf(ch) > -1)\n                    setTimeout(operation(function() {indentLine(sel.to.line, \"smart\");}), 75);\n            }\n            fastPoll();\n        }\n        function onKeyUp(e) {\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\n            if (e.keyCode == 16) shiftSelecting = null;\n        }\n\n        function onFocus() {\n            if (options.readOnly) return;\n            if (!focused) {\n                if (options.onFocus) options.onFocus(instance);\n                focused = true;\n                if (wrapper.className.search(/\\bCodeMirror-focused\\b/) == -1)\n                    wrapper.className += \" CodeMirror-focused\";\n                if (!leaveInputAlone) resetInput(true);\n            }\n            slowPoll();\n            restartBlink();\n        }\n        function onBlur() {\n            if (focused) {\n                if (options.onBlur) options.onBlur(instance);\n                focused = false;\n                wrapper.className = wrapper.className.replace(\" CodeMirror-focused\", \"\");\n            }\n            clearInterval(blinker);\n            setTimeout(function() {if (!focused) shiftSelecting = null;}, 150);\n        }\n\n        // Replace the range from from to to by the strings in newText.\n        // Afterwards, set the selection to selFrom, selTo.\n        function updateLines(from, to, newText, selFrom, selTo) {\n            if (history) {\n                var old = [];\n                doc.iter(from.line, to.line + 1, function(line) { old.push(line.text); });\n                history.addChange(from.line, newText.length, old);\n                while (history.done.length > options.undoDepth) history.done.shift();\n            }\n            updateLinesNoUndo(from, to, newText, selFrom, selTo);\n        }\n        function unredoHelper(from, to) {\n            var change = from.pop();\n            if (change) {\n                var replaced = [], end = change.start + change.added;\n                doc.iter(change.start, end, function(line) { replaced.push(line.text); });\n                to.push({start: change.start, added: change.old.length, old: replaced});\n                var pos = clipPos({line: change.start + change.old.length - 1,\n                    ch: editEnd(replaced[replaced.length-1], change.old[change.old.length-1])});\n                updateLinesNoUndo({line: change.start, ch: 0}, {line: end - 1, ch: getLine(end-1).text.length}, change.old, pos, pos);\n                updateInput = true;\n            }\n        }\n        function undo() {unredoHelper(history.done, history.undone);}\n        function redo() {unredoHelper(history.undone, history.done);}\n\n        function updateLinesNoUndo(from, to, newText, selFrom, selTo) {\n            var recomputeMaxLength = false, maxLineLength = maxLine.length;\n            if (!options.lineWrapping)\n                doc.iter(from.line, to.line, function(line) {\n                    if (line.text.length == maxLineLength) {recomputeMaxLength = true; return true;}\n                });\n            if (from.line != to.line || newText.length > 1) gutterDirty = true;\n\n            var nlines = to.line - from.line, firstLine = getLine(from.line), lastLine = getLine(to.line);\n            // First adjust the line structure, taking some care to leave highlighting intact.\n            if (from.ch == 0 && to.ch == 0 && newText[newText.length - 1] == \"\") {\n                // This is a whole-line replace. Treated specially to make\n                // sure line objects move the way they are supposed to.\n                var added = [], prevLine = null;\n                if (from.line) {\n                    prevLine = getLine(from.line - 1);\n                    prevLine.fixMarkEnds(lastLine);\n                } else lastLine.fixMarkStarts();\n                for (var i = 0, e = newText.length - 1; i < e; ++i)\n                    added.push(Line.inheritMarks(newText[i], prevLine));\n                if (nlines) doc.remove(from.line, nlines, callbacks);\n                if (added.length) doc.insert(from.line, added);\n            } else if (firstLine == lastLine) {\n                if (newText.length == 1)\n                    firstLine.replace(from.ch, to.ch, newText[0]);\n                else {\n                    lastLine = firstLine.split(to.ch, newText[newText.length-1]);\n                    firstLine.replace(from.ch, null, newText[0]);\n                    firstLine.fixMarkEnds(lastLine);\n                    var added = [];\n                    for (var i = 1, e = newText.length - 1; i < e; ++i)\n                        added.push(Line.inheritMarks(newText[i], firstLine));\n                    added.push(lastLine);\n                    doc.insert(from.line + 1, added);\n                }\n            } else if (newText.length == 1) {\n                firstLine.replace(from.ch, null, newText[0]);\n                lastLine.replace(null, to.ch, \"\");\n                firstLine.append(lastLine);\n                doc.remove(from.line + 1, nlines, callbacks);\n            } else {\n                var added = [];\n                firstLine.replace(from.ch, null, newText[0]);\n                lastLine.replace(null, to.ch, newText[newText.length-1]);\n                firstLine.fixMarkEnds(lastLine);\n                for (var i = 1, e = newText.length - 1; i < e; ++i)\n                    added.push(Line.inheritMarks(newText[i], firstLine));\n                if (nlines > 1) doc.remove(from.line + 1, nlines - 1, callbacks);\n                doc.insert(from.line + 1, added);\n            }\n            if (options.lineWrapping) {\n                var perLine = scroller.clientWidth / charWidth() - 3;\n                doc.iter(from.line, from.line + newText.length, function(line) {\n                    if (line.hidden) return;\n                    var guess = Math.ceil(line.text.length / perLine) || 1;\n                    if (guess != line.height) updateLineHeight(line, guess);\n                });\n            } else {\n                doc.iter(from.line, i + newText.length, function(line) {\n                    var l = line.text;\n                    if (l.length > maxLineLength) {\n                        maxLine = l; maxLineLength = l.length; maxWidth = null;\n                        recomputeMaxLength = false;\n                    }\n                });\n                if (recomputeMaxLength) {\n                    maxLineLength = 0; maxLine = \"\"; maxWidth = null;\n                    doc.iter(0, doc.size, function(line) {\n                        var l = line.text;\n                        if (l.length > maxLineLength) {\n                            maxLineLength = l.length; maxLine = l;\n                        }\n                    });\n                }\n            }\n\n            // Add these lines to the work array, so that they will be\n            // highlighted. Adjust work lines if lines were added/removed.\n            var newWork = [], lendiff = newText.length - nlines - 1;\n            for (var i = 0, l = work.length; i < l; ++i) {\n                var task = work[i];\n                if (task < from.line) newWork.push(task);\n                else if (task > to.line) newWork.push(task + lendiff);\n            }\n            var hlEnd = from.line + Math.min(newText.length, 500);\n            highlightLines(from.line, hlEnd);\n            newWork.push(hlEnd);\n            work = newWork;\n            startWorker(100);\n            // Remember that these lines changed, for updating the display\n            changes.push({from: from.line, to: to.line + 1, diff: lendiff});\n            var changeObj = {from: from, to: to, text: newText};\n            if (textChanged) {\n                for (var cur = textChanged; cur.next; cur = cur.next) {}\n                cur.next = changeObj;\n            } else textChanged = changeObj;\n\n            // Update the selection\n            function updateLine(n) {return n <= Math.min(to.line, to.line + lendiff) ? n : n + lendiff;}\n            setSelection(selFrom, selTo, updateLine(sel.from.line), updateLine(sel.to.line));\n\n            // Make sure the scroll-size div has the correct height.\n            code.style.height = (doc.height * textHeight() + 2 * paddingTop()) + \"px\";\n        }\n\n        function replaceRange(code, from, to) {\n            from = clipPos(from);\n            if (!to) to = from; else to = clipPos(to);\n            code = splitLines(code);\n            function adjustPos(pos) {\n                if (posLess(pos, from)) return pos;\n                if (!posLess(to, pos)) return end;\n                var line = pos.line + code.length - (to.line - from.line) - 1;\n                var ch = pos.ch;\n                if (pos.line == to.line)\n                    ch += code[code.length-1].length - (to.ch - (to.line == from.line ? from.ch : 0));\n                return {line: line, ch: ch};\n            }\n            var end;\n            replaceRange1(code, from, to, function(end1) {\n                end = end1;\n                return {from: adjustPos(sel.from), to: adjustPos(sel.to)};\n            });\n            return end;\n        }\n        function replaceSelection(code, collapse) {\n            replaceRange1(splitLines(code), sel.from, sel.to, function(end) {\n                if (collapse == \"end\") return {from: end, to: end};\n                else if (collapse == \"start\") return {from: sel.from, to: sel.from};\n                else return {from: sel.from, to: end};\n            });\n        }\n        function replaceRange1(code, from, to, computeSel) {\n            var endch = code.length == 1 ? code[0].length + from.ch : code[code.length-1].length;\n            var newSel = computeSel({line: from.line + code.length - 1, ch: endch});\n            updateLines(from, to, code, newSel.from, newSel.to);\n        }\n\n        function getRange(from, to) {\n            var l1 = from.line, l2 = to.line;\n            if (l1 == l2) return getLine(l1).text.slice(from.ch, to.ch);\n            var code = [getLine(l1).text.slice(from.ch)];\n            doc.iter(l1 + 1, l2, function(line) { code.push(line.text); });\n            code.push(getLine(l2).text.slice(0, to.ch));\n            return code.join(\"\\n\");\n        }\n        function getSelection() {\n            return getRange(sel.from, sel.to);\n        }\n\n        var pollingFast = false; // Ensures slowPoll doesn't cancel fastPoll\n        function slowPoll() {\n            if (pollingFast) return;\n            poll.set(options.pollInterval, function() {\n                startOperation();\n                readInput();\n                if (focused) slowPoll();\n                endOperation();\n            });\n        }\n        function fastPoll() {\n            var missed = false;\n            pollingFast = true;\n            function p() {\n                startOperation();\n                var changed = readInput();\n                if (!changed && !missed) {missed = true; poll.set(60, p);}\n                else {pollingFast = false; slowPoll();}\n                endOperation();\n            }\n            poll.set(20, p);\n        }\n\n        // Previnput is a hack to work with IME. If we reset the textarea\n        // on every change, that breaks IME. So we look for changes\n        // compared to the previous content instead. (Modern browsers have\n        // events that indicate IME taking place, but these are not widely\n        // supported or compatible enough yet to rely on.)\n        var prevInput = \"\";\n        function readInput() {\n            if (leaveInputAlone || !focused || hasSelection(input)) return false;\n            var text = input.value;\n            if (text == prevInput) return false;\n            shiftSelecting = null;\n            var same = 0, l = Math.min(prevInput.length, text.length);\n            while (same < l && prevInput[same] == text[same]) ++same;\n            if (same < prevInput.length)\n                sel.from = {line: sel.from.line, ch: sel.from.ch - (prevInput.length - same)};\n            else if (overwrite && posEq(sel.from, sel.to))\n                sel.to = {line: sel.to.line, ch: Math.min(getLine(sel.to.line).text.length, sel.to.ch + (text.length - same))};\n            replaceSelection(text.slice(same), \"end\");\n            prevInput = text;\n            return true;\n        }\n        function resetInput(user) {\n            if (!posEq(sel.from, sel.to)) {\n                prevInput = \"\";\n                input.value = getSelection();\n                input.select();\n            } else if (user) prevInput = input.value = \"\";\n        }\n\n        function focusInput() {\n            if (!options.readOnly) input.focus();\n        }\n\n        function scrollEditorIntoView() {\n            if (!cursor.getBoundingClientRect) return;\n            var rect = cursor.getBoundingClientRect();\n            // IE returns bogus coordinates when the instance sits inside of an iframe and the cursor is hidden\n            if (ie && rect.top == rect.bottom) return;\n            var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);\n            if (rect.top < 0 || rect.bottom > winH) cursor.scrollIntoView();\n        }\n        function scrollCursorIntoView() {\n            var cursor = localCoords(sel.inverted ? sel.from : sel.to);\n            var x = options.lineWrapping ? Math.min(cursor.x, lineSpace.offsetWidth) : cursor.x;\n            return scrollIntoView(x, cursor.y, x, cursor.yBot);\n        }\n        function scrollIntoView(x1, y1, x2, y2) {\n            var pl = paddingLeft(), pt = paddingTop(), lh = textHeight();\n            y1 += pt; y2 += pt; x1 += pl; x2 += pl;\n            var screen = scroller.clientHeight, screentop = scroller.scrollTop, scrolled = false, result = true;\n            if (y1 < screentop) {scroller.scrollTop = Math.max(0, y1 - 2*lh); scrolled = true;}\n            else if (y2 > screentop + screen) {scroller.scrollTop = y2 + lh - screen; scrolled = true;}\n\n            var screenw = scroller.clientWidth, screenleft = scroller.scrollLeft;\n            var gutterw = options.fixedGutter ? gutter.clientWidth : 0;\n            if (x1 < screenleft + gutterw) {\n                if (x1 < 50) x1 = 0;\n                scroller.scrollLeft = Math.max(0, x1 - 10 - gutterw);\n                scrolled = true;\n            }\n            else if (x2 > screenw + screenleft - 3) {\n                scroller.scrollLeft = x2 + 10 - screenw;\n                scrolled = true;\n                if (x2 > code.clientWidth) result = false;\n            }\n            if (scrolled && options.onScroll) options.onScroll(instance);\n            return result;\n        }\n\n        function visibleLines() {\n            var lh = textHeight(), top = scroller.scrollTop - paddingTop();\n            var from_height = Math.max(0, Math.floor(top / lh));\n            var to_height = Math.ceil((top + scroller.clientHeight) / lh);\n            return {from: lineAtHeight(doc, from_height),\n                to: lineAtHeight(doc, to_height)};\n        }\n        // Uses a set of changes plus the current scroll position to\n        // determine which DOM updates have to be made, and makes the\n        // updates.\n        function updateDisplay(changes, suppressCallback) {\n            if (!scroller.clientWidth) {\n                showingFrom = showingTo = displayOffset = 0;\n                return;\n            }\n            // Compute the new visible window\n            var visible = visibleLines();\n            // Bail out if the visible area is already rendered and nothing changed.\n            if (changes !== true && changes.length == 0 && visible.from >= showingFrom && visible.to <= showingTo) return;\n            var from = Math.max(visible.from - 100, 0), to = Math.min(doc.size, visible.to + 100);\n            if (showingFrom < from && from - showingFrom < 20) from = showingFrom;\n            if (showingTo > to && showingTo - to < 20) to = Math.min(doc.size, showingTo);\n\n            // Create a range of theoretically intact lines, and punch holes\n            // in that using the change info.\n            var intact = changes === true ? [] :\n                computeIntact([{from: showingFrom, to: showingTo, domStart: 0}], changes);\n            // Clip off the parts that won't be visible\n            var intactLines = 0;\n            for (var i = 0; i < intact.length; ++i) {\n                var range = intact[i];\n                if (range.from < from) {range.domStart += (from - range.from); range.from = from;}\n                if (range.to > to) range.to = to;\n                if (range.from >= range.to) intact.splice(i--, 1);\n                else intactLines += range.to - range.from;\n            }\n            if (intactLines == to - from) return;\n            intact.sort(function(a, b) {return a.domStart - b.domStart;});\n\n            var th = textHeight(), gutterDisplay = gutter.style.display;\n            lineDiv.style.display = gutter.style.display = \"none\";\n            patchDisplay(from, to, intact);\n            lineDiv.style.display = \"\";\n\n            // Position the mover div to align with the lines it's supposed\n            // to be showing (which will cover the visible display)\n            var different = from != showingFrom || to != showingTo || lastSizeC != scroller.clientHeight + th;\n            // This is just a bogus formula that detects when the editor is\n            // resized or the font size changes.\n            if (different) lastSizeC = scroller.clientHeight + th;\n            showingFrom = from; showingTo = to;\n            displayOffset = heightAtLine(doc, from);\n            mover.style.top = (displayOffset * th) + \"px\";\n            code.style.height = (doc.height * th + 2 * paddingTop()) + \"px\";\n\n            // Since this is all rather error prone, it is honoured with the\n            // only assertion in the whole file.\n            if (lineDiv.childNodes.length != showingTo - showingFrom)\n                throw new Error(\"BAD PATCH! \" + JSON.stringify(intact) + \" size=\" + (showingTo - showingFrom) +\n                    \" nodes=\" + lineDiv.childNodes.length);\n\n            if (options.lineWrapping) {\n                maxWidth = scroller.clientWidth;\n                var curNode = lineDiv.firstChild;\n                doc.iter(showingFrom, showingTo, function(line) {\n                    if (!line.hidden) {\n                        var height = Math.round(curNode.offsetHeight / th) || 1;\n                        if (line.height != height) {updateLineHeight(line, height); gutterDirty = true;}\n                    }\n                    curNode = curNode.nextSibling;\n                });\n            } else {\n                if (maxWidth == null) maxWidth = stringWidth(maxLine);\n                if (maxWidth > scroller.clientWidth) {\n                    lineSpace.style.width = maxWidth + \"px\";\n                    // Needed to prevent odd wrapping/hiding of widgets placed in here.\n                    code.style.width = \"\";\n                    code.style.width = scroller.scrollWidth + \"px\";\n                } else {\n                    lineSpace.style.width = code.style.width = \"\";\n                }\n            }\n            gutter.style.display = gutterDisplay;\n            if (different || gutterDirty) updateGutter();\n            updateCursor();\n            if (!suppressCallback && options.onUpdate) options.onUpdate(instance);\n            return true;\n        }\n\n        function computeIntact(intact, changes) {\n            for (var i = 0, l = changes.length || 0; i < l; ++i) {\n                var change = changes[i], intact2 = [], diff = change.diff || 0;\n                for (var j = 0, l2 = intact.length; j < l2; ++j) {\n                    var range = intact[j];\n                    if (change.to <= range.from && change.diff)\n                        intact2.push({from: range.from + diff, to: range.to + diff,\n                            domStart: range.domStart});\n                    else if (change.to <= range.from || change.from >= range.to)\n                        intact2.push(range);\n                    else {\n                        if (change.from > range.from)\n                            intact2.push({from: range.from, to: change.from, domStart: range.domStart});\n                        if (change.to < range.to)\n                            intact2.push({from: change.to + diff, to: range.to + diff,\n                                domStart: range.domStart + (change.to - range.from)});\n                    }\n                }\n                intact = intact2;\n            }\n            return intact;\n        }\n\n        function patchDisplay(from, to, intact) {\n            // The first pass removes the DOM nodes that aren't intact.\n            if (!intact.length) lineDiv.innerHTML = \"\";\n            else {\n                function killNode(node) {\n                    var tmp = node.nextSibling;\n                    node.parentNode.removeChild(node);\n                    return tmp;\n                }\n                var domPos = 0, curNode = lineDiv.firstChild, n;\n                for (var i = 0; i < intact.length; ++i) {\n                    var cur = intact[i];\n                    while (cur.domStart > domPos) {curNode = killNode(curNode); domPos++;}\n                    for (var j = 0, e = cur.to - cur.from; j < e; ++j) {curNode = curNode.nextSibling; domPos++;}\n                }\n                while (curNode) curNode = killNode(curNode);\n            }\n            // This pass fills in the lines that actually changed.\n            var nextIntact = intact.shift(), curNode = lineDiv.firstChild, j = from;\n            var sfrom = sel.from.line, sto = sel.to.line, inSel = sfrom < from && sto >= from;\n            var scratch = targetDocument.createElement(\"div\"), newElt;\n            doc.iter(from, to, function(line) {\n                var ch1 = null, ch2 = null;\n                if (inSel) {\n                    ch1 = 0;\n                    if (sto == j) {inSel = false; ch2 = sel.to.ch;}\n                } else if (sfrom == j) {\n                    if (sto == j) {ch1 = sel.from.ch; ch2 = sel.to.ch;}\n                    else {inSel = true; ch1 = sel.from.ch;}\n                }\n                if (nextIntact && nextIntact.to == j) nextIntact = intact.shift();\n                if (!nextIntact || nextIntact.from > j) {\n                    if (line.hidden) scratch.innerHTML = \"<pre></pre>\";\n                    else scratch.innerHTML = line.getHTML(ch1, ch2, true, tabText);\n                    lineDiv.insertBefore(scratch.firstChild, curNode);\n                } else {\n                    curNode = curNode.nextSibling;\n                }\n                ++j;\n            });\n        }\n\n        function updateGutter() {\n            if (!options.gutter && !options.lineNumbers) return;\n            var hText = mover.offsetHeight, hEditor = scroller.clientHeight;\n            gutter.style.height = (hText - hEditor < 2 ? hEditor : hText) + \"px\";\n            var html = [], i = showingFrom;\n            doc.iter(showingFrom, Math.max(showingTo, showingFrom + 1), function(line) {\n                if (line.hidden) {\n                    html.push(\"<pre></pre>\");\n                } else {\n                    var marker = line.gutterMarker;\n                    var text = options.lineNumbers ? i + options.firstLineNumber : null;\n                    if (marker && marker.text)\n                        text = marker.text.replace(\"%N%\", text != null ? text : \"\");\n                    else if (text == null)\n                        text = \"\\u00a0\";\n                    html.push((marker && marker.style ? '<pre class=\"' + marker.style + '\">' : \"<pre>\"), text);\n                    for (var j = 1; j < line.height; ++j) html.push(\"<br/>&#160;\");\n                    html.push(\"</pre>\");\n                }\n                ++i;\n            });\n            gutter.style.display = \"none\";\n            gutterText.innerHTML = html.join(\"\");\n            var minwidth = String(doc.size).length, firstNode = gutterText.firstChild, val = eltText(firstNode), pad = \"\";\n            while (val.length + pad.length < minwidth) pad += \"\\u00a0\";\n            if (pad) firstNode.insertBefore(targetDocument.createTextNode(pad), firstNode.firstChild);\n            gutter.style.display = \"\";\n            lineSpace.style.marginLeft = gutter.offsetWidth + \"px\";\n            gutterDirty = false;\n        }\n        function updateCursor() {\n            var head = sel.inverted ? sel.from : sel.to, lh = textHeight();\n            var pos = localCoords(head, true);\n            var wrapOff = eltOffset(wrapper), lineOff = eltOffset(lineDiv);\n            inputDiv.style.top = (pos.y + lineOff.top - wrapOff.top) + \"px\";\n            inputDiv.style.left = (pos.x + lineOff.left - wrapOff.left) + \"px\";\n            if (posEq(sel.from, sel.to)) {\n                cursor.style.top = pos.y + \"px\";\n                cursor.style.left = (options.lineWrapping ? Math.min(pos.x, lineSpace.offsetWidth) : pos.x) + \"px\";\n                cursor.style.display = \"\";\n            }\n            else cursor.style.display = \"none\";\n        }\n\n        function setShift(val) {\n            if (val) shiftSelecting = shiftSelecting || (sel.inverted ? sel.to : sel.from);\n            else shiftSelecting = null;\n        }\n        function setSelectionUser(from, to) {\n            var sh = shiftSelecting && clipPos(shiftSelecting);\n            if (sh) {\n                if (posLess(sh, from)) from = sh;\n                else if (posLess(to, sh)) to = sh;\n            }\n            setSelection(from, to);\n            userSelChange = true;\n        }\n        // Update the selection. Last two args are only used by\n        // updateLines, since they have to be expressed in the line\n        // numbers before the update.\n        function setSelection(from, to, oldFrom, oldTo) {\n            goalColumn = null;\n            if (oldFrom == null) {oldFrom = sel.from.line; oldTo = sel.to.line;}\n            if (posEq(sel.from, from) && posEq(sel.to, to)) return;\n            if (posLess(to, from)) {var tmp = to; to = from; from = tmp;}\n\n            // Skip over hidden lines.\n            if (from.line != oldFrom) from = skipHidden(from, oldFrom, sel.from.ch);\n            if (to.line != oldTo) to = skipHidden(to, oldTo, sel.to.ch);\n\n            if (posEq(from, to)) sel.inverted = false;\n            else if (posEq(from, sel.to)) sel.inverted = false;\n            else if (posEq(to, sel.from)) sel.inverted = true;\n\n            // Some ugly logic used to only mark the lines that actually did\n            // see a change in selection as changed, rather than the whole\n            // selected range.\n            if (posEq(from, to)) {\n                if (!posEq(sel.from, sel.to))\n                    changes.push({from: oldFrom, to: oldTo + 1});\n            }\n            else if (posEq(sel.from, sel.to)) {\n                changes.push({from: from.line, to: to.line + 1});\n            }\n            else {\n                if (!posEq(from, sel.from)) {\n                    if (from.line < oldFrom)\n                        changes.push({from: from.line, to: Math.min(to.line, oldFrom) + 1});\n                    else\n                        changes.push({from: oldFrom, to: Math.min(oldTo, from.line) + 1});\n                }\n                if (!posEq(to, sel.to)) {\n                    if (to.line < oldTo)\n                        changes.push({from: Math.max(oldFrom, from.line), to: oldTo + 1});\n                    else\n                        changes.push({from: Math.max(from.line, oldTo), to: to.line + 1});\n                }\n            }\n            sel.from = from; sel.to = to;\n            selectionChanged = true;\n        }\n        function skipHidden(pos, oldLine, oldCh) {\n            function getNonHidden(dir) {\n                var lNo = pos.line + dir, end = dir == 1 ? doc.size : -1;\n                while (lNo != end) {\n                    var line = getLine(lNo);\n                    if (!line.hidden) {\n                        var ch = pos.ch;\n                        if (ch > oldCh || ch > line.text.length) ch = line.text.length;\n                        return {line: lNo, ch: ch};\n                    }\n                    lNo += dir;\n                }\n            }\n            var line = getLine(pos.line);\n            if (!line.hidden) return pos;\n            if (pos.line >= oldLine) return getNonHidden(1) || getNonHidden(-1);\n            else return getNonHidden(-1) || getNonHidden(1);\n        }\n        function setCursor(line, ch, user) {\n            var pos = clipPos({line: line, ch: ch || 0});\n            (user ? setSelectionUser : setSelection)(pos, pos);\n        }\n\n        function clipLine(n) {return Math.max(0, Math.min(n, doc.size-1));}\n        function clipPos(pos) {\n            if (pos.line < 0) return {line: 0, ch: 0};\n            if (pos.line >= doc.size) return {line: doc.size-1, ch: getLine(doc.size-1).text.length};\n            var ch = pos.ch, linelen = getLine(pos.line).text.length;\n            if (ch == null || ch > linelen) return {line: pos.line, ch: linelen};\n            else if (ch < 0) return {line: pos.line, ch: 0};\n            else return pos;\n        }\n\n        function findPosH(dir, unit) {\n            var end = sel.inverted ? sel.from : sel.to, line = end.line, ch = end.ch;\n            var lineObj = getLine(line);\n            function findNextLine() {\n                for (var l = line + dir, e = dir < 0 ? -1 : doc.size; l != e; l += dir) {\n                    var lo = getLine(l);\n                    if (!lo.hidden) { line = l; lineObj = lo; return true; }\n                }\n            }\n            function moveOnce(boundToLine) {\n                if (ch == (dir < 0 ? 0 : lineObj.text.length)) {\n                    if (!boundToLine && findNextLine()) ch = dir < 0 ? lineObj.text.length : 0;\n                    else return false;\n                } else ch += dir;\n                return true;\n            }\n            if (unit == \"char\") moveOnce();\n            else if (unit == \"column\") moveOnce(true);\n            else if (unit == \"word\") {\n                var sawWord = false;\n                for (;;) {\n                    if (dir < 0) if (!moveOnce()) break;\n                    if (isWordChar(lineObj.text.charAt(ch))) sawWord = true;\n                    else if (sawWord) {if (dir < 0) {dir = 1; moveOnce();} break;}\n                    if (dir > 0) if (!moveOnce()) break;\n                }\n            }\n            return {line: line, ch: ch};\n        }\n        function moveH(dir, unit) {\n            var pos = dir < 0 ? sel.from : sel.to;\n            if (shiftSelecting || posEq(sel.from, sel.to)) pos = findPosH(dir, unit);\n            setCursor(pos.line, pos.ch, true);\n        }\n        function deleteH(dir, unit) {\n            if (!posEq(sel.from, sel.to)) replaceRange(\"\", sel.from, sel.to);\n            else if (dir < 0) replaceRange(\"\", findPosH(dir, unit), sel.to);\n            else replaceRange(\"\", sel.from, findPosH(dir, unit));\n            userSelChange = true;\n        }\n        var goalColumn = null;\n        function moveV(dir, unit) {\n            var dist = 0, pos = localCoords(sel.inverted ? sel.from : sel.to, true);\n            if (goalColumn != null) pos.x = goalColumn;\n            if (unit == \"page\") dist = scroller.clientHeight;\n            else if (unit == \"line\") dist = textHeight();\n            var target = coordsChar(pos.x, pos.y + dist * dir + 2);\n            setCursor(target.line, target.ch, true);\n            goalColumn = pos.x;\n        }\n\n        function selectWordAt(pos) {\n            var line = getLine(pos.line).text;\n            var start = pos.ch, end = pos.ch;\n            while (start > 0 && isWordChar(line.charAt(start - 1))) --start;\n            while (end < line.length && isWordChar(line.charAt(end))) ++end;\n            setSelectionUser({line: pos.line, ch: start}, {line: pos.line, ch: end});\n        }\n        function selectLine(line) {\n            setSelectionUser({line: line, ch: 0}, {line: line, ch: getLine(line).text.length});\n        }\n        function indentSelected(mode) {\n            if (posEq(sel.from, sel.to)) return indentLine(sel.from.line, mode);\n            var e = sel.to.line - (sel.to.ch ? 0 : 1);\n            for (var i = sel.from.line; i <= e; ++i) indentLine(i, mode);\n        }\n\n        function indentLine(n, how) {\n            if (!how) how = \"add\";\n            if (how == \"smart\") {\n                if (!mode.indent) how = \"prev\";\n                else var state = getStateBefore(n);\n            }\n\n            var line = getLine(n), curSpace = line.indentation(options.tabSize),\n                curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n            if (how == \"prev\") {\n                if (n) indentation = getLine(n-1).indentation(options.tabSize);\n                else indentation = 0;\n            }\n            else if (how == \"smart\") indentation = mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n            else if (how == \"add\") indentation = curSpace + options.indentUnit;\n            else if (how == \"subtract\") indentation = curSpace - options.indentUnit;\n            indentation = Math.max(0, indentation);\n            var diff = indentation - curSpace;\n\n            if (!diff) {\n                if (sel.from.line != n && sel.to.line != n) return;\n                var indentString = curSpaceString;\n            }\n            else {\n                var indentString = \"\", pos = 0;\n                if (options.indentWithTabs)\n                    for (var i = Math.floor(indentation / options.tabSize); i; --i) {pos += options.tabSize; indentString += \"\\t\";}\n                while (pos < indentation) {++pos; indentString += \" \";}\n            }\n\n            replaceRange(indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length});\n        }\n\n        function loadMode() {\n            mode = CodeMirror.getMode(options, options.mode);\n            doc.iter(0, doc.size, function(line) { line.stateAfter = null; });\n            work = [0];\n            startWorker();\n        }\n        function gutterChanged() {\n            var visible = options.gutter || options.lineNumbers;\n            gutter.style.display = visible ? \"\" : \"none\";\n            if (visible) gutterDirty = true;\n            else lineDiv.parentNode.style.marginLeft = 0;\n        }\n        function wrappingChanged(from, to) {\n            if (options.lineWrapping) {\n                wrapper.className += \" CodeMirror-wrap\";\n                var perLine = scroller.clientWidth / charWidth() - 3;\n                doc.iter(0, doc.size, function(line) {\n                    if (line.hidden) return;\n                    var guess = Math.ceil(line.text.length / perLine) || 1;\n                    if (guess != 1) updateLineHeight(line, guess);\n                });\n                lineSpace.style.width = code.style.width = \"\";\n            } else {\n                wrapper.className = wrapper.className.replace(\" CodeMirror-wrap\", \"\");\n                maxWidth = null; maxLine = \"\";\n                doc.iter(0, doc.size, function(line) {\n                    if (line.height != 1 && !line.hidden) updateLineHeight(line, 1);\n                    if (line.text.length > maxLine.length) maxLine = line.text;\n                });\n            }\n            changes.push({from: 0, to: doc.size});\n        }\n        function computeTabText() {\n            for (var str = '<span class=\"cm-tab\">', i = 0; i < options.tabSize; ++i) str += \" \";\n            return str + \"</span>\";\n        }\n        function tabsChanged() {\n            tabText = computeTabText();\n            updateDisplay(true);\n        }\n        function themeChanged() {\n            scroller.className = scroller.className.replace(/\\s*cm-s-\\w+/g, \"\") +\n                options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n        }\n\n        function TextMarker() { this.set = []; }\n        TextMarker.prototype.clear = operation(function() {\n            var min = Infinity, max = -Infinity;\n            for (var i = 0, e = this.set.length; i < e; ++i) {\n                var line = this.set[i], mk = line.marked;\n                if (!mk || !line.parent) continue;\n                var lineN = lineNo(line);\n                min = Math.min(min, lineN); max = Math.max(max, lineN);\n                for (var j = 0; j < mk.length; ++j)\n                    if (mk[j].set == this.set) mk.splice(j--, 1);\n            }\n            if (min != Infinity)\n                changes.push({from: min, to: max + 1});\n        });\n        TextMarker.prototype.find = function() {\n            var from, to;\n            for (var i = 0, e = this.set.length; i < e; ++i) {\n                var line = this.set[i], mk = line.marked;\n                for (var j = 0; j < mk.length; ++j) {\n                    var mark = mk[j];\n                    if (mark.set == this.set) {\n                        if (mark.from != null || mark.to != null) {\n                            var found = lineNo(line);\n                            if (found != null) {\n                                if (mark.from != null) from = {line: found, ch: mark.from};\n                                if (mark.to != null) to = {line: found, ch: mark.to};\n                            }\n                        }\n                    }\n                }\n            }\n            return {from: from, to: to};\n        };\n\n        function markText(from, to, className) {\n            from = clipPos(from); to = clipPos(to);\n            var tm = new TextMarker();\n            function add(line, from, to, className) {\n                getLine(line).addMark(new MarkedText(from, to, className, tm.set));\n            }\n            if (from.line == to.line) add(from.line, from.ch, to.ch, className);\n            else {\n                add(from.line, from.ch, null, className);\n                for (var i = from.line + 1, e = to.line; i < e; ++i)\n                    add(i, null, null, className);\n                add(to.line, null, to.ch, className);\n            }\n            changes.push({from: from.line, to: to.line + 1});\n            return tm;\n        }\n\n        function setBookmark(pos) {\n            pos = clipPos(pos);\n            var bm = new Bookmark(pos.ch);\n            getLine(pos.line).addMark(bm);\n            return bm;\n        }\n\n        function addGutterMarker(line, text, className) {\n            if (typeof line == \"number\") line = getLine(clipLine(line));\n            line.gutterMarker = {text: text, style: className};\n            gutterDirty = true;\n            return line;\n        }\n        function removeGutterMarker(line) {\n            if (typeof line == \"number\") line = getLine(clipLine(line));\n            line.gutterMarker = null;\n            gutterDirty = true;\n        }\n\n        function changeLine(handle, op) {\n            var no = handle, line = handle;\n            if (typeof handle == \"number\") line = getLine(clipLine(handle));\n            else no = lineNo(handle);\n            if (no == null) return null;\n            if (op(line, no)) changes.push({from: no, to: no + 1});\n            else return null;\n            return line;\n        }\n        function setLineClass(handle, className) {\n            return changeLine(handle, function(line) {\n                if (line.className != className) {\n                    line.className = className;\n                    return true;\n                }\n            });\n        }\n        function setLineHidden(handle, hidden) {\n            return changeLine(handle, function(line, no) {\n                if (line.hidden != hidden) {\n                    line.hidden = hidden;\n                    updateLineHeight(line, hidden ? 0 : 1);\n                    if (hidden && (sel.from.line == no || sel.to.line == no))\n                        setSelection(skipHidden(sel.from, sel.from.line, sel.from.ch),\n                            skipHidden(sel.to, sel.to.line, sel.to.ch));\n                    return (gutterDirty = true);\n                }\n            });\n        }\n\n        function lineInfo(line) {\n            if (typeof line == \"number\") {\n                if (!isLine(line)) return null;\n                var n = line;\n                line = getLine(line);\n                if (!line) return null;\n            }\n            else {\n                var n = lineNo(line);\n                if (n == null) return null;\n            }\n            var marker = line.gutterMarker;\n            return {line: n, handle: line, text: line.text, markerText: marker && marker.text,\n                markerClass: marker && marker.style, lineClass: line.className};\n        }\n\n        function stringWidth(str) {\n            measure.innerHTML = \"<pre><span>x</span></pre>\";\n            measure.firstChild.firstChild.firstChild.nodeValue = str;\n            return measure.firstChild.firstChild.offsetWidth || 10;\n        }\n        // These are used to go from pixel positions to character\n        // positions, taking varying character widths into account.\n        function charFromX(line, x) {\n            if (x <= 0) return 0;\n            var lineObj = getLine(line), text = lineObj.text;\n            function getX(len) {\n                measure.innerHTML = \"<pre><span>\" + lineObj.getHTML(null, null, false, tabText, len) + \"</span></pre>\";\n                return measure.firstChild.firstChild.offsetWidth;\n            }\n            var from = 0, fromX = 0, to = text.length, toX;\n            // Guess a suitable upper bound for our search.\n            var estimated = Math.min(to, Math.ceil(x / charWidth()));\n            for (;;) {\n                var estX = getX(estimated);\n                if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2));\n                else {toX = estX; to = estimated; break;}\n            }\n            if (x > toX) return to;\n            // Try to guess a suitable lower bound as well.\n            estimated = Math.floor(to * 0.8); estX = getX(estimated);\n            if (estX < x) {from = estimated; fromX = estX;}\n            // Do a binary search between these bounds.\n            for (;;) {\n                if (to - from <= 1) return (toX - x > x - fromX) ? from : to;\n                var middle = Math.ceil((from + to) / 2), middleX = getX(middle);\n                if (middleX > x) {to = middle; toX = middleX;}\n                else {from = middle; fromX = middleX;}\n            }\n        }\n\n        var tempId = Math.floor(Math.random() * 0xffffff).toString(16);\n        function measureLine(line, ch) {\n            var extra = \"\";\n            // Include extra text at the end to make sure the measured line is wrapped in the right way.\n            if (options.lineWrapping) {\n                var end = line.text.indexOf(\" \", ch + 2);\n                extra = htmlEscape(line.text.slice(ch + 1, end < 0 ? line.text.length : end + (ie ? 5 : 0)));\n            }\n            measure.innerHTML = \"<pre>\" + line.getHTML(null, null, false, tabText, ch) +\n                '<span id=\"CodeMirror-temp-' + tempId + '\">' + htmlEscape(line.text.charAt(ch) || \" \") + \"</span>\" +\n                extra + \"</pre>\";\n            var elt = document.getElementById(\"CodeMirror-temp-\" + tempId);\n            var top = elt.offsetTop, left = elt.offsetLeft;\n            // Older IEs report zero offsets for spans directly after a wrap\n            if (ie && ch && top == 0 && left == 0) {\n                var backup = document.createElement(\"span\");\n                backup.innerHTML = \"x\";\n                elt.parentNode.insertBefore(backup, elt.nextSibling);\n                top = backup.offsetTop;\n            }\n            return {top: top, left: left};\n        }\n        function localCoords(pos, inLineWrap) {\n            var x, lh = textHeight(), y = lh * (heightAtLine(doc, pos.line) - (inLineWrap ? displayOffset : 0));\n            if (pos.ch == 0) x = 0;\n            else {\n                var sp = measureLine(getLine(pos.line), pos.ch);\n                x = sp.left;\n                if (options.lineWrapping) y += Math.max(0, sp.top);\n            }\n            return {x: x, y: y, yBot: y + lh};\n        }\n        // Coords must be lineSpace-local\n        function coordsChar(x, y) {\n            if (y < 0) y = 0;\n            var th = textHeight(), cw = charWidth(), heightPos = displayOffset + Math.floor(y / th);\n            var lineNo = lineAtHeight(doc, heightPos);\n            if (lineNo >= doc.size) return {line: doc.size - 1, ch: getLine(doc.size - 1).text.length};\n            var lineObj = getLine(lineNo), text = lineObj.text;\n            var tw = options.lineWrapping, innerOff = tw ? heightPos - heightAtLine(doc, lineNo) : 0;\n            if (x <= 0 && innerOff == 0) return {line: lineNo, ch: 0};\n            function getX(len) {\n                var sp = measureLine(lineObj, len);\n                if (tw) {\n                    var off = Math.round(sp.top / th);\n                    return Math.max(0, sp.left + (off - innerOff) * scroller.clientWidth);\n                }\n                return sp.left;\n            }\n            var from = 0, fromX = 0, to = text.length, toX;\n            // Guess a suitable upper bound for our search.\n            var estimated = Math.min(to, Math.ceil((x + innerOff * scroller.clientWidth * .9) / cw));\n            for (;;) {\n                var estX = getX(estimated);\n                if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2));\n                else {toX = estX; to = estimated; break;}\n            }\n            if (x > toX) return {line: lineNo, ch: to};\n            // Try to guess a suitable lower bound as well.\n            estimated = Math.floor(to * 0.8); estX = getX(estimated);\n            if (estX < x) {from = estimated; fromX = estX;}\n            // Do a binary search between these bounds.\n            for (;;) {\n                if (to - from <= 1) return {line: lineNo, ch: (toX - x > x - fromX) ? from : to};\n                var middle = Math.ceil((from + to) / 2), middleX = getX(middle);\n                if (middleX > x) {to = middle; toX = middleX;}\n                else {from = middle; fromX = middleX;}\n            }\n        }\n        function pageCoords(pos) {\n            var local = localCoords(pos, true), off = eltOffset(lineSpace);\n            return {x: off.left + local.x, y: off.top + local.y, yBot: off.top + local.yBot};\n        }\n\n        var cachedHeight, cachedHeightFor, measureText;\n        function textHeight() {\n            if (measureText == null) {\n                measureText = \"<pre>\";\n                for (var i = 0; i < 49; ++i) measureText += \"x<br/>\";\n                measureText += \"x</pre>\";\n            }\n            var offsetHeight = lineDiv.clientHeight;\n            if (offsetHeight == cachedHeightFor) return cachedHeight;\n            cachedHeightFor = offsetHeight;\n            measure.innerHTML = measureText;\n            cachedHeight = measure.firstChild.offsetHeight / 50 || 1;\n            measure.innerHTML = \"\";\n            return cachedHeight;\n        }\n        var cachedWidth, cachedWidthFor = 0;\n        function charWidth() {\n            if (scroller.clientWidth == cachedWidthFor) return cachedWidth;\n            cachedWidthFor = scroller.clientWidth;\n            return (cachedWidth = stringWidth(\"x\"));\n        }\n        function paddingTop() {return lineSpace.offsetTop;}\n        function paddingLeft() {return lineSpace.offsetLeft;}\n\n        function posFromMouse(e, liberal) {\n            var offW = eltOffset(scroller, true), x, y;\n            // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n            try { x = e.clientX; y = e.clientY; } catch (e) { return null; }\n            // This is a mess of a heuristic to try and determine whether a\n            // scroll-bar was clicked or not, and to return null if one was\n            // (and !liberal).\n            if (!liberal && (x - offW.left > scroller.clientWidth || y - offW.top > scroller.clientHeight))\n                return null;\n            var offL = eltOffset(lineSpace, true);\n            return coordsChar(x - offL.left, y - offL.top);\n        }\n        function onContextMenu(e) {\n            var pos = posFromMouse(e);\n            if (!pos || window.opera) return; // Opera is difficult.\n            if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to))\n                operation(setCursor)(pos.line, pos.ch);\n\n            var oldCSS = input.style.cssText;\n            inputDiv.style.position = \"absolute\";\n            input.style.cssText = \"position: fixed; width: 30px; height: 30px; top: \" + (e.clientY - 5) +\n                \"px; left: \" + (e.clientX - 5) + \"px; z-index: 1000; background: white; \" +\n                \"border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n            leaveInputAlone = true;\n            var val = input.value = getSelection();\n            focusInput();\n            input.select();\n            function rehide() {\n                var newVal = splitLines(input.value).join(\"\\n\");\n                if (newVal != val) operation(replaceSelection)(newVal, \"end\");\n                inputDiv.style.position = \"relative\";\n                input.style.cssText = oldCSS;\n                leaveInputAlone = false;\n                resetInput(true);\n                slowPoll();\n            }\n\n            if (gecko) {\n                e_stop(e);\n                var mouseup = connect(window, \"mouseup\", function() {\n                    mouseup();\n                    setTimeout(rehide, 20);\n                }, true);\n            }\n            else {\n                setTimeout(rehide, 50);\n            }\n        }\n\n        // Cursor-blinking\n        function restartBlink() {\n            clearInterval(blinker);\n            var on = true;\n            cursor.style.visibility = \"\";\n            blinker = setInterval(function() {\n                cursor.style.visibility = (on = !on) ? \"\" : \"hidden\";\n            }, 650);\n        }\n\n        var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\"};\n        function matchBrackets(autoclear) {\n            var head = sel.inverted ? sel.from : sel.to, line = getLine(head.line), pos = head.ch - 1;\n            var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];\n            if (!match) return;\n            var ch = match.charAt(0), forward = match.charAt(1) == \">\", d = forward ? 1 : -1, st = line.styles;\n            for (var off = pos + 1, i = 0, e = st.length; i < e; i+=2)\n                if ((off -= st[i].length) <= 0) {var style = st[i+1]; break;}\n\n            var stack = [line.text.charAt(pos)], re = /[(){}[\\]]/;\n            function scan(line, from, to) {\n                if (!line.text) return;\n                var st = line.styles, pos = forward ? 0 : line.text.length - 1, cur;\n                for (var i = forward ? 0 : st.length - 2, e = forward ? st.length : -2; i != e; i += 2*d) {\n                    var text = st[i];\n                    if (st[i+1] != null && st[i+1] != style) {pos += d * text.length; continue;}\n                    for (var j = forward ? 0 : text.length - 1, te = forward ? text.length : -1; j != te; j += d, pos+=d) {\n                        if (pos >= from && pos < to && re.test(cur = text.charAt(j))) {\n                            var match = matching[cur];\n                            if (match.charAt(1) == \">\" == forward) stack.push(cur);\n                            else if (stack.pop() != match.charAt(0)) return {pos: pos, match: false};\n                            else if (!stack.length) return {pos: pos, match: true};\n                        }\n                    }\n                }\n            }\n            for (var i = head.line, e = forward ? Math.min(i + 100, doc.size) : Math.max(-1, i - 100); i != e; i+=d) {\n                var line = getLine(i), first = i == head.line;\n                var found = scan(line, first && forward ? pos + 1 : 0, first && !forward ? pos : line.text.length);\n                if (found) break;\n            }\n            if (!found) found = {pos: null, match: false};\n            var style = found.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\n            var one = markText({line: head.line, ch: pos}, {line: head.line, ch: pos+1}, style),\n                two = found.pos != null && markText({line: i, ch: found.pos}, {line: i, ch: found.pos + 1}, style);\n            var clear = operation(function(){one.clear(); two && two.clear();});\n            if (autoclear) setTimeout(clear, 800);\n            else bracketHighlighted = clear;\n        }\n\n        // Finds the line to start with when starting a parse. Tries to\n        // find a line with a stateAfter, so that it can start with a\n        // valid state. If that fails, it returns the line with the\n        // smallest indentation, which tends to need the least context to\n        // parse correctly.\n        function findStartLine(n) {\n            var minindent, minline;\n            for (var search = n, lim = n - 40; search > lim; --search) {\n                if (search == 0) return 0;\n                var line = getLine(search-1);\n                if (line.stateAfter) return search;\n                var indented = line.indentation(options.tabSize);\n                if (minline == null || minindent > indented) {\n                    minline = search - 1;\n                    minindent = indented;\n                }\n            }\n            return minline;\n        }\n        function getStateBefore(n) {\n            var start = findStartLine(n), state = start && getLine(start-1).stateAfter;\n            if (!state) state = startState(mode);\n            else state = copyState(mode, state);\n            doc.iter(start, n, function(line) {\n                line.highlight(mode, state, options.tabSize);\n                line.stateAfter = copyState(mode, state);\n            });\n            if (start < n) changes.push({from: start, to: n});\n            if (n < doc.size && !getLine(n).stateAfter) work.push(n);\n            return state;\n        }\n        function highlightLines(start, end) {\n            var state = getStateBefore(start);\n            doc.iter(start, end, function(line) {\n                line.highlight(mode, state, options.tabSize);\n                line.stateAfter = copyState(mode, state);\n            });\n        }\n        function highlightWorker() {\n            var end = +new Date + options.workTime;\n            var foundWork = work.length;\n            while (work.length) {\n                if (!getLine(showingFrom).stateAfter) var task = showingFrom;\n                else var task = work.pop();\n                if (task >= doc.size) continue;\n                var start = findStartLine(task), state = start && getLine(start-1).stateAfter;\n                if (state) state = copyState(mode, state);\n                else state = startState(mode);\n\n                var unchanged = 0, compare = mode.compareStates, realChange = false,\n                    i = start, bail = false;\n                doc.iter(i, doc.size, function(line) {\n                    var hadState = line.stateAfter;\n                    if (+new Date > end) {\n                        work.push(i);\n                        startWorker(options.workDelay);\n                        if (realChange) changes.push({from: task, to: i + 1});\n                        return (bail = true);\n                    }\n                    var changed = line.highlight(mode, state, options.tabSize);\n                    if (changed) realChange = true;\n                    line.stateAfter = copyState(mode, state);\n                    if (compare) {\n                        if (hadState && compare(hadState, state)) return true;\n                    } else {\n                        if (changed !== false || !hadState) unchanged = 0;\n                        else if (++unchanged > 3 && (!mode.indent || mode.indent(hadState, \"\") == mode.indent(state, \"\")))\n                            return true;\n                    }\n                    ++i;\n                });\n                if (bail) return;\n                if (realChange) changes.push({from: task, to: i + 1});\n            }\n            if (foundWork && options.onHighlightComplete)\n                options.onHighlightComplete(instance);\n        }\n        function startWorker(time) {\n            if (!work.length) return;\n            highlight.set(time, operation(highlightWorker));\n        }\n\n        // Operations are used to wrap changes in such a way that each\n        // change won't have to update the cursor and display (which would\n        // be awkward, slow, and error-prone), but instead updates are\n        // batched and then all combined and executed at once.\n        function startOperation() {\n            updateInput = userSelChange = textChanged = null;\n            changes = []; selectionChanged = false; callbacks = [];\n        }\n        function endOperation() {\n            var reScroll = false, updated;\n            if (selectionChanged) reScroll = !scrollCursorIntoView();\n            if (changes.length) updated = updateDisplay(changes, true);\n            else {\n                if (selectionChanged) updateCursor();\n                if (gutterDirty) updateGutter();\n            }\n            if (reScroll) scrollCursorIntoView();\n            if (selectionChanged) {scrollEditorIntoView(); restartBlink();}\n\n            if (focused && !leaveInputAlone &&\n                (updateInput === true || (updateInput !== false && selectionChanged)))\n                resetInput(userSelChange);\n\n            if (selectionChanged && options.matchBrackets)\n                setTimeout(operation(function() {\n                    if (bracketHighlighted) {bracketHighlighted(); bracketHighlighted = null;}\n                    if (posEq(sel.from, sel.to)) matchBrackets(false);\n                }), 20);\n            var tc = textChanged, cbs = callbacks; // these can be reset by callbacks\n            if (selectionChanged && options.onCursorActivity)\n                options.onCursorActivity(instance);\n            if (tc && options.onChange && instance)\n                options.onChange(instance, tc);\n            for (var i = 0; i < cbs.length; ++i) cbs[i](instance);\n            if (updated && options.onUpdate) options.onUpdate(instance);\n        }\n        var nestedOperation = 0;\n        function operation(f) {\n            return function() {\n                if (!nestedOperation++) startOperation();\n                try {var result = f.apply(this, arguments);}\n                finally {if (!--nestedOperation) endOperation();}\n                return result;\n            };\n        }\n\n        for (var ext in extensions)\n            if (extensions.propertyIsEnumerable(ext) &&\n                !instance.propertyIsEnumerable(ext))\n                instance[ext] = extensions[ext];\n        return instance;\n    } // (end of function CodeMirror)\n\n    // The default configuration options.\n    CodeMirror.defaults = {\n        value: \"\",\n        mode: null,\n        theme: \"default\",\n        indentUnit: 2,\n        indentWithTabs: false,\n        tabSize: 4,\n        keyMap: \"default\",\n        extraKeys: null,\n        electricChars: true,\n        onKeyEvent: null,\n        lineWrapping: false,\n        lineNumbers: false,\n        gutter: false,\n        fixedGutter: false,\n        firstLineNumber: 1,\n        readOnly: false,\n        onChange: null,\n        onCursorActivity: null,\n        onGutterClick: null,\n        onHighlightComplete: null,\n        onUpdate: null,\n        onFocus: null, onBlur: null, onScroll: null,\n        matchBrackets: false,\n        workTime: 100,\n        workDelay: 200,\n        pollInterval: 100,\n        undoDepth: 40,\n        tabindex: null,\n        document: window.document\n    };\n\n    var mac = /Mac/.test(navigator.platform);\n    var win = /Win/.test(navigator.platform);\n\n    // Known modes, by name and by MIME\n    var modes = {}, mimeModes = {};\n    CodeMirror.defineMode = function(name, mode) {\n        if (!CodeMirror.defaults.mode && name != \"null\") CodeMirror.defaults.mode = name;\n        modes[name] = mode;\n    };\n    CodeMirror.defineMIME = function(mime, spec) {\n        mimeModes[mime] = spec;\n    };\n    CodeMirror.getMode = function(options, spec) {\n        if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec))\n            spec = mimeModes[spec];\n        if (typeof spec == \"string\")\n            var mname = spec, config = {};\n        else if (spec != null)\n            var mname = spec.name, config = spec;\n        var mfactory = modes[mname];\n        if (!mfactory) {\n            if (window.console) console.warn(\"No mode \" + mname + \" found, falling back to plain text.\");\n            return CodeMirror.getMode(options, \"text/plain\");\n        }\n        return mfactory(options, config || {});\n    };\n    CodeMirror.listModes = function() {\n        var list = [];\n        for (var m in modes)\n            if (modes.propertyIsEnumerable(m)) list.push(m);\n        return list;\n    };\n    CodeMirror.listMIMEs = function() {\n        var list = [];\n        for (var m in mimeModes)\n            if (mimeModes.propertyIsEnumerable(m)) list.push({mime: m, mode: mimeModes[m]});\n        return list;\n    };\n\n    var extensions = CodeMirror.extensions = {};\n    CodeMirror.defineExtension = function(name, func) {\n        extensions[name] = func;\n    };\n\n    var commands = CodeMirror.commands = {\n        selectAll: function(cm) {cm.setSelection({line: 0, ch: 0}, {line: cm.lineCount() - 1});},\n        killLine: function(cm) {\n            var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to);\n            if (!sel && cm.getLine(from.line).length == from.ch) cm.replaceRange(\"\", from, {line: from.line + 1, ch: 0});\n            else cm.replaceRange(\"\", from, sel ? to : {line: from.line});\n        },\n        deleteLine: function(cm) {var l = cm.getCursor().line; cm.replaceRange(\"\", {line: l, ch: 0}, {line: l});},\n        undo: function(cm) {cm.undo();},\n        redo: function(cm) {cm.redo();},\n        goDocStart: function(cm) {cm.setCursor(0, 0, true);},\n        goDocEnd: function(cm) {cm.setSelection({line: cm.lineCount() - 1}, null, true);},\n        goLineStart: function(cm) {cm.setCursor(cm.getCursor().line, 0, true);},\n        goLineStartSmart: function(cm) {\n            var cur = cm.getCursor();\n            var text = cm.getLine(cur.line), firstNonWS = Math.max(0, text.search(/\\S/));\n            cm.setCursor(cur.line, cur.ch <= firstNonWS && cur.ch ? 0 : firstNonWS, true);\n        },\n        goLineEnd: function(cm) {cm.setSelection({line: cm.getCursor().line}, null, true);},\n        goLineUp: function(cm) {cm.moveV(-1, \"line\");},\n        goLineDown: function(cm) {cm.moveV(1, \"line\");},\n        goPageUp: function(cm) {cm.moveV(-1, \"page\");},\n        goPageDown: function(cm) {cm.moveV(1, \"page\");},\n        goCharLeft: function(cm) {cm.moveH(-1, \"char\");},\n        goCharRight: function(cm) {cm.moveH(1, \"char\");},\n        goColumnLeft: function(cm) {cm.moveH(-1, \"column\");},\n        goColumnRight: function(cm) {cm.moveH(1, \"column\");},\n        goWordLeft: function(cm) {cm.moveH(-1, \"word\");},\n        goWordRight: function(cm) {cm.moveH(1, \"word\");},\n        delCharLeft: function(cm) {cm.deleteH(-1, \"char\");},\n        delCharRight: function(cm) {cm.deleteH(1, \"char\");},\n        delWordLeft: function(cm) {cm.deleteH(-1, \"word\");},\n        delWordRight: function(cm) {cm.deleteH(1, \"word\");},\n        indentAuto: function(cm) {cm.indentSelection(\"smart\");},\n        indentMore: function(cm) {cm.indentSelection(\"add\");},\n        indentLess: function(cm) {cm.indentSelection(\"subtract\");},\n        insertTab: function(cm) {cm.replaceSelection(\"\\t\", \"end\");},\n        transposeChars: function(cm) {\n            var cur = cm.getCursor(), line = cm.getLine(cur.line);\n            if (cur.ch > 0 && cur.ch < line.length - 1)\n                cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1),\n                    {line: cur.line, ch: cur.ch - 1}, {line: cur.line, ch: cur.ch + 1});\n        },\n        newlineAndIndent: function(cm) {\n            cm.replaceSelection(\"\\n\", \"end\");\n            cm.indentLine(cm.getCursor().line);\n        },\n        toggleOverwrite: function(cm) {cm.toggleOverwrite();}\n    };\n\n    var keyMap = CodeMirror.keyMap = {};\n    keyMap.basic = {\n        \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n        \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n        \"Delete\": \"delCharRight\", \"Backspace\": \"delCharLeft\", \"Tab\": \"indentMore\", \"Shift-Tab\": \"indentLess\",\n        \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\"\n    };\n    // Note that the save and find-related commands aren't defined by\n    // default. Unknown commands are simply ignored.\n    keyMap.pcDefault = {\n        \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n        \"Ctrl-Home\": \"goDocStart\", \"Alt-Up\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Down\": \"goDocEnd\",\n        \"Ctrl-Left\": \"goWordLeft\", \"Ctrl-Right\": \"goWordRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n        \"Ctrl-Backspace\": \"delWordLeft\", \"Ctrl-Delete\": \"delWordRight\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n        \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n        fallthrough: \"basic\"\n    };\n    keyMap.macDefault = {\n        \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n        \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goWordLeft\",\n        \"Alt-Right\": \"goWordRight\", \"Cmd-Left\": \"goLineStart\", \"Cmd-Right\": \"goLineEnd\", \"Alt-Backspace\": \"delWordLeft\",\n        \"Ctrl-Alt-Backspace\": \"delWordRight\", \"Alt-Delete\": \"delWordRight\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n        \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n        fallthrough: [\"basic\", \"emacsy\"]\n    };\n    keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n    keyMap.emacsy = {\n        \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n        \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n        \"Ctrl-V\": \"goPageUp\", \"Shift-Ctrl-V\": \"goPageDown\", \"Ctrl-D\": \"delCharRight\", \"Ctrl-H\": \"delCharLeft\",\n        \"Alt-D\": \"delWordRight\", \"Alt-Backspace\": \"delWordLeft\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\"\n    };\n\n    function lookupKey(name, extraMap, map) {\n        function lookup(name, map, ft) {\n            var found = map[name];\n            if (found != null) return found;\n            if (ft == null) ft = map.fallthrough;\n            if (ft == null) return map.catchall;\n            if (typeof ft == \"string\") return lookup(name, keyMap[ft]);\n            for (var i = 0, e = ft.length; i < e; ++i) {\n                found = lookup(name, keyMap[ft[i]]);\n                if (found != null) return found;\n            }\n            return null;\n        }\n        return extraMap ? lookup(name, extraMap, map) : lookup(name, keyMap[map]);\n    }\n    function isModifierKey(event) {\n        var name = keyNames[event.keyCode];\n        return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n    }\n\n    CodeMirror.fromTextArea = function(textarea, options) {\n        if (!options) options = {};\n        options.value = textarea.value;\n        if (!options.tabindex && textarea.tabindex)\n            options.tabindex = textarea.tabindex;\n\n        function save() {textarea.value = instance.getValue();}\n        if (textarea.form) {\n            // Deplorable hack to make the submit method do the right thing.\n            var rmSubmit = connect(textarea.form, \"submit\", save, true);\n            if (typeof textarea.form.submit == \"function\") {\n                var realSubmit = textarea.form.submit;\n                function wrappedSubmit() {\n                    save();\n                    textarea.form.submit = realSubmit;\n                    textarea.form.submit();\n                    textarea.form.submit = wrappedSubmit;\n                }\n                textarea.form.submit = wrappedSubmit;\n            }\n        }\n\n        textarea.style.display = \"none\";\n        var instance = CodeMirror(function(node) {\n            textarea.parentNode.insertBefore(node, textarea.nextSibling);\n        }, options);\n        instance.save = save;\n        instance.getTextArea = function() { return textarea; };\n        instance.toTextArea = function() {\n            save();\n            textarea.parentNode.removeChild(instance.getWrapperElement());\n            textarea.style.display = \"\";\n            if (textarea.form) {\n                rmSubmit();\n                if (typeof textarea.form.submit == \"function\")\n                    textarea.form.submit = realSubmit;\n            }\n        };\n        return instance;\n    };\n\n    // Utility functions for working with state. Exported because modes\n    // sometimes need to do this.\n    function copyState(mode, state) {\n        if (state === true) return state;\n        if (mode.copyState) return mode.copyState(state);\n        var nstate = {};\n        for (var n in state) {\n            var val = state[n];\n            if (val instanceof Array) val = val.concat([]);\n            nstate[n] = val;\n        }\n        return nstate;\n    }\n    CodeMirror.copyState = copyState;\n    function startState(mode, a1, a2) {\n        return mode.startState ? mode.startState(a1, a2) : true;\n    }\n    CodeMirror.startState = startState;\n\n    // The character stream used by a mode's parser.\n    function StringStream(string, tabSize) {\n        this.pos = this.start = 0;\n        this.string = string;\n        this.tabSize = tabSize || 8;\n    }\n    StringStream.prototype = {\n        eol: function() {return this.pos >= this.string.length;},\n        sol: function() {return this.pos == 0;},\n        peek: function() {return this.string.charAt(this.pos);},\n        next: function() {\n            if (this.pos < this.string.length)\n                return this.string.charAt(this.pos++);\n        },\n        eat: function(match) {\n            var ch = this.string.charAt(this.pos);\n            if (typeof match == \"string\") var ok = ch == match;\n            else var ok = ch && (match.test ? match.test(ch) : match(ch));\n            if (ok) {++this.pos; return ch;}\n        },\n        eatWhile: function(match) {\n            var start = this.pos;\n            while (this.eat(match)){}\n            return this.pos > start;\n        },\n        eatSpace: function() {\n            var start = this.pos;\n            while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n            return this.pos > start;\n        },\n        skipToEnd: function() {this.pos = this.string.length;},\n        skipTo: function(ch) {\n            var found = this.string.indexOf(ch, this.pos);\n            if (found > -1) {this.pos = found; return true;}\n        },\n        backUp: function(n) {this.pos -= n;},\n        column: function() {return countColumn(this.string, this.start, this.tabSize);},\n        indentation: function() {return countColumn(this.string, null, this.tabSize);},\n        match: function(pattern, consume, caseInsensitive) {\n            if (typeof pattern == \"string\") {\n                function cased(str) {return caseInsensitive ? str.toLowerCase() : str;}\n                if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) {\n                    if (consume !== false) this.pos += pattern.length;\n                    return true;\n                }\n            }\n            else {\n                var match = this.string.slice(this.pos).match(pattern);\n                if (match && consume !== false) this.pos += match[0].length;\n                return match;\n            }\n        },\n        current: function(){return this.string.slice(this.start, this.pos);}\n    };\n    CodeMirror.StringStream = StringStream;\n\n    function MarkedText(from, to, className, set) {\n        this.from = from; this.to = to; this.style = className; this.set = set;\n    }\n    MarkedText.prototype = {\n        attach: function(line) { this.set.push(line); },\n        detach: function(line) {\n            var ix = indexOf(this.set, line);\n            if (ix > -1) this.set.splice(ix, 1);\n        },\n        split: function(pos, lenBefore) {\n            if (this.to <= pos && this.to != null) return null;\n            var from = this.from < pos || this.from == null ? null : this.from - pos + lenBefore;\n            var to = this.to == null ? null : this.to - pos + lenBefore;\n            return new MarkedText(from, to, this.style, this.set);\n        },\n        dup: function() { return new MarkedText(null, null, this.style, this.set); },\n        clipTo: function(fromOpen, from, toOpen, to, diff) {\n            if (this.from != null && this.from >= from)\n                this.from = Math.max(to, this.from) + diff;\n            if (this.to != null && this.to > from)\n                this.to = to < this.to ? this.to + diff : from;\n            if (fromOpen && to > this.from && (to < this.to || this.to == null))\n                this.from = null;\n            if (toOpen && (from < this.to || this.to == null) && (from > this.from || this.from == null))\n                this.to = null;\n        },\n        isDead: function() { return this.from != null && this.to != null && this.from >= this.to; },\n        sameSet: function(x) { return this.set == x.set; }\n    };\n\n    function Bookmark(pos) {\n        this.from = pos; this.to = pos; this.line = null;\n    }\n    Bookmark.prototype = {\n        attach: function(line) { this.line = line; },\n        detach: function(line) { if (this.line == line) this.line = null; },\n        split: function(pos, lenBefore) {\n            if (pos < this.from) {\n                this.from = this.to = (this.from - pos) + lenBefore;\n                return this;\n            }\n        },\n        isDead: function() { return this.from > this.to; },\n        clipTo: function(fromOpen, from, toOpen, to, diff) {\n            if ((fromOpen || from < this.from) && (toOpen || to > this.to)) {\n                this.from = 0; this.to = -1;\n            } else if (this.from > from) {\n                this.from = this.to = Math.max(to, this.from) + diff;\n            }\n        },\n        sameSet: function(x) { return false; },\n        find: function() {\n            if (!this.line || !this.line.parent) return null;\n            return {line: lineNo(this.line), ch: this.from};\n        },\n        clear: function() {\n            if (this.line) {\n                var found = indexOf(this.line.marked, this);\n                if (found != -1) this.line.marked.splice(found, 1);\n                this.line = null;\n            }\n        }\n    };\n\n    // Line objects. These hold state related to a line, including\n    // highlighting info (the styles array).\n    function Line(text, styles) {\n        this.styles = styles || [text, null];\n        this.text = text;\n        this.height = 1;\n        this.marked = this.gutterMarker = this.className = this.handlers = null;\n        this.stateAfter = this.parent = this.hidden = null;\n    }\n    Line.inheritMarks = function(text, orig) {\n        var ln = new Line(text), mk = orig && orig.marked;\n        if (mk) {\n            for (var i = 0; i < mk.length; ++i) {\n                if (mk[i].to == null && mk[i].style) {\n                    var newmk = ln.marked || (ln.marked = []), mark = mk[i];\n                    var nmark = mark.dup(); newmk.push(nmark); nmark.attach(ln);\n                }\n            }\n        }\n        return ln;\n    }\n    Line.prototype = {\n        // Replace a piece of a line, keeping the styles around it intact.\n        replace: function(from, to_, text) {\n            var st = [], mk = this.marked, to = to_ == null ? this.text.length : to_;\n            copyStyles(0, from, this.styles, st);\n            if (text) st.push(text, null);\n            copyStyles(to, this.text.length, this.styles, st);\n            this.styles = st;\n            this.text = this.text.slice(0, from) + text + this.text.slice(to);\n            this.stateAfter = null;\n            if (mk) {\n                var diff = text.length - (to - from);\n                for (var i = 0, mark = mk[i]; i < mk.length; ++i) {\n                    mark.clipTo(from == null, from || 0, to_ == null, to, diff);\n                    if (mark.isDead()) {mark.detach(this); mk.splice(i--, 1);}\n                }\n            }\n        },\n        // Split a part off a line, keeping styles and markers intact.\n        split: function(pos, textBefore) {\n            var st = [textBefore, null], mk = this.marked;\n            copyStyles(pos, this.text.length, this.styles, st);\n            var taken = new Line(textBefore + this.text.slice(pos), st);\n            if (mk) {\n                for (var i = 0; i < mk.length; ++i) {\n                    var mark = mk[i];\n                    var newmark = mark.split(pos, textBefore.length);\n                    if (newmark) {\n                        if (!taken.marked) taken.marked = [];\n                        taken.marked.push(newmark); newmark.attach(taken);\n                    }\n                }\n            }\n            return taken;\n        },\n        append: function(line) {\n            var mylen = this.text.length, mk = line.marked, mymk = this.marked;\n            this.text += line.text;\n            copyStyles(0, line.text.length, line.styles, this.styles);\n            if (mymk) {\n                for (var i = 0; i < mymk.length; ++i)\n                    if (mymk[i].to == null) mymk[i].to = mylen;\n            }\n            if (mk && mk.length) {\n                if (!mymk) this.marked = mymk = [];\n                outer: for (var i = 0; i < mk.length; ++i) {\n                    var mark = mk[i];\n                    if (!mark.from) {\n                        for (var j = 0; j < mymk.length; ++j) {\n                            var mymark = mymk[j];\n                            if (mymark.to == mylen && mymark.sameSet(mark)) {\n                                mymark.to = mark.to == null ? null : mark.to + mylen;\n                                if (mymark.isDead()) {\n                                    mymark.detach(this);\n                                    mk.splice(i--, 1);\n                                }\n                                continue outer;\n                            }\n                        }\n                    }\n                    mymk.push(mark);\n                    mark.attach(this);\n                    mark.from += mylen;\n                    if (mark.to != null) mark.to += mylen;\n                }\n            }\n        },\n        fixMarkEnds: function(other) {\n            var mk = this.marked, omk = other.marked;\n            if (!mk) return;\n            for (var i = 0; i < mk.length; ++i) {\n                var mark = mk[i], close = mark.to == null;\n                if (close && omk) {\n                    for (var j = 0; j < omk.length; ++j)\n                        if (omk[j].sameSet(mark)) {close = false; break;}\n                }\n                if (close) mark.to = this.text.length;\n            }\n        },\n        fixMarkStarts: function() {\n            var mk = this.marked;\n            if (!mk) return;\n            for (var i = 0; i < mk.length; ++i)\n                if (mk[i].from == null) mk[i].from = 0;\n        },\n        addMark: function(mark) {\n            mark.attach(this);\n            if (this.marked == null) this.marked = [];\n            this.marked.push(mark);\n            this.marked.sort(function(a, b){return (a.from || 0) - (b.from || 0);});\n        },\n        // Run the given mode's parser over a line, update the styles\n        // array, which contains alternating fragments of text and CSS\n        // classes.\n        highlight: function(mode, state, tabSize) {\n            var stream = new StringStream(this.text, tabSize), st = this.styles, pos = 0;\n            var changed = false, curWord = st[0], prevWord;\n            if (this.text == \"\" && mode.blankLine) mode.blankLine(state);\n            while (!stream.eol()) {\n                var style = mode.token(stream, state);\n                var substr = this.text.slice(stream.start, stream.pos);\n                stream.start = stream.pos;\n                if (pos && st[pos-1] == style)\n                    st[pos-2] += substr;\n                else if (substr) {\n                    if (!changed && (st[pos+1] != style || (pos && st[pos-2] != prevWord))) changed = true;\n                    st[pos++] = substr; st[pos++] = style;\n                    prevWord = curWord; curWord = st[pos];\n                }\n                // Give up when line is ridiculously long\n                if (stream.pos > 5000) {\n                    st[pos++] = this.text.slice(stream.pos); st[pos++] = null;\n                    break;\n                }\n            }\n            if (st.length != pos) {st.length = pos; changed = true;}\n            if (pos && st[pos-2] != prevWord) changed = true;\n            // Short lines with simple highlights return null, and are\n            // counted as changed by the driver because they are likely to\n            // highlight the same way in various contexts.\n            return changed || (st.length < 5 && this.text.length < 10 ? null : false);\n        },\n        // Fetch the parser token for a given character. Useful for hacks\n        // that want to inspect the mode state (say, for completion).\n        getTokenAt: function(mode, state, ch) {\n            var txt = this.text, stream = new StringStream(txt);\n            while (stream.pos < ch && !stream.eol()) {\n                stream.start = stream.pos;\n                var style = mode.token(stream, state);\n            }\n            return {start: stream.start,\n                end: stream.pos,\n                string: stream.current(),\n                className: style || null,\n                state: state};\n        },\n        indentation: function(tabSize) {return countColumn(this.text, null, tabSize);},\n        // Produces an HTML fragment for the line, taking selection,\n        // marking, and highlighting into account.\n        getHTML: function(sfrom, sto, includePre, tabText, endAt) {\n            var html = [], first = true;\n            if (includePre)\n                html.push(this.className ? '<pre class=\"' + this.className + '\">': \"<pre>\");\n            function span(text, style) {\n                if (!text) return;\n                // Work around a bug where, in some compat modes, IE ignores leading spaces\n                if (first && ie && text.charAt(0) == \" \") text = \"\\u00a0\" + text.slice(1);\n                first = false;\n                if (style) html.push('<span class=\"', style, '\">', htmlEscape(text).replace(/\\t/g, tabText), \"</span>\");\n                else html.push(htmlEscape(text).replace(/\\t/g, tabText));\n            }\n            var st = this.styles, allText = this.text, marked = this.marked;\n            if (sfrom == sto) sfrom = null;\n            var len = allText.length;\n            if (endAt != null) len = Math.min(endAt, len);\n\n            if (!allText && endAt == null)\n                span(\" \", sfrom != null && sto == null ? \"CodeMirror-selected\" : null);\n            else if (!marked && sfrom == null)\n                for (var i = 0, ch = 0; ch < len; i+=2) {\n                    var str = st[i], style = st[i+1], l = str.length;\n                    if (ch + l > len) str = str.slice(0, len - ch);\n                    ch += l;\n                    span(str, style && \"cm-\" + style);\n                }\n            else {\n                var pos = 0, i = 0, text = \"\", style, sg = 0;\n                var markpos = -1, mark = null;\n                function nextMark() {\n                    if (marked) {\n                        markpos += 1;\n                        mark = (markpos < marked.length) ? marked[markpos] : null;\n                    }\n                }\n                nextMark();\n                while (pos < len) {\n                    var upto = len;\n                    var extraStyle = \"\";\n                    if (sfrom != null) {\n                        if (sfrom > pos) upto = sfrom;\n                        else if (sto == null || sto > pos) {\n                            extraStyle = \" CodeMirror-selected\";\n                            if (sto != null) upto = Math.min(upto, sto);\n                        }\n                    }\n                    while (mark && mark.to != null && mark.to <= pos) nextMark();\n                    if (mark) {\n                        if (mark.from > pos) upto = Math.min(upto, mark.from);\n                        else {\n                            extraStyle += \" \" + mark.style;\n                            if (mark.to != null) upto = Math.min(upto, mark.to);\n                        }\n                    }\n                    for (;;) {\n                        var end = pos + text.length;\n                        var appliedStyle = style;\n                        if (extraStyle) appliedStyle = style ? style + extraStyle : extraStyle;\n                        span(end > upto ? text.slice(0, upto - pos) : text, appliedStyle);\n                        if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}\n                        pos = end;\n                        text = st[i++]; style = \"cm-\" + st[i++];\n                    }\n                }\n                if (sfrom != null && sto == null) span(\" \", \"CodeMirror-selected\");\n            }\n            if (includePre) html.push(\"</pre>\");\n            return html.join(\"\");\n        },\n        cleanUp: function() {\n            this.parent = null;\n            if (this.marked)\n                for (var i = 0, e = this.marked.length; i < e; ++i) this.marked[i].detach(this);\n        }\n    };\n    // Utility used by replace and split above\n    function copyStyles(from, to, source, dest) {\n        for (var i = 0, pos = 0, state = 0; pos < to; i+=2) {\n            var part = source[i], end = pos + part.length;\n            if (state == 0) {\n                if (end > from) dest.push(part.slice(from - pos, Math.min(part.length, to - pos)), source[i+1]);\n                if (end >= from) state = 1;\n            }\n            else if (state == 1) {\n                if (end > to) dest.push(part.slice(0, to - pos), source[i+1]);\n                else dest.push(part, source[i+1]);\n            }\n            pos = end;\n        }\n    }\n\n    // Data structure that holds the sequence of lines.\n    function LeafChunk(lines) {\n        this.lines = lines;\n        this.parent = null;\n        for (var i = 0, e = lines.length, height = 0; i < e; ++i) {\n            lines[i].parent = this;\n            height += lines[i].height;\n        }\n        this.height = height;\n    }\n    LeafChunk.prototype = {\n        chunkSize: function() { return this.lines.length; },\n        remove: function(at, n, callbacks) {\n            for (var i = at, e = at + n; i < e; ++i) {\n                var line = this.lines[i];\n                this.height -= line.height;\n                line.cleanUp();\n                if (line.handlers)\n                    for (var j = 0; j < line.handlers.length; ++j) callbacks.push(line.handlers[j]);\n            }\n            this.lines.splice(at, n);\n        },\n        collapse: function(lines) {\n            lines.splice.apply(lines, [lines.length, 0].concat(this.lines));\n        },\n        insertHeight: function(at, lines, height) {\n            this.height += height;\n            this.lines.splice.apply(this.lines, [at, 0].concat(lines));\n            for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this;\n        },\n        iterN: function(at, n, op) {\n            for (var e = at + n; at < e; ++at)\n                if (op(this.lines[at])) return true;\n        }\n    };\n    function BranchChunk(children) {\n        this.children = children;\n        var size = 0, height = 0;\n        for (var i = 0, e = children.length; i < e; ++i) {\n            var ch = children[i];\n            size += ch.chunkSize(); height += ch.height;\n            ch.parent = this;\n        }\n        this.size = size;\n        this.height = height;\n        this.parent = null;\n    }\n    BranchChunk.prototype = {\n        chunkSize: function() { return this.size; },\n        remove: function(at, n, callbacks) {\n            this.size -= n;\n            for (var i = 0; i < this.children.length; ++i) {\n                var child = this.children[i], sz = child.chunkSize();\n                if (at < sz) {\n                    var rm = Math.min(n, sz - at), oldHeight = child.height;\n                    child.remove(at, rm, callbacks);\n                    this.height -= oldHeight - child.height;\n                    if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n                    if ((n -= rm) == 0) break;\n                    at = 0;\n                } else at -= sz;\n            }\n            if (this.size - n < 25) {\n                var lines = [];\n                this.collapse(lines);\n                this.children = [new LeafChunk(lines)];\n            }\n        },\n        collapse: function(lines) {\n            for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines);\n        },\n        insert: function(at, lines) {\n            var height = 0;\n            for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height;\n            this.insertHeight(at, lines, height);\n        },\n        insertHeight: function(at, lines, height) {\n            this.size += lines.length;\n            this.height += height;\n            for (var i = 0, e = this.children.length; i < e; ++i) {\n                var child = this.children[i], sz = child.chunkSize();\n                if (at <= sz) {\n                    child.insertHeight(at, lines, height);\n                    if (child.lines && child.lines.length > 50) {\n                        while (child.lines.length > 50) {\n                            var spilled = child.lines.splice(child.lines.length - 25, 25);\n                            var newleaf = new LeafChunk(spilled);\n                            child.height -= newleaf.height;\n                            this.children.splice(i + 1, 0, newleaf);\n                            newleaf.parent = this;\n                        }\n                        this.maybeSpill();\n                    }\n                    break;\n                }\n                at -= sz;\n            }\n        },\n        maybeSpill: function() {\n            if (this.children.length <= 10) return;\n            var me = this;\n            do {\n                var spilled = me.children.splice(me.children.length - 5, 5);\n                var sibling = new BranchChunk(spilled);\n                if (!me.parent) { // Become the parent node\n                    var copy = new BranchChunk(me.children);\n                    copy.parent = me;\n                    me.children = [copy, sibling];\n                    me = copy;\n                } else {\n                    me.size -= sibling.size;\n                    me.height -= sibling.height;\n                    var myIndex = indexOf(me.parent.children, me);\n                    me.parent.children.splice(myIndex + 1, 0, sibling);\n                }\n                sibling.parent = me.parent;\n            } while (me.children.length > 10);\n            me.parent.maybeSpill();\n        },\n        iter: function(from, to, op) { this.iterN(from, to - from, op); },\n        iterN: function(at, n, op) {\n            for (var i = 0, e = this.children.length; i < e; ++i) {\n                var child = this.children[i], sz = child.chunkSize();\n                if (at < sz) {\n                    var used = Math.min(n, sz - at);\n                    if (child.iterN(at, used, op)) return true;\n                    if ((n -= used) == 0) break;\n                    at = 0;\n                } else at -= sz;\n            }\n        }\n    };\n\n    function getLineAt(chunk, n) {\n        while (!chunk.lines) {\n            for (var i = 0;; ++i) {\n                var child = chunk.children[i], sz = child.chunkSize();\n                if (n < sz) { chunk = child; break; }\n                n -= sz;\n            }\n        }\n        return chunk.lines[n];\n    }\n    function lineNo(line) {\n        if (line.parent == null) return null;\n        var cur = line.parent, no = indexOf(cur.lines, line);\n        for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n            for (var i = 0, e = chunk.children.length; ; ++i) {\n                if (chunk.children[i] == cur) break;\n                no += chunk.children[i].chunkSize();\n            }\n        }\n        return no;\n    }\n    function lineAtHeight(chunk, h) {\n        var n = 0;\n        outer: do {\n            for (var i = 0, e = chunk.children.length; i < e; ++i) {\n                var child = chunk.children[i], ch = child.height;\n                if (h < ch) { chunk = child; continue outer; }\n                h -= ch;\n                n += child.chunkSize();\n            }\n            return n;\n        } while (!chunk.lines);\n        for (var i = 0, e = chunk.lines.length; i < e; ++i) {\n            var line = chunk.lines[i], lh = line.height;\n            if (h < lh) break;\n            h -= lh;\n        }\n        return n + i;\n    }\n    function heightAtLine(chunk, n) {\n        var h = 0;\n        outer: do {\n            for (var i = 0, e = chunk.children.length; i < e; ++i) {\n                var child = chunk.children[i], sz = child.chunkSize();\n                if (n < sz) { chunk = child; continue outer; }\n                n -= sz;\n                h += child.height;\n            }\n            return h;\n        } while (!chunk.lines);\n        for (var i = 0; i < n; ++i) h += chunk.lines[i].height;\n        return h;\n    }\n\n    // The history object 'chunks' changes that are made close together\n    // and at almost the same time into bigger undoable units.\n    function History() {\n        this.time = 0;\n        this.done = []; this.undone = [];\n    }\n    History.prototype = {\n        addChange: function(start, added, old) {\n            this.undone.length = 0;\n            var time = +new Date, last = this.done[this.done.length - 1];\n            if (time - this.time > 400 || !last ||\n                last.start > start + added || last.start + last.added < start - last.added + last.old.length)\n                this.done.push({start: start, added: added, old: old});\n            else {\n                var oldoff = 0;\n                if (start < last.start) {\n                    for (var i = last.start - start - 1; i >= 0; --i)\n                        last.old.unshift(old[i]);\n                    last.added += last.start - start;\n                    last.start = start;\n                }\n                else if (last.start < start) {\n                    oldoff = start - last.start;\n                    added += oldoff;\n                }\n                for (var i = last.added - oldoff, e = old.length; i < e; ++i)\n                    last.old.push(old[i]);\n                if (last.added < added) last.added = added;\n            }\n            this.time = time;\n        }\n    };\n\n    function stopMethod() {e_stop(this);}\n    // Ensure an event has a stop method.\n    function addStop(event) {\n        if (!event.stop) event.stop = stopMethod;\n        return event;\n    }\n\n    function e_preventDefault(e) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n    }\n    function e_stopPropagation(e) {\n        if (e.stopPropagation) e.stopPropagation();\n        else e.cancelBubble = true;\n    }\n    function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n    CodeMirror.e_stop = e_stop;\n    CodeMirror.e_preventDefault = e_preventDefault;\n    CodeMirror.e_stopPropagation = e_stopPropagation;\n\n    function e_target(e) {return e.target || e.srcElement;}\n    function e_button(e) {\n        if (e.which) return e.which;\n        else if (e.button & 1) return 1;\n        else if (e.button & 2) return 3;\n        else if (e.button & 4) return 2;\n    }\n\n    // Event handler registration. If disconnect is true, it'll return a\n    // function that unregisters the handler.\n    function connect(node, type, handler, disconnect) {\n        if (typeof node.addEventListener == \"function\") {\n            node.addEventListener(type, handler, false);\n            if (disconnect) return function() {node.removeEventListener(type, handler, false);};\n        }\n        else {\n            var wrapHandler = function(event) {handler(event || window.event);};\n            node.attachEvent(\"on\" + type, wrapHandler);\n            if (disconnect) return function() {node.detachEvent(\"on\" + type, wrapHandler);};\n        }\n    }\n    CodeMirror.connect = connect;\n\n    function Delayed() {this.id = null;}\n    Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}};\n\n    // Detect drag-and-drop\n    var dragAndDrop = function() {\n        // IE8 has ondragstart and ondrop properties, but doesn't seem to\n        // actually support ondragstart the way it's supposed to work.\n        if (/MSIE [1-8]\\b/.test(navigator.userAgent)) return false;\n        var div = document.createElement('div');\n        return \"draggable\" in div;\n    }();\n\n    var gecko = /gecko\\/\\d{7}/i.test(navigator.userAgent);\n    var ie = /MSIE \\d/.test(navigator.userAgent);\n    var webkit = /WebKit\\//.test(navigator.userAgent);\n\n    var lineSep = \"\\n\";\n    // Feature-detect whether newlines in textareas are converted to \\r\\n\n    (function () {\n        var te = document.createElement(\"textarea\");\n        te.value = \"foo\\nbar\";\n        if (te.value.indexOf(\"\\r\") > -1) lineSep = \"\\r\\n\";\n    }());\n\n    // Counts the column offset in a string, taking tabs into account.\n    // Used mostly to find indentation.\n    function countColumn(string, end, tabSize) {\n        if (end == null) {\n            end = string.search(/[^\\s\\u00a0]/);\n            if (end == -1) end = string.length;\n        }\n        for (var i = 0, n = 0; i < end; ++i) {\n            if (string.charAt(i) == \"\\t\") n += tabSize - (n % tabSize);\n            else ++n;\n        }\n        return n;\n    }\n\n    function computedStyle(elt) {\n        if (elt.currentStyle) return elt.currentStyle;\n        return window.getComputedStyle(elt, null);\n    }\n\n    // Find the position of an element by following the offsetParent chain.\n    // If screen==true, it returns screen (rather than page) coordinates.\n    function eltOffset(node, screen) {\n        var bod = node.ownerDocument.body;\n        var x = 0, y = 0, skipBody = false;\n        for (var n = node; n; n = n.offsetParent) {\n            var ol = n.offsetLeft, ot = n.offsetTop;\n            // Firefox reports weird inverted offsets when the body has a border.\n            if (n == bod) { x += Math.abs(ol); y += Math.abs(ot); }\n            else { x += ol, y += ot; }\n            if (screen && computedStyle(n).position == \"fixed\")\n                skipBody = true;\n        }\n        var e = screen && !skipBody ? null : bod;\n        for (var n = node.parentNode; n != e; n = n.parentNode)\n            if (n.scrollLeft != null) { x -= n.scrollLeft; y -= n.scrollTop;}\n        return {left: x, top: y};\n    }\n    // Use the faster and saner getBoundingClientRect method when possible.\n    if (document.documentElement.getBoundingClientRect != null) eltOffset = function(node, screen) {\n        // Take the parts of bounding client rect that we are interested in so we are able to edit if need be,\n        // since the returned value cannot be changed externally (they are kept in sync as the element moves within the page)\n        try { var box = node.getBoundingClientRect(); box = { top: box.top, left: box.left }; }\n        catch(e) { box = {top: 0, left: 0}; }\n        if (!screen) {\n            // Get the toplevel scroll, working around browser differences.\n            if (window.pageYOffset == null) {\n                var t = document.documentElement || document.body.parentNode;\n                if (t.scrollTop == null) t = document.body;\n                box.top += t.scrollTop; box.left += t.scrollLeft;\n            } else {\n                box.top += window.pageYOffset; box.left += window.pageXOffset;\n            }\n        }\n        return box;\n    };\n\n    // Get a node's text content.\n    function eltText(node) {\n        return node.textContent || node.innerText || node.nodeValue || \"\";\n    }\n\n    // Operations on {line, ch} objects.\n    function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}\n    function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);}\n    function copyPos(x) {return {line: x.line, ch: x.ch};}\n\n    var escapeElement = document.createElement(\"pre\");\n    function htmlEscape(str) {\n        escapeElement.textContent = str;\n        return escapeElement.innerHTML;\n    }\n    // Recent (late 2011) Opera betas insert bogus newlines at the start\n    // of the textContent, so we strip those.\n    if (htmlEscape(\"a\") == \"\\na\")\n        htmlEscape = function(str) {\n            escapeElement.textContent = str;\n            return escapeElement.innerHTML.slice(1);\n        };\n    // Some IEs don't preserve tabs through innerHTML\n    else if (htmlEscape(\"\\t\") != \"\\t\")\n        htmlEscape = function(str) {\n            escapeElement.innerHTML = \"\";\n            escapeElement.appendChild(document.createTextNode(str));\n            return escapeElement.innerHTML;\n        };\n    CodeMirror.htmlEscape = htmlEscape;\n\n    // Used to position the cursor after an undo/redo by finding the\n    // last edited character.\n    function editEnd(from, to) {\n        if (!to) return from ? from.length : 0;\n        if (!from) return to.length;\n        for (var i = from.length, j = to.length; i >= 0 && j >= 0; --i, --j)\n            if (from.charAt(i) != to.charAt(j)) break;\n        return j + 1;\n    }\n\n    function indexOf(collection, elt) {\n        if (collection.indexOf) return collection.indexOf(elt);\n        for (var i = 0, e = collection.length; i < e; ++i)\n            if (collection[i] == elt) return i;\n        return -1;\n    }\n    function isWordChar(ch) {\n        return /\\w/.test(ch) || ch.toUpperCase() != ch.toLowerCase();\n    }\n\n    // See if \"\".split is the broken IE version, if so, provide an\n    // alternative way to split lines.\n    var splitLines = \"\\n\\nb\".split(/\\n/).length != 3 ? function(string) {\n        var pos = 0, nl, result = [];\n        while ((nl = string.indexOf(\"\\n\", pos)) > -1) {\n            result.push(string.slice(pos, string.charAt(nl-1) == \"\\r\" ? nl - 1 : nl));\n            pos = nl + 1;\n        }\n        result.push(string.slice(pos));\n        return result;\n    } : function(string){return string.split(/\\r?\\n/);};\n    CodeMirror.splitLines = splitLines;\n\n    var hasSelection = window.getSelection ? function(te) {\n        try { return te.selectionStart != te.selectionEnd; }\n        catch(e) { return false; }\n    } : function(te) {\n        try {var range = te.ownerDocument.selection.createRange();}\n        catch(e) {}\n        if (!range || range.parentElement() != te) return false;\n        return range.compareEndPoints(\"StartToEnd\", range) != 0;\n    };\n\n    CodeMirror.defineMode(\"null\", function() {\n        return {token: function(stream) {stream.skipToEnd();}};\n    });\n    CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n    var keyNames = {3: \"Enter\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n        19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n        36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n        46: \"Delete\", 59: \";\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\", 186: \";\", 187: \"=\", 188: \",\",\n        189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\", 221: \"]\", 222: \"'\", 63276: \"PageUp\",\n        63277: \"PageDown\", 63275: \"End\", 63273: \"Home\", 63234: \"Left\", 63232: \"Up\", 63235: \"Right\",\n        63233: \"Down\", 63302: \"Insert\", 63272: \"Delete\"};\n    CodeMirror.keyNames = keyNames;\n    (function() {\n        // Number keys\n        for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i);\n        // Alphabetic keys\n        for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);\n        // Function keys\n        for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = \"F\" + i;\n    })();\n\n    return CodeMirror;\n})();\nCodeMirror.defineMode(\"xml\", function(config, parserConfig) {\n    var indentUnit = config.indentUnit;\n    var Kludges = parserConfig.htmlMode ? {\n        autoSelfClosers: {\"br\": true, \"img\": true, \"hr\": true, \"link\": true, \"input\": true,\n            \"meta\": true, \"col\": true, \"frame\": true, \"base\": true, \"area\": true},\n        doNotIndent: {\"pre\": true},\n        allowUnquoted: true\n    } : {autoSelfClosers: {}, doNotIndent: {}, allowUnquoted: false};\n    var alignCDATA = parserConfig.alignCDATA;\n\n    // Return variables for tokenizers\n    var tagName, type;\n\n    function inText(stream, state) {\n        function chain(parser) {\n            state.tokenize = parser;\n            return parser(stream, state);\n        }\n\n        var ch = stream.next();\n        if (ch == \"<\") {\n            if (stream.eat(\"!\")) {\n                if (stream.eat(\"[\")) {\n                    if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n                    else return null;\n                }\n                else if (stream.match(\"--\")) return chain(inBlock(\"comment\", \"-->\"));\n                else if (stream.match(\"DOCTYPE\", true, true)) {\n                    stream.eatWhile(/[\\w\\._\\-]/);\n                    return chain(doctype(1));\n                }\n                else return null;\n            }\n            else if (stream.eat(\"?\")) {\n                stream.eatWhile(/[\\w\\._\\-]/);\n                state.tokenize = inBlock(\"meta\", \"?>\");\n                return \"meta\";\n            }\n            else {\n                type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n                stream.eatSpace();\n                tagName = \"\";\n                var c;\n                while ((c = stream.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/))) tagName += c;\n                state.tokenize = inTag;\n                return \"tag\";\n            }\n        }\n        else if (ch == \"&\") {\n            stream.eatWhile(/[^;]/);\n            stream.eat(\";\");\n            return \"atom\";\n        }\n        else {\n            stream.eatWhile(/[^&<]/);\n            return null;\n        }\n    }\n\n    function inTag(stream, state) {\n        var ch = stream.next();\n        if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n            state.tokenize = inText;\n            type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n            return \"tag\";\n        }\n        else if (ch == \"=\") {\n            type = \"equals\";\n            return null;\n        }\n        else if (/[\\'\\\"]/.test(ch)) {\n            state.tokenize = inAttribute(ch);\n            return state.tokenize(stream, state);\n        }\n        else {\n            stream.eatWhile(/[^\\s\\u00a0=<>\\\"\\'\\/?]/);\n            return \"word\";\n        }\n    }\n\n    function inAttribute(quote) {\n        return function(stream, state) {\n            while (!stream.eol()) {\n                if (stream.next() == quote) {\n                    state.tokenize = inTag;\n                    break;\n                }\n            }\n            return \"string\";\n        };\n    }\n\n    function inBlock(style, terminator) {\n        return function(stream, state) {\n            while (!stream.eol()) {\n                if (stream.match(terminator)) {\n                    state.tokenize = inText;\n                    break;\n                }\n                stream.next();\n            }\n            return style;\n        };\n    }\n    function doctype(depth) {\n        return function(stream, state) {\n            var ch;\n            while ((ch = stream.next()) != null) {\n                if (ch == \"<\") {\n                    state.tokenize = doctype(depth + 1);\n                    return state.tokenize(stream, state);\n                } else if (ch == \">\") {\n                    if (depth == 1) {\n                        state.tokenize = inText;\n                        break;\n                    } else {\n                        state.tokenize = doctype(depth - 1);\n                        return state.tokenize(stream, state);\n                    }\n                }\n            }\n            return \"meta\";\n        };\n    }\n\n    var curState, setStyle;\n    function pass() {\n        for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]);\n    }\n    function cont() {\n        pass.apply(null, arguments);\n        return true;\n    }\n\n    function pushContext(tagName, startOfLine) {\n        var noIndent = Kludges.doNotIndent.hasOwnProperty(tagName) || (curState.context && curState.context.noIndent);\n        curState.context = {\n            prev: curState.context,\n            tagName: tagName,\n            indent: curState.indented,\n            startOfLine: startOfLine,\n            noIndent: noIndent\n        };\n    }\n    function popContext() {\n        if (curState.context) curState.context = curState.context.prev;\n    }\n\n    function element(type) {\n        if (type == \"openTag\") {\n            curState.tagName = tagName;\n            return cont(attributes, endtag(curState.startOfLine));\n        } else if (type == \"closeTag\") {\n            var err = false;\n            if (curState.context) {\n                err = curState.context.tagName != tagName;\n            } else {\n                err = true;\n            }\n            if (err) setStyle = \"error\";\n            return cont(endclosetag(err));\n        }\n        return cont();\n    }\n    function endtag(startOfLine) {\n        return function(type) {\n            if (type == \"selfcloseTag\" ||\n                (type == \"endTag\" && Kludges.autoSelfClosers.hasOwnProperty(curState.tagName.toLowerCase())))\n                return cont();\n            if (type == \"endTag\") {pushContext(curState.tagName, startOfLine); return cont();}\n            return cont();\n        };\n    }\n    function endclosetag(err) {\n        return function(type) {\n            if (err) setStyle = \"error\";\n            if (type == \"endTag\") { popContext(); return cont(); }\n            setStyle = \"error\";\n            return cont(arguments.callee);\n        }\n    }\n\n    function attributes(type) {\n        if (type == \"word\") {setStyle = \"attribute\"; return cont(attributes);}\n        if (type == \"equals\") return cont(attvalue, attributes);\n        if (type == \"string\") {setStyle = \"error\"; return cont(attributes);}\n        return pass();\n    }\n    function attvalue(type) {\n        if (type == \"word\" && Kludges.allowUnquoted) {setStyle = \"string\"; return cont();}\n        if (type == \"string\") return cont(attvaluemaybe);\n        return pass();\n    }\n    function attvaluemaybe(type) {\n        if (type == \"string\") return cont(attvaluemaybe);\n        else return pass();\n    }\n\n    return {\n        startState: function() {\n            return {tokenize: inText, cc: [], indented: 0, startOfLine: true, tagName: null, context: null};\n        },\n\n        token: function(stream, state) {\n            if (stream.sol()) {\n                state.startOfLine = true;\n                state.indented = stream.indentation();\n            }\n            if (stream.eatSpace()) return null;\n\n            setStyle = type = tagName = null;\n            var style = state.tokenize(stream, state);\n            state.type = type;\n            if ((style || type) && style != \"comment\") {\n                curState = state;\n                while (true) {\n                    var comb = state.cc.pop() || element;\n                    if (comb(type || style)) break;\n                }\n            }\n            state.startOfLine = false;\n            return setStyle || style;\n        },\n\n        indent: function(state, textAfter, fullLine) {\n            var context = state.context;\n            if ((state.tokenize != inTag && state.tokenize != inText) ||\n                context && context.noIndent)\n                return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n            if (alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n            if (context && /^<\\//.test(textAfter))\n                context = context.prev;\n            while (context && !context.startOfLine)\n                context = context.prev;\n            if (context) return context.indent + indentUnit;\n            else return 0;\n        },\n\n        compareStates: function(a, b) {\n            if (a.indented != b.indented || a.tokenize != b.tokenize) return false;\n            for (var ca = a.context, cb = b.context; ; ca = ca.prev, cb = cb.prev) {\n                if (!ca || !cb) return ca == cb;\n                if (ca.tagName != cb.tagName) return false;\n            }\n        },\n\n        electricChars: \"/\"\n    };\n});\n\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nCodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n    var indentUnit = config.indentUnit;\n    var jsonMode = parserConfig.json;\n\n    // Tokenizer\n\n    var keywords = function(){\n        function kw(type) {return {type: type, style: \"keyword\"};}\n        var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\");\n        var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n        return {\n            \"if\": A, \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n            \"return\": C, \"break\": C, \"continue\": C, \"new\": C, \"delete\": C, \"throw\": C,\n            \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n            \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n            \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n            \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n            \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom\n        };\n    }();\n\n    var isOperatorChar = /[+\\-*&%=<>!?|]/;\n\n    function chain(stream, state, f) {\n        state.tokenize = f;\n        return f(stream, state);\n    }\n\n    function nextUntilUnescaped(stream, end) {\n        var escaped = false, next;\n        while ((next = stream.next()) != null) {\n            if (next == end && !escaped)\n                return false;\n            escaped = !escaped && next == \"\\\\\";\n        }\n        return escaped;\n    }\n\n    // Used as scratch variables to communicate multiple values without\n    // consing up tons of objects.\n    var type, content;\n    function ret(tp, style, cont) {\n        type = tp; content = cont;\n        return style;\n    }\n\n    function jsTokenBase(stream, state) {\n        var ch = stream.next();\n        if (ch == '\"' || ch == \"'\")\n            return chain(stream, state, jsTokenString(ch));\n        else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch))\n            return ret(ch);\n        else if (ch == \"0\" && stream.eat(/x/i)) {\n            stream.eatWhile(/[\\da-f]/i);\n            return ret(\"number\", \"number\");\n        }\n        else if (/\\d/.test(ch)) {\n            stream.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/);\n            return ret(\"number\", \"number\");\n        }\n        else if (ch == \"/\") {\n            if (stream.eat(\"*\")) {\n                return chain(stream, state, jsTokenComment);\n            }\n            else if (stream.eat(\"/\")) {\n                stream.skipToEnd();\n                return ret(\"comment\", \"comment\");\n            }\n            else if (state.reAllowed) {\n                nextUntilUnescaped(stream, \"/\");\n                stream.eatWhile(/[gimy]/); // 'y' is \"sticky\" option in Mozilla\n                return ret(\"regexp\", \"string\");\n            }\n            else {\n                stream.eatWhile(isOperatorChar);\n                return ret(\"operator\", null, stream.current());\n            }\n        }\n        else if (ch == \"#\") {\n            stream.skipToEnd();\n            return ret(\"error\", \"error\");\n        }\n        else if (isOperatorChar.test(ch)) {\n            stream.eatWhile(isOperatorChar);\n            return ret(\"operator\", null, stream.current());\n        }\n        else {\n            stream.eatWhile(/[\\w\\$_]/);\n            var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];\n            return (known && state.kwAllowed) ? ret(known.type, known.style, word) :\n                ret(\"variable\", \"variable\", word);\n        }\n    }\n\n    function jsTokenString(quote) {\n        return function(stream, state) {\n            if (!nextUntilUnescaped(stream, quote))\n                state.tokenize = jsTokenBase;\n            return ret(\"string\", \"string\");\n        };\n    }\n\n    function jsTokenComment(stream, state) {\n        var maybeEnd = false, ch;\n        while (ch = stream.next()) {\n            if (ch == \"/\" && maybeEnd) {\n                state.tokenize = jsTokenBase;\n                break;\n            }\n            maybeEnd = (ch == \"*\");\n        }\n        return ret(\"comment\", \"comment\");\n    }\n\n    // Parser\n\n    var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true};\n\n    function JSLexical(indented, column, type, align, prev, info) {\n        this.indented = indented;\n        this.column = column;\n        this.type = type;\n        this.prev = prev;\n        this.info = info;\n        if (align != null) this.align = align;\n    }\n\n    function inScope(state, varname) {\n        for (var v = state.localVars; v; v = v.next)\n            if (v.name == varname) return true;\n    }\n\n    function parseJS(state, style, type, content, stream) {\n        var cc = state.cc;\n        // Communicate our context to the combinators.\n        // (Less wasteful than consing up a hundred closures on every call.)\n        cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc;\n\n        if (!state.lexical.hasOwnProperty(\"align\"))\n            state.lexical.align = true;\n\n        while(true) {\n            var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n            if (combinator(type, content)) {\n                while(cc.length && cc[cc.length - 1].lex)\n                    cc.pop()();\n                if (cx.marked) return cx.marked;\n                if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n                return style;\n            }\n        }\n    }\n\n    // Combinator utils\n\n    var cx = {state: null, column: null, marked: null, cc: null};\n    function pass() {\n        for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n    }\n    function cont() {\n        pass.apply(null, arguments);\n        return true;\n    }\n    function register(varname) {\n        var state = cx.state;\n        if (state.context) {\n            cx.marked = \"def\";\n            for (var v = state.localVars; v; v = v.next)\n                if (v.name == varname) return;\n            state.localVars = {name: varname, next: state.localVars};\n        }\n    }\n\n    // Combinators\n\n    var defaultVars = {name: \"this\", next: {name: \"arguments\"}};\n    function pushcontext() {\n        if (!cx.state.context) cx.state.localVars = defaultVars;\n        cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\n    }\n    function popcontext() {\n        cx.state.localVars = cx.state.context.vars;\n        cx.state.context = cx.state.context.prev;\n    }\n    function pushlex(type, info) {\n        var result = function() {\n            var state = cx.state;\n            state.lexical = new JSLexical(state.indented, cx.stream.column(), type, null, state.lexical, info)\n        };\n        result.lex = true;\n        return result;\n    }\n    function poplex() {\n        var state = cx.state;\n        if (state.lexical.prev) {\n            if (state.lexical.type == \")\")\n                state.indented = state.lexical.indented;\n            state.lexical = state.lexical.prev;\n        }\n    }\n    poplex.lex = true;\n\n    function expect(wanted) {\n        return function expecting(type) {\n            if (type == wanted) return cont();\n            else if (wanted == \";\") return pass();\n            else return cont(arguments.callee);\n        };\n    }\n\n    function statement(type) {\n        if (type == \"var\") return cont(pushlex(\"vardef\"), vardef1, expect(\";\"), poplex);\n        if (type == \"keyword a\") return cont(pushlex(\"form\"), expression, statement, poplex);\n        if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n        if (type == \"{\") return cont(pushlex(\"}\"), block, poplex);\n        if (type == \";\") return cont();\n        if (type == \"function\") return cont(functiondef);\n        if (type == \"for\") return cont(pushlex(\"form\"), expect(\"(\"), pushlex(\")\"), forspec1, expect(\")\"),\n            poplex, statement, poplex);\n        if (type == \"variable\") return cont(pushlex(\"stat\"), maybelabel);\n        if (type == \"switch\") return cont(pushlex(\"form\"), expression, pushlex(\"}\", \"switch\"), expect(\"{\"),\n            block, poplex, poplex);\n        if (type == \"case\") return cont(expression, expect(\":\"));\n        if (type == \"default\") return cont(expect(\":\"));\n        if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\n            statement, poplex, popcontext);\n        return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n    }\n    function expression(type) {\n        if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator);\n        if (type == \"function\") return cont(functiondef);\n        if (type == \"keyword c\") return cont(maybeexpression);\n        if (type == \"(\") return cont(pushlex(\")\"), expression, expect(\")\"), poplex, maybeoperator);\n        if (type == \"operator\") return cont(expression);\n        if (type == \"[\") return cont(pushlex(\"]\"), commasep(expression, \"]\"), poplex, maybeoperator);\n        if (type == \"{\") return cont(pushlex(\"}\"), commasep(objprop, \"}\"), poplex, maybeoperator);\n        return cont();\n    }\n    function maybeexpression(type) {\n        if (type.match(/[;\\}\\)\\],]/)) return pass();\n        return pass(expression);\n    }\n\n    function maybeoperator(type, value) {\n        if (type == \"operator\" && /\\+\\+|--/.test(value)) return cont(maybeoperator);\n        if (type == \"operator\") return cont(expression);\n        if (type == \";\") return;\n        if (type == \"(\") return cont(pushlex(\")\"), commasep(expression, \")\"), poplex, maybeoperator);\n        if (type == \".\") return cont(property, maybeoperator);\n        if (type == \"[\") return cont(pushlex(\"]\"), expression, expect(\"]\"), poplex, maybeoperator);\n    }\n    function maybelabel(type) {\n        if (type == \":\") return cont(poplex, statement);\n        return pass(maybeoperator, expect(\";\"), poplex);\n    }\n    function property(type) {\n        if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n    }\n    function objprop(type) {\n        if (type == \"variable\") cx.marked = \"property\";\n        if (atomicTypes.hasOwnProperty(type)) return cont(expect(\":\"), expression);\n    }\n    function commasep(what, end) {\n        function proceed(type) {\n            if (type == \",\") return cont(what, proceed);\n            if (type == end) return cont();\n            return cont(expect(end));\n        }\n        return function commaSeparated(type) {\n            if (type == end) return cont();\n            else return pass(what, proceed);\n        };\n    }\n    function block(type) {\n        if (type == \"}\") return cont();\n        return pass(statement, block);\n    }\n    function vardef1(type, value) {\n        if (type == \"variable\"){register(value); return cont(vardef2);}\n        return cont();\n    }\n    function vardef2(type, value) {\n        if (value == \"=\") return cont(expression, vardef2);\n        if (type == \",\") return cont(vardef1);\n    }\n    function forspec1(type) {\n        if (type == \"var\") return cont(vardef1, forspec2);\n        if (type == \";\") return pass(forspec2);\n        if (type == \"variable\") return cont(formaybein);\n        return pass(forspec2);\n    }\n    function formaybein(type, value) {\n        if (value == \"in\") return cont(expression);\n        return cont(maybeoperator, forspec2);\n    }\n    function forspec2(type, value) {\n        if (type == \";\") return cont(forspec3);\n        if (value == \"in\") return cont(expression);\n        return cont(expression, expect(\";\"), forspec3);\n    }\n    function forspec3(type) {\n        if (type != \")\") cont(expression);\n    }\n    function functiondef(type, value) {\n        if (type == \"variable\") {register(value); return cont(functiondef);}\n        if (type == \"(\") return cont(pushlex(\")\"), pushcontext, commasep(funarg, \")\"), poplex, statement, popcontext);\n    }\n    function funarg(type, value) {\n        if (type == \"variable\") {register(value); return cont();}\n    }\n\n    // Interface\n\n    return {\n        startState: function(basecolumn) {\n            return {\n                tokenize: jsTokenBase,\n                reAllowed: true,\n                kwAllowed: true,\n                cc: [],\n                lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n                localVars: null,\n                context: null,\n                indented: 0\n            };\n        },\n\n        token: function(stream, state) {\n            if (stream.sol()) {\n                if (!state.lexical.hasOwnProperty(\"align\"))\n                    state.lexical.align = false;\n                state.indented = stream.indentation();\n            }\n            if (stream.eatSpace()) return null;\n            var style = state.tokenize(stream, state);\n            if (type == \"comment\") return style;\n            state.reAllowed = type == \"operator\" || type == \"keyword c\" || type.match(/^[\\[{}\\(,;:]$/);\n            state.kwAllowed = type != '.';\n            return parseJS(state, style, type, content, stream);\n        },\n\n        indent: function(state, textAfter) {\n            if (state.tokenize != jsTokenBase) return 0;\n            var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical,\n                type = lexical.type, closing = firstChar == type;\n            if (type == \"vardef\") return lexical.indented + 4;\n            else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n            else if (type == \"stat\" || type == \"form\") return lexical.indented + indentUnit;\n            else if (lexical.info == \"switch\" && !closing)\n                return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n            else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n            else return lexical.indented + (closing ? 0 : indentUnit);\n        },\n\n        electricChars: \":{}\"\n    };\n});\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\n\nCodeMirror.defineMode(\"css\", function(config) {\n    var indentUnit = config.indentUnit, type;\n    function ret(style, tp) {type = tp; return style;}\n\n    function tokenBase(stream, state) {\n        var ch = stream.next();\n        if (ch == \"@\") {stream.eatWhile(/[\\w\\\\\\-]/); return ret(\"meta\", stream.current());}\n        else if (ch == \"/\" && stream.eat(\"*\")) {\n            state.tokenize = tokenCComment;\n            return tokenCComment(stream, state);\n        }\n        else if (ch == \"<\" && stream.eat(\"!\")) {\n            state.tokenize = tokenSGMLComment;\n            return tokenSGMLComment(stream, state);\n        }\n        else if (ch == \"=\") ret(null, \"compare\");\n        else if ((ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) return ret(null, \"compare\");\n        else if (ch == \"\\\"\" || ch == \"'\") {\n            state.tokenize = tokenString(ch);\n            return state.tokenize(stream, state);\n        }\n        else if (ch == \"#\") {\n            stream.eatWhile(/[\\w\\\\\\-]/);\n            return ret(\"atom\", \"hash\");\n        }\n        else if (ch == \"!\") {\n            stream.match(/^\\s*\\w*/);\n            return ret(\"keyword\", \"important\");\n        }\n        else if (/\\d/.test(ch)) {\n            stream.eatWhile(/[\\w.%]/);\n            return ret(\"number\", \"unit\");\n        }\n        else if (/[,.+>*\\/]/.test(ch)) {\n            return ret(null, \"select-op\");\n        }\n        else if (/[;{}:\\[\\]]/.test(ch)) {\n            return ret(null, ch);\n        }\n        else {\n            stream.eatWhile(/[\\w\\\\\\-]/);\n            return ret(\"variable\", \"variable\");\n        }\n    }\n\n    function tokenCComment(stream, state) {\n        var maybeEnd = false, ch;\n        while ((ch = stream.next()) != null) {\n            if (maybeEnd && ch == \"/\") {\n                state.tokenize = tokenBase;\n                break;\n            }\n            maybeEnd = (ch == \"*\");\n        }\n        return ret(\"comment\", \"comment\");\n    }\n\n    function tokenSGMLComment(stream, state) {\n        var dashes = 0, ch;\n        while ((ch = stream.next()) != null) {\n            if (dashes >= 2 && ch == \">\") {\n                state.tokenize = tokenBase;\n                break;\n            }\n            dashes = (ch == \"-\") ? dashes + 1 : 0;\n        }\n        return ret(\"comment\", \"comment\");\n    }\n\n    function tokenString(quote) {\n        return function(stream, state) {\n            var escaped = false, ch;\n            while ((ch = stream.next()) != null) {\n                if (ch == quote && !escaped)\n                    break;\n                escaped = !escaped && ch == \"\\\\\";\n            }\n            if (!escaped) state.tokenize = tokenBase;\n            return ret(\"string\", \"string\");\n        };\n    }\n\n    return {\n        startState: function(base) {\n            return {tokenize: tokenBase,\n                baseIndent: base || 0,\n                stack: []};\n        },\n\n        token: function(stream, state) {\n            if (stream.eatSpace()) return null;\n            var style = state.tokenize(stream, state);\n\n            var context = state.stack[state.stack.length-1];\n            if (type == \"hash\" && context == \"rule\") style = \"atom\";\n            else if (style == \"variable\") {\n                if (context == \"rule\") style = \"number\";\n                else if (!context || context == \"@media{\") style = \"tag\";\n            }\n\n            if (context == \"rule\" && /^[\\{\\};]$/.test(type))\n                state.stack.pop();\n            if (type == \"{\") {\n                if (context == \"@media\") state.stack[state.stack.length-1] = \"@media{\";\n                else state.stack.push(\"{\");\n            }\n            else if (type == \"}\") state.stack.pop();\n            else if (type == \"@media\") state.stack.push(\"@media\");\n            else if (context == \"{\" && type != \"comment\") state.stack.push(\"rule\");\n            return style;\n        },\n\n        indent: function(state, textAfter) {\n            var n = state.stack.length;\n            if (/^\\}/.test(textAfter))\n                n -= state.stack[state.stack.length-1] == \"rule\" ? 2 : 1;\n            return state.baseIndent + n * indentUnit;\n        },\n\n        electricChars: \"}\"\n    };\n});\n\nCodeMirror.defineMIME(\"text/css\", \"css\");\nCodeMirror.defineMode(\"htmlmixed\", function(config, parserConfig) {\n    var htmlMode = CodeMirror.getMode(config, {name: \"xml\", htmlMode: true});\n    var jsMode = CodeMirror.getMode(config, \"javascript\");\n    var cssMode = CodeMirror.getMode(config, \"css\");\n\n    function html(stream, state) {\n        var style = htmlMode.token(stream, state.htmlState);\n        if (style == \"tag\" && stream.current() == \">\" && state.htmlState.context) {\n            if (/^script$/i.test(state.htmlState.context.tagName)) {\n                state.token = javascript;\n                state.localState = jsMode.startState(htmlMode.indent(state.htmlState, \"\"));\n                state.mode = \"javascript\";\n            }\n            else if (/^style$/i.test(state.htmlState.context.tagName)) {\n                state.token = css;\n                state.localState = cssMode.startState(htmlMode.indent(state.htmlState, \"\"));\n                state.mode = \"css\";\n            }\n        }\n        return style;\n    }\n    function maybeBackup(stream, pat, style) {\n        var cur = stream.current();\n        var close = cur.search(pat);\n        if (close > -1) stream.backUp(cur.length - close);\n        return style;\n    }\n    function javascript(stream, state) {\n        if (stream.match(/^<\\/\\s*script\\s*>/i, false)) {\n            state.token = html;\n            state.curState = null;\n            state.mode = \"html\";\n            return html(stream, state);\n        }\n        return maybeBackup(stream, /<\\/\\s*script\\s*>/,\n            jsMode.token(stream, state.localState));\n    }\n    function css(stream, state) {\n        if (stream.match(/^<\\/\\s*style\\s*>/i, false)) {\n            state.token = html;\n            state.localState = null;\n            state.mode = \"html\";\n            return html(stream, state);\n        }\n        return maybeBackup(stream, /<\\/\\s*style\\s*>/,\n            cssMode.token(stream, state.localState));\n    }\n\n    return {\n        startState: function() {\n            var state = htmlMode.startState();\n            return {token: html, localState: null, mode: \"html\", htmlState: state};\n        },\n\n        copyState: function(state) {\n            if (state.localState)\n                var local = CodeMirror.copyState(state.token == css ? cssMode : jsMode, state.localState);\n            return {token: state.token, localState: local, mode: state.mode,\n                htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};\n        },\n\n        token: function(stream, state) {\n            return state.token(stream, state);\n        },\n\n        indent: function(state, textAfter) {\n            if (state.token == html || /^\\s*<\\//.test(textAfter))\n                return htmlMode.indent(state.htmlState, textAfter);\n            else if (state.token == javascript)\n                return jsMode.indent(state.localState, textAfter);\n            else\n                return cssMode.indent(state.localState, textAfter);\n        },\n\n        compareStates: function(a, b) {\n            return htmlMode.compareStates(a.htmlState, b.htmlState);\n        },\n\n        electricChars: \"/{}:\"\n    }\n});\n\nCodeMirror.defineMIME(\"text/html\", \"htmlmixed\");\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/adapters/mootools-adapter.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n MooTools adapter\n\n (c) 2010-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(){var e=window,h=document,f=e.MooTools.version.substring(0,3),i=f===\"1.2\"||f===\"1.1\",j=i||f===\"1.3\",g=e.$extend||function(){return Object.append.apply(Object,arguments)};e.HighchartsAdapter={init:function(a){var b=Fx.prototype,c=b.start,d=Fx.Morph.prototype,e=d.compute;b.start=function(b,d){var e=this.element;if(b.d)this.paths=a.init(e,e.d,this.toD);c.apply(this,arguments);return this};d.compute=function(b,c,d){var f=this.paths;if(f)this.element.attr(\"d\",a.step(f[0],f[1],d,this.toD));else return e.apply(this,\narguments)}},adapterRun:function(a,b){if(b===\"width\"||b===\"height\")return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=h.getElementsByTagName(\"head\")[0],d=h.createElement(\"script\");d.type=\"text/javascript\";d.src=a;d.onload=b;c.appendChild(d)},animate:function(a,b,c){var d=a.attr,f=c&&c.complete;if(d&&!a.setStyle)a.getStyle=a.attr,a.setStyle=function(){var a=arguments;this.attr.call(this,a[0],a[1][0])},a.$family=function(){return!0};e.HighchartsAdapter.stop(a);c=new Fx.Morph(d?a:$(a),\ng({transition:Fx.Transitions.Quad.easeInOut},c));if(d)c.element=a;if(b.d)c.toD=b.d;f&&c.addEvent(\"complete\",f);c.start(b);a.fx=c},each:function(a,b){return i?$each(a,b):Array.each(a,b)},map:function(a,b){return a.map(b)},grep:function(a,b){return a.filter(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){a=a.getPosition();return{left:a.x,top:a.y}},extendWithEvents:function(a){a.addEvent||(a.nodeName?$(a):g(a,new Events))},addEvent:function(a,b,c){typeof b===\"string\"&&(b===\n\"unload\"&&(b=\"beforeunload\"),e.HighchartsAdapter.extendWithEvents(a),a.addEvent(b,c))},removeEvent:function(a,b,c){typeof a!==\"string\"&&a.addEvent&&(b?(b===\"unload\"&&(b=\"beforeunload\"),c?a.removeEvent(b,c):a.removeEvents&&a.removeEvents(b)):a.removeEvents())},fireEvent:function(a,b,c,d){b={type:b,target:a};b=j?new Event(b):new DOMEvent(b);b=g(b,c);if(!b.target&&b.event)b.target=b.event.target;b.preventDefault=function(){d=null};a.fireEvent&&a.fireEvent(b.type,b);d&&d(b)},washMouseEvent:function(a){if(a.page)a.pageX=\na.page.x,a.pageY=a.page.y;return a},stop:function(a){a.fx&&a.fx.cancel()}}})();\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/adapters/mootools-adapter.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * MooTools adapter\n *\n * (c) 2010-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Fx, $, $extend, $each, $merge, Events, Event, DOMEvent */\n\n(function () {\n\nvar win = window,\n\tdoc = document,\n\tmooVersion = win.MooTools.version.substring(0, 3), // Get the first three characters of the version number\n\tlegacy = mooVersion === '1.2' || mooVersion === '1.1', // 1.1 && 1.2 considered legacy, 1.3 is not.\n\tlegacyEvent = legacy || mooVersion === '1.3', // In versions 1.1 - 1.3 the event class is named Event, in newer versions it is named DOMEvent.\n\t$extend = win.$extend || function () {\n\t\treturn Object.append.apply(Object, arguments);\n\t};\n\nwin.HighchartsAdapter = {\n\t/**\n\t * Initialize the adapter. This is run once as Highcharts is first run.\n\t * @param {Object} pathAnim The helper object to do animations across adapters.\n\t */\n\tinit: function (pathAnim) {\n\t\tvar fxProto = Fx.prototype,\n\t\t\tfxStart = fxProto.start,\n\t\t\tmorphProto = Fx.Morph.prototype,\n\t\t\tmorphCompute = morphProto.compute;\n\n\t\t// override Fx.start to allow animation of SVG element wrappers\n\t\t/*jslint unparam: true*//* allow unused parameters in fx functions */\n\t\tfxProto.start = function (from, to) {\n\t\t\tvar fx = this,\n\t\t\t\telem = fx.element;\n\n\t\t\t// special for animating paths\n\t\t\tif (from.d) {\n\t\t\t\t//this.fromD = this.element.d.split(' ');\n\t\t\t\tfx.paths = pathAnim.init(\n\t\t\t\t\telem,\n\t\t\t\t\telem.d,\n\t\t\t\t\tfx.toD\n\t\t\t\t);\n\t\t\t}\n\t\t\tfxStart.apply(fx, arguments);\n\n\t\t\treturn this; // chainable\n\t\t};\n\n\t\t// override Fx.step to allow animation of SVG element wrappers\n\t\tmorphProto.compute = function (from, to, delta) {\n\t\t\tvar fx = this,\n\t\t\t\tpaths = fx.paths;\n\n\t\t\tif (paths) {\n\t\t\t\tfx.element.attr(\n\t\t\t\t\t'd',\n\t\t\t\t\tpathAnim.step(paths[0], paths[1], delta, fx.toD)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn morphCompute.apply(fx, arguments);\n\t\t\t}\n\t\t};\n\t\t/*jslint unparam: false*/\n\t},\n\t\n\t/**\n\t * Run a general method on the framework, following jQuery syntax\n\t * @param {Object} el The HTML element\n\t * @param {String} method Which method to run on the wrapped element\n\t */\n\tadapterRun: function (el, method) {\n\t\t\n\t\t// This currently works for getting inner width and height. If adding\n\t\t// more methods later, we need a conditional implementation for each.\n\t\tif (method === 'width' || method === 'height') {\n\t\t\treturn parseInt($(el).getStyle(method), 10);\n\t\t}\n\t},\n\n\t/**\n\t * Downloads a script and executes a callback when done.\n\t * @param {String} scriptLocation\n\t * @param {Function} callback\n\t */\n\tgetScript: function (scriptLocation, callback) {\n\t\t// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.\n\t\tvar head = doc.getElementsByTagName('head')[0];\n\t\tvar script = doc.createElement('script');\n\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = scriptLocation;\n\t\tscript.onload = callback;\n\n\t\thead.appendChild(script);\n\t},\n\n\t/**\n\t * Animate a HTML element or SVG element wrapper\n\t * @param {Object} el\n\t * @param {Object} params\n\t * @param {Object} options jQuery-like animation options: duration, easing, callback\n\t */\n\tanimate: function (el, params, options) {\n\t\tvar isSVGElement = el.attr,\n\t\t\teffect,\n\t\t\tcomplete = options && options.complete;\n\n\t\tif (isSVGElement && !el.setStyle) {\n\t\t\t// add setStyle and getStyle methods for internal use in Moo\n\t\t\tel.getStyle = el.attr;\n\t\t\tel.setStyle = function () { // property value is given as array in Moo - break it down\n\t\t\t\tvar args = arguments;\n\t\t\t\tthis.attr.call(this, args[0], args[1][0]);\n\t\t\t};\n\t\t\t// dirty hack to trick Moo into handling el as an element wrapper\n\t\t\tel.$family = function () { return true; };\n\t\t}\n\n\t\t// stop running animations\n\t\twin.HighchartsAdapter.stop(el);\n\n\t\t// define and run the effect\n\t\teffect = new Fx.Morph(\n\t\t\tisSVGElement ? el : $(el),\n\t\t\t$extend({\n\t\t\t\ttransition: Fx.Transitions.Quad.easeInOut\n\t\t\t}, options)\n\t\t);\n\n\t\t// Make sure that the element reference is set when animating svg elements\n\t\tif (isSVGElement) {\n\t\t\teffect.element = el;\n\t\t}\n\n\t\t// special treatment for paths\n\t\tif (params.d) {\n\t\t\teffect.toD = params.d;\n\t\t}\n\n\t\t// jQuery-like events\n\t\tif (complete) {\n\t\t\teffect.addEvent('complete', complete);\n\t\t}\n\n\t\t// run\n\t\teffect.start(params);\n\n\t\t// record for use in stop method\n\t\tel.fx = effect;\n\t},\n\n\t/**\n\t * MooTool's each function\n\t *\n\t */\n\teach: function (arr, fn) {\n\t\treturn legacy ?\n\t\t\t$each(arr, fn) :\n\t\t\tArray.each(arr, fn);\n\t},\n\n\t/**\n\t * Map an array\n\t * @param {Array} arr\n\t * @param {Function} fn\n\t */\n\tmap: function (arr, fn) {\n\t\treturn arr.map(fn);\n\t},\n\n\t/**\n\t * Grep or filter an array\n\t * @param {Array} arr\n\t * @param {Function} fn\n\t */\n\tgrep: function (arr, fn) {\n\t\treturn arr.filter(fn);\n\t},\n\t\n\t/**\n\t * Return the index of an item in an array, or -1 if not matched\n\t */\n\tinArray: function (item, arr, from) {\n\t\treturn arr ? arr.indexOf(item, from) : -1;\n\t},\n\n\t/**\n\t * Get the offset of an element relative to the top left corner of the web page\n\t */\n\toffset: function (el) {\n\t\tvar offsets = el.getPosition(); // #1496\n\t\treturn {\n\t\t\tleft: offsets.x,\n\t\t\ttop: offsets.y\n\t\t};\n\t},\n\n\t/**\n\t * Extends an object with Events, if its not done\n\t */\n\textendWithEvents: function (el) {\n\t\t// if the addEvent method is not defined, el is a custom Highcharts object\n\t\t// like series or point\n\t\tif (!el.addEvent) {\n\t\t\tif (el.nodeName) {\n\t\t\t\tel = $(el); // a dynamically generated node\n\t\t\t} else {\n\t\t\t\t$extend(el, new Events()); // a custom object\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Add an event listener\n\t * @param {Object} el HTML element or custom object\n\t * @param {String} type Event type\n\t * @param {Function} fn Event handler\n\t */\n\taddEvent: function (el, type, fn) {\n\t\tif (typeof type === 'string') { // chart broke due to el being string, type function\n\n\t\t\tif (type === 'unload') { // Moo self destructs before custom unload events\n\t\t\t\ttype = 'beforeunload';\n\t\t\t}\n\n\t\t\twin.HighchartsAdapter.extendWithEvents(el);\n\n\t\t\tel.addEvent(type, fn);\n\t\t}\n\t},\n\n\tremoveEvent: function (el, type, fn) {\n\t\tif (typeof el === 'string') {\n\t\t\t// el.removeEvents below apperantly calls this method again. Do not quite understand why, so for now just bail out.\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif (el.addEvent) { // If el doesn't have an addEvent method, there are no events to remove\n\t\t\tif (type) {\n\t\t\t\tif (type === 'unload') { // Moo self destructs before custom unload events\n\t\t\t\t\ttype = 'beforeunload';\n\t\t\t\t}\n\t\n\t\t\t\tif (fn) {\n\t\t\t\t\tel.removeEvent(type, fn);\n\t\t\t\t} else if (el.removeEvents) { // #958\n\t\t\t\t\tel.removeEvents(type);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tel.removeEvents();\n\t\t\t}\n\t\t}\n\t},\n\n\tfireEvent: function (el, event, eventArguments, defaultFunction) {\n\t\tvar eventArgs = {\n\t\t\ttype: event,\n\t\t\ttarget: el\n\t\t};\n\t\t// create an event object that keeps all functions\n\t\tevent = legacyEvent ? new Event(eventArgs) : new DOMEvent(eventArgs);\n\t\tevent = $extend(event, eventArguments);\n\n\t\t// When running an event on the Chart.prototype, MooTools nests the target in event.event\n\t\tif (!event.target && event.event) {\n\t\t\tevent.target = event.event.target;\n\t\t}\n\n\t\t// override the preventDefault function to be able to use\n\t\t// this for custom events\n\t\tevent.preventDefault = function () {\n\t\t\tdefaultFunction = null;\n\t\t};\n\t\t// if fireEvent is not available on the object, there hasn't been added\n\t\t// any events to it above\n\t\tif (el.fireEvent) {\n\t\t\tel.fireEvent(event.type, event);\n\t\t}\n\n\t\t// fire the default if it is passed and it is not prevented above\n\t\tif (defaultFunction) {\n\t\t\tdefaultFunction(event);\n\t\t}\n\t},\n\t\n\t/**\n\t * Set back e.pageX and e.pageY that MooTools has abstracted away. #1165, #1346.\n\t */\n\twashMouseEvent: function (e) {\n\t\tif (e.page) {\n\t\t\te.pageX = e.page.x;\n\t\t\te.pageY = e.page.y;\n\t\t}\n\t\treturn e;\n\t},\n\n\t/**\n\t * Stop running animations on the object\n\t */\n\tstop: function (el) {\n\t\tif (el.fx) {\n\t\t\tel.fx.cancel();\n\t\t}\n\t}\n};\n\n}());\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/adapters/prototype-adapter.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Prototype adapter\n\n @author Michael Nelson, Torstein Hønsi.\n\n Feel free to use and modify this script.\n Highcharts license: www.highcharts.com/license.\n*/\nvar HighchartsAdapter=function(){var f=typeof Effect!==\"undefined\";return{init:function(a){if(f)Effect.HighchartsTransition=Class.create(Effect.Base,{initialize:function(b,c,d,g){var e;this.element=b;this.key=c;e=b.attr?b.attr(c):$(b).getStyle(c);if(c===\"d\")this.paths=a.init(b,b.d,d),this.toD=d,e=0,d=1;this.start(Object.extend(g||{},{from:e,to:d,attribute:c}))},setup:function(){HighchartsAdapter._extend(this.element);if(!this.element._highchart_animation)this.element._highchart_animation={};this.element._highchart_animation[this.key]=\nthis},update:function(b){var c=this.paths,d=this.element;c&&(b=a.step(c[0],c[1],b,this.toD));d.attr?d.element&&d.attr(this.options.attribute,b):(c={},c[this.options.attribute]=b,$(d).setStyle(c))},finish:function(){this.element&&this.element._highchart_animation&&delete this.element._highchart_animation[this.key]}})},adapterRun:function(a,b){return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=$$(\"head\")[0];c&&c.appendChild((new Element(\"script\",{type:\"text/javascript\",src:a})).observe(\"load\",\nb))},addNS:function(a){var b=/^(?:click|mouse(?:down|up|over|move|out))$/;return/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/.test(a)||b.test(a)?a:\"h:\"+a},addEvent:function(a,b,c){a.addEventListener||a.attachEvent?Event.observe($(a),HighchartsAdapter.addNS(b),c):(HighchartsAdapter._extend(a),a._highcharts_observe(b,c))},animate:function(a,b,c){var d,c=c||{};c.delay=0;c.duration=(c.duration||500)/1E3;c.afterFinish=c.complete;if(f)for(d in b)new Effect.HighchartsTransition($(a),\nd,b[d],c);else{if(a.attr)for(d in b)a.attr(d,b[d]);c.complete&&c.complete()}a.attr||$(a).setStyle(b)},stop:function(a){var b;if(a._highcharts_extended&&a._highchart_animation)for(b in a._highchart_animation)a._highchart_animation[b].cancel()},each:function(a,b){$A(a).each(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){return $(a).cumulativeOffset()},fireEvent:function(a,b,c,d){a.fire?a.fire(HighchartsAdapter.addNS(b),c):a._highcharts_extended&&(c=c||{},a._highcharts_fire(b,\nc));c&&c.defaultPrevented&&(d=null);d&&d(c)},removeEvent:function(a,b,c){$(a).stopObserving&&(b&&(b=HighchartsAdapter.addNS(b)),$(a).stopObserving(b,c));window===a?Event.stopObserving(a,b,c):(HighchartsAdapter._extend(a),a._highcharts_stop_observing(b,c))},washMouseEvent:function(a){return a},grep:function(a,b){return a.findAll(b)},map:function(a,b){return a.map(b)},_extend:function(a){a._highcharts_extended||Object.extend(a,{_highchart_events:{},_highchart_animation:null,_highcharts_extended:!0,\n_highcharts_observe:function(b,a){this._highchart_events[b]=[this._highchart_events[b],a].compact().flatten()},_highcharts_stop_observing:function(b,a){b?a?this._highchart_events[b]=[this._highchart_events[b]].compact().flatten().without(a):delete this._highchart_events[b]:this._highchart_events={}},_highcharts_fire:function(a,c){var d=this;(this._highchart_events[a]||[]).each(function(a){if(!c.stopped)c.preventDefault=function(){c.defaultPrevented=!0},c.target=d,a.bind(this)(c)===!1&&c.preventDefault()}.bind(this))}})}}}();\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/adapters/prototype-adapter.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Prototype adapter\n *\n * @author Michael Nelson, Torstein Hønsi.\n *\n * Feel free to use and modify this script.\n * Highcharts license: www.highcharts.com/license.\n */\n\n// JSLint options:\n/*global Effect, Class, Event, Element, $, $$, $A */\n\n// Adapter interface between prototype and the Highcharts charting library\nvar HighchartsAdapter = (function () {\n\nvar hasEffect = typeof Effect !== 'undefined';\n\nreturn {\n\n\t/**\n\t * Initialize the adapter. This is run once as Highcharts is first run.\n\t * @param {Object} pathAnim The helper object to do animations across adapters.\n\t */\n\tinit: function (pathAnim) {\n\t\tif (hasEffect) {\n\t\t\t/**\n\t\t\t * Animation for Highcharts SVG element wrappers only\n\t\t\t * @param {Object} element\n\t\t\t * @param {Object} attribute\n\t\t\t * @param {Object} to\n\t\t\t * @param {Object} options\n\t\t\t */\n\t\t\tEffect.HighchartsTransition = Class.create(Effect.Base, {\n\t\t\t\tinitialize: function (element, attr, to, options) {\n\t\t\t\t\tvar from,\n\t\t\t\t\t\topts;\n\n\t\t\t\t\tthis.element = element;\n\t\t\t\t\tthis.key = attr;\n\t\t\t\t\tfrom = element.attr ? element.attr(attr) : $(element).getStyle(attr);\n\n\t\t\t\t\t// special treatment for paths\n\t\t\t\t\tif (attr === 'd') {\n\t\t\t\t\t\tthis.paths = pathAnim.init(\n\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\telement.d,\n\t\t\t\t\t\t\tto\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.toD = to;\n\n\n\t\t\t\t\t\t// fake values in order to read relative position as a float in update\n\t\t\t\t\t\tfrom = 0;\n\t\t\t\t\t\tto = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\topts = Object.extend((options || {}), {\n\t\t\t\t\t\tfrom: from,\n\t\t\t\t\t\tto: to,\n\t\t\t\t\t\tattribute: attr\n\t\t\t\t\t});\n\t\t\t\t\tthis.start(opts);\n\t\t\t\t},\n\t\t\t\tsetup: function () {\n\t\t\t\t\tHighchartsAdapter._extend(this.element);\n\t\t\t\t\t// If this is the first animation on this object, create the _highcharts_animation helper that\n\t\t\t\t\t// contain pointers to the animation objects.\n\t\t\t\t\tif (!this.element._highchart_animation) {\n\t\t\t\t\t\tthis.element._highchart_animation = {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store a reference to this animation instance.\n\t\t\t\t\tthis.element._highchart_animation[this.key] = this;\n\t\t\t\t},\n\t\t\t\tupdate: function (position) {\n\t\t\t\t\tvar paths = this.paths,\n\t\t\t\t\t\telement = this.element,\n\t\t\t\t\t\tobj;\n\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tposition = pathAnim.step(paths[0], paths[1], position, this.toD);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (element.attr) { // SVGElement\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (element.element) { // If not, it has been destroyed (#1405)\n\t\t\t\t\t\t\telement.attr(this.options.attribute, position);\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t} else { // HTML, #409\n\t\t\t\t\t\tobj = {};\n\t\t\t\t\t\tobj[this.options.attribute] = position;\n\t\t\t\t\t\t$(element).setStyle(obj);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tfinish: function () {\n\t\t\t\t\t// Delete the property that holds this animation now that it is finished.\n\t\t\t\t\t// Both canceled animations and complete ones gets a 'finish' call.\n\t\t\t\t\tif (this.element && this.element._highchart_animation) { // #1405\n\t\t\t\t\t\tdelete this.element._highchart_animation[this.key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Run a general method on the framework, following jQuery syntax\n\t * @param {Object} el The HTML element\n\t * @param {String} method Which method to run on the wrapped element\n\t */\n\tadapterRun: function (el, method) {\n\t\t\n\t\t// This currently works for getting inner width and height. If adding\n\t\t// more methods later, we need a conditional implementation for each.\n\t\treturn parseInt($(el).getStyle(method), 10);\n\t\t\n\t},\n\n\t/**\n\t * Downloads a script and executes a callback when done.\n\t * @param {String} scriptLocation\n\t * @param {Function} callback\n\t */\n\tgetScript: function (scriptLocation, callback) {\n\t\tvar head = $$('head')[0]; // Returns an array, so pick the first element.\n\t\tif (head) {\n\t\t\t// Append a new 'script' element, set its type and src attributes, add a 'load' handler that calls the callback\n\t\t\thead.appendChild(new Element('script', { type: 'text/javascript', src: scriptLocation}).observe('load', callback));\n\t\t}\n\t},\n\n\t/**\n\t * Custom events in prototype needs to be namespaced. This method adds a namespace 'h:' in front of\n\t * events that are not recognized as native.\n\t */\n\taddNS: function (eventName) {\n\t\tvar HTMLEvents = /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,\n\t\t\tMouseEvents = /^(?:click|mouse(?:down|up|over|move|out))$/;\n\t\treturn (HTMLEvents.test(eventName) || MouseEvents.test(eventName)) ?\n\t\t\teventName :\n\t\t\t'h:' + eventName;\n\t},\n\n\t// el needs an event to be attached. el is not necessarily a dom element\n\taddEvent: function (el, event, fn) {\n\t\tif (el.addEventListener || el.attachEvent) {\n\t\t\tEvent.observe($(el), HighchartsAdapter.addNS(event), fn);\n\n\t\t} else {\n\t\t\tHighchartsAdapter._extend(el);\n\t\t\tel._highcharts_observe(event, fn);\n\t\t}\n\t},\n\n\t// motion makes things pretty. use it if effects is loaded, if not... still get to the end result.\n\tanimate: function (el, params, options) {\n\t\tvar key,\n\t\t\tfx;\n\n\t\t// default options\n\t\toptions = options || {};\n\t\toptions.delay = 0;\n\t\toptions.duration = (options.duration || 500) / 1000;\n\t\toptions.afterFinish = options.complete;\n\n\t\t// animate wrappers and DOM elements\n\t\tif (hasEffect) {\n\t\t\tfor (key in params) {\n\t\t\t\t// The fx variable is seemingly thrown away here, but the Effect.setup will add itself to the _highcharts_animation object\n\t\t\t\t// on the element itself so its not really lost.\n\t\t\t\tfx = new Effect.HighchartsTransition($(el), key, params[key], options);\n\t\t\t}\n\t\t} else {\n\t\t\tif (el.attr) { // #409 without effects\n\t\t\t\tfor (key in params) {\n\t\t\t\t\tel.attr(key, params[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.complete) {\n\t\t\t\toptions.complete();\n\t\t\t}\n\t\t}\n\n\t\tif (!el.attr) { // HTML element, #409\n\t\t\t$(el).setStyle(params);\n\t\t}\n\t},\n\n\t// this only occurs in higcharts 2.0+\n\tstop: function (el) {\n\t\tvar key;\n\t\tif (el._highcharts_extended && el._highchart_animation) {\n\t\t\tfor (key in el._highchart_animation) {\n\t\t\t\t// Cancel the animation\n\t\t\t\t// The 'finish' function in the Effect object will remove the reference\n\t\t\t\tel._highchart_animation[key].cancel();\n\t\t\t}\n\t\t}\n\t},\n\n\t// um.. each\n\teach: function (arr, fn) {\n\t\t$A(arr).each(fn);\n\t},\n\t\n\tinArray: function (item, arr, from) {\n\t\treturn arr ? arr.indexOf(item, from) : -1;\n\t},\n\n\t/**\n\t * Get the cumulative offset relative to the top left of the page. This method, unlike its\n\t * jQuery and MooTools counterpart, still suffers from issue #208 regarding the position\n\t * of a chart within a fixed container.\n\t */\n\toffset: function (el) {\n\t\treturn $(el).cumulativeOffset();\n\t},\n\n\t// fire an event based on an event name (event) and an object (el).\n\t// again, el may not be a dom element\n\tfireEvent: function (el, event, eventArguments, defaultFunction) {\n\t\tif (el.fire) {\n\t\t\tel.fire(HighchartsAdapter.addNS(event), eventArguments);\n\t\t} else if (el._highcharts_extended) {\n\t\t\teventArguments = eventArguments || {};\n\t\t\tel._highcharts_fire(event, eventArguments);\n\t\t}\n\n\t\tif (eventArguments && eventArguments.defaultPrevented) {\n\t\t\tdefaultFunction = null;\n\t\t}\n\n\t\tif (defaultFunction) {\n\t\t\tdefaultFunction(eventArguments);\n\t\t}\n\t},\n\n\tremoveEvent: function (el, event, handler) {\n\t\tif ($(el).stopObserving) {\n\t\t\tif (event) {\n\t\t\t\tevent = HighchartsAdapter.addNS(event);\n\t\t\t}\n\t\t\t$(el).stopObserving(event, handler);\n\t\t} if (window === el) {\n\t\t\tEvent.stopObserving(el, event, handler);\n\t\t} else {\n\t\t\tHighchartsAdapter._extend(el);\n\t\t\tel._highcharts_stop_observing(event, handler);\n\t\t}\n\t},\n\t\n\twashMouseEvent: function (e) {\n\t\treturn e;\n\t},\n\n\t// um, grep\n\tgrep: function (arr, fn) {\n\t\treturn arr.findAll(fn);\n\t},\n\n\t// um, map\n\tmap: function (arr, fn) {\n\t\treturn arr.map(fn);\n\t},\n\n\t// extend an object to handle highchart events (highchart objects, not svg elements).\n\t// this is a very simple way of handling events but whatever, it works (i think)\n\t_extend: function (object) {\n\t\tif (!object._highcharts_extended) {\n\t\t\tObject.extend(object, {\n\t\t\t\t_highchart_events: {},\n\t\t\t\t_highchart_animation: null,\n\t\t\t\t_highcharts_extended: true,\n\t\t\t\t_highcharts_observe: function (name, fn) {\n\t\t\t\t\tthis._highchart_events[name] = [this._highchart_events[name], fn].compact().flatten();\n\t\t\t\t},\n\t\t\t\t_highcharts_stop_observing: function (name, fn) {\n\t\t\t\t\tif (name) {\n\t\t\t\t\t\tif (fn) {\n\t\t\t\t\t\t\tthis._highchart_events[name] = [this._highchart_events[name]].compact().flatten().without(fn);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdelete this._highchart_events[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._highchart_events = {};\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_highcharts_fire: function (name, args) {\n\t\t\t\t\tvar target = this;\n\t\t\t\t\t(this._highchart_events[name] || []).each(function (fn) {\n\t\t\t\t\t\t// args is never null here\n\t\t\t\t\t\tif (args.stopped) {\n\t\t\t\t\t\t\treturn; // \"throw $break\" wasn't working. i think because of the scope of 'this'.\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Attach a simple preventDefault function to skip default handler if called\n\t\t\t\t\t\targs.preventDefault = function () {\n\t\t\t\t\t\t\targs.defaultPrevented = true;\n\t\t\t\t\t\t};\n\t\t\t\t\t\targs.target = target;\n\n\t\t\t\t\t\t// If the event handler return false, prevent the default handler from executing\n\t\t\t\t\t\tif (fn.bind(this)(args) === false) {\n\t\t\t\t\t\t\targs.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n.bind(this));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n};\n}());\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/adapters/standalone-framework.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n Standalone Highcharts Framework\n\n License: MIT License\n*/\nvar HighchartsAdapter=function(){function o(c){function a(a,b,d){a.removeEventListener(b,d,!1)}function d(a,b,d){d=a.HCProxiedMethods[d.toString()];a.detachEvent(\"on\"+b,d)}function b(b,c){var f=b.HCEvents,i,g,k,j;if(b.removeEventListener)i=a;else if(b.attachEvent)i=d;else return;c?(g={},g[c]=!0):g=f;for(j in g)if(f[j])for(k=f[j].length;k--;)i(b,j,f[j][k])}c.HCExtended||Highcharts.extend(c,{HCExtended:!0,HCEvents:{},bind:function(b,a){var d=this,c=this.HCEvents,g;if(d.addEventListener)d.addEventListener(b,\na,!1);else if(d.attachEvent){g=function(b){a.call(d,b)};if(!d.HCProxiedMethods)d.HCProxiedMethods={};d.HCProxiedMethods[a.toString()]=g;d.attachEvent(\"on\"+b,g)}c[b]===r&&(c[b]=[]);c[b].push(a)},unbind:function(c,h){var f,i;c?(f=this.HCEvents[c]||[],h?(i=HighchartsAdapter.inArray(h,f),i>-1&&(f.splice(i,1),this.HCEvents[c]=f),this.removeEventListener?a(this,c,h):this.attachEvent&&d(this,c,h)):(b(this,c),this.HCEvents[c]=[])):(b(this),this.HCEvents={})},trigger:function(b,a){var d=this.HCEvents[b]||\n[],c=d.length,g,k,j;k=function(){a.defaultPrevented=!0};for(g=0;g<c;g++){j=d[g];if(a.stopped)break;a.preventDefault=k;a.target=this;a.type=b;j.call(this,a)===!1&&a.preventDefault()}}});return c}var r,l=document,p=[],m=[],q,n;Math.easeInOutSine=function(c,a,d,b){return-d/2*(Math.cos(Math.PI*c/b)-1)+a};return{init:function(c){if(!l.defaultView)this._getStyle=function(a,d){var b;return a.style[d]?a.style[d]:(d===\"opacity\"&&(d=\"filter\"),b=a.currentStyle[d.replace(/\\-(\\w)/g,function(a,b){return b.toUpperCase()})],\nd===\"filter\"&&(b=b.replace(/alpha\\(opacity=([0-9]+)\\)/,function(b,a){return a/100})),b===\"\"?1:b)},this.adapterRun=function(a,d){var b={width:\"clientWidth\",height:\"clientHeight\"}[d];if(b)return a.style.zoom=1,a[b]-2*parseInt(HighchartsAdapter._getStyle(a,\"padding\"),10)};if(!Array.prototype.forEach)this.each=function(a,d){for(var b=0,c=a.length;b<c;b++)if(d.call(a[b],a[b],b,a)===!1)return b};if(!Array.prototype.indexOf)this.inArray=function(a,d){var b,c=0;if(d)for(b=d.length;c<b;c++)if(d[c]===a)return c;\nreturn-1};if(!Array.prototype.filter)this.grep=function(a,d){for(var b=[],c=0,h=a.length;c<h;c++)d(a[c],c)&&b.push(a[c]);return b};n=function(a,c,b){this.options=c;this.elem=a;this.prop=b};n.prototype={update:function(){var a;a=this.paths;var d=this.elem,b=d.element;a&&b?d.attr(\"d\",c.step(a[0],a[1],this.now,this.toD)):d.attr?b&&d.attr(this.prop,this.now):(a={},a[d]=this.now+this.unit,Highcharts.css(d,a));this.options.step&&this.options.step.call(this.elem,this.now,this)},custom:function(a,c,b){var e=\nthis,h=function(a){return e.step(a)},f;this.startTime=+new Date;this.start=a;this.end=c;this.unit=b;this.now=this.start;this.pos=this.state=0;h.elem=this.elem;h()&&m.push(h)===1&&(q=setInterval(function(){for(f=0;f<m.length;f++)m[f]()||m.splice(f--,1);m.length||clearInterval(q)},13))},step:function(a){var c=+new Date,b;b=this.options;var e;if(this.elem.stopAnimation)b=!1;else if(a||c>=b.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();a=this.options.curAnim[this.prop]=\n!0;for(e in b.curAnim)b.curAnim[e]!==!0&&(a=!1);a&&b.complete&&b.complete.call(this.elem);b=!1}else e=c-this.startTime,this.state=e/b.duration,this.pos=b.easing(e,0,1,b.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update(),b=!0;return b}};this.animate=function(a,d,b){var e,h=\"\",f,i,g;a.stopAnimation=!1;if(typeof b!==\"object\"||b===null)e=arguments,b={duration:e[2],easing:e[3],complete:e[4]};if(typeof b.duration!==\"number\")b.duration=400;b.easing=Math[b.easing]||Math.easeInOutSine;\nb.curAnim=Highcharts.extend({},d);for(g in d)i=new n(a,b,g),f=null,g===\"d\"?(i.paths=c.init(a,a.d,d.d),i.toD=d.d,e=0,f=1):a.attr?e=a.attr(g):(e=parseFloat(HighchartsAdapter._getStyle(a,g))||0,g!==\"opacity\"&&(h=\"px\")),f||(f=parseFloat(d[g])),i.custom(e,f,h)}},_getStyle:function(c,a){return window.getComputedStyle(c).getPropertyValue(a)},getScript:function(c,a){var d=l.getElementsByTagName(\"head\")[0],b=l.createElement(\"script\");b.type=\"text/javascript\";b.src=c;b.onload=a;d.appendChild(b)},inArray:function(c,\na){return a.indexOf?a.indexOf(c):p.indexOf.call(a,c)},adapterRun:function(c,a){return parseInt(HighchartsAdapter._getStyle(c,a),10)},grep:function(c,a){return p.filter.call(c,a)},map:function(c,a){for(var d=[],b=0,e=c.length;b<e;b++)d[b]=a.call(c[b],c[b],b,c);return d},offset:function(c){for(var a=0,d=0;c;)a+=c.offsetLeft,d+=c.offsetTop,c=c.offsetParent;return{left:a,top:d}},addEvent:function(c,a,d){o(c).bind(a,d)},removeEvent:function(c,a,d){o(c).unbind(a,d)},fireEvent:function(c,a,d,b){var e;l.createEvent&&\n(c.dispatchEvent||c.fireEvent)?(e=l.createEvent(\"Events\"),e.initEvent(a,!0,!0),e.target=c,Highcharts.extend(e,d),c.dispatchEvent?c.dispatchEvent(e):c.fireEvent(a,e)):c.HCExtended===!0&&(d=d||{},c.trigger(a,d));d&&d.defaultPrevented&&(b=null);b&&b(d)},washMouseEvent:function(c){return c},stop:function(c){c.stopAnimation=!0},each:function(c,a){return Array.prototype.forEach.call(c,a)}}}();\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/adapters/standalone-framework.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n * Standalone Highcharts Framework\n *\n * License: MIT License\n */\n\n\n/*global Highcharts */\nvar HighchartsAdapter = (function () {\n\nvar UNDEFINED,\n\tdoc = document,\n\temptyArray = [],\n\ttimers = [],\n\ttimerId,\n\tFx;\n\nMath.easeInOutSine = function (t, b, c, d) {\n\treturn -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n};\n\n\n\n/**\n * Extend given object with custom events\n */\nfunction augment(obj) {\n\tfunction removeOneEvent(el, type, fn) {\n\t\tel.removeEventListener(type, fn, false);\n\t}\n\n\tfunction IERemoveOneEvent(el, type, fn) {\n\t\tfn = el.HCProxiedMethods[fn.toString()];\n\t\tel.detachEvent('on' + type, fn);\n\t}\n\n\tfunction removeAllEvents(el, type) {\n\t\tvar events = el.HCEvents,\n\t\t\tremove,\n\t\t\ttypes,\n\t\t\tlen,\n\t\t\tn;\n\n\t\tif (el.removeEventListener) {\n\t\t\tremove = removeOneEvent;\n\t\t} else if (el.attachEvent) {\n\t\t\tremove = IERemoveOneEvent;\n\t\t} else {\n\t\t\treturn; // break on non-DOM events\n\t\t}\n\n\n\t\tif (type) {\n\t\t\ttypes = {};\n\t\t\ttypes[type] = true;\n\t\t} else {\n\t\t\ttypes = events;\n\t\t}\n\n\t\tfor (n in types) {\n\t\t\tif (events[n]) {\n\t\t\t\tlen = events[n].length;\n\t\t\t\twhile (len--) {\n\t\t\t\t\tremove(el, n, events[n][len]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!obj.HCExtended) {\n\t\tHighcharts.extend(obj, {\n\t\t\tHCExtended: true,\n\n\t\t\tHCEvents: {},\n\n\t\t\tbind: function (name, fn) {\n\t\t\t\tvar el = this,\n\t\t\t\t\tevents = this.HCEvents,\n\t\t\t\t\twrappedFn;\n\n\t\t\t\t// handle DOM events in modern browsers\n\t\t\t\tif (el.addEventListener) {\n\t\t\t\t\tel.addEventListener(name, fn, false);\n\n\t\t\t\t// handle old IE implementation\n\t\t\t\t} else if (el.attachEvent) {\n\t\t\t\t\t\n\t\t\t\t\twrappedFn = function (e) {\n\t\t\t\t\t\tfn.call(el, e);\n\t\t\t\t\t};\n\n\t\t\t\t\tif (!el.HCProxiedMethods) {\n\t\t\t\t\t\tel.HCProxiedMethods = {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// link wrapped fn with original fn, so we can get this in removeEvent\n\t\t\t\t\tel.HCProxiedMethods[fn.toString()] = wrappedFn;\n\n\t\t\t\t\tel.attachEvent('on' + name, wrappedFn);\n\t\t\t\t}\n\n\n\t\t\t\tif (events[name] === UNDEFINED) {\n\t\t\t\t\tevents[name] = [];\n\t\t\t\t}\n\n\t\t\t\tevents[name].push(fn);\n\t\t\t},\n\n\t\t\tunbind: function (name, fn) {\n\t\t\t\tvar events,\n\t\t\t\t\tindex;\n\n\t\t\t\tif (name) {\n\t\t\t\t\tevents = this.HCEvents[name] || [];\n\t\t\t\t\tif (fn) {\n\t\t\t\t\t\tindex = HighchartsAdapter.inArray(fn, events);\n\t\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\t\tevents.splice(index, 1);\n\t\t\t\t\t\t\tthis.HCEvents[name] = events;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.removeEventListener) {\n\t\t\t\t\t\t\tremoveOneEvent(this, name, fn);\n\t\t\t\t\t\t} else if (this.attachEvent) {\n\t\t\t\t\t\t\tIERemoveOneEvent(this, name, fn);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tremoveAllEvents(this, name);\n\t\t\t\t\t\tthis.HCEvents[name] = [];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tremoveAllEvents(this);\n\t\t\t\t\tthis.HCEvents = {};\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttrigger: function (name, args) {\n\t\t\t\tvar events = this.HCEvents[name] || [],\n\t\t\t\t\ttarget = this,\n\t\t\t\t\tlen = events.length,\n\t\t\t\t\ti,\n\t\t\t\t\tpreventDefault,\n\t\t\t\t\tfn;\n\n\t\t\t\t// Attach a simple preventDefault function to skip default handler if called\n\t\t\t\tpreventDefault = function () {\n\t\t\t\t\targs.defaultPrevented = true;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\tfn = events[i];\n\n\t\t\t\t\t// args is never null here\n\t\t\t\t\tif (args.stopped) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\targs.preventDefault = preventDefault;\n\t\t\t\t\targs.target = target;\n\t\t\t\t\targs.type = name; // #2297\t\n\t\t\t\t\t\n\t\t\t\t\t// If the event handler return false, prevent the default handler from executing\n\t\t\t\t\tif (fn.call(this, args) === false) {\n\t\t\t\t\t\targs.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn obj;\n}\n\n\nreturn {\n\t/**\n\t * Initialize the adapter. This is run once as Highcharts is first run.\n\t */\n\tinit: function (pathAnim) {\n\n\t\t/**\n\t\t * Compatibility section to add support for legacy IE. This can be removed if old IE \n\t\t * support is not needed.\n\t\t */\n\t\tif (!doc.defaultView) {\n\t\t\tthis._getStyle = function (el, prop) {\n\t\t\t\tvar val;\n\t\t\t\tif (el.style[prop]) {\n\t\t\t\t\treturn el.style[prop];\n\t\t\t\t} else {\n\t\t\t\t\tif (prop === 'opacity') {\n\t\t\t\t\t\tprop = 'filter';\n\t\t\t\t\t}\n\t\t\t\t\t/*jslint unparam: true*/\n\t\t\t\t\tval = el.currentStyle[prop.replace(/\\-(\\w)/g, function (a, b) { return b.toUpperCase(); })];\n\t\t\t\t\tif (prop === 'filter') {\n\t\t\t\t\t\tval = val.replace(\n\t\t\t\t\t\t\t/alpha\\(opacity=([0-9]+)\\)/, \n\t\t\t\t\t\t\tfunction (a, b) { \n\t\t\t\t\t\t\t\treturn b / 100; \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t/*jslint unparam: false*/\n\t\t\t\t\treturn val === '' ? 1 : val;\n\t\t\t\t} \n\t\t\t};\n\t\t\tthis.adapterRun = function (elem, method) {\n\t\t\t\tvar alias = { width: 'clientWidth', height: 'clientHeight' }[method];\n\n\t\t\t\tif (alias) {\n\t\t\t\t\telem.style.zoom = 1;\n\t\t\t\t\treturn elem[alias] - 2 * parseInt(HighchartsAdapter._getStyle(elem, 'padding'), 10);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif (!Array.prototype.forEach) {\n\t\t\tthis.each = function (arr, fn) { // legacy\n\t\t\t\tvar i = 0, \n\t\t\t\t\tlen = arr.length;\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tif (fn.call(arr[i], arr[i], i, arr) === false) {\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif (!Array.prototype.indexOf) {\n\t\t\tthis.inArray = function (item, arr) {\n\t\t\t\tvar len, \n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (arr) {\n\t\t\t\t\tlen = arr.length;\n\t\t\t\t\t\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tif (arr[i] === item) {\n\t\t\t\t\t\t\treturn i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t};\n\t\t}\n\n\t\tif (!Array.prototype.filter) {\n\t\t\tthis.grep = function (elements, callback) {\n\t\t\t\tvar ret = [],\n\t\t\t\t\ti = 0,\n\t\t\t\t\tlength = elements.length;\n\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (!!callback(elements[i], i)) {\n\t\t\t\t\t\tret.push(elements[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn ret;\n\t\t\t};\n\t\t}\n\n\t\t//--- End compatibility section ---\n\n\n\t\t/**\n\t\t * Start of animation specific code\n\t\t */\n\t\tFx = function (elem, options, prop) {\n\t\t\tthis.options = options;\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t};\n\t\tFx.prototype = {\n\t\t\t\n\t\t\tupdate: function () {\n\t\t\t\tvar styles,\n\t\t\t\t\tpaths = this.paths,\n\t\t\t\t\telem = this.elem,\n\t\t\t\t\telemelem = elem.element; // if destroyed, it is null\n\n\t\t\t\t// Animating a path definition on SVGElement\n\t\t\t\tif (paths && elemelem) {\n\t\t\t\t\telem.attr('d', pathAnim.step(paths[0], paths[1], this.now, this.toD));\n\t\t\t\t\n\t\t\t\t// Other animations on SVGElement\n\t\t\t\t} else if (elem.attr) {\n\t\t\t\t\tif (elemelem) {\n\t\t\t\t\t\telem.attr(this.prop, this.now);\n\t\t\t\t\t}\n\n\t\t\t\t// HTML styles\n\t\t\t\t} else {\n\t\t\t\t\tstyles = {};\n\t\t\t\t\tstyles[elem] = this.now + this.unit;\n\t\t\t\t\tHighcharts.css(elem, styles);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (this.options.step) {\n\t\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t\t}\n\n\t\t\t},\n\t\t\tcustom: function (from, to, unit) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tt = function (gotoEnd) {\n\t\t\t\t\t\treturn self.step(gotoEnd);\n\t\t\t\t\t},\n\t\t\t\t\ti;\n\n\t\t\t\tthis.startTime = +new Date();\n\t\t\t\tthis.start = from;\n\t\t\t\tthis.end = to;\n\t\t\t\tthis.unit = unit;\n\t\t\t\tthis.now = this.start;\n\t\t\t\tthis.pos = this.state = 0;\n\n\t\t\t\tt.elem = this.elem;\n\n\t\t\t\tif (t() && timers.push(t) === 1) {\n\t\t\t\t\ttimerId = setInterval(function () {\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (i = 0; i < timers.length; i++) {\n\t\t\t\t\t\t\tif (!timers[i]()) {\n\t\t\t\t\t\t\t\ttimers.splice(i--, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!timers.length) {\n\t\t\t\t\t\t\tclearInterval(timerId);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 13);\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\tstep: function (gotoEnd) {\n\t\t\t\tvar t = +new Date(),\n\t\t\t\t\tret,\n\t\t\t\t\tdone,\n\t\t\t\t\toptions = this.options,\n\t\t\t\t\ti;\n\n\t\t\t\tif (this.elem.stopAnimation) {\n\t\t\t\t\tret = false;\n\n\t\t\t\t} else if (gotoEnd || t >= options.duration + this.startTime) {\n\t\t\t\t\tthis.now = this.end;\n\t\t\t\t\tthis.pos = this.state = 1;\n\t\t\t\t\tthis.update();\n\n\t\t\t\t\tthis.options.curAnim[this.prop] = true;\n\n\t\t\t\t\tdone = true;\n\t\t\t\t\tfor (i in options.curAnim) {\n\t\t\t\t\t\tif (options.curAnim[i] !== true) {\n\t\t\t\t\t\t\tdone = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tif (options.complete) {\n\t\t\t\t\t\t\toptions.complete.call(this.elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tret = false;\n\n\t\t\t\t} else {\n\t\t\t\t\tvar n = t - this.startTime;\n\t\t\t\t\tthis.state = n / options.duration;\n\t\t\t\t\tthis.pos = options.easing(n, 0, 1, options.duration);\n\t\t\t\t\tthis.now = this.start + ((this.end - this.start) * this.pos);\n\t\t\t\t\tthis.update();\n\t\t\t\t\tret = true;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * The adapter animate method\n\t\t */\n\t\tthis.animate = function (el, prop, opt) {\n\t\t\tvar start,\n\t\t\t\tunit = '',\n\t\t\t\tend,\n\t\t\t\tfx,\n\t\t\t\targs,\n\t\t\t\tname;\n\n\t\t\tel.stopAnimation = false; // ready for new\n\n\t\t\tif (typeof opt !== 'object' || opt === null) {\n\t\t\t\targs = arguments;\n\t\t\t\topt = {\n\t\t\t\t\tduration: args[2],\n\t\t\t\t\teasing: args[3],\n\t\t\t\t\tcomplete: args[4]\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (typeof opt.duration !== 'number') {\n\t\t\t\topt.duration = 400;\n\t\t\t}\n\t\t\topt.easing = Math[opt.easing] || Math.easeInOutSine;\n\t\t\topt.curAnim = Highcharts.extend({}, prop);\n\t\t\t\n\t\t\tfor (name in prop) {\n\t\t\t\tfx = new Fx(el, opt, name);\n\t\t\t\tend = null;\n\t\t\t\t\n\t\t\t\tif (name === 'd') {\n\t\t\t\t\tfx.paths = pathAnim.init(\n\t\t\t\t\t\tel,\n\t\t\t\t\t\tel.d,\n\t\t\t\t\t\tprop.d\n\t\t\t\t\t);\n\t\t\t\t\tfx.toD = prop.d;\n\t\t\t\t\tstart = 0;\n\t\t\t\t\tend = 1;\n\t\t\t\t} else if (el.attr) {\n\t\t\t\t\tstart = el.attr(name);\n\t\t\t\t} else {\n\t\t\t\t\tstart = parseFloat(HighchartsAdapter._getStyle(el, name)) || 0;\n\t\t\t\t\tif (name !== 'opacity') {\n\t\t\t\t\t\tunit = 'px';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (!end) {\n\t\t\t\t\tend = parseFloat(prop[name]);\n\t\t\t\t}\n\t\t\t\tfx.custom(start, end, unit);\n\t\t\t}\t\n\t\t};\n\t},\n\n\t/**\n\t * Internal method to return CSS value for given element and property\n\t */\n\t_getStyle: function (el, prop) {\n\t\treturn window.getComputedStyle(el).getPropertyValue(prop);\n\t},\n\n\t/**\n\t * Downloads a script and executes a callback when done.\n\t * @param {String} scriptLocation\n\t * @param {Function} callback\n\t */\n\tgetScript: function (scriptLocation, callback) {\n\t\t// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.\n\t\tvar head = doc.getElementsByTagName('head')[0],\n\t\t\tscript = doc.createElement('script');\n\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = scriptLocation;\n\t\tscript.onload = callback;\n\n\t\thead.appendChild(script);\n\t},\n\n\t/**\n\t * Return the index of an item in an array, or -1 if not found\n\t */\n\tinArray: function (item, arr) {\n\t\treturn arr.indexOf ? arr.indexOf(item) : emptyArray.indexOf.call(arr, item);\n\t},\n\n\n\t/**\n\t * A direct link to adapter methods\n\t */\n\tadapterRun: function (elem, method) {\n\t\treturn parseInt(HighchartsAdapter._getStyle(elem, method), 10);\n\t},\n\n\t/**\n\t * Filter an array\n\t */\n\tgrep: function (elements, callback) {\n\t\treturn emptyArray.filter.call(elements, callback);\n\t},\n\n\t/**\n\t * Map an array\n\t */\n\tmap: function (arr, fn) {\n\t\tvar results = [], i = 0, len = arr.length;\n\n\t\tfor (; i < len; i++) {\n\t\t\tresults[i] = fn.call(arr[i], arr[i], i, arr);\n\t\t}\n\n\t\treturn results;\n\t},\n\n\toffset: function (el) {\n\t\tvar left = 0,\n\t\t\ttop = 0;\n\n\t\twhile (el) {\n\t\t\tleft += el.offsetLeft;\n\t\t\ttop += el.offsetTop;\n\t\t\tel = el.offsetParent;\n\t\t}\n\n\t\treturn {\n\t\t\tleft: left,\n\t\t\ttop: top\n\t\t};\n\t},\n\n\t/**\n\t * Add an event listener\n\t */\n\taddEvent: function (el, type, fn) {\n\t\taugment(el).bind(type, fn);\n\t},\n\n\t/**\n\t * Remove event added with addEvent\n\t */\n\tremoveEvent: function (el, type, fn) {\n\t\taugment(el).unbind(type, fn);\n\t},\n\n\t/**\n\t * Fire an event on a custom object\n\t */\n\tfireEvent: function (el, type, eventArguments, defaultFunction) {\n\t\tvar e;\n\n\t\tif (doc.createEvent && (el.dispatchEvent || el.fireEvent)) {\n\t\t\te = doc.createEvent('Events');\n\t\t\te.initEvent(type, true, true);\n\t\t\te.target = el;\n\n\t\t\tHighcharts.extend(e, eventArguments);\n\n\t\t\tif (el.dispatchEvent) {\n\t\t\t\tel.dispatchEvent(e);\n\t\t\t} else {\n\t\t\t\tel.fireEvent(type, e);\n\t\t\t}\n\n\t\t} else if (el.HCExtended === true) {\n\t\t\teventArguments = eventArguments || {};\n\t\t\tel.trigger(type, eventArguments);\n\t\t}\n\n\t\tif (eventArguments && eventArguments.defaultPrevented) {\n\t\t\tdefaultFunction = null;\n\t\t}\n\n\t\tif (defaultFunction) {\n\t\t\tdefaultFunction(eventArguments);\n\t\t}\n\t},\n\n\twashMouseEvent: function (e) {\n\t\treturn e;\n\t},\n\n\n\t/**\n\t * Stop running animation\n\t */\n\tstop: function (el) {\n\t\tel.stopAnimation = true;\n\t},\n\n\t/**\n\t * Utility for iterating over an array. Parameters are reversed compared to jQuery.\n\t * @param {Array} arr\n\t * @param {Function} fn\n\t */\n\teach: function (arr, fn) { // modern browsers\n\t\treturn Array.prototype.forEach.call(arr, fn);\n\t}\n};\n}());\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/highcharts-more.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n (c) 2009-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(j,C){function J(a,b,c){this.init.call(this,a,b,c)}function K(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var c=this.xAxis.center;a.push(\"L\",c[0],c[1])},this.closedStacks=!0}function L(a,b){var c=this.chart,d=this.options.animation,g=this.group,f=this.markerGroup,e=this.xAxis.center,i=c.plotLeft,n=c.plotTop;if(c.polar){if(c.renderer.isSVG)if(d===!0&&(d={}),b){if(c={translateX:e[0]+i,translateY:e[1]+n,scaleX:0.001,scaleY:0.001},g.attr(c),f)f.attrSetters=g.attrSetters,\nf.attr(c)}else c={translateX:i,translateY:n,scaleX:1,scaleY:1},g.animate(c,d),f&&f.animate(c,d),this.animate=null}else a.call(this,b)}var P=j.arrayMin,Q=j.arrayMax,s=j.each,F=j.extend,p=j.merge,R=j.map,r=j.pick,v=j.pInt,m=j.getOptions().plotOptions,h=j.seriesTypes,x=j.extendClass,M=j.splat,o=j.wrap,N=j.Axis,u=j.Tick,z=j.Series,q=h.column.prototype,t=Math,D=t.round,A=t.floor,S=t.max,w=function(){};F(J.prototype,{init:function(a,b,c){var d=this,g=d.defaultOptions;d.chart=b;if(b.angular)g.background=\n{};d.options=a=p(g,a);(a=a.background)&&s([].concat(M(a)).reverse(),function(a){var b=a.backgroundColor,a=p(d.defaultBackgroundOptions,a);if(b)a.backgroundColor=b;a.color=a.backgroundColor;c.options.plotBands.unshift(a)})},defaultOptions:{center:[\"50%\",\"50%\"],size:\"85%\",startAngle:0},defaultBackgroundOptions:{shape:\"circle\",borderWidth:1,borderColor:\"silver\",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,\"#FFF\"],[1,\"#DDD\"]]},from:Number.MIN_VALUE,innerRadius:0,to:Number.MAX_VALUE,\nouterRadius:\"105%\"}});var G=N.prototype,u=u.prototype,T={getOffset:w,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:w,setCategories:w,setTitle:w},O={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:\"center\",x:0,y:null},minorGridLineWidth:0,minorTickInterval:\"auto\",minorTickLength:10,minorTickPosition:\"inside\",minorTickWidth:1,plotBands:[],tickLength:10,tickPosition:\"inside\",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,labels:{align:null,\ndistance:15,x:0,y:null},maxPadding:0,minPadding:0,plotBands:[],showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:\"circle\",labels:{align:\"right\",x:-3,y:-2},plotBands:[],showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){this.options=p(this.defaultOptions,this.defaultRadialOptions,a)},getOffset:function(){G.getOffset.call(this);this.chart.axisOffset[this.side]=0},getLinePath:function(a,b){var c=this.center,b=r(b,c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+\nc[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center&&(this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min||1),this.isXAxis))this.minPixelPadding=this.transA*this.minPointOffset+(this.reversed?(this.endAngleRad-this.startAngleRad)/4:0)},beforeSetTickPositions:function(){this.autoConnect&&(this.max+=this.categories&&\n1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial)this.center=this.pane.center=h.pie.prototype.getCenter.call(this.pane),this.len=this.width=this.height=this.isCircular?this.center[2]*(this.endAngleRad-this.startAngleRad)/2:this.center[2]/2},getPosition:function(a,b){if(!this.isCircular)b=this.translate(a),a=this.min;return this.postTranslate(this.translate(a),r(b,this.center[2]/2)-this.offset)},postTranslate:function(a,b){var c=this.chart,\nd=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+d[0]+Math.cos(a)*b,y:c.plotTop+d[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var d=this.center,g=this.startAngleRad,f=d[2]/2,e=[r(c.outerRadius,\"100%\"),c.innerRadius,r(c.thickness,10)],i=/%$/,n,l=this.isCircular;this.options.gridLineInterpolation===\"polygon\"?d=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(l||(e[0]=this.translate(a),e[1]=this.translate(b)),e=R(e,function(a){i.test(a)&&(a=v(a,10)*f/100);return a}),c.shape===\n\"circle\"||!l?(a=-Math.PI/2,b=Math.PI*1.5,n=!0):(a=g+this.translate(a),b=g+this.translate(b)),d=this.chart.renderer.symbols.arc(this.left+d[0],this.top+d[1],e[0],e[0],{start:a,end:b,innerR:r(e[1],e[0]-e[2]),open:n}));return d},getPlotLinePath:function(a,b){var c=this.center,d=this.chart,g=this.getPosition(a),f,e,i;this.isCircular?i=[\"M\",c[0]+d.plotLeft,c[1]+d.plotTop,\"L\",g.x,g.y]:this.options.gridLineInterpolation===\"circle\"?(a=this.translate(a))&&(i=this.getLinePath(0,a)):(f=d.xAxis[0],i=[],a=this.translate(a),\nc=f.tickPositions,f.autoConnect&&(c=c.concat([c[0]])),b&&(c=[].concat(c).reverse()),s(c,function(c,b){e=f.getPosition(c,a);i.push(b?\"L\":\"M\",e.x,e.y)}));return i},getTitlePosition:function(){var a=this.center,b=this.chart,c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};o(G,\"init\",function(a,b,c){var k;var d=b.angular,g=b.polar,f=c.isX,e=d&&f,i,n;n=b.options;var l=c.pane||0;if(d){if(F(this,e?T:O),i=!f)this.defaultRadialOptions=\nthis.defaultRadialGaugeOptions}else if(g)F(this,O),this.defaultRadialOptions=(i=f)?this.defaultRadialXOptions:p(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!e&&(d||g)){a=this.options;if(!b.panes)b.panes=[];this.pane=(k=b.panes[l]=b.panes[l]||new J(M(n.pane)[l],b,this),l=k);l=l.options;b.inverted=!1;n.chart.zoomType=null;this.startAngleRad=b=(l.startAngle-90)*Math.PI/180;this.endAngleRad=n=(r(l.endAngle,l.startAngle+360)-90)*Math.PI/180;this.offset=a.offset||0;if((this.isCircular=\ni)&&c.max===C&&n-b===2*Math.PI)this.autoConnect=!0}});o(u,\"getPosition\",function(a,b,c,d,g){var f=this.axis;return f.getPosition?f.getPosition(c):a.call(this,b,c,d,g)});o(u,\"getLabelPosition\",function(a,b,c,d,g,f,e,i,n){var l=this.axis,k=f.y,h=f.align,j=(l.translate(this.pos)+l.startAngleRad+Math.PI/2)/Math.PI*180%360;l.isRadial?(a=l.getPosition(this.pos,l.center[2]/2+r(f.distance,-25)),f.rotation===\"auto\"?d.attr({rotation:j}):k===null&&(k=v(d.styles.lineHeight)*0.9-d.getBBox().height/2),h===null&&\n(h=l.isCircular?j>20&&j<160?\"left\":j>200&&j<340?\"right\":\"center\":\"center\",d.attr({align:h})),a.x+=f.x,a.y+=k):a=a.call(this,b,c,d,g,f,e,i,n);return a});o(u,\"getMarkPath\",function(a,b,c,d,g,f,e){var i=this.axis;i.isRadial?(a=i.getPosition(this.pos,i.center[2]/2+d),b=[\"M\",b,c,\"L\",a.x,a.y]):b=a.call(this,b,c,d,g,f,e);return b});m.arearange=p(m.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:'<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>'},\ntrackByArea:!0,dataLabels:{verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0}});h.arearange=j.extendClass(h.area,{type:\"arearange\",pointArrayMap:[\"low\",\"high\"],toYData:function(a){return[a.low,a.high]},pointValKey:\"low\",getSegments:function(){var a=this;s(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y=null;else if(b.low===null&&b.high!==null)b.y=b.high});z.prototype.getSegments.call(this)},translate:function(){var a=this.yAxis;h.area.prototype.translate.apply(this);\ns(this.points,function(b){var c=b.low,d=b.high,g=b.plotY;d===null&&c===null?b.y=null:c===null?(b.plotLow=b.plotY=null,b.plotHigh=a.translate(d,0,1,0,1)):d===null?(b.plotLow=g,b.plotHigh=null):(b.plotLow=g,b.plotHigh=a.translate(d,0,1,0,1))})},getSegmentPath:function(a){var b,c=[],d=a.length,g=z.prototype.getSegmentPath,f,e;e=this.options;var i=e.step;for(b=HighchartsAdapter.grep(a,function(a){return a.plotLow!==null});d--;)f=a[d],f.plotHigh!==null&&c.push({plotX:f.plotX,plotY:f.plotHigh});a=g.call(this,\nb);if(i)i===!0&&(i=\"left\"),e.step={left:\"right\",center:\"center\",right:\"left\"}[i];c=g.call(this,c);e.step=i;e=[].concat(a,c);c[0]=\"L\";this.areaPath=this.areaPath.concat(a,c);return e},drawDataLabels:function(){var a=this.data,b=a.length,c,d=[],g=z.prototype,f=this.options.dataLabels,e,i=this.chart.inverted;if(f.enabled||this._hasPointLabels){for(c=b;c--;)e=a[c],e.y=e.high,e.plotY=e.plotHigh,d[c]=e.dataLabel,e.dataLabel=e.dataLabelUpper,e.below=!1,i?(f.align=\"left\",f.x=f.xHigh):f.y=f.yHigh;g.drawDataLabels.apply(this,\narguments);for(c=b;c--;)e=a[c],e.dataLabelUpper=e.dataLabel,e.dataLabel=d[c],e.y=e.low,e.plotY=e.plotLow,e.below=!0,i?(f.align=\"right\",f.x=f.xLow):f.y=f.yLow;g.drawDataLabels.apply(this,arguments)}},alignDataLabel:h.column.prototype.alignDataLabel,getSymbol:h.column.prototype.getSymbol,drawPoints:w});m.areasplinerange=p(m.arearange);h.areasplinerange=x(h.arearange,{type:\"areasplinerange\",getPointSpline:h.spline.prototype.getPointSpline});m.columnrange=p(m.column,m.arearange,{lineWidth:1,pointRange:null});\nh.columnrange=x(h.arearange,{type:\"columnrange\",translate:function(){var a=this,b=a.yAxis,c;q.translate.apply(a);s(a.points,function(d){var g=d.shapeArgs,f=a.options.minPointLength,e;d.plotHigh=c=b.translate(d.high,0,1,0,1);d.plotLow=d.plotY;e=c;d=d.plotY-c;d<f&&(f-=d,d+=f,e-=f/2);g.height=d;g.y=e})},trackerGroups:[\"group\",\"dataLabels\"],drawGraph:w,pointAttrToOptions:q.pointAttrToOptions,drawPoints:q.drawPoints,drawTracker:q.drawTracker,animate:q.animate,getColumnMetrics:q.getColumnMetrics});m.gauge=\np(m.line,{dataLabels:{enabled:!0,y:15,borderWidth:1,borderColor:\"silver\",borderRadius:3,style:{fontWeight:\"bold\"},verticalAlign:\"top\",zIndex:2},dial:{},pivot:{},tooltip:{headerFormat:\"\"},showInLegend:!1});u={type:\"gauge\",pointClass:j.extendClass(j.Point,{setState:function(a){this.state=a}}),angular:!0,drawGraph:w,fixedBox:!0,trackerGroups:[\"group\",\"dataLabels\"],translate:function(){var a=this.yAxis,b=this.options,c=a.center;this.generatePoints();s(this.points,function(d){var g=p(b.dial,d.dial),f=\nv(r(g.radius,80))*c[2]/200,e=v(r(g.baseLength,70))*f/100,i=v(r(g.rearLength,10))*f/100,n=g.baseWidth||3,l=g.topWidth||1,k=a.startAngleRad+a.translate(d.y,null,null,null,!0);b.wrap===!1&&(k=Math.max(a.startAngleRad,Math.min(a.endAngleRad,k)));k=k*180/Math.PI;d.shapeType=\"path\";d.shapeArgs={d:g.path||[\"M\",-i,-n/2,\"L\",e,-n/2,f,-l/2,f,l/2,e,n/2,-i,n/2,\"z\"],translateX:c[0],translateY:c[1],rotation:k};d.plotX=c[0];d.plotY=c[1]})},drawPoints:function(){var a=this,b=a.yAxis.center,c=a.pivot,d=a.options,g=\nd.pivot,f=a.chart.renderer;s(a.points,function(c){var b=c.graphic,g=c.shapeArgs,l=g.d,k=p(d.dial,c.dial);b?(b.animate(g),g.d=l):c.graphic=f[c.shapeType](g).attr({stroke:k.borderColor||\"none\",\"stroke-width\":k.borderWidth||0,fill:k.backgroundColor||\"black\",rotation:g.rotation}).add(a.group)});c?c.animate({translateX:b[0],translateY:b[1]}):a.pivot=f.circle(0,0,r(g.radius,5)).attr({\"stroke-width\":g.borderWidth||0,stroke:g.borderColor||\"silver\",fill:g.backgroundColor||\"black\"}).translate(b[0],b[1]).add(a.group)},\nanimate:function(a){var b=this;if(!a)s(b.points,function(a){var d=a.graphic;d&&(d.attr({rotation:b.yAxis.startAngleRad*180/Math.PI}),d.animate({rotation:a.shapeArgs.rotation},b.options.animation))}),b.animate=null},render:function(){this.group=this.plotGroup(\"group\",\"series\",this.visible?\"visible\":\"hidden\",this.options.zIndex,this.chart.seriesGroup);h.pie.prototype.render.call(this);this.group.clip(this.chart.clipRect)},setData:h.pie.prototype.setData,drawTracker:h.column.prototype.drawTracker};h.gauge=\nj.extendClass(h.line,u);m.boxplot=p(m.column,{fillColor:\"#FFFFFF\",lineWidth:1,medianWidth:2,states:{hover:{brightness:-0.3}},threshold:null,tooltip:{pointFormat:'<span style=\"color:{series.color};font-weight:bold\">{series.name}</span><br/>Maximum: {point.high}<br/>Upper quartile: {point.q3}<br/>Median: {point.median}<br/>Lower quartile: {point.q1}<br/>Minimum: {point.low}<br/>'},whiskerLength:\"50%\",whiskerWidth:2});h.boxplot=x(h.column,{type:\"boxplot\",pointArrayMap:[\"low\",\"q1\",\"median\",\"q3\",\"high\"],\ntoYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:\"high\",pointAttrToOptions:{fill:\"fillColor\",stroke:\"color\",\"stroke-width\":\"lineWidth\"},drawDataLabels:w,translate:function(){var a=this.yAxis,b=this.pointArrayMap;h.column.prototype.translate.apply(this);s(this.points,function(c){s(b,function(b){c[b]!==null&&(c[b+\"Plot\"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a=this,b=a.points,c=a.options,d=a.chart.renderer,g,f,e,i,n,l,k,h,j,m,o,H,p,E,I,q,w,t,v,u,z,y,x=a.doQuartiles!==\n!1,B=parseInt(a.options.whiskerLength,10)/100;s(b,function(b){j=b.graphic;z=b.shapeArgs;o={};E={};q={};y=b.color||a.color;if(b.plotY!==C)if(g=b.pointAttr[b.selected?\"selected\":\"\"],w=z.width,t=A(z.x),v=t+w,u=D(w/2),f=A(x?b.q1Plot:b.lowPlot),e=A(x?b.q3Plot:b.lowPlot),i=A(b.highPlot),n=A(b.lowPlot),o.stroke=b.stemColor||c.stemColor||y,o[\"stroke-width\"]=r(b.stemWidth,c.stemWidth,c.lineWidth),o.dashstyle=b.stemDashStyle||c.stemDashStyle,E.stroke=b.whiskerColor||c.whiskerColor||y,E[\"stroke-width\"]=r(b.whiskerWidth,\nc.whiskerWidth,c.lineWidth),q.stroke=b.medianColor||c.medianColor||y,q[\"stroke-width\"]=r(b.medianWidth,c.medianWidth,c.lineWidth),k=o[\"stroke-width\"]%2/2,h=t+u+k,m=[\"M\",h,e,\"L\",h,i,\"M\",h,f,\"L\",h,n,\"z\"],x&&(k=g[\"stroke-width\"]%2/2,h=A(h)+k,f=A(f)+k,e=A(e)+k,t+=k,v+=k,H=[\"M\",t,e,\"L\",t,f,\"L\",v,f,\"L\",v,e,\"L\",t,e,\"z\"]),B&&(k=E[\"stroke-width\"]%2/2,i+=k,n+=k,p=[\"M\",h-u*B,i,\"L\",h+u*B,i,\"M\",h-u*B,n,\"L\",h+u*B,n]),k=q[\"stroke-width\"]%2/2,l=D(b.medianPlot)+k,I=[\"M\",t,l,\"L\",v,l,\"z\"],j)b.stem.animate({d:m}),B&&\nb.whiskers.animate({d:p}),x&&b.box.animate({d:H}),b.medianShape.animate({d:I});else{b.graphic=j=d.g().add(a.group);b.stem=d.path(m).attr(o).add(j);if(B)b.whiskers=d.path(p).attr(E).add(j);if(x)b.box=d.path(H).attr(g).add(j);b.medianShape=d.path(I).attr(q).add(j)}})}});m.errorbar=p(m.boxplot,{color:\"#000000\",grouping:!1,linkedTo:\":previous\",tooltip:{pointFormat:m.arearange.tooltip.pointFormat},whiskerWidth:null});h.errorbar=x(h.boxplot,{type:\"errorbar\",pointArrayMap:[\"low\",\"high\"],toYData:function(a){return[a.low,\na.high]},pointValKey:\"high\",doQuartiles:!1,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||h.column.prototype.getColumnMetrics.call(this)}});m.waterfall=p(m.column,{lineWidth:1,lineColor:\"#333\",dashStyle:\"dot\",borderColor:\"#333\"});h.waterfall=x(h.column,{type:\"waterfall\",upColorProp:\"fill\",pointArrayMap:[\"low\",\"y\"],pointValKey:\"y\",init:function(a,b){b.stacking=!0;h.column.prototype.init.call(this,a,b)},translate:function(){var a=this.options,b=this.yAxis,c,d,\ng,f,e,i,n,l,k;c=a.threshold;a=a.borderWidth%2/2;h.column.prototype.translate.apply(this);l=c;g=this.points;for(d=0,c=g.length;d<c;d++){f=g[d];e=f.shapeArgs;i=this.getStack(d);k=i.points[this.index];if(isNaN(f.y))f.y=this.yData[d];n=S(l,l+f.y)+k[0];e.y=b.translate(n,0,1);f.isSum||f.isIntermediateSum?(e.y=b.translate(k[1],0,1),e.height=b.translate(k[0],0,1)-e.y):l+=i.total;e.height<0&&(e.y+=e.height,e.height*=-1);f.plotY=e.y=D(e.y)-a;e.height=D(e.height);f.yBottom=e.y+e.height}},processData:function(a){var b=\nthis.yData,c=this.points,d,g=b.length,f=this.options.threshold||0,e,i,h,l,k,j;i=e=h=l=f;for(j=0;j<g;j++)k=b[j],d=c&&c[j]?c[j]:{},k===\"sum\"||d.isSum?b[j]=i:k===\"intermediateSum\"||d.isIntermediateSum?(b[j]=e,e=f):(i+=k,e+=k),h=Math.min(i,h),l=Math.max(i,l);z.prototype.processData.call(this,a);this.dataMin=h;this.dataMax=l},toYData:function(a){if(a.isSum)return\"sum\";else if(a.isIntermediateSum)return\"intermediateSum\";return a.y},getAttribs:function(){h.column.prototype.getAttribs.apply(this,arguments);\nvar a=this.options,b=a.states,c=a.upColor||this.color,a=j.Color(c).brighten(0.1).get(),d=p(this.pointAttr),g=this.upColorProp;d[\"\"][g]=c;d.hover[g]=b.hover.upColor||a;d.select[g]=b.select.upColor||c;s(this.points,function(a){if(a.y>0&&!a.color)a.pointAttr=d,a.color=c})},getGraphPath:function(){var a=this.data,b=a.length,c=D(this.options.lineWidth+this.options.borderWidth)%2/2,d=[],g,f,e;for(e=1;e<b;e++)f=a[e].shapeArgs,g=a[e-1].shapeArgs,f=[\"M\",g.x+g.width,g.y+c,\"L\",f.x,g.y+c],a[e-1].y<0&&(f[2]+=\ng.height,f[5]+=g.height),d=d.concat(f);return d},getExtremes:w,getStack:function(a){var b=this.yAxis.stacks,c=this.stackKey;this.processedYData[a]<this.options.threshold&&(c=\"-\"+c);return b[c][a]},drawGraph:z.prototype.drawGraph});m.bubble=p(m.scatter,{dataLabels:{inside:!0,style:{color:\"white\",textShadow:\"0px 0px 3px black\"},verticalAlign:\"middle\"},marker:{lineColor:null,lineWidth:1},minSize:8,maxSize:\"20%\",tooltip:{pointFormat:\"({point.x}, {point.y}), Size: {point.z}\"},turboThreshold:0,zThreshold:0});\nh.bubble=x(h.scatter,{type:\"bubble\",pointArrayMap:[\"y\",\"z\"],trackerGroups:[\"group\",\"dataLabelsGroup\"],pointAttrToOptions:{stroke:\"lineColor\",\"stroke-width\":\"lineWidth\",fill:\"fillColor\"},applyOpacity:function(a){var b=this.options.marker,c=r(b.fillOpacity,0.5),a=a||b.fillColor||this.color;c!==1&&(a=j.Color(a).setOpacity(c).get(\"rgba\"));return a},convertAttribs:function(){var a=z.prototype.convertAttribs.apply(this,arguments);a.fill=this.applyOpacity(a.fill);return a},getRadii:function(a,b,c,d){var g,\nf,e,i=this.zData,h=[];for(f=0,g=i.length;f<g;f++)e=b-a,e=e>0?(i[f]-a)/(b-a):0.5,h.push(t.ceil(c+e*(d-c))/2);this.radii=h},animate:function(a){var b=this.options.animation;if(!a)s(this.points,function(a){var d=a.graphic,a=a.shapeArgs;d&&a&&(d.attr(\"r\",1),d.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,d,g=this.radii;h.scatter.prototype.translate.call(this);for(a=b.length;a--;)c=b[a],d=g?g[a]:0,c.negative=c.z<(this.options.zThreshold||0),d>=this.minPxSize/2?(c.shapeType=\n\"circle\",c.shapeArgs={x:c.plotX,y:c.plotY,r:d},c.dlBox={x:c.plotX-d,y:c.plotY-d,width:2*d,height:2*d}):c.shapeArgs=c.plotY=c.dlBox=C},drawLegendSymbol:function(a,b){var c=v(a.itemStyle.fontSize)/2;b.legendSymbol=this.chart.renderer.circle(c,a.baseline-c,c).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:h.column.prototype.drawPoints,alignDataLabel:h.column.prototype.alignDataLabel});N.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,d=0,g=b,f=this.isXAxis,\ne=f?\"xData\":\"yData\",i=this.min,h={},j=t.min(c.plotWidth,c.plotHeight),k=Number.MAX_VALUE,m=-Number.MAX_VALUE,o=this.max-i,p=b/o,q=[];this.tickPositions&&(s(this.series,function(b){var c=b.options;if(b.type===\"bubble\"&&b.visible&&(a.allowZoomOutside=!0,q.push(b),f))s([\"minSize\",\"maxSize\"],function(a){var b=c[a],d=/%$/.test(b),b=v(b);h[a]=d?j*b/100:b}),b.minPxSize=h.minSize,b=b.zData,b.length&&(k=t.min(k,t.max(P(b),c.displayNegative===!1?c.zThreshold:-Number.MAX_VALUE)),m=t.max(m,Q(b)))}),s(q,function(a){var b=\na[e],c=b.length,j;f&&a.getRadii(k,m,h.minSize,h.maxSize);if(o>0)for(;c--;)j=a.radii[c],d=Math.min((b[c]-i)*p-j,d),g=Math.max((b[c]-i)*p+j,g)}),q.length&&o>0&&r(this.options.min,this.userMin)===C&&r(this.options.max,this.userMax)===C&&(g-=b,p*=(b+d-g)/b,this.min+=d/p,this.max+=g/p))};var y=z.prototype,m=j.Pointer.prototype;y.toXY=function(a){var b,c=this.chart;b=a.plotX;var d=a.plotY;a.rectPlotX=b;a.rectPlotY=d;a.clientX=(b/Math.PI*180+this.xAxis.pane.options.startAngle)%360;b=this.xAxis.postTranslate(a.plotX,\nthis.yAxis.len-d);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop};y.orderTooltipPoints=function(a){if(this.chart.polar&&(a.sort(function(a,c){return a.clientX-c.clientX}),a[0]))a[0].wrappedClientX=a[0].clientX+360,a.push(a[0])};o(h.area.prototype,\"init\",K);o(h.areaspline.prototype,\"init\",K);o(h.spline.prototype,\"getPointSpline\",function(a,b,c,d){var g,f,e,i,h,j,k;if(this.chart.polar){g=c.plotX;f=c.plotY;a=b[d-1];e=b[d+1];this.connectEnds&&(a||(a=b[b.length-2]),e||(e=b[1]));\nif(a&&e)i=a.plotX,h=a.plotY,b=e.plotX,j=e.plotY,i=(1.5*g+i)/2.5,h=(1.5*f+h)/2.5,e=(1.5*g+b)/2.5,k=(1.5*f+j)/2.5,b=Math.sqrt(Math.pow(i-g,2)+Math.pow(h-f,2)),j=Math.sqrt(Math.pow(e-g,2)+Math.pow(k-f,2)),i=Math.atan2(h-f,i-g),h=Math.atan2(k-f,e-g),k=Math.PI/2+(i+h)/2,Math.abs(i-k)>Math.PI/2&&(k-=Math.PI),i=g+Math.cos(k)*b,h=f+Math.sin(k)*b,e=g+Math.cos(Math.PI+k)*j,k=f+Math.sin(Math.PI+k)*j,c.rightContX=e,c.rightContY=k;d?(c=[\"C\",a.rightContX||a.plotX,a.rightContY||a.plotY,i||g,h||f,g,f],a.rightContX=\na.rightContY=null):c=[\"M\",g,f]}else c=a.call(this,b,c,d);return c});o(y,\"translate\",function(a){a.call(this);if(this.chart.polar&&!this.preventPostTranslate)for(var a=this.points,b=a.length;b--;)this.toXY(a[b])});o(y,\"getSegmentPath\",function(a,b){var c=this.points;if(this.chart.polar&&this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this,b)});o(y,\"animate\",L);o(q,\"animate\",L);o(y,\"setTooltipPoints\",function(a,b){this.chart.polar&&\nF(this.xAxis,{tooltipLen:360});return a.call(this,b)});o(q,\"translate\",function(a){var b=this.xAxis,c=this.yAxis.len,d=b.center,g=b.startAngleRad,f=this.chart.renderer,e,h;this.preventPostTranslate=!0;a.call(this);if(b.isRadial){b=this.points;for(h=b.length;h--;)e=b[h],a=e.barX+g,e.shapeType=\"path\",e.shapeArgs={d:f.symbols.arc(d[0],d[1],c-e.plotY,null,{start:a,end:a+e.pointWidth,innerR:c-r(e.yBottom,c)})},this.toXY(e)}});o(q,\"alignDataLabel\",function(a,b,c,d,g,f){if(this.chart.polar){a=b.rectPlotX/\nMath.PI*180;if(d.align===null)d.align=a>20&&a<160?\"left\":a>200&&a<340?\"right\":\"center\";if(d.verticalAlign===null)d.verticalAlign=a<45||a>315?\"bottom\":a>135&&a<225?\"top\":\"middle\";y.alignDataLabel.call(this,b,c,d,g,f)}else a.call(this,b,c,d,g,f)});o(m,\"getIndex\",function(a,b){var c,d=this.chart,g;d.polar?(g=d.xAxis[0].center,c=b.chartX-g[0]-d.plotLeft,d=b.chartY-g[1]-d.plotTop,c=180-Math.round(Math.atan2(c,d)/Math.PI*180)):c=a.call(this,b);return c});o(m,\"getCoordinates\",function(a,b){var c=this.chart,\nd={xAxis:[],yAxis:[]};c.polar?s(c.axes,function(a){var f=a.isXAxis,e=a.center,h=b.chartX-e[0]-c.plotLeft,e=b.chartY-e[1]-c.plotTop;d[f?\"xAxis\":\"yAxis\"].push({axis:a,value:a.translate(f?Math.PI-Math.atan2(h,e):Math.sqrt(Math.pow(h,2)+Math.pow(e,2)),!0)})}):d=a.call(this,b);return d})})(Highcharts);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/highcharts-more.src.js",
    "content": "// ==ClosureCompiler==\n// @compilation_level SIMPLE_OPTIMIZATIONS\n\n/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n * (c) 2009-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts, HighchartsAdapter, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console */\n\n(function (Highcharts, UNDEFINED) {\nvar arrayMin = Highcharts.arrayMin,\n\tarrayMax = Highcharts.arrayMax,\n\teach = Highcharts.each,\n\textend = Highcharts.extend,\n\tmerge = Highcharts.merge,\n\tmap = Highcharts.map,\n\tpick = Highcharts.pick,\n\tpInt = Highcharts.pInt,\n\tdefaultPlotOptions = Highcharts.getOptions().plotOptions,\n\tseriesTypes = Highcharts.seriesTypes,\n\textendClass = Highcharts.extendClass,\n\tsplat = Highcharts.splat,\n\twrap = Highcharts.wrap,\n\tAxis = Highcharts.Axis,\n\tTick = Highcharts.Tick,\n\tSeries = Highcharts.Series,\n\tcolProto = seriesTypes.column.prototype,\n\tmath = Math,\n\tmathRound = math.round,\n\tmathFloor = math.floor,\n\tmathMax = math.max,\n\tnoop = function () {};/**\n * The Pane object allows options that are common to a set of X and Y axes.\n * \n * In the future, this can be extended to basic Highcharts and Highstock.\n */\nfunction Pane(options, chart, firstAxis) {\n\tthis.init.call(this, options, chart, firstAxis);\n}\n\n// Extend the Pane prototype\nextend(Pane.prototype, {\n\t\n\t/**\n\t * Initiate the Pane object\n\t */\n\tinit: function (options, chart, firstAxis) {\n\t\tvar pane = this,\n\t\t\tbackgroundOption,\n\t\t\tdefaultOptions = pane.defaultOptions;\n\t\t\n\t\tpane.chart = chart;\n\t\t\n\t\t// Set options\n\t\tif (chart.angular) { // gauges\n\t\t\tdefaultOptions.background = {}; // gets extended by this.defaultBackgroundOptions\n\t\t}\n\t\tpane.options = options = merge(defaultOptions, options);\n\t\t\n\t\tbackgroundOption = options.background;\n\t\t\n\t\t// To avoid having weighty logic to place, update and remove the backgrounds,\n\t\t// push them to the first axis' plot bands and borrow the existing logic there.\n\t\tif (backgroundOption) {\n\t\t\teach([].concat(splat(backgroundOption)).reverse(), function (config) {\n\t\t\t\tvar backgroundColor = config.backgroundColor; // if defined, replace the old one (specific for gradients)\n\t\t\t\tconfig = merge(pane.defaultBackgroundOptions, config);\n\t\t\t\tif (backgroundColor) {\n\t\t\t\t\tconfig.backgroundColor = backgroundColor;\n\t\t\t\t}\n\t\t\t\tconfig.color = config.backgroundColor; // due to naming in plotBands\n\t\t\t\tfirstAxis.options.plotBands.unshift(config);\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * The default options object\n\t */\n\tdefaultOptions: {\n\t\t// background: {conditional},\n\t\tcenter: ['50%', '50%'],\n\t\tsize: '85%',\n\t\tstartAngle: 0\n\t\t//endAngle: startAngle + 360\n\t},\t\n\t\n\t/**\n\t * The default background options\n\t */\n\tdefaultBackgroundOptions: {\n\t\tshape: 'circle',\n\t\tborderWidth: 1,\n\t\tborderColor: 'silver',\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#FFF'],\n\t\t\t\t[1, '#DDD']\n\t\t\t]\n\t\t},\n\t\tfrom: Number.MIN_VALUE, // corrected to axis min\n\t\tinnerRadius: 0,\n\t\tto: Number.MAX_VALUE, // corrected to axis max\n\t\touterRadius: '105%'\n\t}\n\t\n});\nvar axisProto = Axis.prototype,\n\ttickProto = Tick.prototype;\n\t\n/**\n * Augmented methods for the x axis in order to hide it completely, used for the X axis in gauges\n */\nvar hiddenAxisMixin = {\n\tgetOffset: noop,\n\tredraw: function () {\n\t\tthis.isDirty = false; // prevent setting Y axis dirty\n\t},\n\trender: function () {\n\t\tthis.isDirty = false; // prevent setting Y axis dirty\n\t},\n\tsetScale: noop,\n\tsetCategories: noop,\n\tsetTitle: noop\n};\n\n/**\n * Augmented methods for the value axis\n */\n/*jslint unparam: true*/\nvar radialAxisMixin = {\n\tisRadial: true,\n\t\n\t/**\n\t * The default options extend defaultYAxisOptions\n\t */\n\tdefaultRadialGaugeOptions: {\n\t\tlabels: {\n\t\t\talign: 'center',\n\t\t\tx: 0,\n\t\t\ty: null // auto\n\t\t},\n\t\tminorGridLineWidth: 0,\n\t\tminorTickInterval: 'auto',\n\t\tminorTickLength: 10,\n\t\tminorTickPosition: 'inside',\n\t\tminorTickWidth: 1,\n\t\tplotBands: [],\n\t\ttickLength: 10,\n\t\ttickPosition: 'inside',\n\t\ttickWidth: 2,\n\t\ttitle: {\n\t\t\trotation: 0\n\t\t},\n\t\tzIndex: 2 // behind dials, points in the series group\n\t},\n\t\n\t// Circular axis around the perimeter of a polar chart\n\tdefaultRadialXOptions: {\n\t\tgridLineWidth: 1, // spokes\n\t\tlabels: {\n\t\t\talign: null, // auto\n\t\t\tdistance: 15,\n\t\t\tx: 0,\n\t\t\ty: null // auto\n\t\t},\n\t\tmaxPadding: 0,\n\t\tminPadding: 0,\n\t\tplotBands: [],\n\t\tshowLastLabel: false, \n\t\ttickLength: 0\n\t},\n\t\n\t// Radial axis, like a spoke in a polar chart\n\tdefaultRadialYOptions: {\n\t\tgridLineInterpolation: 'circle',\n\t\tlabels: {\n\t\t\talign: 'right',\n\t\t\tx: -3,\n\t\t\ty: -2\n\t\t},\n\t\tplotBands: [],\n\t\tshowLastLabel: false,\n\t\ttitle: {\n\t\t\tx: 4,\n\t\t\ttext: null,\n\t\t\trotation: 90\n\t\t}\n\t},\n\t\n\t/**\n\t * Merge and set options\n\t */\n\tsetOptions: function (userOptions) {\n\t\t\n\t\tthis.options = merge(\n\t\t\tthis.defaultOptions,\n\t\t\tthis.defaultRadialOptions,\n\t\t\tuserOptions\n\t\t);\n\t\t\n\t},\n\t\n\t/**\n\t * Wrap the getOffset method to return zero offset for title or labels in a radial \n\t * axis\n\t */\n\tgetOffset: function () {\n\t\t// Call the Axis prototype method (the method we're in now is on the instance)\n\t\taxisProto.getOffset.call(this);\n\t\t\n\t\t// Title or label offsets are not counted\n\t\tthis.chart.axisOffset[this.side] = 0;\n\t},\n\n\n\t/**\n\t * Get the path for the axis line. This method is also referenced in the getPlotLinePath\n\t * method.\n\t */\n\tgetLinePath: function (lineWidth, radius) {\n\t\tvar center = this.center;\n\t\tradius = pick(radius, center[2] / 2 - this.offset);\n\t\t\n\t\treturn this.chart.renderer.symbols.arc(\n\t\t\tthis.left + center[0],\n\t\t\tthis.top + center[1],\n\t\t\tradius,\n\t\t\tradius, \n\t\t\t{\n\t\t\t\tstart: this.startAngleRad,\n\t\t\t\tend: this.endAngleRad,\n\t\t\t\topen: true,\n\t\t\t\tinnerR: 0\n\t\t\t}\n\t\t);\n\t},\n\n\t/**\n\t * Override setAxisTranslation by setting the translation to the difference\n\t * in rotation. This allows the translate method to return angle for \n\t * any given value.\n\t */\n\tsetAxisTranslation: function () {\n\t\t\n\t\t// Call uber method\t\t\n\t\taxisProto.setAxisTranslation.call(this);\n\t\t\t\n\t\t// Set transA and minPixelPadding\n\t\tif (this.center) { // it's not defined the first time\n\t\t\tif (this.isCircular) {\n\t\t\t\t\n\t\t\t\tthis.transA = (this.endAngleRad - this.startAngleRad) / \n\t\t\t\t\t((this.max - this.min) || 1);\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t} else { \n\t\t\t\tthis.transA = (this.center[2] / 2) / ((this.max - this.min) || 1);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.isXAxis) {\n\t\t\t\tthis.minPixelPadding = this.transA * this.minPointOffset +\n\t\t\t\t\t(this.reversed ? (this.endAngleRad - this.startAngleRad) / 4 : 0); // ???\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * In case of auto connect, add one closestPointRange to the max value right before\n\t * tickPositions are computed, so that ticks will extend passed the real max.\n\t */\n\tbeforeSetTickPositions: function () {\n\t\tif (this.autoConnect) {\n\t\t\tthis.max += (this.categories && 1) || this.pointRange || this.closestPointRange || 0; // #1197, #2260\n\t\t}\n\t},\n\t\n\t/**\n\t * Override the setAxisSize method to use the arc's circumference as length. This\n\t * allows tickPixelInterval to apply to pixel lengths along the perimeter\n\t */\n\tsetAxisSize: function () {\n\t\t\n\t\taxisProto.setAxisSize.call(this);\n\n\t\tif (this.isRadial) {\n\n\t\t\t// Set the center array\n\t\t\tthis.center = this.pane.center = seriesTypes.pie.prototype.getCenter.call(this.pane);\n\t\t\t\n\t\t\tthis.len = this.width = this.height = this.isCircular ?\n\t\t\t\tthis.center[2] * (this.endAngleRad - this.startAngleRad) / 2 :\n\t\t\t\tthis.center[2] / 2;\n\t\t}\n\t},\n\t\n\t/**\n\t * Returns the x, y coordinate of a point given by a value and a pixel distance\n\t * from center\n\t */\n\tgetPosition: function (value, length) {\n\t\tif (!this.isCircular) {\n\t\t\tlength = this.translate(value);\n\t\t\tvalue = this.min;\t\n\t\t}\n\t\t\n\t\treturn this.postTranslate(\n\t\t\tthis.translate(value),\n\t\t\tpick(length, this.center[2] / 2) - this.offset\n\t\t);\t\t\n\t},\n\t\n\t/**\n\t * Translate from intermediate plotX (angle), plotY (axis.len - radius) to final chart coordinates. \n\t */\n\tpostTranslate: function (angle, radius) {\n\t\t\n\t\tvar chart = this.chart,\n\t\t\tcenter = this.center;\n\t\t\t\n\t\tangle = this.startAngleRad + angle;\n\t\t\n\t\treturn {\n\t\t\tx: chart.plotLeft + center[0] + Math.cos(angle) * radius,\n\t\t\ty: chart.plotTop + center[1] + Math.sin(angle) * radius\n\t\t}; \n\t\t\n\t},\n\t\n\t/**\n\t * Find the path for plot bands along the radial axis\n\t */\n\tgetPlotBandPath: function (from, to, options) {\n\t\tvar center = this.center,\n\t\t\tstartAngleRad = this.startAngleRad,\n\t\t\tfullRadius = center[2] / 2,\n\t\t\tradii = [\n\t\t\t\tpick(options.outerRadius, '100%'),\n\t\t\t\toptions.innerRadius,\n\t\t\t\tpick(options.thickness, 10)\n\t\t\t],\n\t\t\tpercentRegex = /%$/,\n\t\t\tstart,\n\t\t\tend,\n\t\t\topen,\n\t\t\tisCircular = this.isCircular, // X axis in a polar chart\n\t\t\tret;\n\t\t\t\n\t\t// Polygonal plot bands\n\t\tif (this.options.gridLineInterpolation === 'polygon') {\n\t\t\tret = this.getPlotLinePath(from).concat(this.getPlotLinePath(to, true));\n\t\t\n\t\t// Circular grid bands\n\t\t} else {\n\t\t\t\n\t\t\t// Plot bands on Y axis (radial axis) - inner and outer radius depend on to and from\n\t\t\tif (!isCircular) {\n\t\t\t\tradii[0] = this.translate(from);\n\t\t\t\tradii[1] = this.translate(to);\n\t\t\t}\n\t\t\t\n\t\t\t// Convert percentages to pixel values\n\t\t\tradii = map(radii, function (radius) {\n\t\t\t\tif (percentRegex.test(radius)) {\n\t\t\t\t\tradius = (pInt(radius, 10) * fullRadius) / 100;\n\t\t\t\t}\n\t\t\t\treturn radius;\n\t\t\t});\n\t\t\t\n\t\t\t// Handle full circle\n\t\t\tif (options.shape === 'circle' || !isCircular) {\n\t\t\t\tstart = -Math.PI / 2;\n\t\t\t\tend = Math.PI * 1.5;\n\t\t\t\topen = true;\n\t\t\t} else {\n\t\t\t\tstart = startAngleRad + this.translate(from);\n\t\t\t\tend = startAngleRad + this.translate(to);\n\t\t\t}\n\t\t\n\t\t\n\t\t\tret = this.chart.renderer.symbols.arc(\n\t\t\t\tthis.left + center[0],\n\t\t\t\tthis.top + center[1],\n\t\t\t\tradii[0],\n\t\t\t\tradii[0],\n\t\t\t\t{\n\t\t\t\t\tstart: start,\n\t\t\t\t\tend: end,\n\t\t\t\t\tinnerR: pick(radii[1], radii[0] - radii[2]),\n\t\t\t\t\topen: open\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\t \n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Find the path for plot lines perpendicular to the radial axis.\n\t */\n\tgetPlotLinePath: function (value, reverse) {\n\t\tvar axis = this,\n\t\t\tcenter = axis.center,\n\t\t\tchart = axis.chart,\n\t\t\tend = axis.getPosition(value),\n\t\t\txAxis,\n\t\t\txy,\n\t\t\ttickPositions,\n\t\t\tret;\n\t\t\n\t\t// Spokes\n\t\tif (axis.isCircular) {\n\t\t\tret = ['M', center[0] + chart.plotLeft, center[1] + chart.plotTop, 'L', end.x, end.y];\n\t\t\n\t\t// Concentric circles\t\t\t\n\t\t} else if (axis.options.gridLineInterpolation === 'circle') {\n\t\t\tvalue = axis.translate(value);\n\t\t\tif (value) { // a value of 0 is in the center\n\t\t\t\tret = axis.getLinePath(0, value);\n\t\t\t}\n\t\t// Concentric polygons \n\t\t} else {\n\t\t\txAxis = chart.xAxis[0];\n\t\t\tret = [];\n\t\t\tvalue = axis.translate(value);\n\t\t\ttickPositions = xAxis.tickPositions;\n\t\t\tif (xAxis.autoConnect) {\n\t\t\t\ttickPositions = tickPositions.concat([tickPositions[0]]);\n\t\t\t}\n\t\t\t// Reverse the positions for concatenation of polygonal plot bands\n\t\t\tif (reverse) {\n\t\t\t\ttickPositions = [].concat(tickPositions).reverse();\n\t\t\t}\n\t\t\t\t\n\t\t\teach(tickPositions, function (pos, i) {\n\t\t\t\txy = xAxis.getPosition(pos, value);\n\t\t\t\tret.push(i ? 'L' : 'M', xy.x, xy.y);\n\t\t\t});\n\t\t\t\n\t\t}\n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Find the position for the axis title, by default inside the gauge\n\t */\n\tgetTitlePosition: function () {\n\t\tvar center = this.center,\n\t\t\tchart = this.chart,\n\t\t\ttitleOptions = this.options.title;\n\t\t\n\t\treturn { \n\t\t\tx: chart.plotLeft + center[0] + (titleOptions.x || 0), \n\t\t\ty: chart.plotTop + center[1] - ({ high: 0.5, middle: 0.25, low: 0 }[titleOptions.align] * \n\t\t\t\tcenter[2]) + (titleOptions.y || 0)  \n\t\t};\n\t}\n\t\n};\n/*jslint unparam: false*/\n\n/**\n * Override axisProto.init to mix in special axis instance functions and function overrides\n */\nwrap(axisProto, 'init', function (proceed, chart, userOptions) {\n\tvar axis = this,\n\t\tangular = chart.angular,\n\t\tpolar = chart.polar,\n\t\tisX = userOptions.isX,\n\t\tisHidden = angular && isX,\n\t\tisCircular,\n\t\tstartAngleRad,\n\t\tendAngleRad,\n\t\toptions,\n\t\tchartOptions = chart.options,\n\t\tpaneIndex = userOptions.pane || 0,\n\t\tpane,\n\t\tpaneOptions;\n\t\t\n\t// Before prototype.init\n\tif (angular) {\n\t\textend(this, isHidden ? hiddenAxisMixin : radialAxisMixin);\n\t\tisCircular =  !isX;\n\t\tif (isCircular) {\n\t\t\tthis.defaultRadialOptions = this.defaultRadialGaugeOptions;\n\t\t}\n\t\t\n\t} else if (polar) {\n\t\t//extend(this, userOptions.isX ? radialAxisMixin : radialAxisMixin);\n\t\textend(this, radialAxisMixin);\n\t\tisCircular = isX;\n\t\tthis.defaultRadialOptions = isX ? this.defaultRadialXOptions : merge(this.defaultYAxisOptions, this.defaultRadialYOptions);\n\t\t\n\t}\n\t\n\t// Run prototype.init\n\tproceed.call(this, chart, userOptions);\n\t\n\tif (!isHidden && (angular || polar)) {\n\t\toptions = this.options;\n\t\t\n\t\t// Create the pane and set the pane options.\n\t\tif (!chart.panes) {\n\t\t\tchart.panes = [];\n\t\t}\n\t\tthis.pane = pane = chart.panes[paneIndex] = chart.panes[paneIndex] || new Pane(\n\t\t\tsplat(chartOptions.pane)[paneIndex],\n\t\t\tchart,\n\t\t\taxis\n\t\t);\n\t\tpaneOptions = pane.options;\n\t\t\n\t\t\t\n\t\t// Disable certain features on angular and polar axes\n\t\tchart.inverted = false;\n\t\tchartOptions.chart.zoomType = null;\n\t\t\n\t\t// Start and end angle options are\n\t\t// given in degrees relative to top, while internal computations are\n\t\t// in radians relative to right (like SVG).\n\t\tthis.startAngleRad = startAngleRad = (paneOptions.startAngle - 90) * Math.PI / 180;\n\t\tthis.endAngleRad = endAngleRad = (pick(paneOptions.endAngle, paneOptions.startAngle + 360)  - 90) * Math.PI / 180;\n\t\tthis.offset = options.offset || 0;\n\t\t\n\t\tthis.isCircular = isCircular;\n\t\t\n\t\t// Automatically connect grid lines?\n\t\tif (isCircular && userOptions.max === UNDEFINED && endAngleRad - startAngleRad === 2 * Math.PI) {\n\t\t\tthis.autoConnect = true;\n\t\t}\n\t}\n\t\n});\n\n/**\n * Add special cases within the Tick class' methods for radial axes.\n */\t\nwrap(tickProto, 'getPosition', function (proceed, horiz, pos, tickmarkOffset, old) {\n\tvar axis = this.axis;\n\t\n\treturn axis.getPosition ? \n\t\taxis.getPosition(pos) :\n\t\tproceed.call(this, horiz, pos, tickmarkOffset, old);\t\n});\n\n/**\n * Wrap the getLabelPosition function to find the center position of the label\n * based on the distance option\n */\t\nwrap(tickProto, 'getLabelPosition', function (proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {\n\tvar axis = this.axis,\n\t\toptionsY = labelOptions.y,\n\t\tret,\n\t\talign = labelOptions.align,\n\t\tangle = ((axis.translate(this.pos) + axis.startAngleRad + Math.PI / 2) / Math.PI * 180) % 360;\n\t\n\tif (axis.isRadial) {\n\t\tret = axis.getPosition(this.pos, (axis.center[2] / 2) + pick(labelOptions.distance, -25));\n\t\t\n\t\t// Automatically rotated\n\t\tif (labelOptions.rotation === 'auto') {\n\t\t\tlabel.attr({ \n\t\t\t\trotation: angle\n\t\t\t});\n\t\t\n\t\t// Vertically centered\n\t\t} else if (optionsY === null) {\n\t\t\toptionsY = pInt(label.styles.lineHeight) * 0.9 - label.getBBox().height / 2;\n\t\t\n\t\t}\n\t\t\n\t\t// Automatic alignment\n\t\tif (align === null) {\n\t\t\tif (axis.isCircular) {\n\t\t\t\tif (angle > 20 && angle < 160) {\n\t\t\t\t\talign = 'left'; // right hemisphere\n\t\t\t\t} else if (angle > 200 && angle < 340) {\n\t\t\t\t\talign = 'right'; // left hemisphere\n\t\t\t\t} else {\n\t\t\t\t\talign = 'center'; // top or bottom\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\talign = 'center';\n\t\t\t}\n\t\t\tlabel.attr({\n\t\t\t\talign: align\n\t\t\t});\n\t\t}\n\t\t\n\t\tret.x += labelOptions.x;\n\t\tret.y += optionsY;\n\t\t\n\t} else {\n\t\tret = proceed.call(this, x, y, label, horiz, labelOptions, tickmarkOffset, index, step);\n\t}\n\treturn ret;\n});\n\n/**\n * Wrap the getMarkPath function to return the path of the radial marker\n */\nwrap(tickProto, 'getMarkPath', function (proceed, x, y, tickLength, tickWidth, horiz, renderer) {\n\tvar axis = this.axis,\n\t\tendPoint,\n\t\tret;\n\t\t\n\tif (axis.isRadial) {\n\t\tendPoint = axis.getPosition(this.pos, axis.center[2] / 2 + tickLength);\n\t\tret = [\n\t\t\t'M',\n\t\t\tx,\n\t\t\ty,\n\t\t\t'L',\n\t\t\tendPoint.x,\n\t\t\tendPoint.y\n\t\t];\n\t} else {\n\t\tret = proceed.call(this, x, y, tickLength, tickWidth, horiz, renderer);\n\t}\n\treturn ret;\n});/* \n * The AreaRangeSeries class\n * \n */\n\n/**\n * Extend the default options with map options\n */\ndefaultPlotOptions.arearange = merge(defaultPlotOptions.area, {\n\tlineWidth: 1,\n\tmarker: null,\n\tthreshold: null,\n\ttooltip: {\n\t\tpointFormat: '<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>' \n\t},\n\ttrackByArea: true,\n\tdataLabels: {\n\t\tverticalAlign: null,\n\t\txLow: 0,\n\t\txHigh: 0,\n\t\tyLow: 0,\n\t\tyHigh: 0\t\n\t}\n});\n\n/**\n * Add the series type\n */\nseriesTypes.arearange = Highcharts.extendClass(seriesTypes.area, {\n\ttype: 'arearange',\n\tpointArrayMap: ['low', 'high'],\n\ttoYData: function (point) {\n\t\treturn [point.low, point.high];\n\t},\n\tpointValKey: 'low',\n\t\n\t/**\n\t * Extend getSegments to force null points if the higher value is null. #1703.\n\t */\n\tgetSegments: function () {\n\t\tvar series = this;\n\n\t\teach(series.points, function (point) {\n\t\t\tif (!series.options.connectNulls && (point.low === null || point.high === null)) {\n\t\t\t\tpoint.y = null;\n\t\t\t} else if (point.low === null && point.high !== null) {\n\t\t\t\tpoint.y = point.high;\n\t\t\t}\n\t\t});\n\t\tSeries.prototype.getSegments.call(this);\n\t},\n\t\n\t/**\n\t * Translate data points from raw values x and y to plotX and plotY\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis;\n\n\t\tseriesTypes.area.prototype.translate.apply(series);\n\n\t\t// Set plotLow and plotHigh\n\t\teach(series.points, function (point) {\n\n\t\t\tvar low = point.low,\n\t\t\t\thigh = point.high,\n\t\t\t\tplotY = point.plotY;\n\n\t\t\tif (high === null && low === null) {\n\t\t\t\tpoint.y = null;\n\t\t\t} else if (low === null) {\n\t\t\t\tpoint.plotLow = point.plotY = null;\n\t\t\t\tpoint.plotHigh = yAxis.translate(high, 0, 1, 0, 1);\n\t\t\t} else if (high === null) {\n\t\t\t\tpoint.plotLow = plotY;\n\t\t\t\tpoint.plotHigh = null;\n\t\t\t} else {\n\t\t\t\tpoint.plotLow = plotY;\n\t\t\t\tpoint.plotHigh = yAxis.translate(high, 0, 1, 0, 1);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Extend the line series' getSegmentPath method by applying the segment\n\t * path to both lower and higher values of the range\n\t */\n\tgetSegmentPath: function (segment) {\n\t\t\n\t\tvar lowSegment,\n\t\t\thighSegment = [],\n\t\t\ti = segment.length,\n\t\t\tbaseGetSegmentPath = Series.prototype.getSegmentPath,\n\t\t\tpoint,\n\t\t\tlinePath,\n\t\t\tlowerPath,\n\t\t\toptions = this.options,\n\t\t\tstep = options.step,\n\t\t\thigherPath;\n\t\t\t\n\t\t// Remove nulls from low segment\n\t\tlowSegment = HighchartsAdapter.grep(segment, function (point) {\n\t\t\treturn point.plotLow !== null;\n\t\t});\n\t\t\n\t\t// Make a segment with plotX and plotY for the top values\n\t\twhile (i--) {\n\t\t\tpoint = segment[i];\n\t\t\tif (point.plotHigh !== null) {\n\t\t\t\thighSegment.push({\n\t\t\t\t\tplotX: point.plotX,\n\t\t\t\t\tplotY: point.plotHigh\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Get the paths\n\t\tlowerPath = baseGetSegmentPath.call(this, lowSegment);\n\t\tif (step) {\n\t\t\tif (step === true) {\n\t\t\t\tstep = 'left';\n\t\t\t}\n\t\t\toptions.step = { left: 'right', center: 'center', right: 'left' }[step]; // swap for reading in getSegmentPath\n\t\t}\n\t\thigherPath = baseGetSegmentPath.call(this, highSegment);\n\t\toptions.step = step;\n\t\t\n\t\t// Create a line on both top and bottom of the range\n\t\tlinePath = [].concat(lowerPath, higherPath);\n\t\t\n\t\t// For the area path, we need to change the 'move' statement into 'lineTo' or 'curveTo'\n\t\thigherPath[0] = 'L'; // this probably doesn't work for spline\t\t\t\n\t\tthis.areaPath = this.areaPath.concat(lowerPath, higherPath);\n\t\t\n\t\treturn linePath;\n\t},\n\t\n\t/**\n\t * Extend the basic drawDataLabels method by running it for both lower and higher\n\t * values.\n\t */\n\tdrawDataLabels: function () {\n\t\t\n\t\tvar data = this.data,\n\t\t\tlength = data.length,\n\t\t\ti,\n\t\t\toriginalDataLabels = [],\n\t\t\tseriesProto = Series.prototype,\n\t\t\tdataLabelOptions = this.options.dataLabels,\n\t\t\tpoint,\n\t\t\tinverted = this.chart.inverted;\n\t\t\t\n\t\tif (dataLabelOptions.enabled || this._hasPointLabels) {\n\t\t\t\n\t\t\t// Step 1: set preliminary values for plotY and dataLabel and draw the upper labels\n\t\t\ti = length;\n\t\t\twhile (i--) {\n\t\t\t\tpoint = data[i];\n\t\t\t\t\n\t\t\t\t// Set preliminary values\n\t\t\t\tpoint.y = point.high;\n\t\t\t\tpoint.plotY = point.plotHigh;\n\t\t\t\t\n\t\t\t\t// Store original data labels and set preliminary label objects to be picked up \n\t\t\t\t// in the uber method\n\t\t\t\toriginalDataLabels[i] = point.dataLabel;\n\t\t\t\tpoint.dataLabel = point.dataLabelUpper;\n\t\t\t\t\n\t\t\t\t// Set the default offset\n\t\t\t\tpoint.below = false;\n\t\t\t\tif (inverted) {\n\t\t\t\t\tdataLabelOptions.align = 'left';\n\t\t\t\t\tdataLabelOptions.x = dataLabelOptions.xHigh;\t\t\t\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tdataLabelOptions.y = dataLabelOptions.yHigh;\n\t\t\t\t}\n\t\t\t}\n\t\t\tseriesProto.drawDataLabels.apply(this, arguments); // #1209\n\t\t\t\n\t\t\t// Step 2: reorganize and handle data labels for the lower values\n\t\t\ti = length;\n\t\t\twhile (i--) {\n\t\t\t\tpoint = data[i];\n\t\t\t\t\n\t\t\t\t// Move the generated labels from step 1, and reassign the original data labels\n\t\t\t\tpoint.dataLabelUpper = point.dataLabel;\n\t\t\t\tpoint.dataLabel = originalDataLabels[i];\n\t\t\t\t\n\t\t\t\t// Reset values\n\t\t\t\tpoint.y = point.low;\n\t\t\t\tpoint.plotY = point.plotLow;\n\t\t\t\t\n\t\t\t\t// Set the default offset\n\t\t\t\tpoint.below = true;\n\t\t\t\tif (inverted) {\n\t\t\t\t\tdataLabelOptions.align = 'right';\n\t\t\t\t\tdataLabelOptions.x = dataLabelOptions.xLow;\n\t\t\t\t} else {\n\t\t\t\t\tdataLabelOptions.y = dataLabelOptions.yLow;\n\t\t\t\t}\n\t\t\t}\n\t\t\tseriesProto.drawDataLabels.apply(this, arguments);\n\t\t}\n\t\n\t},\n\t\n\talignDataLabel: seriesTypes.column.prototype.alignDataLabel,\n\t\n\tgetSymbol: seriesTypes.column.prototype.getSymbol,\n\t\n\tdrawPoints: noop\n});/**\n * The AreaSplineRangeSeries class\n */\n\ndefaultPlotOptions.areasplinerange = merge(defaultPlotOptions.arearange);\n\n/**\n * AreaSplineRangeSeries object\n */\nseriesTypes.areasplinerange = extendClass(seriesTypes.arearange, {\n\ttype: 'areasplinerange',\n\tgetPointSpline: seriesTypes.spline.prototype.getPointSpline\n});/**\n * The ColumnRangeSeries class\n */\ndefaultPlotOptions.columnrange = merge(defaultPlotOptions.column, defaultPlotOptions.arearange, {\n\tlineWidth: 1,\n\tpointRange: null\n});\n\n/**\n * ColumnRangeSeries object\n */\nseriesTypes.columnrange = extendClass(seriesTypes.arearange, {\n\ttype: 'columnrange',\n\t/**\n\t * Translate data points from raw values x and y to plotX and plotY\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis,\n\t\t\tplotHigh;\n\n\t\tcolProto.translate.apply(series);\n\n\t\t// Set plotLow and plotHigh\n\t\teach(series.points, function (point) {\n\t\t\tvar shapeArgs = point.shapeArgs,\n\t\t\t\tminPointLength = series.options.minPointLength,\n\t\t\t\theightDifference,\n\t\t\t\theight,\n\t\t\t\ty;\n\n\t\t\tpoint.plotHigh = plotHigh = yAxis.translate(point.high, 0, 1, 0, 1);\n\t\t\tpoint.plotLow = point.plotY;\n\n\t\t\t// adjust shape\n\t\t\ty = plotHigh;\n\t\t\theight = point.plotY - plotHigh;\n\n\t\t\tif (height < minPointLength) {\n\t\t\t\theightDifference = (minPointLength - height);\n\t\t\t\theight += heightDifference;\n\t\t\t\ty -= heightDifference / 2;\n\t\t\t}\n\t\t\tshapeArgs.height = height;\n\t\t\tshapeArgs.y = y;\n\t\t});\n\t},\n\ttrackerGroups: ['group', 'dataLabels'],\n\tdrawGraph: noop,\n\tpointAttrToOptions: colProto.pointAttrToOptions,\n\tdrawPoints: colProto.drawPoints,\n\tdrawTracker: colProto.drawTracker,\n\tanimate: colProto.animate,\n\tgetColumnMetrics: colProto.getColumnMetrics\n});\n/* \n * The GaugeSeries class\n */\n\n\n\n/**\n * Extend the default options\n */\ndefaultPlotOptions.gauge = merge(defaultPlotOptions.line, {\n\tdataLabels: {\n\t\tenabled: true,\n\t\ty: 15,\n\t\tborderWidth: 1,\n\t\tborderColor: 'silver',\n\t\tborderRadius: 3,\n\t\tstyle: {\n\t\t\tfontWeight: 'bold'\n\t\t},\n\t\tverticalAlign: 'top',\n\t\tzIndex: 2\n\t},\n\tdial: {\n\t\t// radius: '80%',\n\t\t// backgroundColor: 'black',\n\t\t// borderColor: 'silver',\n\t\t// borderWidth: 0,\n\t\t// baseWidth: 3,\n\t\t// topWidth: 1,\n\t\t// baseLength: '70%' // of radius\n\t\t// rearLength: '10%'\n\t},\n\tpivot: {\n\t\t//radius: 5,\n\t\t//borderWidth: 0\n\t\t//borderColor: 'silver',\n\t\t//backgroundColor: 'black'\n\t},\n\ttooltip: {\n\t\theaderFormat: ''\n\t},\n\tshowInLegend: false\n});\n\n/**\n * Extend the point object\n */\nvar GaugePoint = Highcharts.extendClass(Highcharts.Point, {\n\t/**\n\t * Don't do any hover colors or anything\n\t */\n\tsetState: function (state) {\n\t\tthis.state = state;\n\t}\n});\n\n\n/**\n * Add the series type\n */\nvar GaugeSeries = {\n\ttype: 'gauge',\n\tpointClass: GaugePoint,\n\t\n\t// chart.angular will be set to true when a gauge series is present, and this will\n\t// be used on the axes\n\tangular: true, \n\tdrawGraph: noop,\n\tfixedBox: true,\n\ttrackerGroups: ['group', 'dataLabels'],\n\t\n\t/**\n\t * Calculate paths etc\n\t */\n\ttranslate: function () {\n\t\t\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis,\n\t\t\toptions = series.options,\n\t\t\tcenter = yAxis.center;\n\t\t\t\n\t\tseries.generatePoints();\n\t\t\n\t\teach(series.points, function (point) {\n\t\t\t\n\t\t\tvar dialOptions = merge(options.dial, point.dial),\n\t\t\t\tradius = (pInt(pick(dialOptions.radius, 80)) * center[2]) / 200,\n\t\t\t\tbaseLength = (pInt(pick(dialOptions.baseLength, 70)) * radius) / 100,\n\t\t\t\trearLength = (pInt(pick(dialOptions.rearLength, 10)) * radius) / 100,\n\t\t\t\tbaseWidth = dialOptions.baseWidth || 3,\n\t\t\t\ttopWidth = dialOptions.topWidth || 1,\n\t\t\t\trotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true);\n\n\t\t\t// Handle the wrap option\n\t\t\tif (options.wrap === false) {\n\t\t\t\trotation = Math.max(yAxis.startAngleRad, Math.min(yAxis.endAngleRad, rotation));\n\t\t\t}\n\t\t\trotation = rotation * 180 / Math.PI;\n\t\t\t\t\n\t\t\tpoint.shapeType = 'path';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\td: dialOptions.path || [\n\t\t\t\t\t'M', \n\t\t\t\t\t-rearLength, -baseWidth / 2, \n\t\t\t\t\t'L', \n\t\t\t\t\tbaseLength, -baseWidth / 2,\n\t\t\t\t\tradius, -topWidth / 2,\n\t\t\t\t\tradius, topWidth / 2,\n\t\t\t\t\tbaseLength, baseWidth / 2,\n\t\t\t\t\t-rearLength, baseWidth / 2,\n\t\t\t\t\t'z'\n\t\t\t\t],\n\t\t\t\ttranslateX: center[0],\n\t\t\t\ttranslateY: center[1],\n\t\t\t\trotation: rotation\n\t\t\t};\n\t\t\t\n\t\t\t// Positions for data label\n\t\t\tpoint.plotX = center[0];\n\t\t\tpoint.plotY = center[1];\n\t\t});\n\t},\n\t\n\t/**\n\t * Draw the points where each point is one needle\n\t */\n\tdrawPoints: function () {\n\t\t\n\t\tvar series = this,\n\t\t\tcenter = series.yAxis.center,\n\t\t\tpivot = series.pivot,\n\t\t\toptions = series.options,\n\t\t\tpivotOptions = options.pivot,\n\t\t\trenderer = series.chart.renderer;\n\t\t\n\t\teach(series.points, function (point) {\n\t\t\t\n\t\t\tvar graphic = point.graphic,\n\t\t\t\tshapeArgs = point.shapeArgs,\n\t\t\t\td = shapeArgs.d,\n\t\t\t\tdialOptions = merge(options.dial, point.dial); // #1233\n\t\t\t\n\t\t\tif (graphic) {\n\t\t\t\tgraphic.animate(shapeArgs);\n\t\t\t\tshapeArgs.d = d; // animate alters it\n\t\t\t} else {\n\t\t\t\tpoint.graphic = renderer[point.shapeType](shapeArgs)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tstroke: dialOptions.borderColor || 'none',\n\t\t\t\t\t\t'stroke-width': dialOptions.borderWidth || 0,\n\t\t\t\t\t\tfill: dialOptions.backgroundColor || 'black',\n\t\t\t\t\t\trotation: shapeArgs.rotation // required by VML when animation is false\n\t\t\t\t\t})\n\t\t\t\t\t.add(series.group);\n\t\t\t}\n\t\t});\n\t\t\n\t\t// Add or move the pivot\n\t\tif (pivot) {\n\t\t\tpivot.animate({ // #1235\n\t\t\t\ttranslateX: center[0],\n\t\t\t\ttranslateY: center[1]\n\t\t\t});\n\t\t} else {\n\t\t\tseries.pivot = renderer.circle(0, 0, pick(pivotOptions.radius, 5))\n\t\t\t\t.attr({\n\t\t\t\t\t'stroke-width': pivotOptions.borderWidth || 0,\n\t\t\t\t\tstroke: pivotOptions.borderColor || 'silver',\n\t\t\t\t\tfill: pivotOptions.backgroundColor || 'black'\n\t\t\t\t})\n\t\t\t\t.translate(center[0], center[1])\n\t\t\t\t.add(series.group);\n\t\t}\n\t},\n\t\n\t/**\n\t * Animate the arrow up from startAngle\n\t */\n\tanimate: function (init) {\n\t\tvar series = this;\n\n\t\tif (!init) {\n\t\t\teach(series.points, function (point) {\n\t\t\t\tvar graphic = point.graphic;\n\n\t\t\t\tif (graphic) {\n\t\t\t\t\t// start value\n\t\t\t\t\tgraphic.attr({\n\t\t\t\t\t\trotation: series.yAxis.startAngleRad * 180 / Math.PI\n\t\t\t\t\t});\n\n\t\t\t\t\t// animate\n\t\t\t\t\tgraphic.animate({\n\t\t\t\t\t\trotation: point.shapeArgs.rotation\n\t\t\t\t\t}, series.options.animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// delete this function to allow it only once\n\t\t\tseries.animate = null;\n\t\t}\n\t},\n\t\n\trender: function () {\n\t\tthis.group = this.plotGroup(\n\t\t\t'group', \n\t\t\t'series', \n\t\t\tthis.visible ? 'visible' : 'hidden', \n\t\t\tthis.options.zIndex, \n\t\t\tthis.chart.seriesGroup\n\t\t);\n\t\tseriesTypes.pie.prototype.render.call(this);\n\t\tthis.group.clip(this.chart.clipRect);\n\t},\n\t\n\tsetData: seriesTypes.pie.prototype.setData,\n\tdrawTracker: seriesTypes.column.prototype.drawTracker\n};\nseriesTypes.gauge = Highcharts.extendClass(seriesTypes.line, GaugeSeries);/* ****************************************************************************\n * Start Box plot series code\t\t\t\t\t\t\t\t\t\t\t      *\n *****************************************************************************/\n\n// Set default options\ndefaultPlotOptions.boxplot = merge(defaultPlotOptions.column, {\n\tfillColor: '#FFFFFF',\n\tlineWidth: 1,\n\t//medianColor: null,\n\tmedianWidth: 2,\n\tstates: {\n\t\thover: {\n\t\t\tbrightness: -0.3\n\t\t}\n\t},\n\t//stemColor: null,\n\t//stemDashStyle: 'solid'\n\t//stemWidth: null,\n\tthreshold: null,\n\ttooltip: {\n\t\tpointFormat: '<span style=\"color:{series.color};font-weight:bold\">{series.name}</span><br/>' +\n\t\t\t'Maximum: {point.high}<br/>' +\n\t\t\t'Upper quartile: {point.q3}<br/>' +\n\t\t\t'Median: {point.median}<br/>' +\n\t\t\t'Lower quartile: {point.q1}<br/>' +\n\t\t\t'Minimum: {point.low}<br/>'\n\t\t\t\n\t},\n\t//whiskerColor: null,\n\twhiskerLength: '50%',\n\twhiskerWidth: 2\n});\n\n// Create the series object\nseriesTypes.boxplot = extendClass(seriesTypes.column, {\n\ttype: 'boxplot',\n\tpointArrayMap: ['low', 'q1', 'median', 'q3', 'high'], // array point configs are mapped to this\n\ttoYData: function (point) { // return a plain array for speedy calculation\n\t\treturn [point.low, point.q1, point.median, point.q3, point.high];\n\t},\n\tpointValKey: 'high', // defines the top of the tracker\n\t\n\t/**\n\t * One-to-one mapping from options to SVG attributes\n\t */\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tfill: 'fillColor',\n\t\tstroke: 'color',\n\t\t'stroke-width': 'lineWidth'\n\t},\n\t\n\t/**\n\t * Disable data labels for box plot\n\t */\n\tdrawDataLabels: noop,\n\n\t/**\n\t * Translate data points from raw values x and y to plotX and plotY\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis,\n\t\t\tpointArrayMap = series.pointArrayMap;\n\n\t\tseriesTypes.column.prototype.translate.apply(series);\n\n\t\t// do the translation on each point dimension\n\t\teach(series.points, function (point) {\n\t\t\teach(pointArrayMap, function (key) {\n\t\t\t\tif (point[key] !== null) {\n\t\t\t\t\tpoint[key + 'Plot'] = yAxis.translate(point[key], 0, 1, 0, 1);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n\t * Draw the data points\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,  //state = series.state,\n\t\t\tpoints = series.points,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tpointAttr,\n\t\t\tq1Plot,\n\t\t\tq3Plot,\n\t\t\thighPlot,\n\t\t\tlowPlot,\n\t\t\tmedianPlot,\n\t\t\tcrispCorr,\n\t\t\tcrispX,\n\t\t\tgraphic,\n\t\t\tstemPath,\n\t\t\tstemAttr,\n\t\t\tboxPath,\n\t\t\twhiskersPath,\n\t\t\twhiskersAttr,\n\t\t\tmedianPath,\n\t\t\tmedianAttr,\n\t\t\twidth,\n\t\t\tleft,\n\t\t\tright,\n\t\t\thalfWidth,\n\t\t\tshapeArgs,\n\t\t\tcolor,\n\t\t\tdoQuartiles = series.doQuartiles !== false, // error bar inherits this series type but doesn't do quartiles\n\t\t\twhiskerLength = parseInt(series.options.whiskerLength, 10) / 100;\n\n\n\t\teach(points, function (point) {\n\n\t\t\tgraphic = point.graphic;\n\t\t\tshapeArgs = point.shapeArgs; // the box\n\t\t\tstemAttr = {};\n\t\t\twhiskersAttr = {};\n\t\t\tmedianAttr = {};\n\t\t\tcolor = point.color || series.color;\n\t\t\t\n\t\t\tif (point.plotY !== UNDEFINED) {\n\n\t\t\t\tpointAttr = point.pointAttr[point.selected ? 'selected' : ''];\n\n\t\t\t\t// crisp vector coordinates\n\t\t\t\twidth = shapeArgs.width;\n\t\t\t\tleft = mathFloor(shapeArgs.x);\n\t\t\t\tright = left + width;\n\t\t\t\thalfWidth = mathRound(width / 2);\n\t\t\t\t//crispX = mathRound(left + halfWidth) + crispCorr;\n\t\t\t\tq1Plot = mathFloor(doQuartiles ? point.q1Plot : point.lowPlot);// + crispCorr;\n\t\t\t\tq3Plot = mathFloor(doQuartiles ? point.q3Plot : point.lowPlot);// + crispCorr;\n\t\t\t\thighPlot = mathFloor(point.highPlot);// + crispCorr;\n\t\t\t\tlowPlot = mathFloor(point.lowPlot);// + crispCorr;\n\t\t\t\t\n\t\t\t\t// Stem attributes\n\t\t\t\tstemAttr.stroke = point.stemColor || options.stemColor || color;\n\t\t\t\tstemAttr['stroke-width'] = pick(point.stemWidth, options.stemWidth, options.lineWidth);\n\t\t\t\tstemAttr.dashstyle = point.stemDashStyle || options.stemDashStyle;\n\t\t\t\t\n\t\t\t\t// Whiskers attributes\n\t\t\t\twhiskersAttr.stroke = point.whiskerColor || options.whiskerColor || color;\n\t\t\t\twhiskersAttr['stroke-width'] = pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth);\n\t\t\t\t\n\t\t\t\t// Median attributes\n\t\t\t\tmedianAttr.stroke = point.medianColor || options.medianColor || color;\n\t\t\t\tmedianAttr['stroke-width'] = pick(point.medianWidth, options.medianWidth, options.lineWidth);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// The stem\n\t\t\t\tcrispCorr = (stemAttr['stroke-width'] % 2) / 2;\n\t\t\t\tcrispX = left + halfWidth + crispCorr;\t\t\t\t\n\t\t\t\tstemPath = [\n\t\t\t\t\t// stem up\n\t\t\t\t\t'M',\n\t\t\t\t\tcrispX, q3Plot,\n\t\t\t\t\t'L',\n\t\t\t\t\tcrispX, highPlot,\n\t\t\t\t\t\n\t\t\t\t\t// stem down\n\t\t\t\t\t'M',\n\t\t\t\t\tcrispX, q1Plot,\n\t\t\t\t\t'L',\n\t\t\t\t\tcrispX, lowPlot,\n\t\t\t\t\t'z'\n\t\t\t\t];\n\t\t\t\t\n\t\t\t\t// The box\n\t\t\t\tif (doQuartiles) {\n\t\t\t\t\tcrispCorr = (pointAttr['stroke-width'] % 2) / 2;\n\t\t\t\t\tcrispX = mathFloor(crispX) + crispCorr;\n\t\t\t\t\tq1Plot = mathFloor(q1Plot) + crispCorr;\n\t\t\t\t\tq3Plot = mathFloor(q3Plot) + crispCorr;\n\t\t\t\t\tleft += crispCorr;\n\t\t\t\t\tright += crispCorr;\n\t\t\t\t\tboxPath = [\n\t\t\t\t\t\t'M',\n\t\t\t\t\t\tleft, q3Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tleft, q1Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tright, q1Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tright, q3Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tleft, q3Plot,\n\t\t\t\t\t\t'z'\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// The whiskers\n\t\t\t\tif (whiskerLength) {\n\t\t\t\t\tcrispCorr = (whiskersAttr['stroke-width'] % 2) / 2;\n\t\t\t\t\thighPlot = highPlot + crispCorr;\n\t\t\t\t\tlowPlot = lowPlot + crispCorr;\n\t\t\t\t\twhiskersPath = [\n\t\t\t\t\t\t// High whisker\n\t\t\t\t\t\t'M',\n\t\t\t\t\t\tcrispX - halfWidth * whiskerLength, \n\t\t\t\t\t\thighPlot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tcrispX + halfWidth * whiskerLength, \n\t\t\t\t\t\thighPlot,\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Low whisker\n\t\t\t\t\t\t'M',\n\t\t\t\t\t\tcrispX - halfWidth * whiskerLength, \n\t\t\t\t\t\tlowPlot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tcrispX + halfWidth * whiskerLength, \n\t\t\t\t\t\tlowPlot\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// The median\n\t\t\t\tcrispCorr = (medianAttr['stroke-width'] % 2) / 2;\t\t\t\t\n\t\t\t\tmedianPlot = mathRound(point.medianPlot) + crispCorr;\n\t\t\t\tmedianPath = [\n\t\t\t\t\t'M',\n\t\t\t\t\tleft, \n\t\t\t\t\tmedianPlot,\n\t\t\t\t\t'L',\n\t\t\t\t\tright, \n\t\t\t\t\tmedianPlot,\n\t\t\t\t\t'z'\n\t\t\t\t];\n\t\t\t\t\n\t\t\t\t// Create or update the graphics\n\t\t\t\tif (graphic) { // update\n\t\t\t\t\t\n\t\t\t\t\tpoint.stem.animate({ d: stemPath });\n\t\t\t\t\tif (whiskerLength) {\n\t\t\t\t\t\tpoint.whiskers.animate({ d: whiskersPath });\n\t\t\t\t\t}\n\t\t\t\t\tif (doQuartiles) {\n\t\t\t\t\t\tpoint.box.animate({ d: boxPath });\n\t\t\t\t\t}\n\t\t\t\t\tpoint.medianShape.animate({ d: medianPath });\n\t\t\t\t\t\n\t\t\t\t} else { // create new\n\t\t\t\t\tpoint.graphic = graphic = renderer.g()\n\t\t\t\t\t\t.add(series.group);\n\t\t\t\t\t\n\t\t\t\t\tpoint.stem = renderer.path(stemPath)\n\t\t\t\t\t\t.attr(stemAttr)\n\t\t\t\t\t\t.add(graphic);\n\t\t\t\t\t\t\n\t\t\t\t\tif (whiskerLength) {\n\t\t\t\t\t\tpoint.whiskers = renderer.path(whiskersPath) \n\t\t\t\t\t\t\t.attr(whiskersAttr)\n\t\t\t\t\t\t\t.add(graphic);\n\t\t\t\t\t}\n\t\t\t\t\tif (doQuartiles) {\n\t\t\t\t\t\tpoint.box = renderer.path(boxPath)\n\t\t\t\t\t\t\t.attr(pointAttr)\n\t\t\t\t\t\t\t.add(graphic);\n\t\t\t\t\t}\t\n\t\t\t\t\tpoint.medianShape = renderer.path(medianPath)\n\t\t\t\t\t\t.attr(medianAttr)\n\t\t\t\t\t\t.add(graphic);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t}\n\n\n});\n\n/* ****************************************************************************\n * End Box plot series code\t\t\t\t\t\t\t\t\t\t\t\t*\n *****************************************************************************/\n/* ****************************************************************************\n * Start error bar series code                                                *\n *****************************************************************************/\n\n// 1 - set default options\ndefaultPlotOptions.errorbar = merge(defaultPlotOptions.boxplot, {\n\tcolor: '#000000',\n\tgrouping: false,\n\tlinkedTo: ':previous',\n\ttooltip: {\n\t\tpointFormat: defaultPlotOptions.arearange.tooltip.pointFormat\n\t},\n\twhiskerWidth: null\n});\n\n// 2 - Create the series object\nseriesTypes.errorbar = extendClass(seriesTypes.boxplot, {\n\ttype: 'errorbar',\n\tpointArrayMap: ['low', 'high'], // array point configs are mapped to this\n\ttoYData: function (point) { // return a plain array for speedy calculation\n\t\treturn [point.low, point.high];\n\t},\n\tpointValKey: 'high', // defines the top of the tracker\n\tdoQuartiles: false,\n\n\t/**\n\t * Get the width and X offset, either on top of the linked series column\n\t * or standalone\n\t */\n\tgetColumnMetrics: function () {\n\t\treturn (this.linkedParent && this.linkedParent.columnMetrics) || \n\t\t\tseriesTypes.column.prototype.getColumnMetrics.call(this);\n\t}\n});\n\n/* ****************************************************************************\n * End error bar series code                                                  *\n *****************************************************************************/\n/* ****************************************************************************\n * Start Waterfall series code                                                *\n *****************************************************************************/\n\n// 1 - set default options\ndefaultPlotOptions.waterfall = merge(defaultPlotOptions.column, {\n\tlineWidth: 1,\n\tlineColor: '#333',\n\tdashStyle: 'dot',\n\tborderColor: '#333'\n});\n\n\n// 2 - Create the series object\nseriesTypes.waterfall = extendClass(seriesTypes.column, {\n\ttype: 'waterfall',\n\n\tupColorProp: 'fill',\n\n\tpointArrayMap: ['low', 'y'],\n\n\tpointValKey: 'y',\n\n\t/**\n\t * Init waterfall series, force stacking\n\t */\n\tinit: function (chart, options) {\n\t\t// force stacking\n\t\toptions.stacking = true;\n\n\t\tseriesTypes.column.prototype.init.call(this, chart, options);\n\t},\n\n\n\t/**\n\t * Translate data points from raw values\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\taxis = series.yAxis,\n\t\t\tlen,\n\t\t\ti,\n\t\t\tpoints,\n\t\t\tpoint,\n\t\t\tshapeArgs,\n\t\t\tstack,\n\t\t\ty,\n\t\t\tpreviousY,\n\t\t\tstackPoint,\n\t\t\tthreshold = options.threshold,\n\t\t\tcrispCorr = (options.borderWidth % 2) / 2;\n\n\t\t// run column series translate\n\t\tseriesTypes.column.prototype.translate.apply(this);\n\n\t\tpreviousY = threshold;\n\t\tpoints = series.points;\n\n\t\tfor (i = 0, len = points.length; i < len; i++) {\n\t\t\t// cache current point object\n\t\t\tpoint = points[i];\n\t\t\tshapeArgs = point.shapeArgs;\n\n\t\t\t// get current stack\n\t\t\tstack = series.getStack(i);\n\t\t\tstackPoint = stack.points[series.index];\n\n\t\t\t// override point value for sums\n\t\t\tif (isNaN(point.y)) {\n\t\t\t\tpoint.y = series.yData[i];\n\t\t\t}\n\n\t\t\t// up points\n\t\t\ty = mathMax(previousY, previousY + point.y) + stackPoint[0];\n\t\t\tshapeArgs.y = axis.translate(y, 0, 1);\n\n\n\t\t\t// sum points\n\t\t\tif (point.isSum || point.isIntermediateSum) {\n\t\t\t\tshapeArgs.y = axis.translate(stackPoint[1], 0, 1);\n\t\t\t\tshapeArgs.height = axis.translate(stackPoint[0], 0, 1) - shapeArgs.y;\n\n\t\t\t// if it's not the sum point, update previous stack end position\n\t\t\t} else {\n\t\t\t\tpreviousY += stack.total;\n\t\t\t}\n\n\t\t\t// negative points\n\t\t\tif (shapeArgs.height < 0) {\n\t\t\t\tshapeArgs.y += shapeArgs.height;\n\t\t\t\tshapeArgs.height *= -1;\n\t\t\t}\n\n\t\t\tpoint.plotY = shapeArgs.y = mathRound(shapeArgs.y) - crispCorr;\n\t\t\tshapeArgs.height = mathRound(shapeArgs.height);\n\t\t\tpoint.yBottom = shapeArgs.y + shapeArgs.height;\n\t\t}\n\t},\n\n\t/**\n\t * Call default processData then override yData to reflect waterfall's extremes on yAxis\n\t */\n\tprocessData: function (force) {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tyData = series.yData,\n\t\t\tpoints = series.points,\n\t\t\tpoint,\n\t\t\tdataLength = yData.length,\n\t\t\tthreshold = options.threshold || 0,\n\t\t\tsubSum,\n\t\t\tsum,\n\t\t\tdataMin,\n\t\t\tdataMax,\n\t\t\ty,\n\t\t\ti;\n\n\t\tsum = subSum = dataMin = dataMax = threshold;\n\n\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\ty = yData[i];\n\t\t\tpoint = points && points[i] ? points[i] : {};\n\n\t\t\tif (y === \"sum\" || point.isSum) {\n\t\t\t\tyData[i] = sum;\n\t\t\t} else if (y === \"intermediateSum\" || point.isIntermediateSum) {\n\t\t\t\tyData[i] = subSum;\n\t\t\t\tsubSum = threshold;\n\t\t\t} else {\n\t\t\t\tsum += y;\n\t\t\t\tsubSum += y;\n\t\t\t}\n\t\t\tdataMin = Math.min(sum, dataMin);\n\t\t\tdataMax = Math.max(sum, dataMax);\n\t\t}\n\n\t\tSeries.prototype.processData.call(this, force);\n\n\t\t// Record extremes\n\t\tseries.dataMin = dataMin;\n\t\tseries.dataMax = dataMax;\n\t},\n\n\t/**\n\t * Return y value or string if point is sum\n\t */\n\ttoYData: function (pt) {\n\t\tif (pt.isSum) {\n\t\t\treturn \"sum\";\n\t\t} else if (pt.isIntermediateSum) {\n\t\t\treturn \"intermediateSum\";\n\t\t}\n\n\t\treturn pt.y;\n\t},\n\n\t/**\n\t * Postprocess mapping between options and SVG attributes\n\t */\n\tgetAttribs: function () {\n\t\tseriesTypes.column.prototype.getAttribs.apply(this, arguments);\n\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tstateOptions = options.states,\n\t\t\tupColor = options.upColor || series.color,\n\t\t\thoverColor = Highcharts.Color(upColor).brighten(0.1).get(),\n\t\t\tseriesDownPointAttr = merge(series.pointAttr),\n\t\t\tupColorProp = series.upColorProp;\n\n\t\tseriesDownPointAttr[''][upColorProp] = upColor;\n\t\tseriesDownPointAttr.hover[upColorProp] = stateOptions.hover.upColor || hoverColor;\n\t\tseriesDownPointAttr.select[upColorProp] = stateOptions.select.upColor || upColor;\n\n\t\teach(series.points, function (point) {\n\t\t\tif (point.y > 0 && !point.color) {\n\t\t\t\tpoint.pointAttr = seriesDownPointAttr;\n\t\t\t\tpoint.color = upColor;\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Draw columns' connector lines\n\t */\n\tgetGraphPath: function () {\n\n\t\tvar data = this.data,\n\t\t\tlength = data.length,\n\t\t\tlineWidth = this.options.lineWidth + this.options.borderWidth,\n\t\t\tnormalizer = mathRound(lineWidth) % 2 / 2,\n\t\t\tpath = [],\n\t\t\tM = 'M',\n\t\t\tL = 'L',\n\t\t\tprevArgs,\n\t\t\tpointArgs,\n\t\t\ti,\n\t\t\td;\n\n\t\tfor (i = 1; i < length; i++) {\n\t\t\tpointArgs = data[i].shapeArgs;\n\t\t\tprevArgs = data[i - 1].shapeArgs;\n\n\t\t\td = [\n\t\t\t\tM,\n\t\t\t\tprevArgs.x + prevArgs.width, prevArgs.y + normalizer,\n\t\t\t\tL,\n\t\t\t\tpointArgs.x, prevArgs.y + normalizer\n\t\t\t];\n\n\t\t\tif (data[i - 1].y < 0) {\n\t\t\t\td[2] += prevArgs.height;\n\t\t\t\td[5] += prevArgs.height;\n\t\t\t}\n\n\t\t\tpath = path.concat(d);\n\t\t}\n\n\t\treturn path;\n\t},\n\n\t/**\n\t * Extremes are recorded in processData\n\t */\n\tgetExtremes: noop,\n\n\t/**\n\t * Return stack for given index\n\t */\n\tgetStack: function (i) {\n\t\tvar axis = this.yAxis,\n\t\t\tstacks = axis.stacks,\n\t\t\tkey = this.stackKey;\n\n\t\tif (this.processedYData[i] < this.options.threshold) {\n\t\t\tkey = '-' + key;\n\t\t}\n\n\t\treturn stacks[key][i];\n\t},\n\n\tdrawGraph: Series.prototype.drawGraph\n});\n\n/* ****************************************************************************\n * End Waterfall series code                                                  *\n *****************************************************************************/\n/* ****************************************************************************\n * Start Bubble series code\t\t\t\t\t\t\t\t\t\t\t          *\n *****************************************************************************/\n\n// 1 - set default options\ndefaultPlotOptions.bubble = merge(defaultPlotOptions.scatter, {\n\tdataLabels: {\n\t\tinside: true,\n\t\tstyle: {\n\t\t\tcolor: 'white',\n\t\t\ttextShadow: '0px 0px 3px black'\n\t\t},\n\t\tverticalAlign: 'middle'\n\t},\n\t// displayNegative: true,\n\tmarker: {\n\t\t// fillOpacity: 0.5,\n\t\tlineColor: null, // inherit from series.color\n\t\tlineWidth: 1\n\t},\n\tminSize: 8,\n\tmaxSize: '20%',\n\t// negativeColor: null,\n\ttooltip: {\n\t\tpointFormat: '({point.x}, {point.y}), Size: {point.z}'\n\t},\n\tturboThreshold: 0,\n\tzThreshold: 0\n});\n\n// 2 - Create the series object\nseriesTypes.bubble = extendClass(seriesTypes.scatter, {\n\ttype: 'bubble',\n\tpointArrayMap: ['y', 'z'],\n\ttrackerGroups: ['group', 'dataLabelsGroup'],\n\t\n\t/**\n\t * Mapping between SVG attributes and the corresponding options\n\t */\n\tpointAttrToOptions: { \n\t\tstroke: 'lineColor',\n\t\t'stroke-width': 'lineWidth',\n\t\tfill: 'fillColor'\n\t},\n\t\n\t/**\n\t * Apply the fillOpacity to all fill positions\n\t */\n\tapplyOpacity: function (fill) {\n\t\tvar markerOptions = this.options.marker,\n\t\t\tfillOpacity = pick(markerOptions.fillOpacity, 0.5);\n\t\t\n\t\t// When called from Legend.colorizeItem, the fill isn't predefined\n\t\tfill = fill || markerOptions.fillColor || this.color; \n\t\t\n\t\tif (fillOpacity !== 1) {\n\t\t\tfill = Highcharts.Color(fill).setOpacity(fillOpacity).get('rgba');\n\t\t}\n\t\treturn fill;\n\t},\n\t\n\t/**\n\t * Extend the convertAttribs method by applying opacity to the fill\n\t */\n\tconvertAttribs: function () {\n\t\tvar obj = Series.prototype.convertAttribs.apply(this, arguments);\n\t\t\n\t\tobj.fill = this.applyOpacity(obj.fill);\n\t\t\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Get the radius for each point based on the minSize, maxSize and each point's Z value. This\n\t * must be done prior to Series.translate because the axis needs to add padding in \n\t * accordance with the point sizes.\n\t */\n\tgetRadii: function (zMin, zMax, minSize, maxSize) {\n\t\tvar len,\n\t\t\ti,\n\t\t\tpos,\n\t\t\tzData = this.zData,\n\t\t\tradii = [],\n\t\t\tzRange;\n\t\t\n\t\t// Set the shape type and arguments to be picked up in drawPoints\n\t\tfor (i = 0, len = zData.length; i < len; i++) {\n\t\t\tzRange = zMax - zMin;\n\t\t\tpos = zRange > 0 ? // relative size, a number between 0 and 1\n\t\t\t\t(zData[i] - zMin) / (zMax - zMin) : \n\t\t\t\t0.5;\n\t\t\tradii.push(math.ceil(minSize + pos * (maxSize - minSize)) / 2);\n\t\t}\n\t\tthis.radii = radii;\n\t},\n\t\n\t/**\n\t * Perform animation on the bubbles\n\t */\n\tanimate: function (init) {\n\t\tvar animation = this.options.animation;\n\t\t\n\t\tif (!init) { // run the animation\n\t\t\teach(this.points, function (point) {\n\t\t\t\tvar graphic = point.graphic,\n\t\t\t\t\tshapeArgs = point.shapeArgs;\n\n\t\t\t\tif (graphic && shapeArgs) {\n\t\t\t\t\t// start values\n\t\t\t\t\tgraphic.attr('r', 1);\n\n\t\t\t\t\t// animate\n\t\t\t\t\tgraphic.animate({\n\t\t\t\t\t\tr: shapeArgs.r\n\t\t\t\t\t}, animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// delete this function to allow it only once\n\t\t\tthis.animate = null;\n\t\t}\n\t},\n\t\n\t/**\n\t * Extend the base translate method to handle bubble size\n\t */\n\ttranslate: function () {\n\t\t\n\t\tvar i,\n\t\t\tdata = this.data,\n\t\t\tpoint,\n\t\t\tradius,\n\t\t\tradii = this.radii;\n\t\t\n\t\t// Run the parent method\n\t\tseriesTypes.scatter.prototype.translate.call(this);\n\t\t\n\t\t// Set the shape type and arguments to be picked up in drawPoints\n\t\ti = data.length;\n\t\t\n\t\twhile (i--) {\n\t\t\tpoint = data[i];\n\t\t\tradius = radii ? radii[i] : 0; // #1737\n\n\t\t\t// Flag for negativeColor to be applied in Series.js\n\t\t\tpoint.negative = point.z < (this.options.zThreshold || 0);\n\t\t\t\n\t\t\tif (radius >= this.minPxSize / 2) {\n\t\t\t\t// Shape arguments\n\t\t\t\tpoint.shapeType = 'circle';\n\t\t\t\tpoint.shapeArgs = {\n\t\t\t\t\tx: point.plotX,\n\t\t\t\t\ty: point.plotY,\n\t\t\t\t\tr: radius\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// Alignment box for the data label\n\t\t\t\tpoint.dlBox = {\n\t\t\t\t\tx: point.plotX - radius,\n\t\t\t\t\ty: point.plotY - radius,\n\t\t\t\t\twidth: 2 * radius,\n\t\t\t\t\theight: 2 * radius\n\t\t\t\t};\n\t\t\t} else { // below zThreshold\n\t\t\t\tpoint.shapeArgs = point.plotY = point.dlBox = UNDEFINED; // #1691\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Get the series' symbol in the legend\n\t * \n\t * @param {Object} legend The legend object\n\t * @param {Object} item The series (this) or point\n\t */\n\tdrawLegendSymbol: function (legend, item) {\n\t\tvar radius = pInt(legend.itemStyle.fontSize) / 2;\n\t\t\n\t\titem.legendSymbol = this.chart.renderer.circle(\n\t\t\tradius,\n\t\t\tlegend.baseline - radius,\n\t\t\tradius\n\t\t).attr({\n\t\t\tzIndex: 3\n\t\t}).add(item.legendGroup);\n\t\titem.legendSymbol.isMarker = true;\t\n\t\t\n\t},\n\t\n\tdrawPoints: seriesTypes.column.prototype.drawPoints,\n\talignDataLabel: seriesTypes.column.prototype.alignDataLabel\n});\n\n/**\n * Add logic to pad each axis with the amount of pixels\n * necessary to avoid the bubbles to overflow.\n */\nAxis.prototype.beforePadding = function () {\n\tvar axis = this,\n\t\taxisLength = this.len,\n\t\tchart = this.chart,\n\t\tpxMin = 0, \n\t\tpxMax = axisLength,\n\t\tisXAxis = this.isXAxis,\n\t\tdataKey = isXAxis ? 'xData' : 'yData',\n\t\tmin = this.min,\n\t\textremes = {},\n\t\tsmallestSize = math.min(chart.plotWidth, chart.plotHeight),\n\t\tzMin = Number.MAX_VALUE,\n\t\tzMax = -Number.MAX_VALUE,\n\t\trange = this.max - min,\n\t\ttransA = axisLength / range,\n\t\tactiveSeries = [];\n\n\t// Handle padding on the second pass, or on redraw\n\tif (this.tickPositions) {\n\t\teach(this.series, function (series) {\n\n\t\t\tvar seriesOptions = series.options,\n\t\t\t\tzData;\n\n\t\t\tif (series.type === 'bubble' && series.visible) {\n\n\t\t\t\t// Correction for #1673\n\t\t\t\taxis.allowZoomOutside = true;\n\n\t\t\t\t// Cache it\n\t\t\t\tactiveSeries.push(series);\n\n\t\t\t\tif (isXAxis) { // because X axis is evaluated first\n\t\t\t\t\n\t\t\t\t\t// For each series, translate the size extremes to pixel values\n\t\t\t\t\teach(['minSize', 'maxSize'], function (prop) {\n\t\t\t\t\t\tvar length = seriesOptions[prop],\n\t\t\t\t\t\t\tisPercent = /%$/.test(length);\n\t\t\t\t\t\t\n\t\t\t\t\t\tlength = pInt(length);\n\t\t\t\t\t\textremes[prop] = isPercent ?\n\t\t\t\t\t\t\tsmallestSize * length / 100 :\n\t\t\t\t\t\t\tlength;\n\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t\tseries.minPxSize = extremes.minSize;\n\t\t\t\t\t\n\t\t\t\t\t// Find the min and max Z\n\t\t\t\t\tzData = series.zData;\n\t\t\t\t\tif (zData.length) { // #1735\n\t\t\t\t\t\tzMin = math.min(\n\t\t\t\t\t\t\tzMin,\n\t\t\t\t\t\t\tmath.max(\n\t\t\t\t\t\t\t\tarrayMin(zData), \n\t\t\t\t\t\t\t\tseriesOptions.displayNegative === false ? seriesOptions.zThreshold : -Number.MAX_VALUE\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tzMax = math.max(zMax, arrayMax(zData));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\teach(activeSeries, function (series) {\n\n\t\t\tvar data = series[dataKey],\n\t\t\t\ti = data.length,\n\t\t\t\tradius;\n\n\t\t\tif (isXAxis) {\n\t\t\t\tseries.getRadii(zMin, zMax, extremes.minSize, extremes.maxSize);\n\t\t\t}\n\t\t\t\n\t\t\tif (range > 0) {\n\t\t\t\twhile (i--) {\n\t\t\t\t\tradius = series.radii[i];\n\t\t\t\t\tpxMin = Math.min(((data[i] - min) * transA) - radius, pxMin);\n\t\t\t\t\tpxMax = Math.max(((data[i] - min) * transA) + radius, pxMax);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tif (activeSeries.length && range > 0 && pick(this.options.min, this.userMin) === UNDEFINED && pick(this.options.max, this.userMax) === UNDEFINED) {\n\t\t\tpxMax -= axisLength;\n\t\t\ttransA *= (axisLength + pxMin - pxMax) / axisLength;\n\t\t\tthis.min += pxMin / transA;\n\t\t\tthis.max += pxMax / transA;\n\t\t}\n\t}\n};\n\n/* ****************************************************************************\n * End Bubble series code                                                     *\n *****************************************************************************/\n/**\n * Extensions for polar charts. Additionally, much of the geometry required for polar charts is\n * gathered in RadialAxes.js.\n * \n */\n\nvar seriesProto = Series.prototype,\n\tpointerProto = Highcharts.Pointer.prototype;\n\n\n\n/**\n * Translate a point's plotX and plotY from the internal angle and radius measures to \n * true plotX, plotY coordinates\n */\nseriesProto.toXY = function (point) {\n\tvar xy,\n\t\tchart = this.chart,\n\t\tplotX = point.plotX,\n\t\tplotY = point.plotY;\n\t\n\t// Save rectangular plotX, plotY for later computation\n\tpoint.rectPlotX = plotX;\n\tpoint.rectPlotY = plotY;\n\t\n\t// Record the angle in degrees for use in tooltip\n\tpoint.clientX = ((plotX / Math.PI * 180) + this.xAxis.pane.options.startAngle) % 360;\n\t\n\t// Find the polar plotX and plotY\n\txy = this.xAxis.postTranslate(point.plotX, this.yAxis.len - plotY);\n\tpoint.plotX = point.polarPlotX = xy.x - chart.plotLeft;\n\tpoint.plotY = point.polarPlotY = xy.y - chart.plotTop;\n};\n\n/** \n * Order the tooltip points to get the mouse capture ranges correct. #1915. \n */\nseriesProto.orderTooltipPoints = function (points) {\n\tif (this.chart.polar) {\n\t\tpoints.sort(function (a, b) {\n\t\t\treturn a.clientX - b.clientX;\n\t\t});\n\n\t\t// Wrap mouse tracking around to capture movement on the segment to the left\n\t\t// of the north point (#1469, #2093).\n\t\tif (points[0]) {\n\t\t\tpoints[0].wrappedClientX = points[0].clientX + 360;\n\t\t\tpoints.push(points[0]);\n\t\t}\n\t}\n};\n\n\n/**\n * Add some special init logic to areas and areasplines\n */\nfunction initArea(proceed, chart, options) {\n\tproceed.call(this, chart, options);\n\tif (this.chart.polar) {\n\t\t\n\t\t/**\n\t\t * Overridden method to close a segment path. While in a cartesian plane the area \n\t\t * goes down to the threshold, in the polar chart it goes to the center.\n\t\t */\n\t\tthis.closeSegment = function (path) {\n\t\t\tvar center = this.xAxis.center;\n\t\t\tpath.push(\n\t\t\t\t'L',\n\t\t\t\tcenter[0],\n\t\t\t\tcenter[1]\n\t\t\t);\t\t\t\n\t\t};\n\t\t\n\t\t// Instead of complicated logic to draw an area around the inner area in a stack,\n\t\t// just draw it behind\n\t\tthis.closedStacks = true;\n\t}\n}\nwrap(seriesTypes.area.prototype, 'init', initArea);\nwrap(seriesTypes.areaspline.prototype, 'init', initArea);\n\t\t\n\n/**\n * Overridden method for calculating a spline from one point to the next\n */\nwrap(seriesTypes.spline.prototype, 'getPointSpline', function (proceed, segment, point, i) {\n\t\n\tvar ret,\n\t\tsmoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc;\n\t\tdenom = smoothing + 1,\n\t\tplotX, \n\t\tplotY,\n\t\tlastPoint,\n\t\tnextPoint,\n\t\tlastX,\n\t\tlastY,\n\t\tnextX,\n\t\tnextY,\n\t\tleftContX,\n\t\tleftContY,\n\t\trightContX,\n\t\trightContY,\n\t\tdistanceLeftControlPoint,\n\t\tdistanceRightControlPoint,\n\t\tleftContAngle,\n\t\trightContAngle,\n\t\tjointAngle;\n\t\t\n\t\t\n\tif (this.chart.polar) {\n\t\t\n\t\tplotX = point.plotX;\n\t\tplotY = point.plotY;\n\t\tlastPoint = segment[i - 1];\n\t\tnextPoint = segment[i + 1];\n\t\t\t\n\t\t// Connect ends\n\t\tif (this.connectEnds) {\n\t\t\tif (!lastPoint) {\n\t\t\t\tlastPoint = segment[segment.length - 2]; // not the last but the second last, because the segment is already connected\n\t\t\t}\n\t\t\tif (!nextPoint) {\n\t\t\t\tnextPoint = segment[1];\n\t\t\t}\t\n\t\t}\n\n\t\t// find control points\n\t\tif (lastPoint && nextPoint) {\n\t\t\n\t\t\tlastX = lastPoint.plotX;\n\t\t\tlastY = lastPoint.plotY;\n\t\t\tnextX = nextPoint.plotX;\n\t\t\tnextY = nextPoint.plotY;\n\t\t\tleftContX = (smoothing * plotX + lastX) / denom;\n\t\t\tleftContY = (smoothing * plotY + lastY) / denom;\n\t\t\trightContX = (smoothing * plotX + nextX) / denom;\n\t\t\trightContY = (smoothing * plotY + nextY) / denom;\n\t\t\tdistanceLeftControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2));\n\t\t\tdistanceRightControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2));\n\t\t\tleftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX);\n\t\t\trightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX);\n\t\t\tjointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2);\n\t\t\t\t\n\t\t\t\t\n\t\t\t// Ensure the right direction, jointAngle should be in the same quadrant as leftContAngle\n\t\t\tif (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) {\n\t\t\t\tjointAngle -= Math.PI;\n\t\t\t}\n\t\t\t\n\t\t\t// Find the corrected control points for a spline straight through the point\n\t\t\tleftContX = plotX + Math.cos(jointAngle) * distanceLeftControlPoint;\n\t\t\tleftContY = plotY + Math.sin(jointAngle) * distanceLeftControlPoint;\n\t\t\trightContX = plotX + Math.cos(Math.PI + jointAngle) * distanceRightControlPoint;\n\t\t\trightContY = plotY + Math.sin(Math.PI + jointAngle) * distanceRightControlPoint;\n\t\t\t\n\t\t\t// Record for drawing in next point\n\t\t\tpoint.rightContX = rightContX;\n\t\t\tpoint.rightContY = rightContY;\n\n\t\t}\n\t\t\n\t\t\n\t\t// moveTo or lineTo\n\t\tif (!i) {\n\t\t\tret = ['M', plotX, plotY];\n\t\t} else { // curve from last point to this\n\t\t\tret = [\n\t\t\t\t'C',\n\t\t\t\tlastPoint.rightContX || lastPoint.plotX,\n\t\t\t\tlastPoint.rightContY || lastPoint.plotY,\n\t\t\t\tleftContX || plotX,\n\t\t\t\tleftContY || plotY,\n\t\t\t\tplotX,\n\t\t\t\tplotY\n\t\t\t];\n\t\t\tlastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later\n\t\t}\n\t\t\n\t\t\n\t} else {\n\t\tret = proceed.call(this, segment, point, i);\n\t}\n\treturn ret;\n});\n\n/**\n * Extend translate. The plotX and plotY values are computed as if the polar chart were a\n * cartesian plane, where plotX denotes the angle in radians and (yAxis.len - plotY) is the pixel distance from\n * center. \n */\nwrap(seriesProto, 'translate', function (proceed) {\n\t\t\n\t// Run uber method\n\tproceed.call(this);\n\t\n\t// Postprocess plot coordinates\n\tif (this.chart.polar && !this.preventPostTranslate) {\n\t\tvar points = this.points,\n\t\t\ti = points.length;\n\t\twhile (i--) {\n\t\t\t// Translate plotX, plotY from angle and radius to true plot coordinates\n\t\t\tthis.toXY(points[i]);\n\t\t}\n\t}\n});\n\n/** \n * Extend getSegmentPath to allow connecting ends across 0 to provide a closed circle in \n * line-like series.\n */\nwrap(seriesProto, 'getSegmentPath', function (proceed, segment) {\n\t\t\n\tvar points = this.points;\n\t\n\t// Connect the path\n\tif (this.chart.polar && this.options.connectEnds !== false && \n\t\t\tsegment[segment.length - 1] === points[points.length - 1] && points[0].y !== null) {\n\t\tthis.connectEnds = true; // re-used in splines\n\t\tsegment = [].concat(segment, [points[0]]);\n\t}\n\t\n\t// Run uber method\n\treturn proceed.call(this, segment);\n\t\n});\n\n\nfunction polarAnimate(proceed, init) {\n\tvar chart = this.chart,\n\t\tanimation = this.options.animation,\n\t\tgroup = this.group,\n\t\tmarkerGroup = this.markerGroup,\n\t\tcenter = this.xAxis.center,\n\t\tplotLeft = chart.plotLeft,\n\t\tplotTop = chart.plotTop,\n\t\tattribs;\n\n\t// Specific animation for polar charts\n\tif (chart.polar) {\n\t\t\n\t\t// Enable animation on polar charts only in SVG. In VML, the scaling is different, plus animation\n\t\t// would be so slow it would't matter.\n\t\tif (chart.renderer.isSVG) {\n\n\t\t\tif (animation === true) {\n\t\t\t\tanimation = {};\n\t\t\t}\n\t\n\t\t\t// Initialize the animation\n\t\t\tif (init) {\n\t\t\t\t\n\t\t\t\t// Scale down the group and place it in the center\n\t\t\t\tattribs = {\n\t\t\t\t\ttranslateX: center[0] + plotLeft,\n\t\t\t\t\ttranslateY: center[1] + plotTop,\n\t\t\t\t\tscaleX: 0.001, // #1499\n\t\t\t\t\tscaleY: 0.001\n\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\tgroup.attr(attribs);\n\t\t\t\tif (markerGroup) {\n\t\t\t\t\tmarkerGroup.attrSetters = group.attrSetters;\n\t\t\t\t\tmarkerGroup.attr(attribs);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t// Run the animation\n\t\t\t} else {\n\t\t\t\tattribs = {\n\t\t\t\t\ttranslateX: plotLeft,\n\t\t\t\t\ttranslateY: plotTop,\n\t\t\t\t\tscaleX: 1,\n\t\t\t\t\tscaleY: 1\n\t\t\t\t};\n\t\t\t\tgroup.animate(attribs, animation);\n\t\t\t\tif (markerGroup) {\n\t\t\t\t\tmarkerGroup.animate(attribs, animation);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Delete this function to allow it only once\n\t\t\t\tthis.animate = null;\n\t\t\t}\n\t\t}\n\t\n\t// For non-polar charts, revert to the basic animation\n\t} else {\n\t\tproceed.call(this, init);\n\t} \n}\n\n// Define the animate method for both regular series and column series and their derivatives\nwrap(seriesProto, 'animate', polarAnimate);\nwrap(colProto, 'animate', polarAnimate);\n\n\n/**\n * Throw in a couple of properties to let setTooltipPoints know we're indexing the points\n * in degrees (0-360), not plot pixel width.\n */\nwrap(seriesProto, 'setTooltipPoints', function (proceed, renew) {\n\t\t\n\tif (this.chart.polar) {\n\t\textend(this.xAxis, {\n\t\t\ttooltipLen: 360 // degrees are the resolution unit of the tooltipPoints array\n\t\t});\t\n\t}\n\t\n\t// Run uber method\n\treturn proceed.call(this, renew);\n});\n\n\n/**\n * Extend the column prototype's translate method\n */\nwrap(colProto, 'translate', function (proceed) {\n\t\t\n\tvar xAxis = this.xAxis,\n\t\tlen = this.yAxis.len,\n\t\tcenter = xAxis.center,\n\t\tstartAngleRad = xAxis.startAngleRad,\n\t\trenderer = this.chart.renderer,\n\t\tstart,\n\t\tpoints,\n\t\tpoint,\n\t\ti;\n\t\n\tthis.preventPostTranslate = true;\n\t\n\t// Run uber method\n\tproceed.call(this);\n\t\n\t// Postprocess plot coordinates\n\tif (xAxis.isRadial) {\n\t\tpoints = this.points;\n\t\ti = points.length;\n\t\twhile (i--) {\n\t\t\tpoint = points[i];\n\t\t\tstart = point.barX + startAngleRad;\n\t\t\tpoint.shapeType = 'path';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\td: renderer.symbols.arc(\n\t\t\t\t\tcenter[0],\n\t\t\t\t\tcenter[1],\n\t\t\t\t\tlen - point.plotY,\n\t\t\t\t\tnull, \n\t\t\t\t\t{\n\t\t\t\t\t\tstart: start,\n\t\t\t\t\t\tend: start + point.pointWidth,\n\t\t\t\t\t\tinnerR: len - pick(point.yBottom, len)\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t};\n\t\t\tthis.toXY(point); // provide correct plotX, plotY for tooltip\n\t\t}\n\t}\n});\n\n\n/**\n * Align column data labels outside the columns. #1199.\n */\nwrap(colProto, 'alignDataLabel', function (proceed, point, dataLabel, options, alignTo, isNew) {\n\t\n\tif (this.chart.polar) {\n\t\tvar angle = point.rectPlotX / Math.PI * 180,\n\t\t\talign,\n\t\t\tverticalAlign;\n\t\t\n\t\t// Align nicely outside the perimeter of the columns\n\t\tif (options.align === null) {\n\t\t\tif (angle > 20 && angle < 160) {\n\t\t\t\talign = 'left'; // right hemisphere\n\t\t\t} else if (angle > 200 && angle < 340) {\n\t\t\t\talign = 'right'; // left hemisphere\n\t\t\t} else {\n\t\t\t\talign = 'center'; // top or bottom\n\t\t\t}\n\t\t\toptions.align = align;\n\t\t}\n\t\tif (options.verticalAlign === null) {\n\t\t\tif (angle < 45 || angle > 315) {\n\t\t\t\tverticalAlign = 'bottom'; // top part\n\t\t\t} else if (angle > 135 && angle < 225) {\n\t\t\t\tverticalAlign = 'top'; // bottom part\n\t\t\t} else {\n\t\t\t\tverticalAlign = 'middle'; // left or right\n\t\t\t}\n\t\t\toptions.verticalAlign = verticalAlign;\n\t\t}\n\t\t\n\t\tseriesProto.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);\n\t} else {\n\t\tproceed.call(this, point, dataLabel, options, alignTo, isNew);\n\t}\n\t\n});\n\n/**\n * Extend the mouse tracker to return the tooltip position index in terms of\n * degrees rather than pixels\n */\nwrap(pointerProto, 'getIndex', function (proceed, e) {\n\tvar ret,\n\t\tchart = this.chart,\n\t\tcenter,\n\t\tx,\n\t\ty;\n\t\n\tif (chart.polar) {\n\t\tcenter = chart.xAxis[0].center;\n\t\tx = e.chartX - center[0] - chart.plotLeft;\n\t\ty = e.chartY - center[1] - chart.plotTop;\n\t\t\n\t\tret = 180 - Math.round(Math.atan2(x, y) / Math.PI * 180);\n\t\n\t} else {\n\t\n\t\t// Run uber method\n\t\tret = proceed.call(this, e);\n\t}\n\treturn ret;\n});\n\n/**\n * Extend getCoordinates to prepare for polar axis values\n */\nwrap(pointerProto, 'getCoordinates', function (proceed, e) {\n\tvar chart = this.chart,\n\t\tret = {\n\t\t\txAxis: [],\n\t\t\tyAxis: []\n\t\t};\n\t\n\tif (chart.polar) {\t\n\n\t\teach(chart.axes, function (axis) {\n\t\t\tvar isXAxis = axis.isXAxis,\n\t\t\t\tcenter = axis.center,\n\t\t\t\tx = e.chartX - center[0] - chart.plotLeft,\n\t\t\t\ty = e.chartY - center[1] - chart.plotTop;\n\t\t\t\n\t\t\tret[isXAxis ? 'xAxis' : 'yAxis'].push({\n\t\t\t\taxis: axis,\n\t\t\t\tvalue: axis.translate(\n\t\t\t\t\tisXAxis ?\n\t\t\t\t\t\tMath.PI - Math.atan2(x, y) : // angle \n\t\t\t\t\t\tMath.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), // distance from center\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t});\n\t\t});\n\t\t\n\t} else {\n\t\tret = proceed.call(this, e);\n\t}\n\t\n\treturn ret;\n});\n}(Highcharts));\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/highcharts.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n (c) 2009-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(){function r(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function x(){var a,b=arguments.length,c={},d=function(a,b){var c,h;typeof a!==\"object\"&&(a={});for(h in b)b.hasOwnProperty(h)&&(c=b[h],a[h]=c&&typeof c===\"object\"&&Object.prototype.toString.call(c)!==\"[object Array]\"&&typeof c.nodeType!==\"number\"?d(a[h]||{},c):b[h]);return a};for(a=0;a<b;a++)c=d(c,arguments[a]);return c}function C(a,b){return parseInt(a,b||10)}function ea(a){return typeof a===\"string\"}function T(a){return typeof a===\n\"object\"}function Ia(a){return Object.prototype.toString.call(a)===\"[object Array]\"}function sa(a){return typeof a===\"number\"}function na(a){return R.log(a)/R.LN10}function fa(a){return R.pow(10,a)}function ga(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function u(a){return a!==w&&a!==null}function v(a,b,c){var d,e;if(ea(b))u(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(u(b)&&T(b))for(d in b)a.setAttribute(d,b[d]);return e}function ja(a){return Ia(a)?\na:[a]}function o(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!==\"undefined\"&&c!==null)return c}function K(a,b){if(ta&&b&&b.opacity!==w)b.filter=\"alpha(opacity=\"+b.opacity*100+\")\";r(a.style,b)}function U(a,b,c,d,e){a=y.createElement(a);b&&r(a,b);e&&K(a,{padding:0,border:S,margin:0});c&&K(a,c);d&&d.appendChild(a);return a}function ha(a,b){var c=function(){};c.prototype=new a;r(c.prototype,b);return c}function Aa(a,b,c,d){var e=M.lang,a=+a||0,f=b===-1?(a.toString().split(\".\")[1]||\n\"\").length:isNaN(b=N(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?\"-\":\"\",c=String(C(a=N(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:\"\")+c.substr(g).replace(/(\\d{3})(?=\\d)/g,\"$1\"+d)+(f?b+N(a-c).toFixed(f).slice(2):\"\")}function Ba(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function mb(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);a.unshift(d);return c.apply(this,a)}}function Ca(a,b){for(var c=\"{\",d=!1,\ne,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(\":\");g=f.shift().split(\".\");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]];if(f.length)f=f.join(\":\"),g=/\\.([0-9])/,h=M.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e=Aa(e,i,h.decimalPoint,f.indexOf(\",\")>-1?h.thousandsSep:\"\")):e=Xa(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?\"}\":\"{\"}j.push(a);return j.join(\"\")}function nb(a){return R.pow(10,P(R.log(a)/R.LN10))}function ob(a,b,c,d){var e,c=o(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===\n!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Cb(a,b){var c=b||[[Db,[1,2,5,10,20,25,50,100,200,500]],[pb,[1,2,5,10,15,30]],[Ya,[1,2,5,10,15,30]],[Qa,[1,2,3,4,6,8,12]],[ua,[1,2]],[Za,[1,2]],[Ra,[1,2,3,4,6]],[Da,null]],d=c[c.length-1],e=D[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=D[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+D[c[g+1][0]])/2)break;e===D[Da]&&a<5*e&&(f=[1,2,5]);c=ob(a/e,f,d[0]===Da?nb(a/e):1);\nreturn{unitRange:e,count:c,unitName:d[0]}}function Eb(a,b,c,d){var e=[],f={},g=M.global.useUTC,h,i=new Date(b),j=a.unitRange,k=a.count;if(u(b)){j>=D[pb]&&(i.setMilliseconds(0),i.setSeconds(j>=D[Ya]?0:k*P(i.getSeconds()/k)));if(j>=D[Ya])i[Fb](j>=D[Qa]?0:k*P(i[qb]()/k));if(j>=D[Qa])i[Gb](j>=D[ua]?0:k*P(i[rb]()/k));if(j>=D[ua])i[sb](j>=D[Ra]?1:k*P(i[Sa]()/k));j>=D[Ra]&&(i[Hb](j>=D[Da]?0:k*P(i[$a]()/k)),h=i[ab]());j>=D[Da]&&(h-=h%k,i[Ib](h));if(j===D[Za])i[sb](i[Sa]()-i[tb]()+o(d,1));b=1;h=i[ab]();for(var d=\ni.getTime(),l=i[$a](),m=i[Sa](),p=g?0:(864E5+i.getTimezoneOffset()*6E4)%864E5;d<c;)e.push(d),j===D[Da]?d=bb(h+b*k,0):j===D[Ra]?d=bb(h,l+b*k):!g&&(j===D[ua]||j===D[Za])?d=bb(h,l,m+b*k*(j===D[ua]?1:7)):d+=j*k,b++;e.push(d);n(ub(e,function(a){return j<=D[Qa]&&a%D[ua]===p}),function(a){f[a]=ua})}e.info=r(a,{higherRanks:f,totalRange:j*k});return e}function Jb(){this.symbol=this.color=0}function Kb(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:\nd});for(e=0;e<c;e++)delete a[e].ss_i}function Ja(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function va(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Ka(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Ta(a){cb||(cb=U(Ea));a&&cb.appendChild(a);cb.innerHTML=\"\"}function ka(a,b){var c=\"Highcharts error #\"+a+\": www.highcharts.com/errors/\"+a;if(b)throw c;else O.console&&console.log(c)}function ia(a){return parseFloat(a.toPrecision(14))}\nfunction La(a,b){Fa=o(a,b.animation)}function Lb(){var a=M.global.useUTC,b=a?\"getUTC\":\"get\",c=a?\"setUTC\":\"set\";bb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,o(c,1),o(g,0),o(h,0),o(i,0))).getTime()};qb=b+\"Minutes\";rb=b+\"Hours\";tb=b+\"Day\";Sa=b+\"Date\";$a=b+\"Month\";ab=b+\"FullYear\";Fb=c+\"Minutes\";Gb=c+\"Hours\";sb=c+\"Date\";Hb=c+\"Month\";Ib=c+\"FullYear\"}function wa(){}function Ma(a,b,c,d){this.axis=a;this.pos=b;this.type=c||\"\";this.isNew=!0;!c&&!d&&this.addLabel()}function vb(a,b){this.axis=a;if(b)this.options=\nb,this.id=b.id}function Mb(a,b,c,d,e,f){var g=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.percent=f===\"percent\";this.alignOptions={align:b.align||(g?c?\"left\":\"right\":\"center\"),verticalAlign:b.verticalAlign||(g?\"middle\":c?\"bottom\":\"top\"),y:o(b.y,g?4:c?14:-6),x:o(b.x,g?c?-6:6:0)};this.textAlign=b.textAlign||(g?c?\"right\":\"left\":\"center\")}function db(){this.init.apply(this,arguments)}function wb(){this.init.apply(this,arguments)}\nfunction xb(a,b){this.init(a,b)}function eb(a,b){this.init(a,b)}function yb(){this.init.apply(this,arguments)}var w,y=document,O=window,R=Math,t=R.round,P=R.floor,xa=R.ceil,s=R.max,I=R.min,N=R.abs,V=R.cos,ca=R.sin,ya=R.PI,Ua=ya*2/360,oa=navigator.userAgent,Nb=O.opera,ta=/msie/i.test(oa)&&!Nb,fb=y.documentMode===8,gb=/AppleWebKit/.test(oa),hb=/Firefox/.test(oa),Ob=/(Mobile|Android|Windows Phone)/.test(oa),za=\"http://www.w3.org/2000/svg\",Z=!!y.createElementNS&&!!y.createElementNS(za,\"svg\").createSVGRect,\nUb=hb&&parseInt(oa.split(\"Firefox/\")[1],10)<4,$=!Z&&!ta&&!!y.createElement(\"canvas\").getContext,Va,ib=y.documentElement.ontouchstart!==w,Pb={},zb=0,cb,M,Xa,Fa,Ab,D,pa=function(){},Ga=[],Ea=\"div\",S=\"none\",Qb=\"rgba(192,192,192,\"+(Z?1.0E-4:0.002)+\")\",Db=\"millisecond\",pb=\"second\",Ya=\"minute\",Qa=\"hour\",ua=\"day\",Za=\"week\",Ra=\"month\",Da=\"year\",Rb=\"stroke-width\",bb,qb,rb,tb,Sa,$a,ab,Fb,Gb,sb,Hb,Ib,W={};O.Highcharts=O.Highcharts?ka(16,!0):{};Xa=function(a,b,c){if(!u(b)||isNaN(b))return\"Invalid date\";var a=\no(a,\"%Y-%m-%d %H:%M:%S\"),d=new Date(b),e,f=d[rb](),g=d[tb](),h=d[Sa](),i=d[$a](),j=d[ab](),k=M.lang,l=k.weekdays,d=r({a:l[g].substr(0,3),A:l[g],d:Ba(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ba(i+1),y:j.toString().substr(2,2),Y:j,H:Ba(f),I:Ba(f%12||12),l:f%12||12,M:Ba(d[qb]()),p:f<12?\"AM\":\"PM\",P:f<12?\"am\":\"pm\",S:Ba(d.getSeconds()),L:Ba(t(b%1E3),3)},Highcharts.dateFormats);for(e in d)for(;a.indexOf(\"%\"+e)!==-1;)a=a.replace(\"%\"+e,typeof d[e]===\"function\"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+\na.substr(1):a};Jb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};D=function(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}(Db,1,pb,1E3,Ya,6E4,Qa,36E5,ua,864E5,Za,6048E5,Ra,26784E5,Da,31556952E3);Ab={init:function(a,b,c){var b=b||\"\",d=a.shift,e=b.indexOf(\"C\")>-1,f=e?7:3,g,b=b.split(\" \"),c=[].concat(c),h,i,j=function(a){for(g=a.length;g--;)a[g]===\"M\"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&\n(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===b.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};\n(function(a){O.HighchartsAdapter=O.HighchartsAdapter||a&&{init:function(b){var c=a.fx,d=c.step,e,f=a.Tween,g=f&&f.propHooks;e=a.cssHooks.opacity;a.extend(a.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});a.each([\"cur\",\"_default\",\"width\",\"height\",\"opacity\"],function(a,b){var e=d,k,l;b===\"cur\"?e=c.prototype:b===\"_default\"&&f&&(e=g[b],b=\"set\");(k=e[b])&&(e[b]=function(c){c=a?c:this;if(c.prop!==\"align\")return l=c.elem,l.attr?l.attr(c.prop,b===\"cur\"?w:c.now):k.apply(this,arguments)})});\nmb(e,\"get\",function(a,b,c){return b.attr?b.opacity||0:a.call(this,b,c)});e=function(a){var c=a.elem,d;if(!a.started)d=b.init(c,c.d,c.toD),a.start=d[0],a.end=d[1],a.started=!0;c.attr(\"d\",b.step(a.start,a.end,a.pos,c.toD))};f?g.d={set:e}:d.d=e;this.each=Array.prototype.forEach?function(a,b){return Array.prototype.forEach.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c};a.fn.highcharts=function(){var a=\"Chart\",b=arguments,c,d;ea(b[0])&&(a=b[0],b=Array.prototype.slice.call(b,\n1));c=b[0];if(c!==w)c.chart=c.chart||{},c.chart.renderTo=this[0],new Highcharts[a](c,b[1]),d=this;c===w&&(d=Ga[v(this[0],\"data-highcharts-chart\")]);return d}},getScript:a.getScript,inArray:a.inArray,adapterRun:function(b,c){return a(b)[c]()},grep:a.grep,map:function(a,c){for(var d=[],e=0,f=a.length;e<f;e++)d[e]=c.call(a[e],a[e],e,a);return d},offset:function(b){return a(b).offset()},addEvent:function(b,c,d){a(b).bind(c,d)},removeEvent:function(b,c,d){var e=y.removeEventListener?\"removeEventListener\":\n\"detachEvent\";y[e]&&b&&!b[e]&&(b[e]=function(){});a(b).unbind(c,d)},fireEvent:function(b,c,d,e){var f=a.Event(c),g=\"detached\"+c,h;!ta&&d&&(delete d.layerX,delete d.layerY);r(f,d);b[c]&&(b[g]=b[c],b[c]=null);a.each([\"preventDefault\",\"stopPropagation\"],function(a,b){var c=f[b];f[b]=function(){try{c.call(f)}catch(a){b===\"preventDefault\"&&(h=!0)}}});a(b).trigger(f);b[g]&&(b[c]=b[g],b[g]=null);e&&!f.isDefaultPrevented()&&!h&&e(f)},washMouseEvent:function(a){var c=a.originalEvent||a;if(c.pageX===w)c.pageX=\na.pageX,c.pageY=a.pageY;return c},animate:function(b,c,d){var e=a(b);if(!b.style)b.style={};if(c.d)b.toD=c.d,c.d=1;e.stop();c.opacity!==w&&b.attr&&(c.opacity+=\"px\");e.animate(c,d)},stop:function(b){a(b).stop()}}})(O.jQuery);var X=O.HighchartsAdapter,G=X||{};X&&X.init.call(X,Ab);var jb=G.adapterRun,Vb=G.getScript,qa=G.inArray,n=G.each,ub=G.grep,Wb=G.offset,Na=G.map,J=G.addEvent,aa=G.removeEvent,z=G.fireEvent,Xb=G.washMouseEvent,Bb=G.animate,Wa=G.stop,G={enabled:!0,x:0,y:15,style:{color:\"#666\",cursor:\"default\",\nfontSize:\"11px\",lineHeight:\"14px\"}};M={colors:\"#2f7ed8,#0d233a,#8bbc21,#910000,#1aadce,#492970,#f28f43,#77a1e5,#c42525,#a6c96a\".split(\",\"),symbols:[\"circle\",\"diamond\",\"square\",\"triangle\",\"triangle-down\"],lang:{loading:\"Loading...\",months:\"January,February,March,April,May,June,July,August,September,October,November,December\".split(\",\"),shortMonths:\"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec\".split(\",\"),weekdays:\"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday\".split(\",\"),decimalPoint:\".\",\nnumericSymbols:\"k,M,G,T,P,E\".split(\",\"),resetZoom:\"Reset zoom\",resetZoomTitle:\"Reset zoom level 1:1\",thousandsSep:\",\"},global:{useUTC:!0,canvasToolsURL:\"http://code.highcharts.com/3.0.6/modules/canvas-tools.js\",VMLRadialGradientURL:\"http://code.highcharts.com/3.0.6/gfx/vml-radial-gradient.png\"},chart:{borderColor:\"#4572A7\",borderRadius:5,defaultSeriesType:\"line\",ignoreHiddenSeries:!0,spacing:[10,10,15,10],style:{fontFamily:'\"Lucida Grande\", \"Lucida Sans Unicode\", Verdana, Arial, Helvetica, sans-serif',\nfontSize:\"12px\"},backgroundColor:\"#FFFFFF\",plotBorderColor:\"#C0C0C0\",resetZoomButton:{theme:{zIndex:20},position:{align:\"right\",x:-10,y:10}}},title:{text:\"Chart title\",align:\"center\",margin:15,style:{color:\"#274b6d\",fontSize:\"16px\"}},subtitle:{text:\"\",align:\"center\",style:{color:\"#4d759e\"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,marker:{enabled:!0,lineWidth:0,radius:4,lineColor:\"#FFFFFF\",states:{hover:{enabled:!0},select:{fillColor:\"#FFFFFF\",\nlineColor:\"#000000\",lineWidth:2}}},point:{events:{}},dataLabels:x(G,{align:\"center\",enabled:!1,formatter:function(){return this.y===null?\"\":Aa(this.y,-1)},verticalAlign:\"bottom\",y:0}),cropThreshold:300,pointRange:0,showInLegend:!0,states:{hover:{marker:{}},select:{marker:{}}},stickyTracking:!0}},labels:{style:{position:\"absolute\",color:\"#3E576F\"}},legend:{enabled:!0,align:\"center\",layout:\"horizontal\",labelFormatter:function(){return this.name},borderWidth:1,borderColor:\"#909090\",borderRadius:5,navigation:{activeColor:\"#274b6d\",\ninactiveColor:\"#CCC\"},shadow:!1,itemStyle:{cursor:\"pointer\",color:\"#274b6d\",fontSize:\"12px\"},itemHoverStyle:{color:\"#000\"},itemHiddenStyle:{color:\"#CCC\"},itemCheckboxStyle:{position:\"absolute\",width:\"13px\",height:\"13px\"},symbolWidth:16,symbolPadding:5,verticalAlign:\"bottom\",x:0,y:0,title:{style:{fontWeight:\"bold\"}}},loading:{labelStyle:{fontWeight:\"bold\",position:\"relative\",top:\"1em\"},style:{position:\"absolute\",backgroundColor:\"white\",opacity:0.5,textAlign:\"center\"}},tooltip:{enabled:!0,animation:Z,\nbackgroundColor:\"rgba(255, 255, 255, .85)\",borderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:\"%A, %b %e, %H:%M:%S.%L\",second:\"%A, %b %e, %H:%M:%S\",minute:\"%A, %b %e, %H:%M\",hour:\"%A, %b %e, %H:%M\",day:\"%A, %b %e, %Y\",week:\"Week from %A, %b %e, %Y\",month:\"%B %Y\",year:\"%Y\"},headerFormat:'<span style=\"font-size: 10px\">{point.key}</span><br/>',pointFormat:'<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.y}</b><br/>',shadow:!0,snap:Ob?25:10,style:{color:\"#333333\",cursor:\"default\",\nfontSize:\"12px\",padding:\"8px\",whiteSpace:\"nowrap\"}},credits:{enabled:!0,text:\"Highcharts.com\",href:\"http://www.highcharts.com\",position:{align:\"right\",x:-10,verticalAlign:\"bottom\",y:-5},style:{cursor:\"pointer\",color:\"#909090\",fontSize:\"9px\"}}};var Y=M.plotOptions,X=Y.line;Lb();var ra=function(a){var b=[],c,d;(function(a){a&&a.stops?d=Na(a.stops,function(a){return ra(a[1])}):(c=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/.exec(a))?b=[C(c[1]),C(c[2]),\nC(c[3]),parseFloat(c[4],10)]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))?b=[C(c[1],16),C(c[2],16),C(c[3],16),1]:(c=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(a))&&(b=[C(c[1]),C(c[2]),C(c[3]),1])})(a);return{get:function(c){var f;d?(f=x(a),f.stops=[].concat(f.stops),n(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c===\"rgb\"?\"rgb(\"+b[0]+\",\"+b[1]+\",\"+b[2]+\")\":c===\"a\"?b[3]:\"rgba(\"+b.join(\",\")+\")\":a;return f},brighten:function(a){if(d)n(d,\nfunction(b){b.brighten(a)});else if(sa(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=C(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};wa.prototype={init:function(a,b){this.element=b===\"span\"?U(b):y.createElementNS(za,b);this.renderer=a;this.attrSetters={}},opacity:1,animate:function(a,b,c){b=o(b,Fa,!0);Wa(this);if(b){b=x(b);if(c)b.complete=c;Bb(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName.toLowerCase(),\ni=this.renderer,j,k=this.attrSetters,l=this.shadows,m,p,q=this;ea(a)&&u(b)&&(c=a,a={},a[c]=b);if(ea(a))c=a,h===\"circle\"?c={x:\"cx\",y:\"cy\"}[c]||c:c===\"strokeWidth\"&&(c=\"stroke-width\"),q=v(g,c)||this[c]||0,c!==\"d\"&&c!==\"visibility\"&&c!==\"fill\"&&(q=parseFloat(q));else{for(c in a)if(j=!1,d=a[c],e=k[c]&&k[c].call(this,d,c),e!==!1){e!==w&&(d=e);if(c===\"d\")d&&d.join&&(d=d.join(\" \")),/(NaN| {2}|^$)/.test(d)&&(d=\"M 0 0\");else if(c===\"x\"&&h===\"text\")for(e=0;e<g.childNodes.length;e++)f=g.childNodes[e],v(f,\"x\")===\nv(g,\"x\")&&v(f,\"x\",d);else if(this.rotation&&(c===\"x\"||c===\"y\"))p=!0;else if(c===\"fill\")d=i.color(d,g,c);else if(h===\"circle\"&&(c===\"x\"||c===\"y\"))c={x:\"cx\",y:\"cy\"}[c]||c;else if(h===\"rect\"&&c===\"r\")v(g,{rx:d,ry:d}),j=!0;else if(c===\"translateX\"||c===\"translateY\"||c===\"rotation\"||c===\"verticalAlign\"||c===\"scaleX\"||c===\"scaleY\")j=p=!0;else if(c===\"stroke\")d=i.color(d,g,c);else if(c===\"dashstyle\")if(c=\"stroke-dasharray\",d=d&&d.toLowerCase(),d===\"solid\")d=S;else{if(d){d=d.replace(\"shortdashdotdot\",\"3,1,1,1,1,1,\").replace(\"shortdashdot\",\n\"3,1,1,1\").replace(\"shortdot\",\"1,1,\").replace(\"shortdash\",\"3,1,\").replace(\"longdash\",\"8,3,\").replace(/dot/g,\"1,3,\").replace(\"dash\",\"4,3,\").replace(/,$/,\"\").split(\",\");for(e=d.length;e--;)d[e]=C(d[e])*o(a[\"stroke-width\"],this[\"stroke-width\"]);d=d.join(\",\")}}else if(c===\"width\")d=C(d);else if(c===\"align\")c=\"text-anchor\",d={left:\"start\",center:\"middle\",right:\"end\"}[d];else if(c===\"title\")e=g.getElementsByTagName(\"title\")[0],e||(e=y.createElementNS(za,\"title\"),g.appendChild(e)),e.textContent=d;c===\"strokeWidth\"&&\n(c=\"stroke-width\");if(c===\"stroke-width\"||c===\"stroke\"){this[c]=d;if(this.stroke&&this[\"stroke-width\"])v(g,\"stroke\",this.stroke),v(g,\"stroke-width\",this[\"stroke-width\"]),this.hasStroke=!0;else if(c===\"stroke-width\"&&d===0&&this.hasStroke)g.removeAttribute(\"stroke\"),this.hasStroke=!1;j=!0}this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&&(m||(this.symbolAttr(a),m=!0),j=!0);if(l&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c))for(e=l.length;e--;)v(l[e],\nc,c===\"height\"?s(d-(l[e].cutHeight||0),0):d);if((c===\"width\"||c===\"height\")&&h===\"rect\"&&d<0)d=0;this[c]=d;c===\"text\"?(d!==this.textStr&&delete this.bBox,this.textStr=d,this.added&&i.buildText(this)):j||v(g,c,d)}p&&this.updateTransform()}return q},addClass:function(a){var b=this.element,c=v(b,\"class\")||\"\";c.indexOf(a)===-1&&v(b,\"class\",c+\" \"+a);return this},symbolAttr:function(a){var b=this;n(\"x,y,r,start,end,width,height,innerR,anchorX,anchorY\".split(\",\"),function(c){b[c]=o(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,\nb.y,b.width,b.height,b)})},clip:function(a){return this.attr(\"clip-path\",a?\"url(\"+this.renderer.url+\"#\"+a.id+\")\":S)},crisp:function(a,b,c,d,e){var f,g={},h={},i,a=a||this.strokeWidth||this.attr&&this.attr(\"stroke-width\")||0;i=t(a)%2/2;h.x=P(b||this.x||0)+i;h.y=P(c||this.y||0)+i;h.width=P((d||this.width||0)-2*i);h.height=P((e||this.height||0)-2*i);h.strokeWidth=a;for(f in h)this[f]!==h[f]&&(this[f]=g[f]=h[f]);return g},css:function(a){var b=this.element,c=a&&a.width&&b.nodeName.toLowerCase()===\"text\",\nd,e=\"\",f=function(a,b){return\"-\"+b.toLowerCase()};if(a&&a.color)a.fill=a.color;this.styles=a=r(this.styles,a);$&&c&&delete a.width;if(ta&&!Z)c&&delete a.width,K(this.element,a);else{for(d in a)e+=d.replace(/([A-Z])/g,f)+\":\"+a[d]+\";\";v(b,\"style\",e)}c&&this.added&&this.renderer.buildText(this);return this},on:function(a,b){var c=this,d=c.element;ib&&a===\"click\"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(oa.indexOf(\"Android\")===-1||\nDate.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d[\"on\"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},htmlCss:function(a){var b=this.element;if(b=a&&b.tagName===\"SPAN\"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=r(this.styles,a);K(this.element,a);return this},htmlGetBBox:function(){var a=\nthis.element,b=this.bBox;if(!b){if(a.nodeName===\"text\")a.style.position=\"absolute\";b=this.bBox={x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}return b},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||\"left\",h={left:0,center:0.5,right:1}[g],i=g&&g!==\"left\",j=this.shadows;K(b,{marginLeft:c,marginTop:d});j&&n(j,function(a){K(a,{marginLeft:c+1,marginTop:d+1})});\nthis.inverted&&n(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName===\"SPAN\"){var k,l,j=this.rotation,m;k=0;var p=1,q=0,ba;m=C(this.textWidth);var A=this.xCorr||0,L=this.yCorr||0,Sb=[j,g,b.innerHTML,this.textWidth].join(\",\");if(Sb!==this.cTT){u(j)&&(k=j*Ua,p=V(k),q=ca(k),this.setSpanRotation(j,q,p));k=o(this.elemWidth,b.offsetWidth);l=o(this.elemHeight,b.offsetHeight);if(k>m&&/[ \\-]/.test(b.textContent||b.innerText))K(b,{width:m+\"px\",display:\"block\",whiteSpace:\"normal\"}),k=m;m=a.fontMetrics(b.style.fontSize).b;\nA=p<0&&-k;L=q<0&&-l;ba=p*q<0;A+=q*m*(ba?1-h:h);L-=p*m*(j?ba?h:1-h:1);i&&(A-=k*h*(p<0?-1:1),j&&(L-=l*h*(q<0?-1:1)),K(b,{textAlign:g}));this.xCorr=A;this.yCorr=L}K(b,{left:e+A+\"px\",top:f+L+\"px\"});if(gb)l=b.offsetHeight;this.cTT=Sb}}else this.alignOnAdd=!0},setSpanRotation:function(a){var b={};b[ta?\"-ms-transform\":gb?\"-webkit-transform\":hb?\"MozTransform\":Nb?\"-o-transform\":\"\"]=b.transform=\"rotate(\"+a+\"deg)\";K(this.element,b)},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=\nthis.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation;e&&(a+=this.attr(\"width\"),b+=this.attr(\"height\"));a=[\"translate(\"+a+\",\"+b+\")\"];e?a.push(\"rotate(90) scale(-1,1)\"):f&&a.push(\"rotate(\"+f+\" \"+(this.x||0)+\" \"+(this.y||0)+\")\");(u(c)||u(d))&&a.push(\"scale(\"+o(c,1)+\" \"+o(d,1)+\")\");a.length&&v(this.element,\"transform\",a.join(\" \"))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=\na,this.alignByTranslate=b,!c||ea(c))this.alignTo=d=c||\"renderer\",ga(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=o(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||0);g=(c.y||0)+(a.y||0);if(d===\"right\"||d===\"center\")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?\"translateX\":\"x\"]=t(f);if(e===\"bottom\"||e===\"middle\")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?\"translateY\":\"y\"]=t(g);this[this.placed?\"animate\":\"attr\"](h);this.placed=\n!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d=this.rotation;c=this.element;var e=this.styles,f=d*Ua;if(!a){if(c.namespaceURI===za||b.forExport){try{a=c.getBBox?r({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(g){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){b=a.width;c=a.height;if(ta&&e&&e.fontSize===\"11px\"&&c.toPrecision(3)===\"22.7\")a.height=c=14;if(d)a.width=N(c*ca(f))+N(b*V(f)),a.height=N(c*V(f))+N(b*ca(f))}this.bBox=\na}return a},show:function(){return this.attr({visibility:\"visible\"})},hide:function(){return this.attr({visibility:\"hidden\"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=v(f,\"zIndex\"),h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=C(g);if(c.handleZ)for(c=0;c<e.length;c++)if(a=\ne[c],b=v(a,\"zIndex\"),a!==f&&(C(b)>g||!u(g)&&u(b))){d.insertBefore(f,a);h=!0;break}h||d.appendChild(f);this.added=!0;z(this,\"add\");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName===\"SPAN\"&&b.parentNode,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;Wa(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();\na.stops=null}a.safeRemoveChild(b);for(c&&n(c,function(b){a.safeRemoveChild(b)});d&&d.childNodes.length===0;)b=d.parentNode,a.safeRemoveChild(d),d=b;a.alignTo&&ga(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,j,k;if(a){i=o(a.width,3);j=(a.opacity||0.15)/i;k=this.parentInverted?\"(-1,-1)\":\"(\"+o(a.offsetX,1)+\", \"+o(a.offsetY,1)+\")\";for(e=1;e<=i;e++){f=g.cloneNode(0);h=i*2+1-2*e;v(f,{isShadow:\"true\",stroke:a.color||\"black\",\"stroke-opacity\":j*\ne,\"stroke-width\":h,transform:\"translate\"+k,fill:S});if(c)v(f,\"height\",s(v(f,\"height\")-h,0)),f.cutHeight=h;b?b.element.appendChild(f):g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this}};var Ha=function(){this.init.apply(this,arguments)};Ha.prototype={Element:wa,init:function(a,b,c,d){var e=location,f,g;f=this.createElement(\"svg\").attr({version:\"1.1\"});g=f.element;a.appendChild(g);a.innerHTML.indexOf(\"xmlns\")===-1&&v(g,\"xmlns\",za);this.isSVG=!0;this.box=g;this.boxWrapper=f;this.alignedObjects=\n[];this.url=(hb||gb)&&y.getElementsByTagName(\"base\").length?e.href.replace(/#.*?$/,\"\").replace(/([\\('\\)])/g,\"\\\\$1\").replace(/ /g,\"%20\"):\"\";this.createElement(\"desc\").add().element.appendChild(y.createTextNode(\"Created with Highcharts 3.0.6\"));this.defs=this.createElement(\"defs\").add();this.forExport=d;this.gradients={};this.setSize(b,c,!1);var h;if(hb&&a.getBoundingClientRect)this.subPixelFix=b=function(){K(a,{left:0,top:0});h=a.getBoundingClientRect();K(a,{left:xa(h.left)-h.left+\"px\",top:xa(h.top)-\nh.top+\"px\"})},b(),J(O,\"resize\",b)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Ka(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&aa(O,\"resize\",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element;b.init(this,a);return b},draw:function(){},buildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=o(a.textStr,\n\"\").toString().replace(/<(b|strong)>/g,'<span style=\"font-weight:bold\">').replace(/<(i|em)>/g,'<span style=\"font-style:italic\">').replace(/<a/g,\"<span\").replace(/<\\/(b|strong|i|em|a)>/g,\"</span>\").split(/<br.*?>/g),f=b.childNodes,g=/style=\"([^\"]+)\"/,h=/href=\"(http[^\"]+)\"/,i=v(b,\"x\"),j=a.styles,k=j&&j.width&&C(j.width),l=j&&j.lineHeight,m=f.length;m--;)b.removeChild(f[m]);k&&!a.added&&this.box.appendChild(b);e[e.length-1]===\"\"&&e.pop();n(e,function(e,f){var m,o=0,e=e.replace(/<span/g,\"|||<span\").replace(/<\\/span>/g,\n\"</span>|||\");m=e.split(\"|||\");n(m,function(e){if(e!==\"\"||m.length===1){var p={},n=y.createElementNS(za,\"tspan\"),s;g.test(e)&&(s=e.match(g)[1].replace(/(;| |^)color([ :])/,\"$1fill$2\"),v(n,\"style\",s));h.test(e)&&!d&&(v(n,\"onclick\",'location.href=\"'+e.match(h)[1]+'\"'),K(n,{cursor:\"pointer\"}));e=(e.replace(/<(.|\\n)*?>/g,\"\")||\" \").replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\");if(e!==\" \"&&(n.appendChild(y.createTextNode(e)),o?p.dx=0:p.x=i,v(n,p),!o&&f&&(!Z&&d&&K(n,{display:\"block\"}),v(n,\"dy\",l||c.fontMetrics(/px$/.test(n.style.fontSize)?\nn.style.fontSize:j.fontSize).h,gb&&n.offsetHeight)),b.appendChild(n),o++,k))for(var e=e.replace(/([^\\^])-/g,\"$1- \").split(\" \"),u,t,p=a._clipHeight,E=[],w=C(l||16),B=1;e.length||E.length;)delete a.bBox,u=a.getBBox(),t=u.width,u=t>k,!u||e.length===1?(e=E,E=[],e.length&&(B++,p&&B*w>p?(e=[\"...\"],a.attr(\"title\",a.textStr)):(n=y.createElementNS(za,\"tspan\"),v(n,{dy:w,x:i}),s&&v(n,\"style\",s),b.appendChild(n),t>k&&(k=t)))):(n.removeChild(n.firstChild),E.unshift(e.pop())),e.length&&n.appendChild(y.createTextNode(e.join(\" \").replace(/- /g,\n\"-\")))}})})},button:function(a,b,c,d,e,f,g,h){var i=this.label(a,b,c,null,null,null,null,null,\"button\"),j=0,k,l,m,p,q,n,a={x1:0,y1:0,x2:0,y2:1},e=x({\"stroke-width\":1,stroke:\"#CCCCCC\",fill:{linearGradient:a,stops:[[0,\"#FEFEFE\"],[1,\"#F6F6F6\"]]},r:2,padding:5,style:{color:\"black\"}},e);m=e.style;delete e.style;f=x(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#FFF\"],[1,\"#ACF\"]]}},f);p=f.style;delete f.style;g=x(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#9BD\"],[1,\"#CDF\"]]}},g);q=g.style;\ndelete g.style;h=x(e,{style:{color:\"#CCC\"}},h);n=h.style;delete h.style;J(i.element,ta?\"mouseover\":\"mouseenter\",function(){j!==3&&i.attr(f).css(p)});J(i.element,ta?\"mouseout\":\"mouseleave\",function(){j!==3&&(k=[e,f,g][j],l=[m,p,q][j],i.attr(k).css(l))});i.setState=function(a){(i.state=j=a)?a===2?i.attr(g).css(q):a===3&&i.attr(h).css(n):i.attr(e).css(m)};return i.on(\"click\",function(){j!==3&&d.call(i)}).attr(e).css(r({cursor:\"default\"},m))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=t(a[1])-b%\n2/2);a[2]===a[5]&&(a[2]=a[5]=t(a[2])+b%2/2);return a},path:function(a){var b={fill:S};Ia(a)?b.d=a:T(a)&&r(b,a);return this.createElement(\"path\").attr(b)},circle:function(a,b,c){a=T(a)?a:{x:a,y:b,r:c};return this.createElement(\"circle\").attr(a)},arc:function(a,b,c,d,e,f){if(T(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol(\"arc\",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){e=T(a)?a.r:e;e=this.createElement(\"rect\").attr({rx:e,ry:e,\nfill:S});return e.attr(T(a)?a:e.crisp(f,a,b,s(c,0),s(d,0)))},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[o(c,!0)?\"animate\":\"attr\"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement(\"g\");return u(a)?b.attr({\"class\":\"highcharts-\"+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:S};arguments.length>1&&r(f,{x:b,y:c,width:d,height:e});f=this.createElement(\"image\").attr(f);f.element.setAttributeNS?f.element.setAttributeNS(\"http://www.w3.org/1999/xlink\",\n\"href\",a):f.element.setAttribute(\"hc-svg-href\",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(t(b),t(c),d,e,f),i=/^url\\((.*?)\\)$/,j,k;if(h)g=this.path(h),r(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&r(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),a.alignByTranslate||a.translate(t((d-b[0])/2),t((e-b[1])/2)))},j=a.match(i)[1],a=Pb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),U(\"img\",{onload:function(){k(g,\nPb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return[\"M\",a+c/2,b,\"C\",a+c+e,b,a+c+e,b+d,a+c/2,b+d,\"C\",a-e,b+d,a-e,b,a+c/2,b,\"Z\"]},square:function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c,b+d,a,b+d,\"Z\"]},triangle:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",a+c,b+d,a,b+d,\"Z\"]},\"triangle-down\":function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c/2,b+d,\"Z\"]},diamond:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",a+c,b+d/2,a+c/2,b+d,a,b+d/2,\"Z\"]},arc:function(a,b,c,d,\ne){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=V(f),j=ca(f),k=V(g),g=ca(g),e=e.end-f<ya?0:1;return[\"M\",a+c*i,b+c*j,\"A\",c,c,0,e,1,a+c*k,b+c*g,h?\"M\":\"L\",a+d*k,b+d*g,\"A\",d,d,0,e,0,a+d*i,b+d*j,h?\"\":\"Z\"]}},clipRect:function(a,b,c,d){var e=\"highcharts-\"+zb++,f=this.createElement(\"clipPath\").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},color:function(a,b,c){var d=this,e,f=/^rgba/,g,h,i,j,k,l,m,p=[];a&&a.linearGradient?g=\"linearGradient\":a&&a.radialGradient&&\n(g=\"radialGradient\");if(g){c=a[g];h=d.gradients;j=a.stops;b=b.radialReference;Ia(c)&&(a[g]=c={x1:c[0],y1:c[1],x2:c[2],y2:c[3],gradientUnits:\"userSpaceOnUse\"});g===\"radialGradient\"&&b&&!u(c.gradientUnits)&&(c=x(c,{cx:b[0]-b[2]/2+c.cx*b[2],cy:b[1]-b[2]/2+c.cy*b[2],r:c.r*b[2],gradientUnits:\"userSpaceOnUse\"}));for(m in c)m!==\"id\"&&p.push(m,c[m]);for(m in j)p.push(j[m]);p=p.join(\",\");h[p]?a=h[p].id:(c.id=a=\"highcharts-\"+zb++,h[p]=i=d.createElement(g).attr(c).add(d.defs),i.stops=[],n(j,function(a){f.test(a[1])?\n(e=ra(a[1]),k=e.get(\"rgb\"),l=e.get(\"a\")):(k=a[1],l=1);a=d.createElement(\"stop\").attr({offset:a[0],\"stop-color\":k,\"stop-opacity\":l}).add(i);i.stops.push(a)}));return\"url(\"+d.url+\"#\"+a+\")\"}else return f.test(a)?(e=ra(a),v(b,c+\"-opacity\",e.get(\"a\")),e.get(\"rgb\")):(b.removeAttribute(c+\"-opacity\"),a)},text:function(a,b,c,d){var e=M.chart.style,f=$||!Z&&this.forExport;if(d&&!this.forExport)return this.html(a,b,c);b=t(o(b,0));c=t(o(c,0));a=this.createElement(\"text\").attr({x:b,y:c,text:a}).css({fontFamily:e.fontFamily,\nfontSize:e.fontSize});f&&a.css({position:\"absolute\"});a.x=b;a.y=c;return a},html:function(a,b,c){var d=M.chart.style,e=this.createElement(\"span\"),f=e.attrSetters,g=e.element,h=e.renderer;f.text=function(a){a!==g.innerHTML&&delete this.bBox;g.innerHTML=a;return!1};f.x=f.y=f.align=function(a,b){b===\"align\"&&(b=\"textAlign\");e[b]=a;e.htmlUpdateTransform();return!1};e.attr({text:a,x:t(b),y:t(c)}).css({position:\"absolute\",whiteSpace:\"nowrap\",fontFamily:d.fontFamily,fontSize:d.fontSize});e.css=e.htmlCss;\nif(h.isSVG)e.add=function(a){var b,c=h.box.parentNode,d=[];if(a){if(b=a.div,!b){for(;a;)d.push(a),a=a.parentGroup;n(d.reverse(),function(a){var d;b=a.div=a.div||U(Ea,{className:v(a.element,\"class\")},{position:\"absolute\",left:(a.translateX||0)+\"px\",top:(a.translateY||0)+\"px\"},b||c);d=b.style;r(a.attrSetters,{translateX:function(a){d.left=a+\"px\"},translateY:function(a){d.top=a+\"px\"},visibility:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(g);e.added=!0;e.alignOnAdd&&e.htmlUpdateTransform();return e};\nreturn e},fontMetrics:function(a){var a=C(a||11),a=a<24?a+4:t(a*1.2),b=t(a*0.8);return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h,i){function j(){var a,b;a=o.element.style;L=(Oa===void 0||la===void 0||q.styles.textAlign)&&o.getBBox();q.width=(Oa||L.width||0)+2*da+kb;q.height=(la||L.height||0)+2*da;v=da+p.fontMetrics(a&&a.fontSize).b;if(C){if(!A)a=t(-s*da),b=h?-v:0,q.box=A=d?p.symbol(d,a,b,q.width,q.height):p.rect(a,b,q.width,q.height,0,lb[Rb]),A.add(q);A.isImg||A.attr(x({width:q.width,height:q.height},\nlb));lb=null}}function k(){var a=q.styles,a=a&&a.textAlign,b=kb+da*(1-s),c;c=h?0:v;if(u(Oa)&&(a===\"center\"||a===\"right\"))b+={center:0.5,right:1}[a]*(Oa-L.width);(b!==o.x||c!==o.y)&&o.attr({x:b,y:c});o.x=b;o.y=c}function l(a,b){A?A.attr(a,b):lb[a]=b}function m(){o.add(q);q.attr({text:a,x:b,y:c});A&&u(e)&&q.attr({anchorX:e,anchorY:f})}var p=this,q=p.g(i),o=p.text(\"\",0,0,g).attr({zIndex:1}),A,L,s=0,da=3,kb=0,Oa,la,E,H,B=0,lb={},v,g=q.attrSetters,C;J(q,\"add\",m);g.width=function(a){Oa=a;return!1};g.height=\nfunction(a){la=a;return!1};g.padding=function(a){u(a)&&a!==da&&(da=a,k());return!1};g.paddingLeft=function(a){u(a)&&a!==kb&&(kb=a,k());return!1};g.align=function(a){s={left:0,center:0.5,right:1}[a];return!1};g.text=function(a,b){o.attr(b,a);j();k();return!1};g[Rb]=function(a,b){C=!0;B=a%2/2;l(b,a);return!1};g.stroke=g.fill=g.r=function(a,b){b===\"fill\"&&(C=!0);l(b,a);return!1};g.anchorX=function(a,b){e=a;l(b,a+B-E);return!1};g.anchorY=function(a,b){f=a;l(b,a-H);return!1};g.x=function(a){q.x=a;a-=s*\n((Oa||L.width)+da);E=t(a);q.attr(\"translateX\",E);return!1};g.y=function(a){H=q.y=t(a);q.attr(\"translateY\",H);return!1};var y=q.css;return r(q,{css:function(a){if(a){var b={},a=x(a);n(\"fontSize,fontWeight,fontFamily,color,lineHeight,width,textDecoration,textShadow\".split(\",\"),function(c){a[c]!==w&&(b[c]=a[c],delete a[c])});o.css(b)}return y.call(q,a)},getBBox:function(){return{width:L.width+2*da,height:L.height+2*da,x:L.x-da,y:L.y-da}},shadow:function(a){A&&A.shadow(a);return q},destroy:function(){aa(q,\n\"add\",m);aa(q.element,\"mouseenter\");aa(q.element,\"mouseleave\");o&&(o=o.destroy());A&&(A=A.destroy());wa.prototype.destroy.call(q);q=p=j=k=l=m=null}})}};Va=Ha;var F;if(!Z&&!$){Highcharts.VMLElement=F={init:function(a,b){var c=[\"<\",b,' filled=\"f\" stroked=\"f\"'],d=[\"position: \",\"absolute\",\";\"],e=b===Ea;(b===\"shape\"||e)&&d.push(\"left:0;top:0;width:1px;height:1px;\");d.push(\"visibility: \",e?\"hidden\":\"visible\");c.push(' style=\"',d.join(\"\"),'\"/>');if(b)c=e||b===\"span\"||b===\"img\"?c.join(\"\"):a.prepVML(c),this.element=\nU(c);this.renderer=a;this.attrSetters={}},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();z(this,\"add\");return this},updateTransform:wa.prototype.htmlUpdateTransform,setSpanRotation:function(a,b,c){K(this.element,{filter:a?[\"progid:DXImageTransform.Microsoft.Matrix(M11=\",c,\", M12=\",-b,\", M21=\",b,\", M22=\",c,\", sizingMethod='auto expand')\"].join(\"\"):\nS})},pathToVML:function(a){for(var b=a.length,c=[],d;b--;)if(sa(a[b]))c[b]=t(a[b]*10)-5;else if(a[b]===\"Z\")c[b]=\"x\";else if(c[b]=a[b],a.isArc&&(a[b]===\"wa\"||a[b]===\"at\"))d=a[b]===\"wa\"?1:-1,c[b+5]===c[b+7]&&(c[b+7]-=d),c[b+6]===c[b+8]&&(c[b+8]-=d);return c.join(\" \")||\"x\"},attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer,j=this.symbolName,k,l=this.shadows,m,p=this.attrSetters,q=this;ea(a)&&u(b)&&(c=a,a={},a[c]=b);if(ea(a))c=a,q=c===\"strokeWidth\"||c===\"stroke-width\"?\nthis.strokeweight:this[c];else for(c in a)if(d=a[c],m=!1,e=p[c]&&p[c].call(this,d,c),e!==!1&&d!==null){e!==w&&(d=e);if(j&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))k||(this.symbolAttr(a),k=!0),m=!0;else if(c===\"d\"){d=d||[];this.d=d.join(\" \");f.path=d=this.pathToVML(d);if(l)for(e=l.length;e--;)l[e].path=l[e].cutOff?this.cutOffPath(d,l[e].cutOff):d;m=!0}else if(c===\"visibility\"){if(l)for(e=l.length;e--;)l[e].style[c]=d;h===\"DIV\"&&(d=d===\"hidden\"?\"-999em\":0,fb||(g[c]=d?\"visible\":\n\"hidden\"),c=\"top\");g[c]=d;m=!0}else if(c===\"zIndex\")d&&(g[c]=d),m=!0;else if(qa(c,[\"x\",\"y\",\"width\",\"height\"])!==-1)this[c]=d,c===\"x\"||c===\"y\"?c={x:\"left\",y:\"top\"}[c]:d=s(0,d),this.updateClipping?(this[c]=d,this.updateClipping()):g[c]=d,m=!0;else if(c===\"class\"&&h===\"DIV\")f.className=d;else if(c===\"stroke\")d=i.color(d,f,c),c=\"strokecolor\";else if(c===\"stroke-width\"||c===\"strokeWidth\")f.stroked=d?!0:!1,c=\"strokeweight\",this[c]=d,sa(d)&&(d+=\"px\");else if(c===\"dashstyle\")(f.getElementsByTagName(\"stroke\")[0]||\nU(i.prepVML([\"<stroke/>\"]),null,null,f))[c]=d||\"solid\",this.dashstyle=d,m=!0;else if(c===\"fill\")if(h===\"SPAN\")g.color=d;else{if(h!==\"IMG\")f.filled=d!==S?!0:!1,d=i.color(d,f,c,this),c=\"fillcolor\"}else if(c===\"opacity\")m=!0;else if(h===\"shape\"&&c===\"rotation\")this[c]=f.style[c]=d,f.style.left=-t(ca(d*Ua)+1)+\"px\",f.style.top=t(V(d*Ua))+\"px\";else if(c===\"translateX\"||c===\"translateY\"||c===\"rotation\")this[c]=d,this.updateTransform(),m=!0;else if(c===\"text\")this.bBox=null,f.innerHTML=d,m=!0;m||(fb?f[c]=\nd:v(f,c,d))}return q},clip:function(a){var b=this,c;a?(c=a.members,ga(c,b),c.push(b),b.destroyClip=function(){ga(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:fb?\"inherit\":\"rect(auto)\"});return b.css(a)},css:wa.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Ta(a)},destroy:function(){this.destroyClip&&this.destroyClip();return wa.prototype.destroy.apply(this)},on:function(a,b){this.element[\"on\"+a]=function(){var a=O.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,\nb){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=C(a[c-2])-10*b;return a.join(\" \")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,l,m,p,q;k&&typeof k.value!==\"string\"&&(k=\"x\");m=k;if(a){p=o(a.width,3);q=(a.opacity||0.15)/p;for(e=1;e<=3;e++){l=p*2+1-2*e;c&&(m=this.cutOffPath(k.value,l+0.5));j=['<shape isShadow=\"true\" strokeweight=\"',l,'\" filled=\"false\" path=\"',m,'\" coordsize=\"10 10\" style=\"',f.style.cssText,'\" />'];h=U(g.prepVML(j),null,\n{left:C(i.left)+o(a.offsetX,1),top:C(i.top)+o(a.offsetY,1)});if(c)h.cutOff=l+1;j=['<stroke color=\"',a.color||\"black\",'\" opacity=\"',q*e,'\"/>'];U(g.prepVML(j),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this}};F=ha(wa,F);var ma={Element:F,isIE8:oa.indexOf(\"MSIE 8.0\")>-1,init:function(a,b,c){var d,e;this.alignedObjects=[];d=this.createElement(Ea);e=d.element;e.style.position=\"relative\";a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=\nd;this.setSize(b,c,!1);y.namespaces.hcv||(y.namespaces.add(\"hcv\",\"urn:schemas-microsoft-com:vml\"),(y.styleSheets.length?y.styleSheets[0]:y.createStyleSheet()).cssText+=\"hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke{ behavior:url(#default#VML); display: inline-block; } \")},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=T(a);return r(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=\na.element,c=b.nodeName,a=a.inverted,d=this.top-(c===\"shape\"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:\"rect(\"+t(a?e:d)+\"px,\"+t(a?f:b)+\"px,\"+t(a?b:f)+\"px,\"+t(a?d:e)+\"px)\"};!a&&fb&&c===\"DIV\"&&r(d,{width:b+\"px\",height:f+\"px\"});return d},updateClipping:function(){n(e.members,function(a){a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=S;a&&a.linearGradient?i=\"gradient\":a&&a.radialGradient&&(i=\"pattern\");if(i){var k,l,m=a.linearGradient||a.radialGradient,\np,q,o,A,L,s=\"\",a=a.stops,u,t=[],w=function(){h=['<fill colors=\"'+t.join(\",\")+'\" opacity=\"',o,'\" o:opacity2=\"',q,'\" type=\"',i,'\" ',s,'focus=\"100%\" method=\"any\" />'];U(e.prepVML(h),null,null,b)};p=a[0];u=a[a.length-1];p[0]>0&&a.unshift([0,p[1]]);u[0]<1&&a.push([1,u[1]]);n(a,function(a,b){g.test(a[1])?(f=ra(a[1]),k=f.get(\"rgb\"),l=f.get(\"a\")):(k=a[1],l=1);t.push(a[0]*100+\"% \"+k);b?(o=l,A=k):(q=l,L=k)});if(c===\"fill\")if(i===\"gradient\")c=m.x1||m[0]||0,a=m.y1||m[1]||0,p=m.x2||m[2]||0,m=m.y2||m[3]||0,s='angle=\"'+\n(90-R.atan((m-a)/(p-c))*180/ya)+'\"',w();else{var j=m.r,r=j*2,E=j*2,H=m.cx,B=m.cy,x=b.radialReference,v,j=function(){x&&(v=d.getBBox(),H+=(x[0]-v.x)/v.width-0.5,B+=(x[1]-v.y)/v.height-0.5,r*=x[2]/v.width,E*=x[2]/v.height);s='src=\"'+M.global.VMLRadialGradientURL+'\" size=\"'+r+\",\"+E+'\" origin=\"0.5,0.5\" position=\"'+H+\",\"+B+'\" color2=\"'+L+'\" ';w()};d.added?j():J(d,\"add\",j);j=A}else j=k}else if(g.test(a)&&b.tagName!==\"IMG\")f=ra(a),h=[\"<\",c,' opacity=\"',f.get(\"a\"),'\"/>'],U(this.prepVML(h),null,null,b),j=\nf.get(\"rgb\");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type=\"solid\";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join(\"\");b?(a=a.replace(\"/>\",' xmlns=\"urn:schemas-microsoft-com:vml\" />'),a=a.indexOf('style=\"')===-1?a.replace(\"/>\",' style=\"display:inline-block;behavior:url(#default#VML);\" />'):a.replace('style=\"','style=\"display:inline-block;behavior:url(#default#VML);')):a=a.replace(\"<\",\"<hcv:\");return a},text:Ha.prototype.html,path:function(a){var b={coordsize:\"10 10\"};\nIa(a)?b.d=a:T(a)&&r(b,a);return this.createElement(\"shape\").attr(b)},circle:function(a,b,c){var d=this.symbol(\"circle\");if(T(a))c=a.r,b=a.y,a=a.x;d.isCircle=!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:\"highcharts-\"+a,\"class\":\"highcharts-\"+a});return this.createElement(Ea).attr(b)},image:function(a,b,c,d,e){var f=this.createElement(\"img\").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},rect:function(a,b,c,d,e,f){var g=this.symbol(\"rect\");g.r=\nT(a)?a.r:e;return g.attr(T(a)?a:g.crisp(f,a,b,s(c,0),s(d,0)))},invertChild:function(a,b){var c=b.style;K(a,{flip:\"x\",left:C(c.width)-1,top:C(c.height)-1,rotation:-90})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=V(f),i=ca(f),j=V(g),k=ca(g);if(g-f===0)return[\"x\"];f=[\"wa\",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push(\"e\",\"M\",a,b);f.push(\"at\",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,\"x\",\"e\");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);\ne&&e.isCircle&&(a-=c/2,b-=d/2);return[\"wa\",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,\"e\"]},rect:function(a,b,c,d,e){var f=a+c,g=b+d,h;!u(e)||!e.r?f=Ha.prototype.symbols.square.apply(0,arguments):(h=I(e.r,c,d),f=[\"M\",a+h,b,\"L\",f-h,b,\"wa\",f-2*h,b,f,b+2*h,f-h,b,f,b+h,\"L\",f,g-h,\"wa\",f-2*h,g-2*h,f,g,f,g-h,f-h,g,\"L\",a+h,g,\"wa\",a,g-2*h,a+2*h,g,a+h,g,a,g-h,\"L\",a,b+h,\"wa\",a,b,a+2*h,b+2*h,a,b+h,a+h,b,\"x\",\"e\"]);return f}}};Highcharts.VMLRenderer=F=function(){this.init.apply(this,arguments)};F.prototype=x(Ha.prototype,\nma);Va=F}var Tb;if($)Highcharts.CanVGRenderer=F=function(){za=\"http://www.w3.org/1999/xhtml\"},F.prototype.symbols={},Tb=function(){function a(){var a=b.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Vb(d,a);b.push(c)}}}(),Va=F;Ma.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.horiz,e=a.categories,f=a.series[0]&&a.series[0].names,g=this.pos,h=b.labels,i=a.tickPositions,d=d&&e&&!h.step&&!h.staggerLines&&!h.rotation&&c.plotWidth/i.length||\n!d&&(c.margin[3]||c.chartWidth*0.33),j=g===i[0],k=g===i[i.length-1],l,f=e?o(e[g],f&&f[g],g):g,e=this.label,m=i.info;a.isDatetimeAxis&&m&&(l=b.dateTimeLabelFormats[m.higherRanks[g]||m.unitName]);this.isFirst=j;this.isLast=k;b=a.labelFormatter.call({axis:a,chart:c,isFirst:j,isLast:k,dateTimeLabelFormat:l,value:a.isLog?ia(fa(f)):f});g=d&&{width:s(1,t(d-2*(h.padding||10)))+\"px\"};g=r(g,h.style);if(u(e))e&&e.attr({text:b}).css(g);else{l={align:a.labelAlign};if(sa(h.rotation))l.rotation=h.rotation;if(d&&\nh.ellipsis)l._clipHeight=a.len/i.length;this.label=u(b)&&h.enabled?c.renderer.text(b,0,0,h.useHTML).attr(l).css(g).add(a.labelGroup):null}},getLabelSize:function(){var a=this.label,b=this.axis;return a?(this.labelBBox=a.getBBox())[b.horiz?\"height\":\"width\"]:0},getLabelSides:function(){var a=this.axis,b=this.labelBBox.width,a=b*{left:0,center:0.5,right:1}[a.labelAlign]-a.options.labels.x;return[-a,b-a]},handleOverflow:function(a,b){var c=!0,d=this.axis,e=d.chart,f=this.isFirst,g=this.isLast,h=b.x,i=\nd.reversed,j=d.tickPositions;if(f||g){var k=this.getLabelSides(),l=k[0],k=k[1],e=e.plotLeft,m=e+d.len,j=(d=d.ticks[j[a+(f?1:-1)]])&&d.label.xy&&d.label.xy.x+d.getLabelSides()[f?0:1];f&&!i||g&&i?h+l<e&&(h=e-l,d&&h+k>j&&(c=!1)):h+k>m&&(h=m-k,d&&h+l<j&&(c=!1));b.x=h}return c},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-e.left:0),y:a?\ng-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,j=i.transA,k=i.reversed,l=i.staggerLines,m=i.chart.renderer.fontMetrics(e.style.fontSize).b,p=e.rotation,a=a+e.x-(f&&d?f*j*(k?-1:1):0),b=b+e.y-(f&&!d?f*j*(k?1:-1):0);p&&i.side===2&&(b-=m-m*V(p*Ua));!u(e.y)&&!p&&(b+=m-c.getBBox().height/2);l&&(b+=g/(h||1)%l*(i.labelOffset/l));return{x:a,y:b}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine([\"M\",a,b,\"L\",\na+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,j=this.pos,k=e.labels,l=this.gridLine,m=h?h+\"Grid\":\"grid\",p=h?h+\"Tick\":\"tick\",q=e[m+\"LineWidth\"],n=e[m+\"LineColor\"],A=e[m+\"LineDashStyle\"],s=e[p+\"Length\"],m=e[p+\"Width\"]||0,u=e[p+\"Color\"],t=e[p+\"Position\"],p=this.mark,r=k.step,v=!0,x=d.tickmarkOffset,E=this.getPosition(g,j,x,b),H=E.x,E=E.y,B=g&&H===d.pos+d.len||!g&&E===d.pos?-1:1,C=d.staggerLines;this.isActive=!0;if(q){j=\nd.getPlotLinePath(j+x,q*B,b,!0);if(l===w){l={stroke:n,\"stroke-width\":q};if(A)l.dashstyle=A;if(!h)l.zIndex=1;if(b)l.opacity=0;this.gridLine=l=q?f.path(j).attr(l).add(d.gridGroup):null}if(!b&&l&&j)l[this.isNew?\"attr\":\"animate\"]({d:j,opacity:c})}if(m&&s)t===\"inside\"&&(s=-s),d.opposite&&(s=-s),b=this.getMarkPath(H,E,s,m*B,g,f),p?p.animate({d:b,opacity:c}):this.mark=f.path(b).attr({stroke:u,\"stroke-width\":m,opacity:c}).add(d.axisGroup);if(i&&!isNaN(H))i.xy=E=this.getLabelPosition(H,E,i,g,k,x,a,r),this.isFirst&&\n!this.isLast&&!o(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!o(e.showLastLabel,1)?v=!1:!C&&g&&k.overflow===\"justify\"&&!this.handleOverflow(a,E)&&(v=!1),r&&a%r&&(v=!1),v&&!isNaN(E.y)?(E.opacity=c,i[this.isNew?\"attr\":\"animate\"](E),this.isNew=!1):i.attr(\"y\",-9999)},destroy:function(){Ka(this,this.axis)}};vb.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=(b.pointRange||0)/2,e=a.options,f=e.label,g=a.label,h=e.width,i=e.to,j=e.from,k=u(j)&&u(i),l=e.value,m=e.dashStyle,p=a.svgElem,q=\n[],n,A=e.color,L=e.zIndex,t=e.events,w=b.chart.renderer;b.isLog&&(j=na(j),i=na(i),l=na(l));if(h){if(q=b.getPlotLinePath(l,h),d={stroke:A,\"stroke-width\":h},m)d.dashstyle=m}else if(k){if(j=s(j,b.min-d),i=I(i,b.max+d),q=b.getPlotBandPath(j,i,e),d={fill:A},e.borderWidth)d.stroke=e.borderColor,d[\"stroke-width\"]=e.borderWidth}else return;if(u(L))d.zIndex=L;if(p)q?p.animate({d:q},null,p.onGetPath):(p.hide(),p.onGetPath=function(){p.show()});else if(q&&q.length&&(a.svgElem=p=w.path(q).attr(d).add(),t))for(n in e=\nfunction(b){p.on(b,function(c){t[b].apply(a,[c])})},t)e(n);if(f&&u(f.text)&&q&&q.length&&b.width>0&&b.height>0){f=x({align:c&&k&&\"center\",x:c?!k&&4:10,verticalAlign:!c&&k&&\"middle\",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g)a.label=g=w.text(f.text,0,0,f.useHTML).attr({align:f.textAlign||f.align,rotation:f.rotation,zIndex:L}).css(f.style).add();b=[q[1],q[4],o(q[6],q[1])];q=[q[2],q[5],o(q[7],q[2])];c=Ja(b);k=Ja(q);g.align(f,!1,{x:c,y:k,width:va(b)-c,height:va(q)-k});g.show()}else g&&g.hide();return a},\ndestroy:function(){ga(this.axis.plotLinesAndBands,this);delete this.axis;Ka(this)}};Mb.prototype={destroy:function(){Ka(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?Ca(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:\"hidden\"}):this.label=this.axis.chart.renderer.text(c,0,0,b.useHTML).css(b.style).attr({align:this.textAlign,rotation:b.rotation,visibility:\"hidden\"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,\ng=c.translate(this.percent?100:this.total,0,0,0,1),c=c.translate(0),c=N(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e.attr({visibility:this.options.crop===!1||d.isInsidePlot(f.x,f.y)?Z?\"inherit\":\"visible\":\"hidden\"})}};db.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:\"%H:%M:%S.%L\",second:\"%H:%M:%S\",minute:\"%H:%M\",hour:\"%H:%M\",day:\"%e. %b\",week:\"%e. %b\",\nmonth:\"%b '%y\",year:\"%Y\"},endOnTick:!1,gridLineColor:\"#C0C0C0\",labels:G,lineColor:\"#C0D0E0\",lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:\"#E0E0E0\",minorGridLineWidth:1,minorTickColor:\"#A0A0A0\",minorTickLength:2,minorTickPosition:\"outside\",startOfWeek:1,startOnTick:!1,tickColor:\"#C0D0E0\",tickLength:5,tickmarkPlacement:\"between\",tickPixelInterval:100,tickPosition:\"outside\",tickWidth:1,title:{align:\"middle\",style:{color:\"#4d759e\",fontWeight:\"bold\"}},type:\"linear\"},defaultYAxisOptions:{endOnTick:!0,\ngridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:\"Values\"},stackLabels:{enabled:!1,formatter:function(){return Aa(this.total,-1)},style:G.style}},defaultLeftAxisOptions:{labels:{x:-8,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:8,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:14},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-5},\ntitle:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.xOrY=(this.isXAxis=c)?\"x\":\"y\";this.opposite=b.opposite;this.side=this.horiz?this.opposite?0:2:this.opposite?1:3;this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e===\"category\";this.isLog=e===\"logarithmic\";this.isDatetimeAxis=\ne===\"datetime\";this.isLinked=u(d.linkedTo);this.tickmarkOffset=this.categories&&d.tickmarkPlacement===\"between\"?0.5:0;this.ticks={};this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.stackExtremes={};this.min=this.max=null;var f,d=this.options.events;qa(this,a.axes)===-1&&(a.axes.push(this),a[c?\"xAxis\":\"yAxis\"].push(this));this.series=this.series||\n[];if(a.inverted&&c&&this.reversed===w)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)J(this,f,d[f]);if(this.isLog)this.val2lin=na,this.lin2val=fa},setOptions:function(a){this.options=x(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],x(M[this.isXAxis?\"xAxis\":\"yAxis\"],a))},update:function(a,b){var c=this.chart,a=c.options[this.xOrY+\n\"Axis\"][this.options.index]=x(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.userMin=this.userMax=w;this.init(c,r(a,{events:w}));c.isDirtyBox=!0;o(b,!0)&&c.redraw()},remove:function(a){var b=this.chart,c=this.xOrY+\"Axis\";n(this.series,function(a){a.remove(!1)});ga(b.axes,this);ga(b[c],this);b.options[c].splice(this.options.index,1);n(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;o(a,!0)&&b.redraw()},defaultLabelFormatter:function(){var a=this.axis,b=this.value,\nc=a.categories,d=this.dateTimeLabelFormat,e=M.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ca(h,this);else if(c)g=b;else if(d)g=Xa(d,b);else if(f&&a>=1E3)for(;f--&&g===w;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Aa(b/c,-1)+e[f]);g===w&&(g=b>=1E3?Aa(b,0):Aa(b,-1));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.stackExtremes={};a.buildStacks();n(a.series,function(c){if(c.visible||!b.options.chart.ignoreHiddenSeries){var d;\nd=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=I(o(a.dataMin,d[0]),Ja(d)),a.dataMax=s(o(a.dataMax,d[0]),va(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(u(c)&&u(e))a.dataMin=I(o(a.dataMin,c),c),a.dataMax=s(o(a.dataMax,e),e);if(u(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMax<d)a.dataMax=d,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e,f){var g=this.len,h=1,i=0,j=d?this.oldTransA:this.transA,\nd=d?this.oldMin:this.min,k=this.minPixelPadding,e=(this.options.ordinal||this.isLog&&e)&&this.lin2val;if(!j)j=this.transA;c&&(h*=-1,i=g);this.reversed&&(h*=-1,i-=h*g);b?(a=a*h+i,a-=k,a=a/j+d,e&&(a=this.lin2val(a))):(e&&(a=this.val2lin(a)),f===\"between\"&&(f=0.5),a=h*(a-d)*j+i+h*k+(sa(f)?j*f*this.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,\nb,c,d){var e=this.chart,f=this.left,g=this.top,h,i,j,a=this.translate(a,null,null,c),k=c&&e.oldChartHeight||e.chartHeight,l=c&&e.oldChartWidth||e.chartWidth,m;h=this.transB;c=i=t(a+h);h=j=t(k-a-h);if(isNaN(a))m=!0;else if(this.horiz){if(h=g,j=k-this.bottom,c<f||c>f+this.width)m=!0}else if(c=f,i=l-this.right,h<g||h>g+this.height)m=!0;return m&&!d?null:e.renderer.crispLine([\"M\",c,h,\"L\",i,j],b||0)},getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b),d=this.getPlotLinePath(a);d&&c?d.push(c[4],\nc[5],c[1],c[2]):d=null;return d},getLinearTickPositions:function(a,b,c){for(var d,b=ia(P(b/a)*a),c=ia(xa(c/a)*a),e=[];b<=c;){e.push(b);b=ia(b+a);if(b===d)break;d=b}return e},getLogTickPositions:function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=t(a),g=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=P(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){i=e.length;for(h=0;h<i&&!l;h++)j=na(fa(f)*e[h]),j>b&&(!d||\nk<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=fa(b),c=fa(c),a=e[d?\"minorTickInterval\":\"tickInterval\"],a=o(a===\"auto\"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=ob(a,null,nb(a)),g=Na(this.getLinearTickPositions(a,b,c),na),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a<e;a++)d=d.concat(this.getLogTickPositions(c,\nb[a-1],b[a],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval===\"auto\")d=d.concat(Eb(Cb(c),this.min,this.max,a.startOfWeek)),d[0]<this.min&&d.shift();else for(b=this.min+(b[0]-this.min)%c;b<=this.max;b+=c)d.push(b);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===w&&!this.isLog)u(a.min)||u(a.max)?this.minRange=null:(n(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-\n1;g>0;g--)if(h=i[g]-i[g-1],f===w||h<f)f=h}),this.minRange=I(f*5,this.dataMax-this.dataMin));if(c-b<this.minRange){var k=this.minRange;d=(k-c+b)/2;d=[b-d,o(a.min,b-d)];if(e)d[2]=this.dataMin;b=va(d);c=[b+k,o(a.max,b+k)];if(e)c[2]=this.dataMax;c=Ja(c);c-b<k&&(d[0]=c-k,d[1]=o(a.min,c-k),b=va(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this.max-this.min,c=0,d,e=0,f=0,g=this.linkedParent,h=this.transA;if(this.isXAxis)g?(e=g.minPointOffset,f=g.pointRangePadding):n(this.series,function(a){var g=\na.pointRange,h=a.options.pointPlacement,l=a.closestPointRange;g>b&&(g=0);c=s(c,g);e=s(e,ea(h)?0:g/2);f=s(f,h===\"on\"?0:g);!a.noSharedTooltip&&u(l)&&(d=u(d)?I(d,l):l)}),g=this.ordinalSlope&&d?this.ordinalSlope/d:1,this.minPointOffset=e*=g,this.pointRangePadding=f*=g,this.pointRange=I(c,b),this.closestPointRange=d;if(a)this.oldTransA=h;this.translationSlope=this.transA=h=this.len/(b+f||1);this.transB=this.horiz?this.left:this.bottom;this.minPixelPadding=h*e},setTickPositions:function(a){var b=this,c=\nb.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding,k=d.minPadding,l=d.tickInterval,m=d.minTickInterval,p=d.tickPixelInterval,q,ba=b.categories;h?(b.linkedParent=c[g?\"xAxis\":\"yAxis\"][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=o(c.min,c.dataMin),b.max=o(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ka(11,1)):(b.min=o(b.userMin,d.min,b.dataMin),b.max=o(b.userMax,d.max,b.dataMax));if(e)!a&&I(b.min,o(b.dataMin,b.min))<=0&&\nka(10,1),b.min=ia(na(b.min)),b.max=ia(na(b.max));if(b.range&&(b.userMin=b.min=s(b.min,b.max-b.range),b.userMax=b.max,a))b.range=null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!ba&&!b.usePercentage&&!h&&u(b.min)&&u(b.max)&&(c=b.max-b.min)){if(!u(d.min)&&!u(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!u(d.max)&&!u(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&p===b.linkedParent.options.tickPixelInterval?\nb.tickInterval=b.linkedParent.tickInterval:(b.tickInterval=o(l,ba?1:(b.max-b.min)*p/s(b.len,p)),!u(l)&&b.len<p&&!this.isRadial&&(q=!0,b.tickInterval/=4));g&&!a&&n(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange)b.tickInterval=s(b.pointRange,b.tickInterval);if(!l&&b.tickInterval<m)b.tickInterval=\nm;if(!f&&!e&&!l)b.tickInterval=ob(b.tickInterval,null,nb(b.tickInterval),d);b.minorTickInterval=d.minorTickInterval===\"auto\"&&b.tickInterval?b.tickInterval/5:d.minorTickInterval;b.tickPositions=a=d.tickPositions?[].concat(d.tickPositions):i&&i.apply(b,[b.min,b.max]);if(!a)!b.ordinalPositions&&(b.max-b.min)/b.tickInterval>s(2*b.len,200)&&ka(19,!0),a=f?(b.getNonLinearTimeTicks||Eb)(Cb(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,!0):e?b.getLogTickPositions(b.tickInterval,\nb.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),q&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h<f&&a.pop(),a.length===1&&(b.min-=0.001,b.max+=0.001)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.xOrY,this.pos,this.len].join(\"-\");if(!this.isLinked&&!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!==\n!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e<a){for(;b.length<a;)b.push(ia(b[b.length-1]+this.tickInterval));this.transA*=(e-1)/(a-1);this.max=b[b.length-1]}if(u(d)&&a!==d)this.isDirty=!0}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax=\nthis.max;this.oldAxisLength=this.len;this.setAxisSize();e=this.len!==this.oldAxisLength;n(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax){if(!this.isXAxis)for(b in a)delete a[b];this.forceRedraw=!1;this.getSeriesExtremes();this.setTickPositions();this.oldUserMin=this.userMin;this.oldUserMax=this.userMax;if(!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!==\nthis.oldMax}else if(!this.isXAxis){if(this.oldStacks)a=this.stacks=this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}this.setMaxTicks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=o(c,!0),e=r(e,{min:a,max:b});z(f,\"setExtremes\",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;f.isDirtyExtremes=!0;c&&g.redraw(d)})},zoom:function(a,b){this.allowZoomOutside||(u(this.dataMin)&&a<=this.dataMin&&(a=w),u(this.dataMax)&&b>=this.dataMax&&(b=w));this.displayBtn=a!==w||b!==w;this.setExtremes(a,\nb,!1,w,{trigger:\"zoom\"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=b.offsetRight||0,e=this.horiz,f,g;this.left=g=o(b.left,a.plotLeft+c);this.top=f=o(b.top,a.plotTop);this.width=c=o(b.width,a.plotWidth-c+d);this.height=b=o(b.height,a.plotHeight);this.bottom=a.chartHeight-b-f;this.right=a.chartWidth-c-g;this.len=s(e?c:b,0);this.pos=e?g:f},getExtremes:function(){var a=this.isLog;return{min:a?ia(fa(this.min)):this.min,max:a?ia(fa(this.max)):this.max,dataMin:this.dataMin,\ndataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?fa(this.min):this.min,b=b?fa(this.max):this.max;c>a||a===null?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},addPlotBand:function(a){this.addPlotBandOrLine(a,\"plotBands\")},addPlotLine:function(a){this.addPlotBandOrLine(a,\"plotLines\")},addPlotBandOrLine:function(a,b){var c=(new vb(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]||[],d[b].push(a)),this.plotLinesAndBands.push(c));return c},\nautoLabelAlign:function(a){a=(o(a,0)-this.side*90+720)%360;return a>15&&a<165?\"right\":a>195&&a<345?\"left\":\"center\"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,m=0,p=d.title,q=d.labels,ba=0,A=b.axisOffset,L=b.clipOffset,t=[-1,1,1,-1][h],r,v=1,x=o(q.maxStaggerLines,5),la,E,H,B;a.hasData=j=a.hasVisibleSeries||u(a.min)&&u(a.max)&&!!e;a.showAxis=b=j||o(d.showEmpty,!0);a.staggerLines=a.horiz&&q.staggerLines;\nif(!a.axisGroup)a.gridGroup=c.g(\"grid\").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g(\"axis\").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g(\"axis-labels\").attr({zIndex:q.zIndex||7}).add();if(j||a.isLinked){a.labelAlign=o(q.align||a.autoLabelAlign(q.rotation));n(e,function(b){f[b]?f[b].addLabel():f[b]=new Ma(a,b)});if(a.horiz&&!a.staggerLines&&x&&!q.rotation){for(r=a.reversed?[].concat(e).reverse():e;v<x;){j=[];la=!1;for(q=0;q<r.length;q++)E=r[q],H=(H=f[E].label&&f[E].label.getBBox())?H.width:\n0,B=q%v,H&&(E=a.translate(E),j[B]!==w&&E<j[B]&&(la=!0),j[B]=E+H);if(la)v++;else break}if(v>1)a.staggerLines=v}n(e,function(b){if(h===0||h===2||{1:\"left\",3:\"right\"}[h]===a.labelAlign)ba=s(f[b].getLabelSize(),ba)});if(a.staggerLines)ba*=a.staggerLines,a.labelOffset=ba}else for(r in f)f[r].destroy(),delete f[r];if(p&&p.text&&p.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(p.text,0,0,p.useHTML).attr({zIndex:7,rotation:p.rotation||0,align:p.textAlign||{low:\"left\",middle:\"center\",high:\"right\"}[p.align]}).css(p.style).add(a.axisGroup),\na.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?\"height\":\"width\"],m=o(p.margin,g?5:10),l=p.offset;a.axisTitle[b?\"show\":\"hide\"]()}a.offset=t*o(d.offset,A[h]);a.axisTitleMargin=o(l,ba+m+(h!==2&&ba&&t*d.labels[g?\"y\":\"x\"]));A[h]=s(A[h],a.axisTitleMargin+k+t*a.offset);L[i]=s(L[i],P(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine([\"M\",\ne?this.left:f,e?d:this.top,\"L\",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=C(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,\nb=a.chart,c=b.renderer,d=a.options,e=a.isLog,f=a.isLinked,g=a.tickPositions,h=a.axisTitle,i=a.stacks,j=a.ticks,k=a.minorTicks,l=a.alternateBands,m=d.stackLabels,p=d.alternateGridColor,q=a.tickmarkOffset,o=d.lineWidth,A,s=b.hasRendered&&u(a.oldMin)&&!isNaN(a.oldMin);A=a.hasData;var t=a.showAxis,r,v;n([j,k,l],function(a){for(var b in a)a[b].isActive=!1});if(A||f)if(a.minorTickInterval&&!a.categories&&n(a.getMinorTickPositions(),function(b){k[b]||(k[b]=new Ma(a,b,\"minor\"));s&&k[b].isNew&&k[b].render(null,\n!0);k[b].render(null,!1,1)}),g.length&&(n(g.slice(1).concat([g[0]]),function(b,c){c=c===g.length-1?0:c+1;if(!f||b>=a.min&&b<=a.max)j[b]||(j[b]=new Ma(a,b)),s&&j[b].isNew&&j[b].render(c,!0),j[b].render(c,!1,1)}),q&&a.min===0&&(j[-1]||(j[-1]=new Ma(a,-1,null,!0)),j[-1].render(-1))),p&&n(g,function(b,c){if(c%2===0&&b<a.max)l[b]||(l[b]=new vb(a)),r=b+q,v=g[c+1]!==w?g[c+1]+q:a.max,l[b].options={from:e?fa(r):r,to:e?fa(v):v,color:p},l[b].render(),l[b].isActive=!0}),!a._addedPlotLB)n((d.plotLines||[]).concat(d.plotBands||\n[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0;n([j,k,l],function(a){var c,d,e=[],f=Fa?Fa.duration||500:0,g=function(){for(d=e.length;d--;)a[e[d]]&&!a[e[d]].isActive&&(a[e[d]].destroy(),delete a[e[d]])};for(c in a)if(!a[c].isActive)a[c].render(c,!1,0),a[c].isActive=!1,e.push(c);a===l||!b.hasRendered||!f?g():f&&setTimeout(g,f)});if(o)A=a.getLinePath(o),a.axisLine?a.axisLine.animate({d:A}):a.axisLine=c.path(A).attr({stroke:d.lineColor,\"stroke-width\":o,zIndex:7}).add(a.axisGroup),a.axisLine[t?\n\"show\":\"hide\"]();if(h&&t)h[h.isNew?\"attr\":\"animate\"](a.getTitlePosition()),h.isNew=!1;if(m&&m.enabled){var x,la,d=a.stackTotalGroup;if(!d)a.stackTotalGroup=d=c.g(\"stack-labels\").attr({visibility:\"visible\",zIndex:6}).add();d.translate(b.plotLeft,b.plotTop);for(x in i)for(la in c=i[x],c)c[la].render(d)}a.isDirty=!1},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();n([c.plotLines||[],d.plotLines||[],c.plotBands||\n[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id===a&&ga(b,b[e])})},setTitle:function(a,b){this.update({title:a},b)},redraw:function(){var a=this.chart.pointer;a.reset&&a.reset(!0);this.render();n(this.plotLinesAndBands,function(a){a.render()});n(this.series,function(a){a.isDirty=!0})},buildStacks:function(){var a=this.series,b=a.length;if(!this.isXAxis){for(;b--;)a[b].setStackedPoints();if(this.usePercentage)for(b=0;b<a.length;b++)a[b].setPercentStacks()}},setCategories:function(a,b){this.update({categories:a},\nb)},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||aa(b);for(d in c)Ka(c[d]),c[d]=null;n([b.ticks,b.minorTicks,b.alternateBands],function(a){Ka(a)});for(a=e.length;a--;)e[a].destroy();n(\"stackTotalGroup,axisLine,axisGroup,gridGroup,labelGroup,axisTitle\".split(\",\"),function(a){b[a]&&(b[a]=b[a].destroy())})}};wb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=C(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=\na.renderer.label(\"\",0,0,b.shape,null,null,b.useHTML,null,\"tooltip\").attr({padding:e,fill:b.backgroundColor,\"stroke-width\":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-999});$||this.label.shadow(b.shadow);this.shared=b.shared},destroy:function(){n(this.crosshairs,function(a){a&&a.destroy()});if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden;\nr(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:g?(2*f.anchorX+c)/3:c,anchorY:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(N(a-f.x)>1||N(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a=this,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},o(this.options.hideDelay,500)),b&&n(b,function(a){a.setState()}),this.chart.hoverPoints=\nnull},hideCrosshairs:function(){n(this.crosshairs,function(a){a&&a.hide()})},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=ja(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===w&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(n(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:\nh]);return Na(c,t)},getPosition:function(a,b,c){var d=this.chart,e=d.plotLeft,f=d.plotTop,g=d.plotWidth,h=d.plotHeight,i=o(this.options.distance,12),j=c.plotX,c=c.plotY,d=j+e+(d.inverted?i:-a-i),k=c-b+f+15,l;d<7&&(d=e+s(j,0)+i);d+a>e+g&&(d-=d+a-(e+g),k=c-b+f-i,l=!0);k<f+5&&(k=f+5,l&&c>=k&&c<=k+b&&(k=c+f+i));k+b>f+h&&(k=s(f,f+h-b-i));return{x:d,y:k}},defaultFormatter:function(a){var b=this.points||ja(this),c=b[0].series,d;d=[c.tooltipHeaderFormatter(b[0])];n(b,function(a){c=a.series;d.push(c.tooltipFormatter&&\nc.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))});d.push(a.options.footerFormat||\"\");return d.join(\"\")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=e.crosshairs,m=this.shared;clearTimeout(this.hideTimer);this.followPointer=ja(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];m&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&n(h,\nfunction(a){a.setState()}),n(a,function(a){a.setState(\"hover\");j.push(a.getLabelConfig())}),h={x:a[0].category,y:a[0].y},h.points=j,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;i===!1?this.hide():(this.isHidden&&(Wa(d),d.attr(\"opacity\",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||\"#606060\",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g}),this.isHidden=!1);if(l){l=ja(l);for(d=l.length;d--;)if(m=a.series,e=m[d?\"yAxis\":\"xAxis\"],l[d]&&e)if(h=d?o(a.stackY,a.y):a.x,\ne.isLog&&(h=na(h)),d===1&&m.modifyValue&&(h=m.modifyValue(h)),e=e.getPlotLinePath(h,1),this.crosshairs[d])this.crosshairs[d].attr({d:e,visibility:\"visible\"});else{h={\"stroke-width\":l[d].width||1,stroke:l[d].color||\"#C0C0C0\",zIndex:l[d].zIndex||2};if(l[d].dashStyle)h.dashstyle=l[d].dashStyle;this.crosshairs[d]=c.renderer.path(e).attr(h).add()}}z(c,\"tooltipRefresh\",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner||\nthis.getPosition).call(this,c.width,c.height,a);this.move(t(c.x),t(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)}};xb.prototype={init:function(a,b){var c=b.chart,d=c.events,e=$?\"\":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(b.tooltip.enabled)a.tooltip=new wb(a,b.tooltip);this.setDOMEvents()},normalize:function(a,b){var c,\nd,a=a||O.event;if(!a.target)a.target=a.srcElement;a=Xb(a);d=a.touches?a.touches.item(0):a;if(!b)this.chartPosition=b=Wb(this.chart.container);d.pageX===w?(c=s(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return r(a,{chartX:t(c),chartY:t(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};n(this.chart.axes,function(c){b[c.isXAxis?\"xAxis\":\"yAxis\"].push({axis:c,value:c.toValue(a[c.horiz?\"chartX\":\"chartY\"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?\nb.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e,f=b.hoverPoint,g=b.hoverSeries,h,i,j=b.chartWidth,k=this.getIndex(a);if(d&&this.options.tooltip.shared&&(!g||!g.noSharedTooltip)){e=[];h=c.length;for(i=0;i<h;i++)if(c[i].visible&&c[i].options.enableMouseTracking!==!1&&!c[i].noSharedTooltip&&c[i].tooltipPoints.length&&(b=c[i].tooltipPoints[k])&&b.series)b._dist=N(k-b.clientX),j=I(j,b._dist),e.push(b);for(h=e.length;h--;)e[h]._dist>\nj&&e.splice(h,1);if(e.length&&e[0].clientX!==this.hoverX)d.refresh(e,a),this.hoverX=e[0].clientX}if(g&&g.tracker){if((b=g.tooltipPoints[k])&&b!==f)b.onMouseOver(a)}else d&&d.followPointer&&!d.isHidden&&(a=d.getAnchor([{}],a),d.updatePosition({plotX:a[0],plotY:a[1]}))},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,b=e&&e.shared?b.hoverPoints:d;(a=a&&e&&b)&&ja(b)[0].plotX===w&&(a=!1);if(a)e.refresh(b);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&(e.hide(),e.hideCrosshairs());\nthis.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;n(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},pinchTranslateDirection:function(a,b,c,d,e,f,g){var h=this.chart,i=a?\"x\":\"y\",j=a?\"X\":\"Y\",k=\"chart\"+j,l=a?\"width\":\"height\",m=h[\"plot\"+(a?\"Left\":\"Top\")],p,q,o=1,n=h.inverted,s=h.bounds[a?\"h\":\"v\"],\nt=b.length===1,u=b[0][k],r=c[0][k],w=!t&&b[1][k],v=!t&&c[1][k],x,c=function(){!t&&N(u-w)>20&&(o=N(r-v)/N(u-w));q=(m-r)/o+u;p=h[\"plot\"+(a?\"Width\":\"Height\")]/o};c();b=q;b<s.min?(b=s.min,x=!0):b+p>s.max&&(b=s.max-p,x=!0);x?(r-=0.8*(r-g[i][0]),t||(v-=0.8*(v-g[i][1])),c()):g[i]=[r,v];n||(f[i]=q-m,f[l]=p);f=n?1/o:o;e[l]=p;e[i]=b;d[n?a?\"scaleY\":\"scaleX\":\"scale\"+j]=o;d[\"translate\"+j]=f*m+(r-f*u)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,e=c.tooltip&&c.tooltip.options.followTouchMove,f=a.touches,\ng=f.length,h=b.lastValidTouch,i=b.zoomHor||b.pinchHor,j=b.zoomVert||b.pinchVert,k=i||j,l=b.selectionMarker,m={},p=g===1&&(b.inClass(a.target,\"highcharts-tracker\")&&c.runTrackerClick||c.runChartClick),q={};(k||e)&&!p&&a.preventDefault();Na(f,function(a){return b.normalize(a)});if(a.type===\"touchstart\")n(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],n(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?\"h\":\"v\"],\nd=a.minPixelPadding,e=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=I(e,f),e=s(e,f);b.min=I(a.pos,g-d);b.max=s(a.pos+a.len,e+d)}});else if(d.length){if(!l)b.selectionMarker=l=r({destroy:pa},c.plotBox);i&&b.pinchTranslateDirection(!0,d,f,m,l,q,h);j&&b.pinchTranslateDirection(!1,d,f,m,l,q,h);b.hasPinched=k;b.scaleGroups(m,q);!k&&e&&g===1&&this.runPointActions(b.normalize(a))}},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=\nthis.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,m=this.mouseDownX,p=this.mouseDownY;d<h?d=h:d>h+j&&(d=h+j);e<i?e=i:e>i+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(m-d,2)+Math.pow(p-e,2));if(this.hasDragged>10){l=b.isInsidePlot(m-h,p-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?\n1:k,0).attr({fill:c.selectionMarkerFill||\"rgba(69,114,167,0.25)\",zIndex:7}).add();this.selectionMarker&&f&&(d-=m,this.selectionMarker.attr({width:N(d),x:(d>0?0:d)+m}));this.selectionMarker&&g&&(d=e-p,this.selectionMarker.attr({height:N(d),y:(d>0?0:d)+p}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},e=this.selectionMarker,f=e.x,g=e.y,h;if(this.hasDragged||\nc)n(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?f:g),b=a.toValue(b?f+e.width:g+e.height);!isNaN(c)&&!isNaN(b)&&(d[a.xOrY+\"Axis\"].push({axis:a,min:I(c,b),max:s(c,b)}),h=!0)}}),h&&z(b,\"selection\",d,function(a){b.zoom(r(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)K(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=\nthis.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){this.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,\"highcharts-tracker\")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){this.reset();this.chartPosition=null},onContainerMouseMove:function(a){var b=this.chart,a=this.normalize(a);a.returnValue=\n!1;b.mouseIsDown===\"mousedown\"&&this.drag(a);(this.inClass(a.target,\"highcharts-tracker\")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=v(a,\"class\"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf(\"highcharts-container\")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries;if(b&&!b.options.stickyTracking&&!this.inClass(a.toElement||a.relatedTarget,\"highcharts-tooltip\"))b.onMouseOut()},\nonContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,f=b.inverted,g,h,i,a=this.normalize(a);a.cancelBubble=!0;if(!b.cancelClick)c&&this.inClass(a.target,\"highcharts-tracker\")?(g=this.chartPosition,h=c.plotX,i=c.plotY,r(c,{pageX:g.left+d+(f?b.plotWidth-i:h),pageY:g.top+e+(f?b.plotHeight-h:i)}),z(c.series,\"click\",r(a,{point:c})),b.hoverPoint&&c.firePointEvent(\"click\",a)):(r(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&z(b,\"click\",a))},onContainerTouchStart:function(a){var b=\nthis.chart;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()):a.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){this.drop(a)},setDOMEvents:function(){var a=this,b=a.chart.container,c;this._events=c=[[b,\"onmousedown\",\"onContainerMouseDown\"],[b,\"onmousemove\",\"onContainerMouseMove\"],[b,\"onclick\",\n\"onContainerClick\"],[b,\"mouseleave\",\"onContainerMouseLeave\"],[y,\"mousemove\",\"onDocumentMouseMove\"],[y,\"mouseup\",\"onDocumentMouseUp\"]];ib&&c.push([b,\"ontouchstart\",\"onContainerTouchStart\"],[b,\"ontouchmove\",\"onContainerTouchMove\"],[y,\"touchend\",\"onDocumentTouchEnd\"]);n(c,function(b){a[\"_\"+b[2]]=function(c){a[b[2]](c)};b[1].indexOf(\"on\")===0?b[0][b[1]]=a[\"_\"+b[2]]:J(b[0],b[1],a[\"_\"+b[2]])})},destroy:function(){var a=this;n(a._events,function(b){b[1].indexOf(\"on\")===0?b[0][b[1]]=null:aa(b[0],b[1],a[\"_\"+\nb[2]])});delete a._events;clearInterval(a.tooltipTimeout)}};eb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=o(b.padding,8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=C(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=x(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY=e-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.render(),J(c.chart,\"endResize\",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,\nd=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.color:g,g=a.options&&a.options.marker,i={stroke:h,fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in g=a.convertAttribs(g),g)d=g[j],d!==w&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=\ne,f.y=d},destroyItem:function(a){var b=a.checkbox;n([\"legendItem\",\"legendLine\",\"legendSymbol\",\"legendGroup\"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Ta(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,n(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,K(f,{left:b.translateX+e.legendItemWidth+f.x-\n20+\"px\",top:g+\"px\",display:g>c-6&&g<c+d-6?\"\":S}))})},renderTitle:function(){var a=this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title=this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,\"legend-title\").attr({zIndex:1}).css(b.style).add(this.group);a=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},renderItem:function(a){var B;var b=this,c=b.chart,d=c.renderer,e=b.options,f=e.layout===\"horizontal\",\ng=e.symbolWidth,h=e.symbolPadding,i=b.itemStyle,j=b.itemHiddenStyle,k=b.padding,l=f?o(e.itemDistance,8):0,m=!e.rtl,p=e.width,q=e.itemMarginBottom||0,n=b.itemMarginTop,A=b.initialItemX,t=a.legendItem,u=a.series||a,r=u.options,w=r.showCheckbox,v=e.useHTML;if(!t&&(a.legendGroup=d.g(\"legend-item\").attr({zIndex:1}).add(b.scrollGroup),u.drawLegendSymbol(b,a),a.legendItem=t=d.text(e.labelFormat?Ca(e.labelFormat,a):e.labelFormatter.call(a),m?g+h:-h,b.baseline,v).css(x(a.visible?i:j)).attr({align:m?\"left\":\n\"right\",zIndex:2}).add(a.legendGroup),(v?t:a.legendGroup).on(\"mouseover\",function(){a.setState(\"hover\");t.css(b.options.itemHoverStyle)}).on(\"mouseout\",function(){t.css(a.visible?i:j);a.setState()}).on(\"click\",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent(\"legendItemClick\",b,c):z(a,\"legendItemClick\",b,c)}),b.colorizeItem(a,a.visible),r&&w))a.checkbox=U(\"input\",{type:\"checkbox\",checked:a.selected,defaultChecked:a.selected},e.itemCheckboxStyle,c.container),\nJ(a.checkbox,\"click\",function(b){z(a,\"checkboxClick\",{checked:b.target.checked},function(){a.select()})});d=t.getBBox();B=a.legendItemWidth=e.itemWidth||g+h+d.width+l+(w?20:0),e=B;b.itemHeight=g=d.height;if(f&&b.itemX-A+e>(p||c.chartWidth-2*k-A))b.itemX=A,b.itemY+=n+b.lastLineHeight+q,b.lastLineHeight=0;b.maxItemWidth=s(b.maxItemWidth,e);b.lastItemY=n+b.itemY+q;b.lastLineHeight=s(g,b.lastLineHeight);a._legendItemPos=[b.itemX,b.itemY];f?b.itemX+=e:(b.itemY+=n+g+q,b.lastLineHeight=g);b.offsetWidth=\np||s((f?b.itemX-A-l:e)+k,b.offsetWidth)},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,m=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g(\"legend\").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=[];n(b.series,function(a){var b=a.options;b.showInLegend&&!u(b.linkedTo)&&(e=e.concat(a.legendItems||\n(b.legendType===\"point\"?a.data:a)))});Kb(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;n(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||m){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?\"attr\":\"animate\"](i.crisp(null,null,null,g,h)),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,\n\"stroke-width\":l||0,fill:m||S}).add(d).shadow(j.shadow),i.isNew=!0;i[f?\"show\":\"hide\"]()}a.legendWidth=g;a.legendHeight=h;n(e,function(b){a.positionItem(b)});f&&d.align(r({width:g,height:h},j),!0,\"spacingBox\");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign===\"top\"?-f:f)-this.padding,g=e.maxHeight,h=this.clipRect,i=e.navigation,j=o(i.animation,!0),k=i.arrowSize||12,l=this.nav;e.layout===\n\"horizontal\"&&(f/=2);g&&(f=I(f,g));if(a>f&&!e.useHTML){this.clipHeight=c=f-20-this.titleHeight;this.pageCount=xa(a/c);this.currentPage=o(this.currentPage,1);this.fullHeight=a;if(!h)h=b.clipRect=d.clipRect(0,0,9999,0),b.contentGroup.clip(h);h.attr({height:c});if(!l)this.nav=l=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol(\"triangle\",0,0,k,k).on(\"click\",function(){b.scroll(-1,j)}).add(l),this.pager=d.text(\"\",15,10).css(i.style).add(l),this.down=d.symbol(\"triangle-down\",0,0,k,k).on(\"click\",\nfunction(){b.scroll(1,j)}).add(l);b.scroll(0);a=f}else if(l)h.attr({height:c.chartHeight}),l.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pageCount,d=this.currentPage+a,e=this.clipHeight,f=this.options.navigation,g=f.activeColor,h=f.inactiveColor,f=this.pager,i=this.padding;d>c&&(d=c);if(d>0)b!==w&&La(b,this.chart),this.nav.attr({translateX:i,translateY:e+7+this.titleHeight,visibility:\"visible\"}),this.up.attr({fill:d===1?h:g}).css({cursor:d===\n1?\"default\":\"pointer\"}),f.attr({text:d+\"/\"+this.pageCount}),this.down.attr({x:18+this.pager.getBBox().width,fill:d===c?h:g}).css({cursor:d===c?\"default\":\"pointer\"}),e=-I(e*(d-1),this.fullHeight-e+i)+1,this.scrollGroup.animate({translateY:e}),f.attr({text:d+\"/\"+c}),this.currentPage=d,this.positionCheckboxes(e)}};/Trident.*?11\\.0/.test(oa)&&mb(eb.prototype,\"positionItem\",function(a,b){var c=this;setTimeout(function(){a.call(c,b)})});yb.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=\nx(M,a);c.series=a.series=d;d=c.chart;this.margin=this.splashArray(\"margin\",d);this.spacing=this.splashArray(\"spacing\",d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=Ga.length;Ga.push(f);d.reflow!==!1&&J(f,\"load\",function(){f.initReflow()});if(e)for(g in e)J(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=$?!1:o(d.animation,!0);f.pointCount=0;f.counters=new Jb;f.firstRender()},\ninitSeries:function(a){var b=this.options.chart;(b=W[a.type||b.type||b.defaultSeriesType])||ka(17,!0);b=new b;b.init(this,a);return b},addSeries:function(a,b,c){var d,e=this;a&&(b=o(b,!0),z(e,\"addSeries\",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?\"xAxis\":\"yAxis\",f=this.options;new db(this,x(a,{index:this[e].length,isX:b}));f[e]=ja(f[e]||{});f[e].push(a);o(c,!0)&&this.redraw(d)},isInsidePlot:function(a,b,\nc){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&n(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,m=l.isHidden(),p=[];La(a,this);m&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&&(g=!0,a.isDirty)){h=!0;\nbreak}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;n(c,function(a){a.isDirty&&a.options.legendType===\"point\"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,n(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();n(b,function(a){a.isDirty&&(i=!0)});n(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,p.push(function(){z(a,\"afterSetExtremes\",r(a.eventArgs,\na.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();n(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset&&d.reset(!0);l.draw();z(this,\"redraw\");m&&this.cloneRenderTo(!0);n(p,function(a){a.call()})},showLoading:function(a){var b=this.options,c=this.loadingDiv,d=b.loading;if(!c)this.loadingDiv=c=U(Ea,{className:\"highcharts-loading\"},r(d.style,{zIndex:10,display:S}),this.container),this.loadingSpan=U(\"span\",null,d.labelStyle,c);this.loadingSpan.innerHTML=\na||b.lang.loading;if(!this.loadingShown)K(c,{opacity:0,display:\"\",left:this.plotLeft+\"px\",top:this.plotTop+\"px\",width:this.plotWidth+\"px\",height:this.plotHeight+\"px\"}),Bb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&Bb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){K(b,{display:S})}});this.loadingShown=!1},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id===\na)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===a)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=ja(b.xAxis||{}),b=b.yAxis=ja(b.yAxis||{});n(c,function(a,b){a.index=b;a.isX=!0});n(b,function(a,b){a.index=b});c=c.concat(b);n(c,function(b){new db(a,b)});a.adjustTickAmounts()},getSelectedPoints:function(){var a=[];n(this.series,function(b){a=a.concat(ub(b.points||[],\nfunction(a){return a.selected}))});return a},getSelectedSeries:function(){return ub(this.series,function(a){return a.selected})},getStacks:function(){var a=this;n(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks=a.stacks});n(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===!1))b.stackKey=b.type+o(b.options.stack,\"\")})},showResetZoom:function(){var a=this,b=M.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo===\n\"chart\"?null:\"plotBox\";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=this;z(a,\"selection\",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?n(this.axes,function(a){b=a.zoom()}):n(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?\"zoomX\":\"zoomY\"]||c[h?\"pinchX\":\"pinchY\"])b=\ne.zoom(a.min,a.max),e.displayBtn&&(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom();else if(!d&&T(e))this.resetZoomButton=e.destroy();b&&this.redraw(o(this.options.chart.animation,a&&a.animation,this.pointCount<100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&n(d,function(a){a.setState()});n(b===\"xy\"?[1,0]:[1],function(b){var d=a[b?\"chartX\":\"chartY\"],h=c[b?\"xAxis\":\"yAxis\"][0],i=c[b?\"mouseDownX\":\"mouseDownY\"],j=(h.pointRange||0)/2,k=h.getExtremes(),l=h.toValue(i-d,!0)+j,i=h.toValue(i+\nc[b?\"plotWidth\":\"plotHeight\"]-d,!0)-j;h.series.length&&l>I(k.dataMin,k.min)&&i<s(k.dataMax,k.max)&&(h.setExtremes(l,i,!1,!1,{trigger:\"pan\"}),e=!0);c[b?\"mouseDownX\":\"mouseDownY\"]=d});e&&c.redraw(!1);K(c.container,{cursor:\"move\"})},setTitle:function(a,b){var f;var c=this,d=c.options,e;e=d.title=x(d.title,a);f=d.subtitle=x(d.subtitle,b),d=f;n([[\"title\",a,e],[\"subtitle\",b,d]],function(a){var b=a[0],d=c[b],e=a[1],a=a[2];d&&e&&(c[b]=d=d.destroy());a&&a.text&&!d&&(c[b]=c.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,\n\"class\":\"highcharts-\"+b,zIndex:a.zIndex||4}).css(a.style).add())});c.layOutTitles()},layOutTitles:function(){var a=0,b=this.title,c=this.subtitle,d=this.options,e=d.title,d=d.subtitle,f=this.spacingBox.width-44;if(b&&(b.css({width:(e.width||f)+\"px\"}).align(r({y:15},e),!1,\"spacingBox\"),!e.floating&&!e.verticalAlign))a=b.getBBox().height,a>=18&&a<=25&&(a=15);c&&(c.css({width:(d.width||f)+\"px\"}).align(r({y:a+e.margin},d),!1,\"spacingBox\"),!d.floating&&!d.verticalAlign&&(a=xa(a+c.getBBox().height)));this.titleOffset=\na},getChartSize:function(){var a=this.options.chart,b=this.renderToClone||this.renderTo;this.containerWidth=jb(b,\"width\");this.containerHeight=jb(b,\"height\");this.chartWidth=s(0,a.width||this.containerWidth||600);this.chartHeight=s(0,o(a.height,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Ta(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=\nb=this.renderTo.cloneNode(0),K(b,{position:\"absolute\",top:\"-9999px\",display:\"block\"}),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e=\"highcharts-\"+zb++;if(ea(a))this.renderTo=a=y.getElementById(a);a||ka(13,!0);c=C(v(a,\"data-highcharts-chart\"));!isNaN(c)&&Ga[c]&&Ga[c].destroy();v(a,\"data-highcharts-chart\",this.index);a.innerHTML=\"\";a.offsetWidth||this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;\nthis.container=a=U(Ea,{className:\"highcharts-container\"+(b.className?\" \"+b.className:\"\"),id:e},r({position:\"relative\",overflow:\"hidden\",width:c+\"px\",height:d+\"px\",textAlign:\"left\",lineHeight:\"normal\",zIndex:0,\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\"},b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new Ha(a,c,d,!0):new Va(a,c,d);$&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend,\nf=o(e.margin,10),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!u(d[0]))this.plotTop=s(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i===\"right\"){if(!u(d[1]))this.marginRight=s(this.marginRight,c.legendWidth-g+f+a[1])}else if(i===\"left\"){if(!u(d[3]))this.plotLeft=s(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j===\"top\"){if(!u(d[0]))this.plotTop=s(this.plotTop,c.legendHeight+h+f+a[0])}else if(j===\"bottom\"&&!u(d[2]))this.marginBottom=\ns(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&n(this.axes,function(a){a.getOffset()});u(d[3])||(this.plotLeft+=b[3]);u(d[0])||(this.plotTop+=b[0]);u(d[2])||(this.marginBottom+=b[2]);u(d[1])||(this.marginRight+=b[1]);this.setChartSize()},initReflow:function(){function a(a){var g=c.width||jb(d,\"width\"),h=c.height||jb(d,\"height\"),a=a?a.target:O;if(!b.hasUserSize&&\ng&&h&&(a===O||a===y)){if(g!==b.containerWidth||h!==b.containerHeight)clearTimeout(e),b.reflowTimeout=e=setTimeout(function(){if(b.container)b.setSize(g,h,!1),b.hasUserSize=null},100);b.containerWidth=g;b.containerHeight=h}}var b=this,c=b.options.chart,d=b.renderTo,e;b.reflow=a;J(O,\"resize\",a);J(b,\"destroy\",function(){aa(O,\"resize\",a)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&z(d,\"endResize\",null,function(){d.isResizing-=1})};La(c,d);d.oldChartHeight=d.chartHeight;\nd.oldChartWidth=d.chartWidth;if(u(a))d.chartWidth=e=s(0,t(a)),d.hasUserSize=!!e;if(u(b))d.chartHeight=f=s(0,t(b));K(d.container,{width:e+\"px\",height:f+\"px\"});d.setChartSize(!0);d.renderer.setSize(e,f,c);d.maxTicks=null;n(d.axes,function(a){a.isDirty=!0;a.setScale()});n(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.getMargins();d.redraw(c);d.oldChartHeight=null;z(d,\"resize\");Fa===!1?g():setTimeout(g,Fa&&Fa.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,\nd=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=t(this.plotLeft);this.plotTop=j=t(this.plotTop);this.plotWidth=k=s(0,t(d-i-this.marginRight));this.plotHeight=l=s(0,t(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*P(this.plotBorderWidth/2);\nb=xa(s(d,h[3])/2);c=xa(s(d,h[0])/2);this.clipBox={x:b,y:c,width:P(this.plotSizeX-s(d,h[1])/2-b),height:P(this.plotSizeY-s(d,h[2])/2-c)};a||n(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=o(b[0],a[0]);this.marginRight=o(b[1],a[1]);this.marginBottom=o(b[2],a[2]);this.plotLeft=o(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,\nd=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,m=a.plotBorderWidth||0,p,q=this.plotLeft,o=this.plotTop,n=this.plotWidth,s=this.plotHeight,t=this.plotBox,u=this.clipRect,r=this.clipBox;p=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp(null,null,null,c-p,d-p));else{e={fill:j||S};if(i)e.stroke=a.borderColor,e[\"stroke-width\"]=i;this.chartBackground=b.rect(p/2,p/\n2,c-p,d-p,a.borderRadius,i).attr(e).add().shadow(a.shadow)}if(k)f?f.animate(t):this.plotBackground=b.rect(q,o,n,s,0).attr({fill:k}).add().shadow(a.plotShadow);if(l)h?h.animate(t):this.plotBGImage=b.image(l,q,o,n,s).add();u?u.animate({width:r.width,height:r.height}):this.clipRect=b.clipRect(r);if(m)g?g.animate(g.crisp(null,q,o,n,s)):this.plotBorder=b.rect(q,o,n,s,0,-m).attr({stroke:a.plotBorderColor,\"stroke-width\":m,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,\nc,d=a.options.series,e,f;n([\"inverted\",\"angular\",\"polar\"],function(g){c=W[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=W[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;n(b,function(a){a.linkedSeries.length=0});n(b,function(b){var d=b.options.linkedTo;if(ea(d)&&(d=d===\":previous\"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,\ne=d.labels,f=d.credits,g;a.setTitle();a.legend=new eb(a,d.legend);a.getStacks();n(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;n(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&n(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g(\"series-group\").attr({zIndex:3}).add();n(a.series,function(a){a.translate();a.setTooltipPoints();a.render()});e.items&&n(e.items,function(b){var d=r(e.style,b.style),\nf=C(d.left)+a.plotLeft,g=C(d.top)+a.plotTop+12;delete d.left;delete d.top;c.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on(\"click\",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;z(a,\"destroy\");Ga[a.index]=w;a.renderTo.removeAttribute(\"data-highcharts-chart\");aa(a);for(e=\nb.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();n(\"title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer\".split(\",\"),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML=\"\",aa(d),f&&Ta(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!Z&&O==O.top&&y.readyState!==\"complete\"||$&&!O.canvg?($?Tb.push(function(){a.firstRender()},\na.options.global.canvasToolsURL):y.attachEvent(\"onreadystatechange\",function(){y.detachEvent(\"onreadystatechange\",a.firstRender);y.readyState===\"complete\"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender())a.getContainer(),z(a,\"init\"),a.resetMargins(),a.setChartSize(),a.propFromSeries(),a.getAxes(),n(b.series||[],function(b){a.initSeries(b)}),a.linkSeries(),z(a,\"beforeRender\"),a.pointer=new xb(a,b),a.render(),a.renderer.draw(),c&&c.apply(a,\n[a]),n(a.callbacks,function(b){b.apply(a,[a])}),a.cloneRenderTo(!0),z(a,\"load\")},splashArray:function(a,b){var c=b[a],c=T(c)?c:[c,c,c,c];return[o(b[a+\"Top\"],c[0]),o(b[a+\"Right\"],c[1]),o(b[a+\"Bottom\"],c[2]),o(b[a+\"Left\"],c[3])]}};yb.prototype.callbacks=[];var Pa=function(){};Pa.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=\n0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Pa.prototype.optionsToObject.call(this,a);r(this,a);this.options=this.options?r(this.options,a):a;if(d)this.y=this[d];if(this.x===w&&c)this.x=b===w?c.autoIncrement():b;return this},optionsToObject:function(a){var b,c=this.series,d=c.pointArrayMap||[\"y\"],e=d.length,f=0,g=0;if(typeof a===\"number\"||a===null)b={y:a};else if(Ia(a)){b={};if(a.length>e){c=typeof a[0];if(c===\"string\")b.name=a[0];else if(c===\n\"number\")b.x=a[0];f++}for(;g<e;)b[d[g++]]=a[f++]}else if(typeof a===\"object\"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers=!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;if(b&&(this.setState(),ga(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)aa(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a=\n\"graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup\".split(\",\"),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},select:function(a,b){var c=this,d=c.series,e=d.chart,a=o(a,!c.selected);c.firePointEvent(a?\"select\":\"unselect\",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[qa(c,d.data)]=\nc.options;c.setState(a&&\"select\");b||n(e.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=a.options.selected=!1,d.options.data[qa(a,d.data)]=a.options,a.setState(\"\"),a.firePointEvent(\"unselect\")})})},onMouseOver:function(a){var b=this.series,c=b.chart,d=c.tooltip,e=c.hoverPoint;if(e&&e!==this)e.onMouseOut();this.firePointEvent(\"mouseOver\");d&&(!d.shared||b.noSharedTooltip)&&d.refresh(this,a);this.setState(\"hover\");c.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;\nif(!b||qa(this,b)===-1)this.firePointEvent(\"mouseOut\"),this.setState(),a.hoverPoint=null},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=o(c.valueDecimals,\"\"),e=c.valuePrefix||\"\",f=c.valueSuffix||\"\";n(b.pointArrayMap||[\"y\"],function(b){b=\"{point.\"+b;if(e||f)a=a.replace(b+\"}\",e+b+\"}\"+f);a=a.replace(b+\"}\",b+\":,.\"+d+\"f}\")});return Ca(a,{point:this,series:this.series})},update:function(a,b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=e.chart,j=e.options,b=o(b,!0);d.firePointEvent(\"update\",\n{options:a},function(){d.applyOptions(a);if(T(a)&&(e.getAttribs(),f))a.marker&&a.marker.symbol?d.graphic=f.destroy():f.attr(d.pointAttr[d.state||\"\"]);g=qa(d,h);e.xData[g]=d.x;e.yData[g]=e.toYData?e.toYData(d):d.y;e.zData[g]=d.z;j.data[g]=d.options;e.isDirty=e.isDirtyData=!0;if(!e.fixedBox&&e.hasCartesianSeries)i.isDirtyBox=!0;j.legendType===\"point\"&&i.legend.destroyItem(d);b&&i.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.points,f=d.chart,g,h=d.data;La(b,f);a=o(a,!0);c.firePointEvent(\"remove\",\nnull,function(){g=qa(c,h);h.length===e.length&&e.splice(g,1);h.splice(g,1);d.options.data.splice(g,1);d.xData.splice(g,1);d.yData.splice(g,1);d.zData.splice(g,1);c.destroy();d.isDirty=!0;d.isDirtyData=!0;a&&f.redraw()})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();a===\"click\"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});z(this,a,b,c)},importEvents:function(){if(!this.hasImportedEvents){var a=\nx(this.series.options.point,this.options).events,b;this.events=a;for(b in a)J(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a){var b=this.plotX,c=this.plotY,d=this.series,e=d.options.states,f=Y[d.type].marker&&d.options.marker,g=f&&!f.enabled,h=f&&f.states[a],i=h&&h.enabled===!1,j=d.stateMarkerGraphic,k=this.marker||{},l=d.chart,m=this.pointAttr,a=a||\"\";if(!(a===this.state||this.selected&&a!==\"select\"||e[a]&&e[a].enabled===!1||a&&(i||g&&!h.enabled))){if(this.graphic)e=f&&this.graphic.symbolName&&\nm[a].r,this.graphic.attr(x(m[a],e?{x:b-e,y:c-e,width:2*e,height:2*e}:{}));else{if(a&&h)e=h.radius,k=k.symbol||d.symbol,j&&j.currentSymbol!==k&&(j=j.destroy()),j?j.attr({x:b-e,y:c-e}):(d.stateMarkerGraphic=j=l.renderer.symbol(k,b-e,c-e,2*e,2*e).attr(m[a]).add(d.markerGroup),j.currentSymbol=k);if(j)j[a&&l.isInsidePlot(b,c)?\"show\":\"hide\"]()}this.state=a}}};var Q=function(){};Q.prototype={isCartesian:!0,type:\"line\",pointClass:Pa,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:\"lineColor\",\"stroke-width\":\"lineWidth\",\nfill:\"fillColor\",r:\"radius\"},colorCounter:0,init:function(a,b){var c,d,e=a.series;this.chart=a;this.options=b=this.setOptions(b);this.linkedSeries=[];this.bindAxes();r(this,{name:b.name,state:\"\",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if($)b.animation=!1;d=b.events;for(c in d)J(this,c,d[c]);if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;this.getColor();this.getSymbol();this.setData(b.data,!1);if(this.isCartesian)a.hasCartesianSeries=\n!0;e.push(this);this._i=e.length-1;Kb(e,function(a,b){return o(a.options.index,a._i)-o(b.options.index,a._i)});n(e,function(a,b){a.index=b;a.name=a.name||\"Series \"+(b+1)})},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;a.isCartesian&&n([\"xAxis\",\"yAxis\"],function(e){n(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]!==w&&b[e]===d.id||b[e]===w&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});a[e]||ka(18,!0)})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=o(b,a.pointStart,\n0);this.pointInterval=o(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else n(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart.options,c=b.plotOptions,d=c[this.type];this.userOptions=a;a=x(d,c.series,\na);this.tooltipOptions=x(b.tooltip,a.tooltip);d.marker===null&&delete a.marker;return a},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters,e;e=a.color||Y[this.type].color;if(!e&&!a.colorByPoint)u(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)u(a._symbolIndex)?\na=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:function(a){var b=this.options,c=b.marker,d=a.options,e;e=d.symbolWidth;var f=this.chart.renderer,g=this.legendGroup,a=a.baseline-t(f.fontMetrics(d.itemStyle.fontSize).b*0.3);if(b.lineWidth){d={\"stroke-width\":b.lineWidth};if(b.dashStyle)d.dashstyle=b.dashStyle;this.legendLine=f.path([\"M\",0,a,\"L\",e,a]).attr(d).add(g)}if(c&&c.enabled)b=c.radius,this.legendSymbol=\ne=f.symbol(this.symbol,e/2-b,a-b,2*b,2*b).add(g),e.isMarker=!0},addPoint:function(a,b,c,d){var e=this.options,f=this.data,g=this.graph,h=this.area,i=this.chart,j=this.xData,k=this.yData,l=this.zData,m=this.names,p=g&&g.shift||0,q=e.data,s;La(d,i);c&&n([g,h,this.graphNeg,this.areaNeg],function(a){if(a)a.shift=p+1});if(h)h.isArea=!0;b=o(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);g=d.x;h=j.length;if(this.requireSorting&&g<j[h-1])for(s=!0;h&&j[h-1]>g;)h--;j.splice(h,0,g);\nk.splice(h,0,this.toYData?this.toYData(d):d.y);l.splice(h,0,d.z);if(m)m[g]=d.name;q.splice(h,0,a);s&&(this.data.splice(h,0,null),this.processData());e.legendType===\"point\"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),j.shift(),k.shift(),l.shift(),q.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},setData:function(a,b){var c=this.points,d=this.options,e=this.chart,f=null,g=this.xAxis,h=g&&g.categories&&!g.categories.length?[]:null,i;this.xIncrement=\nnull;this.pointRange=g&&g.categories?1:d.pointRange;this.colorCounter=0;var j=[],k=[],l=[],m=a?a.length:[];i=o(d.turboThreshold,1E3);var p=this.pointArrayMap,p=p&&p.length,q=!!this.toYData;if(i&&m>i){for(i=0;f===null&&i<m;)f=a[i],i++;if(sa(f)){f=o(d.pointStart,0);d=o(d.pointInterval,1);for(i=0;i<m;i++)j[i]=f,k[i]=a[i],f+=d;this.xIncrement=f}else if(Ia(f))if(p)for(i=0;i<m;i++)d=a[i],j[i]=d[0],k[i]=d.slice(1,p+1);else for(i=0;i<m;i++)d=a[i],j[i]=d[0],k[i]=d[1];else ka(12)}else for(i=0;i<m;i++)if(a[i]!==\nw&&(d={series:this},this.pointClass.prototype.applyOptions.apply(d,[a[i]]),j[i]=d.x,k[i]=q?this.toYData(d):d.y,l[i]=d.z,h&&d.name))h[d.x]=d.name;ea(k[0])&&ka(14,!0);this.data=[];this.options.data=a;this.xData=j;this.yData=k;this.zData=l;this.names=h;for(i=c&&c.length||0;i--;)c[i]&&c[i].destroy&&c[i].destroy();if(g)g.minRange=g.userMinRange;this.isDirty=this.isDirtyData=e.isDirtyBox=!0;o(b,!0)&&e.redraw(!1)},remove:function(a,b){var c=this,d=c.chart,a=o(a,!0);if(!c.isRemoving)c.isRemoving=!0,z(c,\"remove\",\nnull,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=!1},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i=this.options,j=i.cropThreshold,k=this.isCartesian;if(k&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(k&&this.sorted&&(!j||d>j||this.forceCrop))if(a=h.min,h=h.max,b[d-1]<a||b[0]>h)b=[],c=[];else if(b[0]<a||b[d-1]>h)e=this.cropData(this.xData,this.yData,a,h),b=e.xData,c=e.yData,e=e.start,\nf=!0;for(h=b.length-1;h>=0;h--)d=b[h]-b[h-1],d>0&&(g===w||d<g)?g=d:d<0&&this.requireSorting&&ka(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c;if(i.pointRange===null)this.pointRange=g||1;this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=o(this.cropShoulder,1),i;for(i=0;i<e;i++)if(a[i]>=c){f=s(0,i-h);break}for(;i<e;i++)if(a[i]>d){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data,\nb=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],m;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(m=0;m<g;m++)i=h+m,j?l[m]=(new f).init(this,[d[m]].concat(ja(e[m]))):(b[i]?k=b[i]:a[i]!==w&&(b[i]=k=(new f).init(this,a[i],d[m])),l[m]=k);if(b&&(g!==(c=b.length)||j))for(m=0;m<c;m++)if(m===h&&!j&&(m+=g),b[m])b[m].destroyElements(),b[m].plotX=w;this.data=b;this.points=l},setStackedPoints:function(){if(this.options.stacking&&\n!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.stack,e=e.stacking,h=this.stackKey,i=\"-\"+h,j=this.negStacks,k=this.yAxis,l=k.stacks,m=k.oldStacks,p,q,o,n,t;for(o=0;o<d;o++){n=a[o];t=b[o];q=(p=j&&t<f)?i:h;l[q]||(l[q]={});if(!l[q][n])m[q]&&m[q][n]?(l[q][n]=m[q][n],l[q][n].total=null):l[q][n]=new Mb(k,k.options.stackLabels,p,n,g,e);q=l[q][n];q.points[this.index]=[q.cum||0];e===\"percent\"?\n(p=p?h:i,j&&l[p]&&l[p][n]?(p=l[p][n],q.total=p.total=s(p.total,q.total)+N(t)||0):q.total+=N(t)||0):q.total+=t||0;q.cum=(q.cum||0)+(t||0);q.points[this.index].push(q.cum);c[o]=q.cum}if(e===\"percent\")k.usePercentage=!0;this.stackedYData=c;k.oldStacks={}}},setPercentStacks:function(){var a=this,b=a.stackKey,c=a.yAxis.stacks;n([b,\"-\"+b],function(b){var d;for(var e=a.xData.length,f,g;e--;)if(f=a.xData[e],d=(g=c[b]&&c[b][f])&&g.points[a.index],f=d)g=g.total?100/g.total:0,f[0]=ia(f[0]*g),f[1]=ia(f[1]*g),\na.stackedYData[e]=f[1]})},getExtremes:function(){var a=this.yAxis,b=this.processedXData,c=this.stackedYData||this.processedYData,d=c.length,e=[],f=0,g=this.xAxis.getExtremes(),h=g.min,g=g.max,i,j,k,l;for(l=0;l<d;l++)if(j=b[l],k=c[l],i=k!==null&&k!==w&&(!a.isLog||k.length||k>0),j=this.getExtremesFromAll||this.cropped||(b[l+1]||j)>=h&&(b[l-1]||j)<=g,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=o(void 0,Ja(e));this.dataMax=o(void 0,va(e))},translate:function(){this.processedXData||\nthis.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i===\"between\"||sa(i),k=a.threshold,a=0;a<g;a++){var l=f[a],m=l.x,p=l.y,q=l.low,n=e.stacks[(this.negStacks&&p<k?\"-\":\"\")+this.stackKey];if(e.isLog&&p<=0)l.y=p=null;l.plotX=c.translate(m,0,0,0,1,i,this.type===\"flags\");if(b&&this.visible&&n&&n[m])n=n[m],p=n.points[this.index],q=p[0],p=p[1],q===0&&(q=o(k,e.min)),e.isLog&&\nq<=0&&(q=null),l.percentage=b===\"percent\"&&p,l.total=l.stackTotal=n.total,l.stackY=p,n.setOffset(this.pointXOffset||0,this.barW||0);l.yBottom=u(q)?e.translate(q,0,1,0,1):null;h&&(p=this.modifyValue(p,l));l.plotY=typeof p===\"number\"&&p!==Infinity?e.translate(p,0,1,0,1):w;l.clientX=j?c.translate(m,0,0,0,1):l.plotX;l.negative=l.y<(k||0);l.category=d&&d[l.x]!==w?d[l.x]:l.x}this.getSegments()},setTooltipPoints:function(a){var b=[],c,d,e=this.xAxis,f=e&&e.getExtremes(),g=e?e.tooltipLen||e.len:this.chart.plotSizeX,\nh,i,j=[];if(this.options.enableMouseTracking!==!1){if(a)this.tooltipPoints=null;n(this.segments||this.points,function(a){b=b.concat(a)});e&&e.reversed&&(b=b.reverse());this.orderTooltipPoints&&this.orderTooltipPoints(b);a=b.length;for(i=0;i<a;i++)if(e=b[i],c=e.x,c>=f.min&&c<=f.max){h=b[i+1];c=d===w?0:d+1;for(d=b[i+1]?I(s(0,P((e.clientX+(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},tooltipHeaderFormatter:function(a){var b=this.tooltipOptions,c=b.xDateFormat,\nd=b.dateTimeLabelFormats,e=this.xAxis,f=e&&e.options.type===\"datetime\",b=b.headerFormat,e=e&&e.closestPointRange,g;if(f&&!c)if(e)for(g in D){if(D[g]>=e){c=d[g];break}}else c=d.day;f&&c&&sa(a.key)&&(b=b.replace(\"{point.key}\",\"{point.key:\"+c+\"}\"));return Ca(b,{point:a,series:this})},onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&z(this,\"mouseOver\");this.setState(\"hover\");a.hoverSeries=this},onMouseOut:function(){var a=this.options,\nb=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&z(this,\"mouseOut\");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState();b.hoverSeries=null},animate:function(a){var b=this,c=b.chart,d=c.renderer,e;e=b.options.animation;var f=c.clipBox,g=c.inverted,h;if(e&&!T(e))e=Y[b.type].animation;h=\"_sharedClip\"+e.duration+e.easing;if(a)a=c[h],e=c[h+\"m\"],a||(c[h]=a=d.clipRect(r(f,{width:0})),c[h+\"m\"]=e=d.clipRect(-99,g?-c.plotLeft:-c.plotTop,99,g?\nc.chartWidth:c.chartHeight)),b.group.clip(a),b.markerGroup.clip(e),b.sharedClipKey=h;else{if(a=c[h])a.animate({width:c.plotSizeX},e),c[h+\"m\"].animate({width:c.plotSizeX+99},e);b.animate=null;b.animationTimeout=setTimeout(function(){b.afterAnimate()},e.duration)}},afterAnimate:function(){var a=this.chart,b=this.sharedClipKey,c=this.group;c&&this.options.clip!==!1&&(c.clip(a.clipRect),this.markerGroup.clip());setTimeout(function(){b&&a[b]&&(a[b]=a[b].destroy(),a[b+\"m\"]=a[b+\"m\"].destroy())},100)},drawPoints:function(){var a,\nb=this.points,c=this.chart,d,e,f,g,h,i,j,k,l=this.options.marker,m,p=this.markerGroup;if(l.enabled||this._hasPointMarkers)for(f=b.length;f--;)if(g=b[f],d=P(g.plotX),e=g.plotY,k=g.graphic,i=g.marker||{},a=l.enabled&&i.enabled===w||i.enabled,m=c.isInsidePlot(t(d),e,c.inverted),a&&e!==w&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?\"select\":\"\"],h=a.r,i=o(i.symbol,this.symbol),j=i.indexOf(\"url\")===0,k)k.attr({visibility:m?Z?\"inherit\":\"visible\":\"hidden\"}).animate(r({x:d-h,y:e-h},k.symbolName?{width:2*\nh,height:2*h}:{}));else{if(m&&(h>0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(p)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=o(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=Y[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color,h={stroke:g,fill:g},i=a.points||[],j=[],k,l=a.pointAttrToOptions,m=b.negativeColor,p=c.lineColor,q;\nb.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color=e.color||ra(e.color||g).brighten(e.brightness).get();j[\"\"]=a.convertAttribs(c,h);n([\"hover\",\"select\"],function(b){j[b]=a.convertAttribs(d[b],j[\"\"])});a.pointAttr=j;for(g=i.length;g--;){h=i[g];if((c=h.options&&h.options.marker||h.options)&&c.enabled===!1)c.radius=0;if(h.negative&&m)h.color=h.fillColor=m;f=b.colorByPoint||h.color;if(h.options)for(q in l)u(c[l[q]])&&(f=!0);if(f){c=c||{};k=[];d=c.states||{};f=d.hover=\nd.hover||{};if(!b.marker)f.color=ra(f.color||h.color).brighten(f.brightness||e.brightness).get();k[\"\"]=a.convertAttribs(r({color:h.color,fillColor:h.color,lineColor:p===null?h.color:w},c),j[\"\"]);k.hover=a.convertAttribs(d.hover,j.hover,k[\"\"]);k.select=a.convertAttribs(d.select,j.select,k[\"\"])}else k=j;h.pointAttr=k}},update:function(a,b){var c=this.chart,d=this.type,e=W[d].prototype,f,a=x(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);\nfor(f in e)e.hasOwnProperty(f)&&(this[f]=w);r(this,W[a.type||d].prototype);this.init(c,a);o(b,!0)&&c.redraw(!1)},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\\/533/.test(oa),d,e,f=a.data||[],g,h,i;z(a,\"destroy\");aa(a);n([\"xAxis\",\"yAxis\"],function(b){if(i=a[b])ga(i.series,a),i.isDirty=i.forceRedraw=!0,i.stacks={}});a.legendItem&&a.chart.legend.destroyItem(a);for(e=f.length;e--;)(g=f[e])&&g.destroy&&g.destroy();a.points=null;clearTimeout(a.animationTimeout);n(\"area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip\".split(\",\"),\nfunction(b){a[b]&&(d=c&&b===\"group\"?\"hide\":\"destroy\",a[b][d]())});if(b.hoverSeries===a)b.hoverSeries=null;ga(b.series,a);for(h in a)delete a[h]},drawDataLabels:function(){var a=this,b=a.options.dataLabels,c=a.points,d,e,f,g;if(b.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(b),g=a.plotGroup(\"dataLabelsGroup\",\"data-labels\",a.visible?\"visible\":\"hidden\",b.zIndex||6),e=b,n(c,function(c){var i,j=c.dataLabel,k,l,m=c.connector,p=!0;d=c.options&&c.options.dataLabels;i=o(d&&d.enabled,e.enabled);\nif(j&&!i)c.dataLabel=j.destroy();else if(i){b=x(e,d);i=b.rotation;k=c.getLabelConfig();f=b.format?Ca(b.format,k):b.formatter.call(k,b);b.style.color=o(b.color,b.style.color,a.color,\"black\");if(j)if(u(f))j.attr({text:f}),p=!1;else{if(c.dataLabel=j=j.destroy(),m)c.connector=m.destroy()}else if(u(f)){j={fill:b.backgroundColor,stroke:b.borderColor,\"stroke-width\":b.borderWidth,r:b.borderRadius||0,rotation:i,padding:b.padding,zIndex:1};for(l in j)j[l]===w&&delete j[l];j=c.dataLabel=a.chart.renderer[i?\"text\":\n\"label\"](f,0,-999,null,null,null,b.useHTML).attr(j).css(b.style).add(g).shadow(b.shadow)}j&&a.alignDataLabel(c,j,b,null,p)}})},alignDataLabel:function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=o(a.plotX,-999),i=o(a.plotY,-999),j=b.getBBox();if(a=this.visible&&f.isInsidePlot(a.plotX,a.plotY,g))d=r({x:g?f.plotWidth-i:h,y:t(g?f.plotHeight-h:i),width:0,height:0},d),r(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?\"attr\":\"animate\"](g)):(b.align(c,\nnull,d),g=b.alignAttr,o(c.overflow,\"justify\")===\"justify\"?this.justifyDataLabel(b,c,g,j,d,e):o(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));a||b.attr({y:-999})},justifyDataLabel:function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h===\"right\"?b.align=\"left\":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h===\"left\"?b.align=\"right\":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i===\"bottom\"?b.verticalAlign=\"top\":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i===\n\"top\"?b.verticalAlign=\"bottom\":b.y=g.plotHeight-j,k=!0;if(k)a.placed=!f,a.align(b,null,e)},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;n(a,function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,e,f)):(c.push(f?\"L\":\"M\"),d&&f&&(i=a[f-1],d===\"right\"?c.push(i.plotX,h):d===\"center\"?c.push((i.plotX+g)/2,i.plotY,(i.plotX+g)/2,h):c.push(g,i.plotY)),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a=this,b=[],c,d=[];n(a.segments,function(e){c=\na.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[[\"graph\",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=this.getGraphPath(),g=b.negativeColor;g&&c.push([\"graphNeg\",g]);n(c,function(c,g){var j=c[0],k=a[j];if(k)Wa(k),k.animate({d:f});else if(d&&f.length)k={stroke:c[1],\"stroke-width\":d,zIndex:1},e?k.dashstyle=e:k[\"stroke-linecap\"]=k[\"stroke-linejoin\"]=\"round\",a[j]=a.chart.renderer.path(f).attr(k).add(a.group).shadow(!g&&\nb.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j=b.chartHeight,k=s(e,j),l=this.yAxis;if(d&&(f||g)){d=t(l.toPixels(a.threshold||0,!0));a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth-d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?\n(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};n([\"group\",\"markerGroup\"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)J(c,\"resize\",a),J(b,\"destroy\",function(){aa(c,\"resize\",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],\ng=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?\"attr\":\"animate\"](this.getPlotBox());return f},getPlotBox:function(){return{translateX:this.xAxis?this.xAxis.left:this.chart.plotLeft,translateY:this.yAxis?this.yAxis.top:this.chart.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this.chart,b,c=this.options,d=c.animation&&!!this.animate&&a.renderer.isSVG,e=this.visible?\"visible\":\"hidden\",f=c.zIndex,g=this.hasRendered,h=a.seriesGroup;b=this.plotGroup(\"group\",\n\"series\",e,f,h);this.markerGroup=this.plotGroup(\"markerGroup\",\"markers\",e,f,h);d&&this.animate(!0);this.getAttribs();b.inverted=this.isCartesian?a.inverted:!1;this.drawGraph&&(this.drawGraph(),this.clipNeg());this.drawDataLabels();this.drawPoints();this.options.enableMouseTracking!==!1&&this.drawTracker();a.inverted&&this.invertGroups();c.clip!==!1&&!this.sharedClipKey&&!g&&b.clip(a.clipRect);d?this.animate():g||this.afterAnimate();this.isDirty=this.isDirtyData=!1;this.hasRendered=!0},redraw:function(){var a=\nthis.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:o(d&&d.left,a.plotLeft),translateY:o(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints(!0);this.render();b&&z(this,\"updatedData\")},setState:function(a){var b=this.options,c=this.graph,d=this.graphNeg,e=b.states,b=b.lineWidth,a=a||\"\";if(this.state!==a)this.state=a,e[a]&&e[a].enabled===!1||(a&&(b=e[a].lineWidth||b+1),c&&!c.dashstyle&&\n(a={\"stroke-width\":b},c.attr(a),d&&d.attr(a)))},setVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===w?!h:a)?\"show\":\"hide\";n([\"group\",\"dataLabelsGroup\",\"markerGroup\",\"tracker\"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&n(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});n(c.linkedSeries,function(b){b.setVisible(a,\n!1)});if(g)d.isDirtyBox=!0;b!==!1&&d.redraw();z(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===w?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;z(this,a?\"select\":\"unselect\")},drawTracker:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,p=function(){if(f.hoverSeries!==\na)a.onMouseOver()};if(e&&!c)for(m=e+1;m--;)d[m]===\"M\"&&d.splice(m+1,0,d[m+1]-i,d[m+2],\"L\"),(m&&d[m]===\"M\"||m===e)&&d.splice(m,0,\"L\",d[m-2]+i,d[m-1]);for(m=0;m<k.length;m++)e=k[m],d.push(\"M\",e.plotX-i,e.plotY,\"L\",e.plotX+i,e.plotY);j?j.attr({d:d}):(a.tracker=h.path(d).attr({\"stroke-linejoin\":\"round\",visibility:a.visible?\"visible\":\"hidden\",stroke:Qb,fill:c?Qb:S,\"stroke-width\":b.lineWidth+(c?0:2*i),zIndex:2}).add(a.group),n([a.tracker,a.markerGroup],function(a){a.addClass(\"highcharts-tracker\").on(\"mouseover\",\np).on(\"mouseout\",function(a){g.onTrackerMouseOut(a)}).css(l);if(ib)a.on(\"touchstart\",p)}))}};G=ha(Q);W.line=G;Y.area=x(X,{threshold:0});G=ha(Q,{type:\"area\",getSegments:function(){var a=[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,m,p;if(this.options.stacking&&!this.cropped){for(m=0;m<j.length;m++)g[j[m].x]=j[m];for(p in f)c.push(+p);c.sort(function(a,b){return a-b});n(c,function(a){if(!k||g[a]&&g[a].y!==null)g[a]?b.push(g[a]):\n(h=d.translate(a),l=f[a].percent?f[a].total?f[a].cum*100/f[a].total:0:f[a].cum,i=e.toPixels(l,!0),b.push({y:null,plotX:h,clientX:h,plotY:i,yBottom:i,onMouseOver:pa}))});b.length&&a.push(b)}else Q.prototype.getSegments.call(this),a=this.segments;this.segments=a},getSegmentPath:function(a){var b=Q.prototype.getSegmentPath.call(this,a),c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),g;d===3&&c.push(\"L\",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length-\n1;d>=0;d--)g=o(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},closeSegment:function(a,b,c){a.push(\"L\",b[b.length-1].plotX,c,\"L\",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];Q.prototype.drawGraph.apply(this);var a=this,b=this.areaPath,c=this.options,d=c.negativeColor,e=c.negativeFillColor,f=[[\"area\",this.color,c.fillColor]];(d||e)&&f.push([\"areaNeg\",d,e]);n(f,function(d){var e=d[0],\nf=a[e];f?f.animate({d:b}):a[e]=a.chart.renderer.path(b).attr({fill:o(d[2],ra(d[1]).setOpacity(o(c.fillOpacity,0.75)).get()),zIndex:0}).add(a.group)})},drawLegendSymbol:function(a,b){b.legendSymbol=this.chart.renderer.rect(0,a.baseline-11,a.options.symbolWidth,12,2).attr({zIndex:3}).add(b.legendGroup)}});W.area=G;Y.spline=x(X);F=ha(Q,{type:\"spline\",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,j,k;if(f&&g){a=f.plotY;j=g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5*\ne+a)/2.5;j=(1.5*d+j)/2.5;k=(1.5*e+g)/2.5;l=(k-i)*(j-d)/(j-h)+e-k;i+=l;k+=l;i>a&&i>e?(i=s(a,e),k=2*e-i):i<a&&i<e&&(i=I(a,e),k=2*e-i);k>g&&k>e?(k=s(g,e),i=2*e-k):k<g&&k<e&&(k=I(g,e),i=2*e-k);b.rightContX=j;b.rightContY=k}c?(b=[\"C\",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=f.rightContY=null):b=[\"M\",d,e];return b}});W.spline=F;Y.areaspline=x(Y.area);ma=G.prototype;F=ha(F,{type:\"areaspline\",closedStacks:!0,getSegmentPath:ma.getSegmentPath,closeSegment:ma.closeSegment,drawGraph:ma.drawGraph,\ndrawLegendSymbol:ma.drawLegendSymbol});W.areaspline=F;Y.column=x(X,{borderColor:\"#FFFFFF\",borderWidth:1,borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1},select:{color:\"#C0C0C0\",borderColor:\"#000000\",shadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},stickyTracking:!1,threshold:0});F=ha(Q,{type:\"column\",pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\",\nr:\"borderRadius\"},cropShoulder:0,trackerGroups:[\"group\",\"dataLabelsGroup\"],negStacks:!0,init:function(){Q.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=c.reversed,f,g={},h,i=0;b.grouping===!1?i=1:n(a.chart.series,function(b){var c=b.options,e=b.yAxis;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos===e.pos)c.stacking?(f=b.stackKey,g[f]===\nw&&(g[f]=i++),h=g[f]):c.grouping!==!1&&(h=i++),b.columnIndex=h});var c=I(N(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||1),c.len),j=c*b.groupPadding,k=(c-2*j)/i,l=b.pointWidth,b=u(l)?(k-l)/2:k*b.pointPadding,l=o(l,k-2*b);return a.columnMetrics={width:l,offset:b+(j+((e?i-(a.columnIndex||0):a.columnIndex)||0)*k-c/2)*(e?-1:1)}},translate:function(){var a=this.chart,b=this.options,c=b.borderWidth,d=this.yAxis,e=this.translatedThreshold=d.getThreshold(b.threshold),f=o(b.minPointLength,\n5),b=this.getColumnMetrics(),g=b.width,h=this.barW=xa(s(g,1+2*c)),i=this.pointXOffset=b.offset,j=-(c%2?0.5:0),k=c%2?0.5:1;a.renderer.isVML&&a.inverted&&(k+=1);Q.prototype.translate.apply(this);n(this.points,function(a){var b=o(a.yBottom,e),c=I(s(-999-b,a.plotY),d.len+999+b),n=a.plotX+i,u=h,r=I(c,b),w,c=s(c,b)-r;N(c)<f&&f&&(c=f,r=t(N(r-e)>f?b-f:e-(d.translate(a.y,0,1,0,1)<=e?f:0)));a.barX=n;a.pointWidth=g;b=N(n)<0.5;u=t(n+u)+j;n=t(n)+j;u-=n;w=N(r)<0.5;c=t(r+c)+k;r=t(r)+k;c-=r;b&&(n+=1,u-=1);w&&(r-=\n1,c+=1);a.shapeType=\"rect\";a.shapeArgs={x:n,y:r,width:u,height:c}})},getSymbol:pa,drawLegendSymbol:G.prototype.drawLegendSymbol,drawGraph:pa,drawPoints:function(){var a=this,b=a.options,c=a.chart.renderer,d;n(a.points,function(e){var f=e.plotY,g=e.graphic;if(f!==w&&!isNaN(f)&&e.y!==null)d=e.shapeArgs,g?(Wa(g),g.animate(x(d))):e.graphic=c[e.shapeType](d).attr(e.pointAttr[e.selected?\"select\":\"\"]).add(a.group).shadow(b.shadow,null,b.stacking&&!b.borderRadius);else if(g)e.graphic=g.destroy()})},drawTracker:function(){var a=\nthis,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver();for(;d&&!e;)e=d.point,d=d.parentNode;if(e!==w&&e!==b.hoverPoint)e.onMouseOver(c)};n(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)n(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass(\"highcharts-tracker\").on(\"mouseover\",f).on(\"mouseout\",function(a){c.onTrackerMouseOut(a)}).css(e),ib))a[b].on(\"touchstart\",\nf)}),a._hasTracking=!0},alignDataLabel:function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=a.dlBox||a.shapeArgs,i=a.below||a.plotY>o(this.translatedThreshold,f.plotSizeY),j=o(c.inside,!!this.options.stacking);if(h&&(d=x(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=o(c.align,!g||j?\"center\":i?\"right\":\"left\");c.verticalAlign=o(c.verticalAlign,g||j?\"middle\":i?\"top\":\"bottom\");Q.prototype.alignDataLabel.call(this,\na,b,c,d,e)},animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(Z)a?(e.scaleY=0.001,a=I(b.pos+b.len,s(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?\"translateX\":\"translateY\"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0});Q.prototype.remove.apply(a,arguments)}});W.column=F;Y.bar=\nx(Y.column);ma=ha(F,{type:\"bar\",inverted:!0});W.bar=ma;Y.scatter=x(X,{lineWidth:0,tooltip:{headerFormat:'<span style=\"font-size: 10px; color:{series.color}\">{series.name}</span><br/>',pointFormat:\"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>\",followPointer:!0},stickyTracking:!1});ma=ha(Q,{type:\"scatter\",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"markerGroup\"],drawTracker:F.prototype.drawTracker,setTooltipPoints:pa});W.scatter=ma;Y.pie=x(X,{borderColor:\"#FFFFFF\",borderWidth:1,\ncenter:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0,legendType:\"point\",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});X={type:\"pie\",isCartesian:!1,pointClass:ha(Pa,{init:function(){Pa.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;r(a,{visible:a.visible!==!1,name:o(a.name,\"Slice\")});b=function(b){a.slice(b.type===\n\"select\")};J(a,\"select\",b);J(a,\"unselect\",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart,e;b.visible=b.options.visible=a=a===w?!b.visible:a;c.options.data[qa(b,c.data)]=b.options;e=a?\"show\":\"hide\";n([\"graphic\",\"dataLabel\",\"connector\",\"shadowGroup\"],function(a){if(b[a])b[a][e]()});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;La(c,d.chart);o(b,!0);this.sliced=this.options.sliced=\na=u(a)?a:!this.sliced;d.options.data[qa(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"group\",\"dataLabelsGroup\"],pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\"},getColor:pa,animate:function(a){var b=this,c=b.points,d=b.startAngleRad;if(!a)n(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/\n2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b){Q.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();o(b,!0)&&this.chart.redraw()},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;Q.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0?e.y/b*100:0,e.total=b},getCenter:function(){var a=\nthis.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[o(b[0],\"50%\"),o(b[1],\"50%\"),a.size||\"100%\",a.innerSize||0],g=I(e,f),h;return Na(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*C(a)/100:a)+(d?c:0)})},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=ya/180*(i-90),i=(this.endAngleRad=ya/180*((c.endAngle||i+360)-90))-j,k=this.points,\nl=c.dataLabels.distance,c=c.ignoreHiddenPoint,m,n=k.length,o;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=R.asin((b-a[1])/(a[2]/2+l));return a[0]+(c?-1:1)*V(h)*(a[2]/2+l)};for(m=0;m<n;m++){o=k[m];f=j+b*i;if(!c||o.visible)b+=o.percentage/100;g=j+b*i;o.shapeType=\"arc\";o.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:t(f*1E3)/1E3,end:t(g*1E3)/1E3};h=(g+f)/2;h>0.75*i&&(h-=2*ya);o.slicedTranslation={translateX:t(V(h)*d),translateY:t(ca(h)*d)};f=V(h)*a[2]/2;g=ca(h)*a[2]/2;o.tooltipPos=\n[a[0]+f*0.7,a[1]+g*0.7];o.half=h<-ya/2||h>ya/2?1:0;o.angle=h;e=I(e,l/2);o.labelPos=[a[0]+f+V(h)*l,a[1]+g+ca(h)*l,a[0]+f+V(h)*e,a[1]+g+ca(h)*e,a[0]+f,a[1]+g,l<0?\"center\":o.half?\"right\":\"left\",h]}},setTooltipPoints:pa,drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g(\"shadow\").add(a.group);n(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g(\"shadow\").add(a.shadowGroup);c=h.sliced?\nh.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(r(g,c)):h.graphic=d=b.arc(g).setRadialReference(a.center).attr(h.pointAttr[h.selected?\"select\":\"\"]).attr({\"stroke-linejoin\":\"round\"}).attr(c).add(a.group).shadow(e,f);h.visible===!1&&h.setVisible(!1)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawDataLabels:function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=o(e.connectorPadding,10),g=o(e.connectorWidth,1),\nh=d.plotWidth,d=d.plotHeight,i,j,k=o(e.softConnector,!0),l=e.distance,m=a.center,p=m[2]/2,q=m[1],u=l>0,r,w,v,x,C=[[],[]],y,z,E,H,B,D=[0,0,0,0],I=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){Q.prototype.drawDataLabels.apply(a);n(b,function(a){a.dataLabel&&C[a.half].push(a)});for(H=0;!x&&b[H];)x=b[H]&&b[H].dataLabel&&(b[H].dataLabel.getBBox().height||21),H++;for(H=2;H--;){var b=[],K=[],G=C[H],J=G.length,F;a.sortByAngle(G,H-0.5);if(l>0){for(B=q-p-l;B<=q+p+l;B+=x)b.push(B);\nw=b.length;if(J>w){c=[].concat(G);c.sort(I);for(B=J;B--;)c[B].rank=B;for(B=J;B--;)G[B].rank>=w&&G.splice(B,1);J=G.length}for(B=0;B<J;B++){c=G[B];v=c.labelPos;c=9999;var O,M;for(M=0;M<w;M++)O=N(b[M]-v[1]),O<c&&(c=O,F=M);if(F<B&&b[B]!==null)F=B;else for(w<J-B+F&&b[B]!==null&&(F=w-J+B);b[F]===null;)F++;K.push({i:F,y:b[F]});b[F]=null}K.sort(I)}for(B=0;B<J;B++){c=G[B];v=c.labelPos;r=c.dataLabel;E=c.visible===!1?\"hidden\":\"visible\";c=v[1];if(l>0){if(w=K.pop(),F=w.i,z=w.y,c>z&&b[F+1]!==null||c<z&&b[F-1]!==\nnull)z=c}else z=c;y=e.justify?m[0]+(H?-1:1)*(p+l):a.getX(F===0||F===b.length-1?c:z,H);r._attr={visibility:E,align:v[6]};r._pos={x:y+e.x+({left:f,right:-f}[v[6]]||0),y:z+e.y-10};r.connX=y;r.connY=z;if(this.options.size===null)w=r.width,y-w<f?D[3]=s(t(w-y+f),D[3]):y+w>h-f&&(D[1]=s(t(y+w-h+f),D[1])),z-x/2<0?D[0]=s(t(-z+x/2),D[0]):z+x/2>d&&(D[2]=s(t(z+x/2-d),D[2]))}}if(va(D)===0||this.verifyDataLabelOverflow(D))this.placeDataLabels(),u&&g&&n(this.points,function(b){i=b.connector;v=b.labelPos;if((r=b.dataLabel)&&\nr._pos)E=r._attr.visibility,y=r.connX,z=r.connY,j=k?[\"M\",y+(v[6]===\"left\"?5:-5),z,\"C\",y,z,2*v[2]-v[4],2*v[3]-v[5],v[2],v[3],\"L\",v[4],v[5]]:[\"M\",y+(v[6]===\"left\"?5:-5),z,\"L\",v[2],v[3],\"L\",v[4],v[5]],i?(i.animate({d:j}),i.attr(\"visibility\",E)):b.connector=i=a.chart.renderer.path(j).attr({\"stroke-width\":g,stroke:e.connectorColor||b.color||\"#606060\",visibility:E}).add(a.group);else if(i)b.connector=i.destroy()})}},verifyDataLabelOverflow:function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||\n80,f;d[0]!==null?e=s(b[2]-s(a[1],a[3]),c):(e=s(b[2]-a[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=s(I(e,b[2]-s(a[0],a[2])),c):(e=s(I(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);e<b[2]?(b[2]=e,this.translate(b),n(this.points,function(a){if(a.dataLabel)a.dataLabel._pos=null}),this.drawDataLabels()):f=!0;return f},placeDataLabels:function(){n(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?\"animate\":\"attr\"](b),a.moved=!0):a&&a.attr({y:-999})})},alignDataLabel:pa,\ndrawTracker:F.prototype.drawTracker,drawLegendSymbol:G.prototype.drawLegendSymbol,getSymbol:pa};X=ha(Q,X);W.pie=X;r(Highcharts,{Axis:db,Chart:yb,Color:ra,Legend:eb,Pointer:xb,Point:Pa,Tick:Ma,Tooltip:wb,Renderer:Va,Series:Q,SVGElement:wa,SVGRenderer:Ha,arrayMin:Ja,arrayMax:va,charts:Ga,dateFormat:Xa,format:Ca,pathAnim:Ab,getOptions:function(){return M},hasBidiBug:Ub,isTouchDevice:Ob,numberFormat:Aa,seriesTypes:W,setOptions:function(a){M=x(M,a);Lb();return M},addEvent:J,removeEvent:aa,createElement:U,\ndiscardElement:Ta,css:K,each:n,extend:r,map:Na,merge:x,pick:o,splat:ja,extendClass:ha,pInt:C,wrap:mb,svg:Z,canvas:$,vml:!Z&&!$,product:\"Highcharts\",version:\"3.0.6\"})})();\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/highcharts.src.js",
    "content": "// ==ClosureCompiler==\n// @compilation_level SIMPLE_OPTIMIZATIONS\n\n/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n * (c) 2009-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console, each, grep */\n\n(function () {\n// encapsulated variables\nvar UNDEFINED,\n\tdoc = document,\n\twin = window,\n\tmath = Math,\n\tmathRound = math.round,\n\tmathFloor = math.floor,\n\tmathCeil = math.ceil,\n\tmathMax = math.max,\n\tmathMin = math.min,\n\tmathAbs = math.abs,\n\tmathCos = math.cos,\n\tmathSin = math.sin,\n\tmathPI = math.PI,\n\tdeg2rad = mathPI * 2 / 360,\n\n\n\t// some variables\n\tuserAgent = navigator.userAgent,\n\tisOpera = win.opera,\n\tisIE = /msie/i.test(userAgent) && !isOpera,\n\tdocMode8 = doc.documentMode === 8,\n\tisWebKit = /AppleWebKit/.test(userAgent),\n\tisFirefox = /Firefox/.test(userAgent),\n\tisTouchDevice = /(Mobile|Android|Windows Phone)/.test(userAgent),\n\tSVG_NS = 'http://www.w3.org/2000/svg',\n\thasSVG = !!doc.createElementNS && !!doc.createElementNS(SVG_NS, 'svg').createSVGRect,\n\thasBidiBug = isFirefox && parseInt(userAgent.split('Firefox/')[1], 10) < 4, // issue #38\n\tuseCanVG = !hasSVG && !isIE && !!doc.createElement('canvas').getContext,\n\tRenderer,\n\thasTouch = doc.documentElement.ontouchstart !== UNDEFINED,\n\tsymbolSizes = {},\n\tidCounter = 0,\n\tgarbageBin,\n\tdefaultOptions,\n\tdateFormat, // function\n\tglobalAnimation,\n\tpathAnim,\n\ttimeUnits,\n\tnoop = function () {},\n\tcharts = [],\n\tPRODUCT = 'Highcharts',\n\tVERSION = '3.0.6',\n\n\t// some constants for frequently used strings\n\tDIV = 'div',\n\tABSOLUTE = 'absolute',\n\tRELATIVE = 'relative',\n\tHIDDEN = 'hidden',\n\tPREFIX = 'highcharts-',\n\tVISIBLE = 'visible',\n\tPX = 'px',\n\tNONE = 'none',\n\tM = 'M',\n\tL = 'L',\n\t/*\n\t * Empirical lowest possible opacities for TRACKER_FILL\n\t * IE6: 0.002\n\t * IE7: 0.002\n\t * IE8: 0.002\n\t * IE9: 0.00000000001 (unlimited)\n\t * IE10: 0.0001 (exporting only)\n\t * FF: 0.00000000001 (unlimited)\n\t * Chrome: 0.000001\n\t * Safari: 0.000001\n\t * Opera: 0.00000000001 (unlimited)\n\t */\n\tTRACKER_FILL = 'rgba(192,192,192,' + (hasSVG ? 0.0001 : 0.002) + ')', // invisible but clickable\n\t//TRACKER_FILL = 'rgba(192,192,192,0.5)',\n\tNORMAL_STATE = '',\n\tHOVER_STATE = 'hover',\n\tSELECT_STATE = 'select',\n\tMILLISECOND = 'millisecond',\n\tSECOND = 'second',\n\tMINUTE = 'minute',\n\tHOUR = 'hour',\n\tDAY = 'day',\n\tWEEK = 'week',\n\tMONTH = 'month',\n\tYEAR = 'year',\n\n\t// constants for attributes\n\tLINEAR_GRADIENT = 'linearGradient',\n\tSTOPS = 'stops',\n\tSTROKE_WIDTH = 'stroke-width',\n\n\t// time methods, changed based on whether or not UTC is used\n\tmakeTime,\n\tgetMinutes,\n\tgetHours,\n\tgetDay,\n\tgetDate,\n\tgetMonth,\n\tgetFullYear,\n\tsetMinutes,\n\tsetHours,\n\tsetDate,\n\tsetMonth,\n\tsetFullYear,\n\n\n\t// lookup over the types and the associated classes\n\tseriesTypes = {};\n\n// The Highcharts namespace\nwin.Highcharts = win.Highcharts ? error(16, true) : {};\n\n/**\n * Extend an object with the members of another\n * @param {Object} a The object to be extended\n * @param {Object} b The object to add to the first one\n */\nfunction extend(a, b) {\n\tvar n;\n\tif (!a) {\n\t\ta = {};\n\t}\n\tfor (n in b) {\n\t\ta[n] = b[n];\n\t}\n\treturn a;\n}\n\t\n/**\n * Deep merge two or more objects and return a third object.\n * Previously this function redirected to jQuery.extend(true), but this had two limitations.\n * First, it deep merged arrays, which lead to workarounds in Highcharts. Second,\n * it copied properties from extended prototypes. \n */\nfunction merge() {\n\tvar i,\n\t\tlen = arguments.length,\n\t\tret = {},\n\t\tdoCopy = function (copy, original) {\n\t\t\tvar value, key;\n\n\t\t\t// An object is replacing a primitive\n\t\t\tif (typeof copy !== 'object') {\n\t\t\t\tcopy = {};\n\t\t\t}\n\n\t\t\tfor (key in original) {\n\t\t\t\tif (original.hasOwnProperty(key)) {\n\t\t\t\t\tvalue = original[key];\n\n\t\t\t\t\t// Copy the contents of objects, but not arrays or DOM nodes\n\t\t\t\t\tif (value && typeof value === 'object' && Object.prototype.toString.call(value) !== '[object Array]'\n\t\t\t\t\t\t\t&& typeof value.nodeType !== 'number') {\n\t\t\t\t\t\tcopy[key] = doCopy(copy[key] || {}, value);\n\t\t\t\t\n\t\t\t\t\t// Primitives and arrays are copied over directly\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcopy[key] = original[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t};\n\n\t// For each argument, extend the return\n\tfor (i = 0; i < len; i++) {\n\t\tret = doCopy(ret, arguments[i]);\n\t}\n\n\treturn ret;\n}\n\n/**\n * Take an array and turn into a hash with even number arguments as keys and odd numbers as\n * values. Allows creating constants for commonly used style properties, attributes etc.\n * Avoid it in performance critical situations like looping\n */\nfunction hash() {\n\tvar i = 0,\n\t\targs = arguments,\n\t\tlength = args.length,\n\t\tobj = {};\n\tfor (; i < length; i++) {\n\t\tobj[args[i++]] = args[i];\n\t}\n\treturn obj;\n}\n\n/**\n * Shortcut for parseInt\n * @param {Object} s\n * @param {Number} mag Magnitude\n */\nfunction pInt(s, mag) {\n\treturn parseInt(s, mag || 10);\n}\n\n/**\n * Check for string\n * @param {Object} s\n */\nfunction isString(s) {\n\treturn typeof s === 'string';\n}\n\n/**\n * Check for object\n * @param {Object} obj\n */\nfunction isObject(obj) {\n\treturn typeof obj === 'object';\n}\n\n/**\n * Check for array\n * @param {Object} obj\n */\nfunction isArray(obj) {\n\treturn Object.prototype.toString.call(obj) === '[object Array]';\n}\n\n/**\n * Check for number\n * @param {Object} n\n */\nfunction isNumber(n) {\n\treturn typeof n === 'number';\n}\n\nfunction log2lin(num) {\n\treturn math.log(num) / math.LN10;\n}\nfunction lin2log(num) {\n\treturn math.pow(10, num);\n}\n\n/**\n * Remove last occurence of an item from an array\n * @param {Array} arr\n * @param {Mixed} item\n */\nfunction erase(arr, item) {\n\tvar i = arr.length;\n\twhile (i--) {\n\t\tif (arr[i] === item) {\n\t\t\tarr.splice(i, 1);\n\t\t\tbreak;\n\t\t}\n\t}\n\t//return arr;\n}\n\n/**\n * Returns true if the object is not null or undefined. Like MooTools' $.defined.\n * @param {Object} obj\n */\nfunction defined(obj) {\n\treturn obj !== UNDEFINED && obj !== null;\n}\n\n/**\n * Set or get an attribute or an object of attributes. Can't use jQuery attr because\n * it attempts to set expando properties on the SVG element, which is not allowed.\n *\n * @param {Object} elem The DOM element to receive the attribute(s)\n * @param {String|Object} prop The property or an abject of key-value pairs\n * @param {String} value The value if a single property is set\n */\nfunction attr(elem, prop, value) {\n\tvar key,\n\t\tsetAttribute = 'setAttribute',\n\t\tret;\n\n\t// if the prop is a string\n\tif (isString(prop)) {\n\t\t// set the value\n\t\tif (defined(value)) {\n\n\t\t\telem[setAttribute](prop, value);\n\n\t\t// get the value\n\t\t} else if (elem && elem.getAttribute) { // elem not defined when printing pie demo...\n\t\t\tret = elem.getAttribute(prop);\n\t\t}\n\n\t// else if prop is defined, it is a hash of key/value pairs\n\t} else if (defined(prop) && isObject(prop)) {\n\t\tfor (key in prop) {\n\t\t\telem[setAttribute](key, prop[key]);\n\t\t}\n\t}\n\treturn ret;\n}\n/**\n * Check if an element is an array, and if not, make it into an array. Like\n * MooTools' $.splat.\n */\nfunction splat(obj) {\n\treturn isArray(obj) ? obj : [obj];\n}\n\n\n/**\n * Return the first value that is defined. Like MooTools' $.pick.\n */\nfunction pick() {\n\tvar args = arguments,\n\t\ti,\n\t\targ,\n\t\tlength = args.length;\n\tfor (i = 0; i < length; i++) {\n\t\targ = args[i];\n\t\tif (typeof arg !== 'undefined' && arg !== null) {\n\t\t\treturn arg;\n\t\t}\n\t}\n}\n\n/**\n * Set CSS on a given element\n * @param {Object} el\n * @param {Object} styles Style object with camel case property names\n */\nfunction css(el, styles) {\n\tif (isIE) {\n\t\tif (styles && styles.opacity !== UNDEFINED) {\n\t\t\tstyles.filter = 'alpha(opacity=' + (styles.opacity * 100) + ')';\n\t\t}\n\t}\n\textend(el.style, styles);\n}\n\n/**\n * Utility function to create element with attributes and styles\n * @param {Object} tag\n * @param {Object} attribs\n * @param {Object} styles\n * @param {Object} parent\n * @param {Object} nopad\n */\nfunction createElement(tag, attribs, styles, parent, nopad) {\n\tvar el = doc.createElement(tag);\n\tif (attribs) {\n\t\textend(el, attribs);\n\t}\n\tif (nopad) {\n\t\tcss(el, {padding: 0, border: NONE, margin: 0});\n\t}\n\tif (styles) {\n\t\tcss(el, styles);\n\t}\n\tif (parent) {\n\t\tparent.appendChild(el);\n\t}\n\treturn el;\n}\n\n/**\n * Extend a prototyped class by new members\n * @param {Object} parent\n * @param {Object} members\n */\nfunction extendClass(parent, members) {\n\tvar object = function () {};\n\tobject.prototype = new parent();\n\textend(object.prototype, members);\n\treturn object;\n}\n\n/**\n * Format a number and return a string based on input settings\n * @param {Number} number The input number to format\n * @param {Number} decimals The amount of decimals\n * @param {String} decPoint The decimal point, defaults to the one given in the lang options\n * @param {String} thousandsSep The thousands separator, defaults to the one given in the lang options\n */\nfunction numberFormat(number, decimals, decPoint, thousandsSep) {\n\tvar lang = defaultOptions.lang,\n\t\t// http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_number_format/\n\t\tn = +number || 0,\n\t\tc = decimals === -1 ?\n\t\t\t(n.toString().split('.')[1] || '').length : // preserve decimals\n\t\t\t(isNaN(decimals = mathAbs(decimals)) ? 2 : decimals),\n\t\td = decPoint === undefined ? lang.decimalPoint : decPoint,\n\t\tt = thousandsSep === undefined ? lang.thousandsSep : thousandsSep,\n\t\ts = n < 0 ? \"-\" : \"\",\n\t\ti = String(pInt(n = mathAbs(n).toFixed(c))),\n\t\tj = i.length > 3 ? i.length % 3 : 0;\n\n\treturn s + (j ? i.substr(0, j) + t : \"\") + i.substr(j).replace(/(\\d{3})(?=\\d)/g, \"$1\" + t) +\n\t\t(c ? d + mathAbs(n - i).toFixed(c).slice(2) : \"\");\n}\n\n/**\n * Pad a string to a given length by adding 0 to the beginning\n * @param {Number} number\n * @param {Number} length\n */\nfunction pad(number, length) {\n\t// Create an array of the remaining length +1 and join it with 0's\n\treturn new Array((length || 2) + 1 - String(number).length).join(0) + number;\n}\n\n/**\n * Wrap a method with extended functionality, preserving the original function\n * @param {Object} obj The context object that the method belongs to \n * @param {String} method The name of the method to extend\n * @param {Function} func A wrapper function callback. This function is called with the same arguments\n * as the original function, except that the original function is unshifted and passed as the first \n * argument. \n */\nfunction wrap(obj, method, func) {\n\tvar proceed = obj[method];\n\tobj[method] = function () {\n\t\tvar args = Array.prototype.slice.call(arguments);\n\t\targs.unshift(proceed);\n\t\treturn func.apply(this, args);\n\t};\n}\n\n/**\n * Based on http://www.php.net/manual/en/function.strftime.php\n * @param {String} format\n * @param {Number} timestamp\n * @param {Boolean} capitalize\n */\ndateFormat = function (format, timestamp, capitalize) {\n\tif (!defined(timestamp) || isNaN(timestamp)) {\n\t\treturn 'Invalid date';\n\t}\n\tformat = pick(format, '%Y-%m-%d %H:%M:%S');\n\n\tvar date = new Date(timestamp),\n\t\tkey, // used in for constuct below\n\t\t// get the basic time values\n\t\thours = date[getHours](),\n\t\tday = date[getDay](),\n\t\tdayOfMonth = date[getDate](),\n\t\tmonth = date[getMonth](),\n\t\tfullYear = date[getFullYear](),\n\t\tlang = defaultOptions.lang,\n\t\tlangWeekdays = lang.weekdays,\n\n\t\t// List all format keys. Custom formats can be added from the outside. \n\t\treplacements = extend({\n\n\t\t\t// Day\n\t\t\t'a': langWeekdays[day].substr(0, 3), // Short weekday, like 'Mon'\n\t\t\t'A': langWeekdays[day], // Long weekday, like 'Monday'\n\t\t\t'd': pad(dayOfMonth), // Two digit day of the month, 01 to 31\n\t\t\t'e': dayOfMonth, // Day of the month, 1 through 31\n\n\t\t\t// Week (none implemented)\n\t\t\t//'W': weekNumber(),\n\n\t\t\t// Month\n\t\t\t'b': lang.shortMonths[month], // Short month, like 'Jan'\n\t\t\t'B': lang.months[month], // Long month, like 'January'\n\t\t\t'm': pad(month + 1), // Two digit month number, 01 through 12\n\n\t\t\t// Year\n\t\t\t'y': fullYear.toString().substr(2, 2), // Two digits year, like 09 for 2009\n\t\t\t'Y': fullYear, // Four digits year, like 2009\n\n\t\t\t// Time\n\t\t\t'H': pad(hours), // Two digits hours in 24h format, 00 through 23\n\t\t\t'I': pad((hours % 12) || 12), // Two digits hours in 12h format, 00 through 11\n\t\t\t'l': (hours % 12) || 12, // Hours in 12h format, 1 through 12\n\t\t\t'M': pad(date[getMinutes]()), // Two digits minutes, 00 through 59\n\t\t\t'p': hours < 12 ? 'AM' : 'PM', // Upper case AM or PM\n\t\t\t'P': hours < 12 ? 'am' : 'pm', // Lower case AM or PM\n\t\t\t'S': pad(date.getSeconds()), // Two digits seconds, 00 through  59\n\t\t\t'L': pad(mathRound(timestamp % 1000), 3) // Milliseconds (naming from Ruby)\n\t\t}, Highcharts.dateFormats);\n\n\n\t// do the replaces\n\tfor (key in replacements) {\n\t\twhile (format.indexOf('%' + key) !== -1) { // regex would do it in one line, but this is faster\n\t\t\tformat = format.replace('%' + key, typeof replacements[key] === 'function' ? replacements[key](timestamp) : replacements[key]);\n\t\t}\n\t}\n\n\t// Optionally capitalize the string and return\n\treturn capitalize ? format.substr(0, 1).toUpperCase() + format.substr(1) : format;\n};\n\n/** \n * Format a single variable. Similar to sprintf, without the % prefix.\n */\nfunction formatSingle(format, val) {\n\tvar floatRegex = /f$/,\n\t\tdecRegex = /\\.([0-9])/,\n\t\tlang = defaultOptions.lang,\n\t\tdecimals;\n\n\tif (floatRegex.test(format)) { // float\n\t\tdecimals = format.match(decRegex);\n\t\tdecimals = decimals ? decimals[1] : -1;\n\t\tval = numberFormat(\n\t\t\tval,\n\t\t\tdecimals,\n\t\t\tlang.decimalPoint,\n\t\t\tformat.indexOf(',') > -1 ? lang.thousandsSep : ''\n\t\t);\n\t} else {\n\t\tval = dateFormat(format, val);\n\t}\n\treturn val;\n}\n\n/**\n * Format a string according to a subset of the rules of Python's String.format method.\n */\nfunction format(str, ctx) {\n\tvar splitter = '{',\n\t\tisInside = false,\n\t\tsegment,\n\t\tvalueAndFormat,\n\t\tpath,\n\t\ti,\n\t\tlen,\n\t\tret = [],\n\t\tval,\n\t\tindex;\n\t\n\twhile ((index = str.indexOf(splitter)) !== -1) {\n\t\t\n\t\tsegment = str.slice(0, index);\n\t\tif (isInside) { // we're on the closing bracket looking back\n\t\t\t\n\t\t\tvalueAndFormat = segment.split(':');\n\t\t\tpath = valueAndFormat.shift().split('.'); // get first and leave format\n\t\t\tlen = path.length;\n\t\t\tval = ctx;\n\n\t\t\t// Assign deeper paths\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tval = val[path[i]];\n\t\t\t}\n\n\t\t\t// Format the replacement\n\t\t\tif (valueAndFormat.length) {\n\t\t\t\tval = formatSingle(valueAndFormat.join(':'), val);\n\t\t\t}\n\n\t\t\t// Push the result and advance the cursor\n\t\t\tret.push(val);\n\t\t\t\n\t\t} else {\n\t\t\tret.push(segment);\n\t\t\t\n\t\t}\n\t\tstr = str.slice(index + 1); // the rest\n\t\tisInside = !isInside; // toggle\n\t\tsplitter = isInside ? '}' : '{'; // now look for next matching bracket\n\t}\n\tret.push(str);\n\treturn ret.join('');\n}\n\n/**\n * Get the magnitude of a number\n */\nfunction getMagnitude(num) {\n\treturn math.pow(10, mathFloor(math.log(num) / math.LN10));\n}\n\n/**\n * Take an interval and normalize it to multiples of 1, 2, 2.5 and 5\n * @param {Number} interval\n * @param {Array} multiples\n * @param {Number} magnitude\n * @param {Object} options\n */\nfunction normalizeTickInterval(interval, multiples, magnitude, options) {\n\tvar normalized, i;\n\n\t// round to a tenfold of 1, 2, 2.5 or 5\n\tmagnitude = pick(magnitude, 1);\n\tnormalized = interval / magnitude;\n\n\t// multiples for a linear scale\n\tif (!multiples) {\n\t\tmultiples = [1, 2, 2.5, 5, 10];\n\n\t\t// the allowDecimals option\n\t\tif (options && options.allowDecimals === false) {\n\t\t\tif (magnitude === 1) {\n\t\t\t\tmultiples = [1, 2, 5, 10];\n\t\t\t} else if (magnitude <= 0.1) {\n\t\t\t\tmultiples = [1 / magnitude];\n\t\t\t}\n\t\t}\n\t}\n\n\t// normalize the interval to the nearest multiple\n\tfor (i = 0; i < multiples.length; i++) {\n\t\tinterval = multiples[i];\n\t\tif (normalized <= (multiples[i] + (multiples[i + 1] || multiples[i])) / 2) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// multiply back to the correct magnitude\n\tinterval *= magnitude;\n\n\treturn interval;\n}\n\n/**\n * Get a normalized tick interval for dates. Returns a configuration object with\n * unit range (interval), count and name. Used to prepare data for getTimeTicks. \n * Previously this logic was part of getTimeTicks, but as getTimeTicks now runs\n * of segments in stock charts, the normalizing logic was extracted in order to \n * prevent it for running over again for each segment having the same interval. \n * #662, #697.\n */\nfunction normalizeTimeTickInterval(tickInterval, unitsOption) {\n\tvar units = unitsOption || [[\n\t\t\t\tMILLISECOND, // unit name\n\t\t\t\t[1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples\n\t\t\t], [\n\t\t\t\tSECOND,\n\t\t\t\t[1, 2, 5, 10, 15, 30]\n\t\t\t], [\n\t\t\t\tMINUTE,\n\t\t\t\t[1, 2, 5, 10, 15, 30]\n\t\t\t], [\n\t\t\t\tHOUR,\n\t\t\t\t[1, 2, 3, 4, 6, 8, 12]\n\t\t\t], [\n\t\t\t\tDAY,\n\t\t\t\t[1, 2]\n\t\t\t], [\n\t\t\t\tWEEK,\n\t\t\t\t[1, 2]\n\t\t\t], [\n\t\t\t\tMONTH,\n\t\t\t\t[1, 2, 3, 4, 6]\n\t\t\t], [\n\t\t\t\tYEAR,\n\t\t\t\tnull\n\t\t\t]],\n\t\tunit = units[units.length - 1], // default unit is years\n\t\tinterval = timeUnits[unit[0]],\n\t\tmultiples = unit[1],\n\t\tcount,\n\t\ti;\n\t\t\n\t// loop through the units to find the one that best fits the tickInterval\n\tfor (i = 0; i < units.length; i++) {\n\t\tunit = units[i];\n\t\tinterval = timeUnits[unit[0]];\n\t\tmultiples = unit[1];\n\n\n\t\tif (units[i + 1]) {\n\t\t\t// lessThan is in the middle between the highest multiple and the next unit.\n\t\t\tvar lessThan = (interval * multiples[multiples.length - 1] +\n\t\t\t\t\t\ttimeUnits[units[i + 1][0]]) / 2;\n\n\t\t\t// break and keep the current unit\n\t\t\tif (tickInterval <= lessThan) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// prevent 2.5 years intervals, though 25, 250 etc. are allowed\n\tif (interval === timeUnits[YEAR] && tickInterval < 5 * interval) {\n\t\tmultiples = [1, 2, 5];\n\t}\n\n\t// get the count\n\tcount = normalizeTickInterval(\n\t\ttickInterval / interval, \n\t\tmultiples,\n\t\tunit[0] === YEAR ? getMagnitude(tickInterval / interval) : 1 // #1913\n\t);\n\t\n\treturn {\n\t\tunitRange: interval,\n\t\tcount: count,\n\t\tunitName: unit[0]\n\t};\n}\n\n/**\n * Set the tick positions to a time unit that makes sense, for example\n * on the first of each month or on every Monday. Return an array\n * with the time positions. Used in datetime axes as well as for grouping\n * data on a datetime axis.\n *\n * @param {Object} normalizedInterval The interval in axis values (ms) and the count\n * @param {Number} min The minimum in axis values\n * @param {Number} max The maximum in axis values\n * @param {Number} startOfWeek\n */\nfunction getTimeTicks(normalizedInterval, min, max, startOfWeek) {\n\tvar tickPositions = [],\n\t\ti,\n\t\thigherRanks = {},\n\t\tuseUTC = defaultOptions.global.useUTC,\n\t\tminYear, // used in months and years as a basis for Date.UTC()\n\t\tminDate = new Date(min),\n\t\tinterval = normalizedInterval.unitRange,\n\t\tcount = normalizedInterval.count;\n\n\tif (defined(min)) { // #1300\n\t\tif (interval >= timeUnits[SECOND]) { // second\n\t\t\tminDate.setMilliseconds(0);\n\t\t\tminDate.setSeconds(interval >= timeUnits[MINUTE] ? 0 :\n\t\t\t\tcount * mathFloor(minDate.getSeconds() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[MINUTE]) { // minute\n\t\t\tminDate[setMinutes](interval >= timeUnits[HOUR] ? 0 :\n\t\t\t\tcount * mathFloor(minDate[getMinutes]() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[HOUR]) { // hour\n\t\t\tminDate[setHours](interval >= timeUnits[DAY] ? 0 :\n\t\t\t\tcount * mathFloor(minDate[getHours]() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[DAY]) { // day\n\t\t\tminDate[setDate](interval >= timeUnits[MONTH] ? 1 :\n\t\t\t\tcount * mathFloor(minDate[getDate]() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[MONTH]) { // month\n\t\t\tminDate[setMonth](interval >= timeUnits[YEAR] ? 0 :\n\t\t\t\tcount * mathFloor(minDate[getMonth]() / count));\n\t\t\tminYear = minDate[getFullYear]();\n\t\t}\n\t\n\t\tif (interval >= timeUnits[YEAR]) { // year\n\t\t\tminYear -= minYear % count;\n\t\t\tminDate[setFullYear](minYear);\n\t\t}\n\t\n\t\t// week is a special case that runs outside the hierarchy\n\t\tif (interval === timeUnits[WEEK]) {\n\t\t\t// get start of current week, independent of count\n\t\t\tminDate[setDate](minDate[getDate]() - minDate[getDay]() +\n\t\t\t\tpick(startOfWeek, 1));\n\t\t}\n\t\n\t\n\t\t// get tick positions\n\t\ti = 1;\n\t\tminYear = minDate[getFullYear]();\n\t\tvar time = minDate.getTime(),\n\t\t\tminMonth = minDate[getMonth](),\n\t\t\tminDateDate = minDate[getDate](),\n\t\t\ttimezoneOffset = useUTC ? \n\t\t\t\t0 : \n\t\t\t\t(24 * 3600 * 1000 + minDate.getTimezoneOffset() * 60 * 1000) % (24 * 3600 * 1000); // #950\n\t\n\t\t// iterate and add tick positions at appropriate values\n\t\twhile (time < max) {\n\t\t\ttickPositions.push(time);\n\t\n\t\t\t// if the interval is years, use Date.UTC to increase years\n\t\t\tif (interval === timeUnits[YEAR]) {\n\t\t\t\ttime = makeTime(minYear + i * count, 0);\n\t\n\t\t\t// if the interval is months, use Date.UTC to increase months\n\t\t\t} else if (interval === timeUnits[MONTH]) {\n\t\t\t\ttime = makeTime(minYear, minMonth + i * count);\n\t\n\t\t\t// if we're using global time, the interval is not fixed as it jumps\n\t\t\t// one hour at the DST crossover\n\t\t\t} else if (!useUTC && (interval === timeUnits[DAY] || interval === timeUnits[WEEK])) {\n\t\t\t\ttime = makeTime(minYear, minMonth, minDateDate +\n\t\t\t\t\ti * count * (interval === timeUnits[DAY] ? 1 : 7));\n\t\n\t\t\t// else, the interval is fixed and we use simple addition\n\t\t\t} else {\n\t\t\t\ttime += interval * count;\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t}\n\t\n\t\t// push the last time\n\t\ttickPositions.push(time);\n\n\n\t\t// mark new days if the time is dividible by day (#1649, #1760)\n\t\teach(grep(tickPositions, function (time) {\n\t\t\treturn interval <= timeUnits[HOUR] && time % timeUnits[DAY] === timezoneOffset;\n\t\t}), function (time) {\n\t\t\thigherRanks[time] = DAY;\n\t\t});\n\t}\n\n\n\t// record information on the chosen unit - for dynamic label formatter\n\ttickPositions.info = extend(normalizedInterval, {\n\t\thigherRanks: higherRanks,\n\t\ttotalRange: interval * count\n\t});\n\n\treturn tickPositions;\n}\n\n/**\n * Helper class that contains variuos counters that are local to the chart.\n */\nfunction ChartCounters() {\n\tthis.color = 0;\n\tthis.symbol = 0;\n}\n\nChartCounters.prototype =  {\n\t/**\n\t * Wraps the color counter if it reaches the specified length.\n\t */\n\twrapColor: function (length) {\n\t\tif (this.color >= length) {\n\t\t\tthis.color = 0;\n\t\t}\n\t},\n\n\t/**\n\t * Wraps the symbol counter if it reaches the specified length.\n\t */\n\twrapSymbol: function (length) {\n\t\tif (this.symbol >= length) {\n\t\t\tthis.symbol = 0;\n\t\t}\n\t}\n};\n\n\n/**\n * Utility method that sorts an object array and keeping the order of equal items.\n * ECMA script standard does not specify the behaviour when items are equal.\n */\nfunction stableSort(arr, sortFunction) {\n\tvar length = arr.length,\n\t\tsortValue,\n\t\ti;\n\n\t// Add index to each item\n\tfor (i = 0; i < length; i++) {\n\t\tarr[i].ss_i = i; // stable sort index\n\t}\n\n\tarr.sort(function (a, b) {\n\t\tsortValue = sortFunction(a, b);\n\t\treturn sortValue === 0 ? a.ss_i - b.ss_i : sortValue;\n\t});\n\n\t// Remove index from items\n\tfor (i = 0; i < length; i++) {\n\t\tdelete arr[i].ss_i; // stable sort index\n\t}\n}\n\n/**\n * Non-recursive method to find the lowest member of an array. Math.min raises a maximum\n * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This\n * method is slightly slower, but safe.\n */\nfunction arrayMin(data) {\n\tvar i = data.length,\n\t\tmin = data[0];\n\n\twhile (i--) {\n\t\tif (data[i] < min) {\n\t\t\tmin = data[i];\n\t\t}\n\t}\n\treturn min;\n}\n\n/**\n * Non-recursive method to find the lowest member of an array. Math.min raises a maximum\n * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This\n * method is slightly slower, but safe.\n */\nfunction arrayMax(data) {\n\tvar i = data.length,\n\t\tmax = data[0];\n\n\twhile (i--) {\n\t\tif (data[i] > max) {\n\t\t\tmax = data[i];\n\t\t}\n\t}\n\treturn max;\n}\n\n/**\n * Utility method that destroys any SVGElement or VMLElement that are properties on the given object.\n * It loops all properties and invokes destroy if there is a destroy method. The property is\n * then delete'ed.\n * @param {Object} The object to destroy properties on\n * @param {Object} Exception, do not destroy this property, only delete it.\n */\nfunction destroyObjectProperties(obj, except) {\n\tvar n;\n\tfor (n in obj) {\n\t\t// If the object is non-null and destroy is defined\n\t\tif (obj[n] && obj[n] !== except && obj[n].destroy) {\n\t\t\t// Invoke the destroy\n\t\t\tobj[n].destroy();\n\t\t}\n\n\t\t// Delete the property from the object.\n\t\tdelete obj[n];\n\t}\n}\n\n\n/**\n * Discard an element by moving it to the bin and delete\n * @param {Object} The HTML node to discard\n */\nfunction discardElement(element) {\n\t// create a garbage bin element, not part of the DOM\n\tif (!garbageBin) {\n\t\tgarbageBin = createElement(DIV);\n\t}\n\n\t// move the node and empty bin\n\tif (element) {\n\t\tgarbageBin.appendChild(element);\n\t}\n\tgarbageBin.innerHTML = '';\n}\n\n/**\n * Provide error messages for debugging, with links to online explanation \n */\nfunction error(code, stop) {\n\tvar msg = 'Highcharts error #' + code + ': www.highcharts.com/errors/' + code;\n\tif (stop) {\n\t\tthrow msg;\n\t} else if (win.console) {\n\t\tconsole.log(msg);\n\t}\n}\n\n/**\n * Fix JS round off float errors\n * @param {Number} num\n */\nfunction correctFloat(num) {\n\treturn parseFloat(\n\t\tnum.toPrecision(14)\n\t);\n}\n\n/**\n * Set the global animation to either a given value, or fall back to the\n * given chart's animation option\n * @param {Object} animation\n * @param {Object} chart\n */\nfunction setAnimation(animation, chart) {\n\tglobalAnimation = pick(animation, chart.animation);\n}\n\n/**\n * The time unit lookup\n */\n/*jslint white: true*/\ntimeUnits = hash(\n\tMILLISECOND, 1,\n\tSECOND, 1000,\n\tMINUTE, 60000,\n\tHOUR, 3600000,\n\tDAY, 24 * 3600000,\n\tWEEK, 7 * 24 * 3600000,\n\tMONTH, 31 * 24 * 3600000,\n\tYEAR, 31556952000\n);\n/*jslint white: false*/\n/**\n * Path interpolation algorithm used across adapters\n */\npathAnim = {\n\t/**\n\t * Prepare start and end values so that the path can be animated one to one\n\t */\n\tinit: function (elem, fromD, toD) {\n\t\tfromD = fromD || '';\n\t\tvar shift = elem.shift,\n\t\t\tbezier = fromD.indexOf('C') > -1,\n\t\t\tnumParams = bezier ? 7 : 3,\n\t\t\tendLength,\n\t\t\tslice,\n\t\t\ti,\n\t\t\tstart = fromD.split(' '),\n\t\t\tend = [].concat(toD), // copy\n\t\t\tstartBaseLine,\n\t\t\tendBaseLine,\n\t\t\tsixify = function (arr) { // in splines make move points have six parameters like bezier curves\n\t\t\t\ti = arr.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tif (arr[i] === M) {\n\t\t\t\t\t\tarr.splice(i + 1, 0, arr[i + 1], arr[i + 2], arr[i + 1], arr[i + 2]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tif (bezier) {\n\t\t\tsixify(start);\n\t\t\tsixify(end);\n\t\t}\n\n\t\t// pull out the base lines before padding\n\t\tif (elem.isArea) {\n\t\t\tstartBaseLine = start.splice(start.length - 6, 6);\n\t\t\tendBaseLine = end.splice(end.length - 6, 6);\n\t\t}\n\n\t\t// if shifting points, prepend a dummy point to the end path\n\t\tif (shift <= end.length / numParams && start.length === end.length) {\n\t\t\twhile (shift--) {\n\t\t\t\tend = [].concat(end).splice(0, numParams).concat(end);\n\t\t\t}\n\t\t}\n\t\telem.shift = 0; // reset for following animations\n\n\t\t// copy and append last point until the length matches the end length\n\t\tif (start.length) {\n\t\t\tendLength = end.length;\n\t\t\twhile (start.length < endLength) {\n\n\t\t\t\t//bezier && sixify(start);\n\t\t\t\tslice = [].concat(start).splice(start.length - numParams, numParams);\n\t\t\t\tif (bezier) { // disable first control point\n\t\t\t\t\tslice[numParams - 6] = slice[numParams - 2];\n\t\t\t\t\tslice[numParams - 5] = slice[numParams - 1];\n\t\t\t\t}\n\t\t\t\tstart = start.concat(slice);\n\t\t\t}\n\t\t}\n\n\t\tif (startBaseLine) { // append the base lines for areas\n\t\t\tstart = start.concat(startBaseLine);\n\t\t\tend = end.concat(endBaseLine);\n\t\t}\n\t\treturn [start, end];\n\t},\n\n\t/**\n\t * Interpolate each value of the path and return the array\n\t */\n\tstep: function (start, end, pos, complete) {\n\t\tvar ret = [],\n\t\t\ti = start.length,\n\t\t\tstartVal;\n\n\t\tif (pos === 1) { // land on the final path without adjustment points appended in the ends\n\t\t\tret = complete;\n\n\t\t} else if (i === end.length && pos < 1) {\n\t\t\twhile (i--) {\n\t\t\t\tstartVal = parseFloat(start[i]);\n\t\t\t\tret[i] =\n\t\t\t\t\tisNaN(startVal) ? // a letter instruction like M or L\n\t\t\t\t\t\tstart[i] :\n\t\t\t\t\t\tpos * (parseFloat(end[i] - startVal)) + startVal;\n\n\t\t\t}\n\t\t} else { // if animation is finished or length not matching, land on right value\n\t\t\tret = end;\n\t\t}\n\t\treturn ret;\n\t}\n};\n\n(function ($) {\n\t/**\n\t * The default HighchartsAdapter for jQuery\n\t */\n\twin.HighchartsAdapter = win.HighchartsAdapter || ($ && {\n\t\t\n\t\t/**\n\t\t * Initialize the adapter by applying some extensions to jQuery\n\t\t */\n\t\tinit: function (pathAnim) {\n\t\t\t\n\t\t\t// extend the animate function to allow SVG animations\n\t\t\tvar Fx = $.fx,\n\t\t\t\tStep = Fx.step,\n\t\t\t\tdSetter,\n\t\t\t\tTween = $.Tween,\n\t\t\t\tpropHooks = Tween && Tween.propHooks,\n\t\t\t\topacityHook = $.cssHooks.opacity;\n\t\t\t\n\t\t\t/*jslint unparam: true*//* allow unused param x in this function */\n\t\t\t$.extend($.easing, {\n\t\t\t\teaseOutQuad: function (x, t, b, c, d) {\n\t\t\t\t\treturn -c * (t /= d) * (t - 2) + b;\n\t\t\t\t}\n\t\t\t});\n\t\t\t/*jslint unparam: false*/\n\t\t\n\t\t\t// extend some methods to check for elem.attr, which means it is a Highcharts SVG object\n\t\t\t$.each(['cur', '_default', 'width', 'height', 'opacity'], function (i, fn) {\n\t\t\t\tvar obj = Step,\n\t\t\t\t\tbase,\n\t\t\t\t\telem;\n\t\t\t\t\t\n\t\t\t\t// Handle different parent objects\n\t\t\t\tif (fn === 'cur') {\n\t\t\t\t\tobj = Fx.prototype; // 'cur', the getter, relates to Fx.prototype\n\t\t\t\t\n\t\t\t\t} else if (fn === '_default' && Tween) { // jQuery 1.8 model\n\t\t\t\t\tobj = propHooks[fn];\n\t\t\t\t\tfn = 'set';\n\t\t\t\t}\n\t\t\n\t\t\t\t// Overwrite the method\n\t\t\t\tbase = obj[fn];\n\t\t\t\tif (base) { // step.width and step.height don't exist in jQuery < 1.7\n\t\t\n\t\t\t\t\t// create the extended function replacement\n\t\t\t\t\tobj[fn] = function (fx) {\n\t\t\n\t\t\t\t\t\t// Fx.prototype.cur does not use fx argument\n\t\t\t\t\t\tfx = i ? fx : this;\n\n\t\t\t\t\t\t// Don't run animations on textual properties like align (#1821)\n\t\t\t\t\t\tif (fx.prop === 'align') {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// shortcut\n\t\t\t\t\t\telem = fx.elem;\n\t\t\n\t\t\t\t\t\t// Fx.prototype.cur returns the current value. The other ones are setters\n\t\t\t\t\t\t// and returning a value has no effect.\n\t\t\t\t\t\treturn elem.attr ? // is SVG element wrapper\n\t\t\t\t\t\t\telem.attr(fx.prop, fn === 'cur' ? UNDEFINED : fx.now) : // apply the SVG wrapper's method\n\t\t\t\t\t\t\tbase.apply(this, arguments); // use jQuery's built-in method\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Extend the opacity getter, needed for fading opacity with IE9 and jQuery 1.10+\n\t\t\twrap(opacityHook, 'get', function (proceed, elem, computed) {\n\t\t\t\treturn elem.attr ? (elem.opacity || 0) : proceed.call(this, elem, computed);\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\t// Define the setter function for d (path definitions)\n\t\t\tdSetter = function (fx) {\n\t\t\t\tvar elem = fx.elem,\n\t\t\t\t\tends;\n\t\t\n\t\t\t\t// Normally start and end should be set in state == 0, but sometimes,\n\t\t\t\t// for reasons unknown, this doesn't happen. Perhaps state == 0 is skipped\n\t\t\t\t// in these cases\n\t\t\t\tif (!fx.started) {\n\t\t\t\t\tends = pathAnim.init(elem, elem.d, elem.toD);\n\t\t\t\t\tfx.start = ends[0];\n\t\t\t\t\tfx.end = ends[1];\n\t\t\t\t\tfx.started = true;\n\t\t\t\t}\n\t\t\n\t\t\n\t\t\t\t// interpolate each value of the path\n\t\t\t\telem.attr('d', pathAnim.step(fx.start, fx.end, fx.pos, elem.toD));\n\t\t\t};\n\t\t\t\n\t\t\t// jQuery 1.8 style\n\t\t\tif (Tween) {\n\t\t\t\tpropHooks.d = {\n\t\t\t\t\tset: dSetter\n\t\t\t\t};\n\t\t\t// pre 1.8\n\t\t\t} else {\n\t\t\t\t// animate paths\n\t\t\t\tStep.d = dSetter;\n\t\t\t}\n\t\t\t\n\t\t\t/**\n\t\t\t * Utility for iterating over an array. Parameters are reversed compared to jQuery.\n\t\t\t * @param {Array} arr\n\t\t\t * @param {Function} fn\n\t\t\t */\n\t\t\tthis.each = Array.prototype.forEach ?\n\t\t\t\tfunction (arr, fn) { // modern browsers\n\t\t\t\t\treturn Array.prototype.forEach.call(arr, fn);\n\t\t\t\t\t\n\t\t\t\t} : \n\t\t\t\tfunction (arr, fn) { // legacy\n\t\t\t\t\tvar i = 0, \n\t\t\t\t\t\tlen = arr.length;\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tif (fn.call(arr[i], arr[i], i, arr) === false) {\n\t\t\t\t\t\t\treturn i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\n\t\t\t/**\n\t\t\t * Register Highcharts as a plugin in the respective framework\n\t\t\t */\n\t\t\t$.fn.highcharts = function () {\n\t\t\t\tvar constr = 'Chart', // default constructor\n\t\t\t\t\targs = arguments,\n\t\t\t\t\toptions,\n\t\t\t\t\tret,\n\t\t\t\t\tchart;\n\n\t\t\t\tif (isString(args[0])) {\n\t\t\t\t\tconstr = args[0];\n\t\t\t\t\targs = Array.prototype.slice.call(args, 1); \n\t\t\t\t}\n\t\t\t\toptions = args[0];\n\n\t\t\t\t// Create the chart\n\t\t\t\tif (options !== UNDEFINED) {\n\t\t\t\t\t/*jslint unused:false*/\n\t\t\t\t\toptions.chart = options.chart || {};\n\t\t\t\t\toptions.chart.renderTo = this[0];\n\t\t\t\t\tchart = new Highcharts[constr](options, args[1]);\n\t\t\t\t\tret = this;\n\t\t\t\t\t/*jslint unused:true*/\n\t\t\t\t}\n\n\t\t\t\t// When called without parameters or with the return argument, get a predefined chart\n\t\t\t\tif (options === UNDEFINED) {\n\t\t\t\t\tret = charts[attr(this[0], 'data-highcharts-chart')];\n\t\t\t\t}\t\n\n\t\t\t\treturn ret;\n\t\t\t};\n\n\t\t},\n\n\t\t\n\t\t/**\n\t\t * Downloads a script and executes a callback when done.\n\t\t * @param {String} scriptLocation\n\t\t * @param {Function} callback\n\t\t */\n\t\tgetScript: $.getScript,\n\t\t\n\t\t/**\n\t\t * Return the index of an item in an array, or -1 if not found\n\t\t */\n\t\tinArray: $.inArray,\n\t\t\n\t\t/**\n\t\t * A direct link to jQuery methods. MooTools and Prototype adapters must be implemented for each case of method.\n\t\t * @param {Object} elem The HTML element\n\t\t * @param {String} method Which method to run on the wrapped element\n\t\t */\n\t\tadapterRun: function (elem, method) {\n\t\t\treturn $(elem)[method]();\n\t\t},\n\t\n\t\t/**\n\t\t * Filter an array\n\t\t */\n\t\tgrep: $.grep,\n\t\n\t\t/**\n\t\t * Map an array\n\t\t * @param {Array} arr\n\t\t * @param {Function} fn\n\t\t */\n\t\tmap: function (arr, fn) {\n\t\t\t//return jQuery.map(arr, fn);\n\t\t\tvar results = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = arr.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tresults[i] = fn.call(arr[i], arr[i], i, arr);\n\t\t\t}\n\t\t\treturn results;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the position of an element relative to the top left of the page\n\t\t */\n\t\toffset: function (el) {\n\t\t\treturn $(el).offset();\n\t\t},\n\t\n\t\t/**\n\t\t * Add an event listener\n\t\t * @param {Object} el A HTML element or custom object\n\t\t * @param {String} event The event type\n\t\t * @param {Function} fn The event handler\n\t\t */\n\t\taddEvent: function (el, event, fn) {\n\t\t\t$(el).bind(event, fn);\n\t\t},\n\t\n\t\t/**\n\t\t * Remove event added with addEvent\n\t\t * @param {Object} el The object\n\t\t * @param {String} eventType The event type. Leave blank to remove all events.\n\t\t * @param {Function} handler The function to remove\n\t\t */\n\t\tremoveEvent: function (el, eventType, handler) {\n\t\t\t// workaround for jQuery issue with unbinding custom events:\n\t\t\t// http://forum.jQuery.com/topic/javascript-error-when-unbinding-a-custom-event-using-jQuery-1-4-2\n\t\t\tvar func = doc.removeEventListener ? 'removeEventListener' : 'detachEvent';\n\t\t\tif (doc[func] && el && !el[func]) {\n\t\t\t\tel[func] = function () {};\n\t\t\t}\n\t\n\t\t\t$(el).unbind(eventType, handler);\n\t\t},\n\t\n\t\t/**\n\t\t * Fire an event on a custom object\n\t\t * @param {Object} el\n\t\t * @param {String} type\n\t\t * @param {Object} eventArguments\n\t\t * @param {Function} defaultFunction\n\t\t */\n\t\tfireEvent: function (el, type, eventArguments, defaultFunction) {\n\t\t\tvar event = $.Event(type),\n\t\t\t\tdetachedType = 'detached' + type,\n\t\t\t\tdefaultPrevented;\n\t\n\t\t\t// Remove warnings in Chrome when accessing layerX and layerY. Although Highcharts\n\t\t\t// never uses these properties, Chrome includes them in the default click event and\n\t\t\t// raises the warning when they are copied over in the extend statement below.\n\t\t\t//\n\t\t\t// To avoid problems in IE (see #1010) where we cannot delete the properties and avoid\n\t\t\t// testing if they are there (warning in chrome) the only option is to test if running IE.\n\t\t\tif (!isIE && eventArguments) {\n\t\t\t\tdelete eventArguments.layerX;\n\t\t\t\tdelete eventArguments.layerY;\n\t\t\t}\n\t\n\t\t\textend(event, eventArguments);\n\t\n\t\t\t// Prevent jQuery from triggering the object method that is named the\n\t\t\t// same as the event. For example, if the event is 'select', jQuery\n\t\t\t// attempts calling el.select and it goes into a loop.\n\t\t\tif (el[type]) {\n\t\t\t\tel[detachedType] = el[type];\n\t\t\t\tel[type] = null;\n\t\t\t}\n\t\n\t\t\t// Wrap preventDefault and stopPropagation in try/catch blocks in\n\t\t\t// order to prevent JS errors when cancelling events on non-DOM\n\t\t\t// objects. #615.\n\t\t\t/*jslint unparam: true*/\n\t\t\t$.each(['preventDefault', 'stopPropagation'], function (i, fn) {\n\t\t\t\tvar base = event[fn];\n\t\t\t\tevent[fn] = function () {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbase.call(event);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (fn === 'preventDefault') {\n\t\t\t\t\t\t\tdefaultPrevented = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t});\n\t\t\t/*jslint unparam: false*/\n\t\n\t\t\t// trigger it\n\t\t\t$(el).trigger(event);\n\t\n\t\t\t// attach the method\n\t\t\tif (el[detachedType]) {\n\t\t\t\tel[type] = el[detachedType];\n\t\t\t\tel[detachedType] = null;\n\t\t\t}\n\t\n\t\t\tif (defaultFunction && !event.isDefaultPrevented() && !defaultPrevented) {\n\t\t\t\tdefaultFunction(event);\n\t\t\t}\n\t\t},\n\t\t\n\t\t/**\n\t\t * Extension method needed for MooTools\n\t\t */\n\t\twashMouseEvent: function (e) {\n\t\t\tvar ret = e.originalEvent || e;\n\t\t\t\n\t\t\t// computed by jQuery, needed by IE8\n\t\t\tif (ret.pageX === UNDEFINED) { // #1236\n\t\t\t\tret.pageX = e.pageX;\n\t\t\t\tret.pageY = e.pageY;\n\t\t\t}\n\t\t\t\n\t\t\treturn ret;\n\t\t},\n\t\n\t\t/**\n\t\t * Animate a HTML element or SVG element wrapper\n\t\t * @param {Object} el\n\t\t * @param {Object} params\n\t\t * @param {Object} options jQuery-like animation options: duration, easing, callback\n\t\t */\n\t\tanimate: function (el, params, options) {\n\t\t\tvar $el = $(el);\n\t\t\tif (!el.style) {\n\t\t\t\tel.style = {}; // #1881\n\t\t\t}\n\t\t\tif (params.d) {\n\t\t\t\tel.toD = params.d; // keep the array form for paths, used in $.fx.step.d\n\t\t\t\tparams.d = 1; // because in jQuery, animating to an array has a different meaning\n\t\t\t}\n\t\n\t\t\t$el.stop();\n\t\t\tif (params.opacity !== UNDEFINED && el.attr) {\n\t\t\t\tparams.opacity += 'px'; // force jQuery to use same logic as width and height (#2161)\n\t\t\t}\n\t\t\t$el.animate(params, options);\n\t\n\t\t},\n\t\t/**\n\t\t * Stop running animation\n\t\t */\n\t\tstop: function (el) {\n\t\t\t$(el).stop();\n\t\t}\n\t});\n}(win.jQuery));\n\n\n// check for a custom HighchartsAdapter defined prior to this file\nvar globalAdapter = win.HighchartsAdapter,\n\tadapter = globalAdapter || {};\n\t\n// Initialize the adapter\nif (globalAdapter) {\n\tglobalAdapter.init.call(globalAdapter, pathAnim);\n}\n\n\n// Utility functions. If the HighchartsAdapter is not defined, adapter is an empty object\n// and all the utility functions will be null. In that case they are populated by the\n// default adapters below.\nvar adapterRun = adapter.adapterRun,\n\tgetScript = adapter.getScript,\n\tinArray = adapter.inArray,\n\teach = adapter.each,\n\tgrep = adapter.grep,\n\toffset = adapter.offset,\n\tmap = adapter.map,\n\taddEvent = adapter.addEvent,\n\tremoveEvent = adapter.removeEvent,\n\tfireEvent = adapter.fireEvent,\n\twashMouseEvent = adapter.washMouseEvent,\n\tanimate = adapter.animate,\n\tstop = adapter.stop;\n\n\n\n/* ****************************************************************************\n * Handle the options                                                         *\n *****************************************************************************/\nvar\n\ndefaultLabelOptions = {\n\tenabled: true,\n\t// rotation: 0,\n\t// align: 'center',\n\tx: 0,\n\ty: 15,\n\t/*formatter: function () {\n\t\treturn this.value;\n\t},*/\n\tstyle: {\n\t\tcolor: '#666',\n\t\tcursor: 'default',\n\t\tfontSize: '11px',\n\t\tlineHeight: '14px'\n\t}\n};\n\ndefaultOptions = {\n\tcolors: ['#2f7ed8', '#0d233a', '#8bbc21', '#910000', '#1aadce', '#492970',\n\t\t'#f28f43', '#77a1e5', '#c42525', '#a6c96a'],\n\tsymbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'],\n\tlang: {\n\t\tloading: 'Loading...',\n\t\tmonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July',\n\t\t\t\t'August', 'September', 'October', 'November', 'December'],\n\t\tshortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n\t\tweekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n\t\tdecimalPoint: '.',\n\t\tnumericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'], // SI prefixes used in axis labels\n\t\tresetZoom: 'Reset zoom',\n\t\tresetZoomTitle: 'Reset zoom level 1:1',\n\t\tthousandsSep: ','\n\t},\n\tglobal: {\n\t\tuseUTC: true,\n\t\tcanvasToolsURL: 'http://code.highcharts.com/3.0.6/modules/canvas-tools.js',\n\t\tVMLRadialGradientURL: 'http://code.highcharts.com/3.0.6/gfx/vml-radial-gradient.png'\n\t},\n\tchart: {\n\t\t//animation: true,\n\t\t//alignTicks: false,\n\t\t//reflow: true,\n\t\t//className: null,\n\t\t//events: { load, selection },\n\t\t//margin: [null],\n\t\t//marginTop: null,\n\t\t//marginRight: null,\n\t\t//marginBottom: null,\n\t\t//marginLeft: null,\n\t\tborderColor: '#4572A7',\n\t\t//borderWidth: 0,\n\t\tborderRadius: 5,\n\t\tdefaultSeriesType: 'line',\n\t\tignoreHiddenSeries: true,\n\t\t//inverted: false,\n\t\t//shadow: false,\n\t\tspacing: [10, 10, 15, 10],\n\t\t//spacingTop: 10,\n\t\t//spacingRight: 10,\n\t\t//spacingBottom: 15,\n\t\t//spacingLeft: 10,\n\t\tstyle: {\n\t\t\tfontFamily: '\"Lucida Grande\", \"Lucida Sans Unicode\", Verdana, Arial, Helvetica, sans-serif', // default font\n\t\t\tfontSize: '12px'\n\t\t},\n\t\tbackgroundColor: '#FFFFFF',\n\t\t//plotBackgroundColor: null,\n\t\tplotBorderColor: '#C0C0C0',\n\t\t//plotBorderWidth: 0,\n\t\t//plotShadow: false,\n\t\t//zoomType: ''\n\t\tresetZoomButton: {\n\t\t\ttheme: {\n\t\t\t\tzIndex: 20\n\t\t\t},\n\t\t\tposition: {\n\t\t\t\talign: 'right',\n\t\t\t\tx: -10,\n\t\t\t\t//verticalAlign: 'top',\n\t\t\t\ty: 10\n\t\t\t}\n\t\t\t// relativeTo: 'plot'\n\t\t}\n\t},\n\ttitle: {\n\t\ttext: 'Chart title',\n\t\talign: 'center',\n\t\t// floating: false,\n\t\tmargin: 15,\n\t\t// x: 0,\n\t\t// verticalAlign: 'top',\n\t\t// y: null,\n\t\tstyle: {\n\t\t\tcolor: '#274b6d',//#3E576F',\n\t\t\tfontSize: '16px'\n\t\t}\n\n\t},\n\tsubtitle: {\n\t\ttext: '',\n\t\talign: 'center',\n\t\t// floating: false\n\t\t// x: 0,\n\t\t// verticalAlign: 'top',\n\t\t// y: null,\n\t\tstyle: {\n\t\t\tcolor: '#4d759e'\n\t\t}\n\t},\n\n\tplotOptions: {\n\t\tline: { // base series options\n\t\t\tallowPointSelect: false,\n\t\t\tshowCheckbox: false,\n\t\t\tanimation: {\n\t\t\t\tduration: 1000\n\t\t\t},\n\t\t\t//connectNulls: false,\n\t\t\t//cursor: 'default',\n\t\t\t//clip: true,\n\t\t\t//dashStyle: null,\n\t\t\t//enableMouseTracking: true,\n\t\t\tevents: {},\n\t\t\t//legendIndex: 0,\n\t\t\tlineWidth: 2,\n\t\t\t//shadow: false,\n\t\t\t// stacking: null,\n\t\t\tmarker: {\n\t\t\t\tenabled: true,\n\t\t\t\t//symbol: null,\n\t\t\t\tlineWidth: 0,\n\t\t\t\tradius: 4,\n\t\t\t\tlineColor: '#FFFFFF',\n\t\t\t\t//fillColor: null,\n\t\t\t\tstates: { // states for a single point\n\t\t\t\t\thover: {\n\t\t\t\t\t\tenabled: true\n\t\t\t\t\t\t//radius: base + 2\n\t\t\t\t\t},\n\t\t\t\t\tselect: {\n\t\t\t\t\t\tfillColor: '#FFFFFF',\n\t\t\t\t\t\tlineColor: '#000000',\n\t\t\t\t\t\tlineWidth: 2\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tpoint: {\n\t\t\t\tevents: {}\n\t\t\t},\n\t\t\tdataLabels: merge(defaultLabelOptions, {\n\t\t\t\talign: 'center',\n\t\t\t\tenabled: false,\n\t\t\t\tformatter: function () {\n\t\t\t\t\treturn this.y === null ? '' : numberFormat(this.y, -1);\n\t\t\t\t},\n\t\t\t\tverticalAlign: 'bottom', // above singular point\n\t\t\t\ty: 0\n\t\t\t\t// backgroundColor: undefined,\n\t\t\t\t// borderColor: undefined,\n\t\t\t\t// borderRadius: undefined,\n\t\t\t\t// borderWidth: undefined,\n\t\t\t\t// padding: 3,\n\t\t\t\t// shadow: false\n\t\t\t}),\n\t\t\tcropThreshold: 300, // draw points outside the plot area when the number of points is less than this\n\t\t\tpointRange: 0,\n\t\t\t//pointStart: 0,\n\t\t\t//pointInterval: 1,\n\t\t\tshowInLegend: true,\n\t\t\tstates: { // states for the entire series\n\t\t\t\thover: {\n\t\t\t\t\t//enabled: false,\n\t\t\t\t\t//lineWidth: base + 1,\n\t\t\t\t\tmarker: {\n\t\t\t\t\t\t// lineWidth: base + 1,\n\t\t\t\t\t\t// radius: base + 1\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tmarker: {}\n\t\t\t\t}\n\t\t\t},\n\t\t\tstickyTracking: true\n\t\t\t//tooltip: {\n\t\t\t\t//pointFormat: '<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.y}</b>'\n\t\t\t\t//valueDecimals: null,\n\t\t\t\t//xDateFormat: '%A, %b %e, %Y',\n\t\t\t\t//valuePrefix: '',\n\t\t\t\t//ySuffix: ''\t\t\t\t\n\t\t\t//}\n\t\t\t// turboThreshold: 1000\n\t\t\t// zIndex: null\n\t\t}\n\t},\n\tlabels: {\n\t\t//items: [],\n\t\tstyle: {\n\t\t\t//font: defaultFont,\n\t\t\tposition: ABSOLUTE,\n\t\t\tcolor: '#3E576F'\n\t\t}\n\t},\n\tlegend: {\n\t\tenabled: true,\n\t\talign: 'center',\n\t\t//floating: false,\n\t\tlayout: 'horizontal',\n\t\tlabelFormatter: function () {\n\t\t\treturn this.name;\n\t\t},\n\t\tborderWidth: 1,\n\t\tborderColor: '#909090',\n\t\tborderRadius: 5,\n\t\tnavigation: {\n\t\t\t// animation: true,\n\t\t\tactiveColor: '#274b6d',\n\t\t\t// arrowSize: 12\n\t\t\tinactiveColor: '#CCC'\n\t\t\t// style: {} // text styles\n\t\t},\n\t\t// margin: 10,\n\t\t// reversed: false,\n\t\tshadow: false,\n\t\t// backgroundColor: null,\n\t\t/*style: {\n\t\t\tpadding: '5px'\n\t\t},*/\n\t\titemStyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#274b6d',\n\t\t\tfontSize: '12px'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\t//cursor: 'pointer', removed as of #601\n\t\t\tcolor: '#000'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#CCC'\n\t\t},\n\t\titemCheckboxStyle: {\n\t\t\tposition: ABSOLUTE,\n\t\t\twidth: '13px', // for IE precision\n\t\t\theight: '13px'\n\t\t},\n\t\t// itemWidth: undefined,\n\t\tsymbolWidth: 16,\n\t\tsymbolPadding: 5,\n\t\tverticalAlign: 'bottom',\n\t\t// width: undefined,\n\t\tx: 0,\n\t\ty: 0,\n\t\ttitle: {\n\t\t\t//text: null,\n\t\t\tstyle: {\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t}\t\t\t\n\t},\n\n\tloading: {\n\t\t// hideDuration: 100,\n\t\tlabelStyle: {\n\t\t\tfontWeight: 'bold',\n\t\t\tposition: RELATIVE,\n\t\t\ttop: '1em'\n\t\t},\n\t\t// showDuration: 0,\n\t\tstyle: {\n\t\t\tposition: ABSOLUTE,\n\t\t\tbackgroundColor: 'white',\n\t\t\topacity: 0.5,\n\t\t\ttextAlign: 'center'\n\t\t}\n\t},\n\n\ttooltip: {\n\t\tenabled: true,\n\t\tanimation: hasSVG,\n\t\t//crosshairs: null,\n\t\tbackgroundColor: 'rgba(255, 255, 255, .85)',\n\t\tborderWidth: 1,\n\t\tborderRadius: 3,\n\t\tdateTimeLabelFormats: { \n\t\t\tmillisecond: '%A, %b %e, %H:%M:%S.%L',\n\t\t\tsecond: '%A, %b %e, %H:%M:%S',\n\t\t\tminute: '%A, %b %e, %H:%M',\n\t\t\thour: '%A, %b %e, %H:%M',\n\t\t\tday: '%A, %b %e, %Y',\n\t\t\tweek: 'Week from %A, %b %e, %Y',\n\t\t\tmonth: '%B %Y',\n\t\t\tyear: '%Y'\n\t\t},\n\t\t//formatter: defaultFormatter,\n\t\theaderFormat: '<span style=\"font-size: 10px\">{point.key}</span><br/>',\n\t\tpointFormat: '<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.y}</b><br/>',\n\t\tshadow: true,\n\t\t//shared: false,\n\t\tsnap: isTouchDevice ? 25 : 10,\n\t\tstyle: {\n\t\t\tcolor: '#333333',\n\t\t\tcursor: 'default',\n\t\t\tfontSize: '12px',\n\t\t\tpadding: '8px',\n\t\t\twhiteSpace: 'nowrap'\n\t\t}\n\t\t//xDateFormat: '%A, %b %e, %Y',\n\t\t//valueDecimals: null,\n\t\t//valuePrefix: '',\n\t\t//valueSuffix: ''\n\t},\n\n\tcredits: {\n\t\tenabled: true,\n\t\ttext: 'Highcharts.com',\n\t\thref: 'http://www.highcharts.com',\n\t\tposition: {\n\t\t\talign: 'right',\n\t\t\tx: -10,\n\t\t\tverticalAlign: 'bottom',\n\t\t\ty: -5\n\t\t},\n\t\tstyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#909090',\n\t\t\tfontSize: '9px'\n\t\t}\n\t}\n};\n\n\n\n\n// Series defaults\nvar defaultPlotOptions = defaultOptions.plotOptions,\n\tdefaultSeriesOptions = defaultPlotOptions.line;\n\n// set the default time methods\nsetTimeMethods();\n\n\n\n/**\n * Set the time methods globally based on the useUTC option. Time method can be either\n * local time or UTC (default).\n */\nfunction setTimeMethods() {\n\tvar useUTC = defaultOptions.global.useUTC,\n\t\tGET = useUTC ? 'getUTC' : 'get',\n\t\tSET = useUTC ? 'setUTC' : 'set';\n\n\tmakeTime = useUTC ? Date.UTC : function (year, month, date, hours, minutes, seconds) {\n\t\treturn new Date(\n\t\t\tyear,\n\t\t\tmonth,\n\t\t\tpick(date, 1),\n\t\t\tpick(hours, 0),\n\t\t\tpick(minutes, 0),\n\t\t\tpick(seconds, 0)\n\t\t).getTime();\n\t};\n\tgetMinutes =  GET + 'Minutes';\n\tgetHours =    GET + 'Hours';\n\tgetDay =      GET + 'Day';\n\tgetDate =     GET + 'Date';\n\tgetMonth =    GET + 'Month';\n\tgetFullYear = GET + 'FullYear';\n\tsetMinutes =  SET + 'Minutes';\n\tsetHours =    SET + 'Hours';\n\tsetDate =     SET + 'Date';\n\tsetMonth =    SET + 'Month';\n\tsetFullYear = SET + 'FullYear';\n\n}\n\n/**\n * Merge the default options with custom options and return the new options structure\n * @param {Object} options The new custom options\n */\nfunction setOptions(options) {\n\t\n\t// Pull out axis options and apply them to the respective default axis options \n\t/*defaultXAxisOptions = merge(defaultXAxisOptions, options.xAxis);\n\tdefaultYAxisOptions = merge(defaultYAxisOptions, options.yAxis);\n\toptions.xAxis = options.yAxis = UNDEFINED;*/\n\t\n\t// Merge in the default options\n\tdefaultOptions = merge(defaultOptions, options);\n\t\n\t// Apply UTC\n\tsetTimeMethods();\n\n\treturn defaultOptions;\n}\n\n/**\n * Get the updated default options. Merely exposing defaultOptions for outside modules\n * isn't enough because the setOptions method creates a new object.\n */\nfunction getOptions() {\n\treturn defaultOptions;\n}\n\n\n/**\n * Handle color operations. The object methods are chainable.\n * @param {String} input The input color in either rbga or hex format\n */\nvar Color = function (input) {\n\t// declare variables\n\tvar rgba = [], result, stops;\n\n\t/**\n\t * Parse the input color to rgba array\n\t * @param {String} input\n\t */\n\tfunction init(input) {\n\n\t\t// Gradients\n\t\tif (input && input.stops) {\n\t\t\tstops = map(input.stops, function (stop) {\n\t\t\t\treturn Color(stop[1]);\n\t\t\t});\n\n\t\t// Solid colors\n\t\t} else {\n\t\t\t// rgba\n\t\t\tresult = /rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/.exec(input);\n\t\t\tif (result) {\n\t\t\t\trgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), parseFloat(result[4], 10)];\n\t\t\t} else { \n\t\t\t\t// hex\n\t\t\t\tresult = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(input);\n\t\t\t\tif (result) {\n\t\t\t\t\trgba = [pInt(result[1], 16), pInt(result[2], 16), pInt(result[3], 16), 1];\n\t\t\t\t} else {\n\t\t\t\t\t// rgb\n\t\t\t\t\tresult = /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(input);\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\trgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), 1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\t\t\n\n\t}\n\t/**\n\t * Return the color a specified format\n\t * @param {String} format\n\t */\n\tfunction get(format) {\n\t\tvar ret;\n\n\t\tif (stops) {\n\t\t\tret = merge(input);\n\t\t\tret.stops = [].concat(ret.stops);\n\t\t\teach(stops, function (stop, i) {\n\t\t\t\tret.stops[i] = [ret.stops[i][0], stop.get(format)];\n\t\t\t});\n\n\t\t// it's NaN if gradient colors on a column chart\n\t\t} else if (rgba && !isNaN(rgba[0])) {\n\t\t\tif (format === 'rgb') {\n\t\t\t\tret = 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')';\n\t\t\t} else if (format === 'a') {\n\t\t\t\tret = rgba[3];\n\t\t\t} else {\n\t\t\t\tret = 'rgba(' + rgba.join(',') + ')';\n\t\t\t}\n\t\t} else {\n\t\t\tret = input;\n\t\t}\n\t\treturn ret;\n\t}\n\n\t/**\n\t * Brighten the color\n\t * @param {Number} alpha\n\t */\n\tfunction brighten(alpha) {\n\t\tif (stops) {\n\t\t\teach(stops, function (stop) {\n\t\t\t\tstop.brighten(alpha);\n\t\t\t});\n\t\t\n\t\t} else if (isNumber(alpha) && alpha !== 0) {\n\t\t\tvar i;\n\t\t\tfor (i = 0; i < 3; i++) {\n\t\t\t\trgba[i] += pInt(alpha * 255);\n\n\t\t\t\tif (rgba[i] < 0) {\n\t\t\t\t\trgba[i] = 0;\n\t\t\t\t}\n\t\t\t\tif (rgba[i] > 255) {\n\t\t\t\t\trgba[i] = 255;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Set the color's opacity to a given alpha value\n\t * @param {Number} alpha\n\t */\n\tfunction setOpacity(alpha) {\n\t\trgba[3] = alpha;\n\t\treturn this;\n\t}\n\n\t// initialize: parse the input\n\tinit(input);\n\n\t// public methods\n\treturn {\n\t\tget: get,\n\t\tbrighten: brighten,\n\t\trgba: rgba,\n\t\tsetOpacity: setOpacity\n\t};\n};\n\n\n/**\n * A wrapper object for SVG elements\n */\nfunction SVGElement() {}\n\nSVGElement.prototype = {\n\t/**\n\t * Initialize the SVG renderer\n\t * @param {Object} renderer\n\t * @param {String} nodeName\n\t */\n\tinit: function (renderer, nodeName) {\n\t\tvar wrapper = this;\n\t\twrapper.element = nodeName === 'span' ?\n\t\t\tcreateElement(nodeName) :\n\t\t\tdoc.createElementNS(SVG_NS, nodeName);\n\t\twrapper.renderer = renderer;\n\t\t/**\n\t\t * A collection of attribute setters. These methods, if defined, are called right before a certain\n\t\t * attribute is set on an element wrapper. Returning false prevents the default attribute\n\t\t * setter to run. Returning a value causes the default setter to set that value. Used in\n\t\t * Renderer.label.\n\t\t */\n\t\twrapper.attrSetters = {};\n\t},\n\t/**\n\t * Default base for animation\n\t */\n\topacity: 1,\n\t/**\n\t * Animate a given attribute\n\t * @param {Object} params\n\t * @param {Number} options The same options as in jQuery animation\n\t * @param {Function} complete Function to perform at the end of animation\n\t */\n\tanimate: function (params, options, complete) {\n\t\tvar animOptions = pick(options, globalAnimation, true);\n\t\tstop(this); // stop regardless of animation actually running, or reverting to .attr (#607)\n\t\tif (animOptions) {\n\t\t\tanimOptions = merge(animOptions);\n\t\t\tif (complete) { // allows using a callback with the global animation without overwriting it\n\t\t\t\tanimOptions.complete = complete;\n\t\t\t}\n\t\t\tanimate(this, params, animOptions);\n\t\t} else {\n\t\t\tthis.attr(params);\n\t\t\tif (complete) {\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Set or get a given attribute\n\t * @param {Object|String} hash\n\t * @param {Mixed|Undefined} val\n\t */\n\tattr: function (hash, val) {\n\t\tvar wrapper = this,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\tresult,\n\t\t\ti,\n\t\t\tchild,\n\t\t\telement = wrapper.element,\n\t\t\tnodeName = element.nodeName.toLowerCase(), // Android2 requires lower for \"text\"\n\t\t\trenderer = wrapper.renderer,\n\t\t\tskipAttr,\n\t\t\ttitleNode,\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\tshadows = wrapper.shadows,\n\t\t\thasSetSymbolSize,\n\t\t\tdoTransform,\n\t\t\tret = wrapper;\n\n\t\t// single key-value pair\n\t\tif (isString(hash) && defined(val)) {\n\t\t\tkey = hash;\n\t\t\thash = {};\n\t\t\thash[key] = val;\n\t\t}\n\n\t\t// used as a getter: first argument is a string, second is undefined\n\t\tif (isString(hash)) {\n\t\t\tkey = hash;\n\t\t\tif (nodeName === 'circle') {\n\t\t\t\tkey = { x: 'cx', y: 'cy' }[key] || key;\n\t\t\t} else if (key === 'strokeWidth') {\n\t\t\t\tkey = 'stroke-width';\n\t\t\t}\n\t\t\tret = attr(element, key) || wrapper[key] || 0;\n\t\t\tif (key !== 'd' && key !== 'visibility' && key !== 'fill') { // 'd' is string in animation step\n\t\t\t\tret = parseFloat(ret);\n\t\t\t}\n\n\t\t// setter\n\t\t} else {\n\n\t\t\tfor (key in hash) {\n\t\t\t\tskipAttr = false; // reset\n\t\t\t\tvalue = hash[key];\n\n\t\t\t\t// check for a specific attribute setter\n\t\t\t\tresult = attrSetters[key] && attrSetters[key].call(wrapper, value, key);\n\n\t\t\t\tif (result !== false) {\n\t\t\t\t\tif (result !== UNDEFINED) {\n\t\t\t\t\t\tvalue = result; // the attribute setter has returned a new value to set\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// paths\n\t\t\t\t\tif (key === 'd') {\n\t\t\t\t\t\tif (value && value.join) { // join path\n\t\t\t\t\t\t\tvalue = value.join(' ');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (/(NaN| {2}|^$)/.test(value)) {\n\t\t\t\t\t\t\tvalue = 'M 0 0';\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//wrapper.d = value; // shortcut for animations\n\n\t\t\t\t\t// update child tspans x values\n\t\t\t\t\t} else if (key === 'x' && nodeName === 'text') {\n\t\t\t\t\t\tfor (i = 0; i < element.childNodes.length; i++) {\n\t\t\t\t\t\t\tchild = element.childNodes[i];\n\t\t\t\t\t\t\t// if the x values are equal, the tspan represents a linebreak\n\t\t\t\t\t\t\tif (attr(child, 'x') === attr(element, 'x')) {\n\t\t\t\t\t\t\t\t//child.setAttribute('x', value);\n\t\t\t\t\t\t\t\tattr(child, 'x', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (wrapper.rotation && (key === 'x' || key === 'y')) {\n\t\t\t\t\t\tdoTransform = true;\n\n\t\t\t\t\t// apply gradients\n\t\t\t\t\t} else if (key === 'fill') {\n\t\t\t\t\t\tvalue = renderer.color(value, element, key);\n\n\t\t\t\t\t// circle x and y\n\t\t\t\t\t} else if (nodeName === 'circle' && (key === 'x' || key === 'y')) {\n\t\t\t\t\t\tkey = { x: 'cx', y: 'cy' }[key] || key;\n\n\t\t\t\t\t// rectangle border radius\n\t\t\t\t\t} else if (nodeName === 'rect' && key === 'r') {\n\t\t\t\t\t\tattr(element, {\n\t\t\t\t\t\t\trx: value,\n\t\t\t\t\t\t\try: value\n\t\t\t\t\t\t});\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// translation and text rotation\n\t\t\t\t\t} else if (key === 'translateX' || key === 'translateY' || key === 'rotation' ||\n\t\t\t\t\t\t\tkey === 'verticalAlign' || key === 'scaleX' || key === 'scaleY') {\n\t\t\t\t\t\tdoTransform = true;\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// apply opacity as subnode (required by legacy WebKit and Batik)\n\t\t\t\t\t} else if (key === 'stroke') {\n\t\t\t\t\t\tvalue = renderer.color(value, element, key);\n\n\t\t\t\t\t// emulate VML's dashstyle implementation\n\t\t\t\t\t} else if (key === 'dashstyle') {\n\t\t\t\t\t\tkey = 'stroke-dasharray';\n\t\t\t\t\t\tvalue = value && value.toLowerCase();\n\t\t\t\t\t\tif (value === 'solid') {\n\t\t\t\t\t\t\tvalue = NONE;\n\t\t\t\t\t\t} else if (value) {\n\t\t\t\t\t\t\tvalue = value\n\t\t\t\t\t\t\t\t.replace('shortdashdotdot', '3,1,1,1,1,1,')\n\t\t\t\t\t\t\t\t.replace('shortdashdot', '3,1,1,1')\n\t\t\t\t\t\t\t\t.replace('shortdot', '1,1,')\n\t\t\t\t\t\t\t\t.replace('shortdash', '3,1,')\n\t\t\t\t\t\t\t\t.replace('longdash', '8,3,')\n\t\t\t\t\t\t\t\t.replace(/dot/g, '1,3,')\n\t\t\t\t\t\t\t\t.replace('dash', '4,3,')\n\t\t\t\t\t\t\t\t.replace(/,$/, '')\n\t\t\t\t\t\t\t\t.split(','); // ending comma\n\n\t\t\t\t\t\t\ti = value.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tvalue[i] = pInt(value[i]) * pick(hash['stroke-width'], wrapper['stroke-width']);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue = value.join(',');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// IE9/MooTools combo: MooTools returns objects instead of numbers and IE9 Beta 2\n\t\t\t\t\t// is unable to cast them. Test again with final IE9.\n\t\t\t\t\t} else if (key === 'width') {\n\t\t\t\t\t\tvalue = pInt(value);\n\n\t\t\t\t\t// Text alignment\n\t\t\t\t\t} else if (key === 'align') {\n\t\t\t\t\t\tkey = 'text-anchor';\n\t\t\t\t\t\tvalue = { left: 'start', center: 'middle', right: 'end' }[value];\n\n\t\t\t\t\t// Title requires a subnode, #431\n\t\t\t\t\t} else if (key === 'title') {\n\t\t\t\t\t\ttitleNode = element.getElementsByTagName('title')[0];\n\t\t\t\t\t\tif (!titleNode) {\n\t\t\t\t\t\t\ttitleNode = doc.createElementNS(SVG_NS, 'title');\n\t\t\t\t\t\t\telement.appendChild(titleNode);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttitleNode.textContent = value;\n\t\t\t\t\t}\n\n\t\t\t\t\t// jQuery animate changes case\n\t\t\t\t\tif (key === 'strokeWidth') {\n\t\t\t\t\t\tkey = 'stroke-width';\n\t\t\t\t\t}\n\n\t\t\t\t\t// In Chrome/Win < 6 as well as Batik, the stroke attribute can't be set when the stroke-\n\t\t\t\t\t// width is 0. #1369\n\t\t\t\t\tif (key === 'stroke-width' || key === 'stroke') {\n\t\t\t\t\t\twrapper[key] = value;\n\t\t\t\t\t\t// Only apply the stroke attribute if the stroke width is defined and larger than 0\n\t\t\t\t\t\tif (wrapper.stroke && wrapper['stroke-width']) {\n\t\t\t\t\t\t\tattr(element, 'stroke', wrapper.stroke);\n\t\t\t\t\t\t\tattr(element, 'stroke-width', wrapper['stroke-width']);\n\t\t\t\t\t\t\twrapper.hasStroke = true;\n\t\t\t\t\t\t} else if (key === 'stroke-width' && value === 0 && wrapper.hasStroke) {\n\t\t\t\t\t\t\telement.removeAttribute('stroke');\n\t\t\t\t\t\t\twrapper.hasStroke = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// symbols\n\t\t\t\t\tif (wrapper.symbolName && /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(key)) {\n\n\n\t\t\t\t\t\tif (!hasSetSymbolSize) {\n\t\t\t\t\t\t\twrapper.symbolAttr(hash);\n\t\t\t\t\t\t\thasSetSymbolSize = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// let the shadow follow the main element\n\t\t\t\t\tif (shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(key)) {\n\t\t\t\t\t\ti = shadows.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tattr(\n\t\t\t\t\t\t\t\tshadows[i],\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tkey === 'height' ?\n\t\t\t\t\t\t\t\t\tmathMax(value - (shadows[i].cutHeight || 0), 0) :\n\t\t\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// validate heights\n\t\t\t\t\tif ((key === 'width' || key === 'height') && nodeName === 'rect' && value < 0) {\n\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Record for animation and quick access without polling the DOM\n\t\t\t\t\twrapper[key] = value;\n\n\n\t\t\t\t\tif (key === 'text') {\n\t\t\t\t\t\t// Delete bBox memo when the text changes\n\t\t\t\t\t\tif (value !== wrapper.textStr) {\n\t\t\t\t\t\t\tdelete wrapper.bBox;\n\t\t\t\t\t\t}\n\t\t\t\t\t\twrapper.textStr = value;\n\t\t\t\t\t\tif (wrapper.added) {\n\t\t\t\t\t\t\trenderer.buildText(wrapper);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!skipAttr) {\n\t\t\t\t\t\tattr(element, key, value);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Update transform. Do this outside the loop to prevent redundant updating for batch setting\n\t\t\t// of attributes.\n\t\t\tif (doTransform) {\n\t\t\t\twrapper.updateTransform();\n\t\t\t}\n\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\n\t/**\n\t * Add a class name to an element\n\t */\n\taddClass: function (className) {\n\t\tvar element = this.element,\n\t\t\tcurrentClassName = attr(element, 'class') || '';\n\n\t\tif (currentClassName.indexOf(className) === -1) {\n\t\t\tattr(element, 'class', currentClassName + ' ' + className);\n\t\t}\n\t\treturn this;\n\t},\n\t/* hasClass and removeClass are not (yet) needed\n\thasClass: function (className) {\n\t\treturn attr(this.element, 'class').indexOf(className) !== -1;\n\t},\n\tremoveClass: function (className) {\n\t\tattr(this.element, 'class', attr(this.element, 'class').replace(className, ''));\n\t\treturn this;\n\t},\n\t*/\n\n\t/**\n\t * If one of the symbol size affecting parameters are changed,\n\t * check all the others only once for each call to an element's\n\t * .attr() method\n\t * @param {Object} hash\n\t */\n\tsymbolAttr: function (hash) {\n\t\tvar wrapper = this;\n\n\t\teach(['x', 'y', 'r', 'start', 'end', 'width', 'height', 'innerR', 'anchorX', 'anchorY'], function (key) {\n\t\t\twrapper[key] = pick(hash[key], wrapper[key]);\n\t\t});\n\n\t\twrapper.attr({\n\t\t\td: wrapper.renderer.symbols[wrapper.symbolName](\n\t\t\t\twrapper.x,\n\t\t\t\twrapper.y,\n\t\t\t\twrapper.width,\n\t\t\t\twrapper.height,\n\t\t\t\twrapper\n\t\t\t)\n\t\t});\n\t},\n\n\t/**\n\t * Apply a clipping path to this object\n\t * @param {String} id\n\t */\n\tclip: function (clipRect) {\n\t\treturn this.attr('clip-path', clipRect ? 'url(' + this.renderer.url + '#' + clipRect.id + ')' : NONE);\n\t},\n\n\t/**\n\t * Calculate the coordinates needed for drawing a rectangle crisply and return the\n\t * calculated attributes\n\t * @param {Number} strokeWidth\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tcrisp: function (strokeWidth, x, y, width, height) {\n\n\t\tvar wrapper = this,\n\t\t\tkey,\n\t\t\tattribs = {},\n\t\t\tvalues = {},\n\t\t\tnormalizer;\n\n\t\tstrokeWidth = strokeWidth || wrapper.strokeWidth || (wrapper.attr && wrapper.attr('stroke-width')) || 0;\n\t\tnormalizer = mathRound(strokeWidth) % 2 / 2; // mathRound because strokeWidth can sometimes have roundoff errors\n\n\t\t// normalize for crisp edges\n\t\tvalues.x = mathFloor(x || wrapper.x || 0) + normalizer;\n\t\tvalues.y = mathFloor(y || wrapper.y || 0) + normalizer;\n\t\tvalues.width = mathFloor((width || wrapper.width || 0) - 2 * normalizer);\n\t\tvalues.height = mathFloor((height || wrapper.height || 0) - 2 * normalizer);\n\t\tvalues.strokeWidth = strokeWidth;\n\n\t\tfor (key in values) {\n\t\t\tif (wrapper[key] !== values[key]) { // only set attribute if changed\n\t\t\t\twrapper[key] = attribs[key] = values[key];\n\t\t\t}\n\t\t}\n\n\t\treturn attribs;\n\t},\n\n\t/**\n\t * Set styles for the element\n\t * @param {Object} styles\n\t */\n\tcss: function (styles) {\n\t\t/*jslint unparam: true*//* allow unused param a in the regexp function below */\n\t\tvar elemWrapper = this,\n\t\t\telem = elemWrapper.element,\n\t\t\ttextWidth = styles && styles.width && elem.nodeName.toLowerCase() === 'text',\n\t\t\tn,\n\t\t\tserializedCss = '',\n\t\t\thyphenate = function (a, b) { return '-' + b.toLowerCase(); };\n\t\t/*jslint unparam: false*/\n\n\t\t// convert legacy\n\t\tif (styles && styles.color) {\n\t\t\tstyles.fill = styles.color;\n\t\t}\n\n\t\t// Merge the new styles with the old ones\n\t\tstyles = extend(\n\t\t\telemWrapper.styles,\n\t\t\tstyles\n\t\t);\n\n\t\t// store object\n\t\telemWrapper.styles = styles;\n\n\n\t\t// Don't handle line wrap on canvas\n\t\tif (useCanVG && textWidth) {\n\t\t\tdelete styles.width;\n\t\t}\n\n\t\t// serialize and set style attribute\n\t\tif (isIE && !hasSVG) { // legacy IE doesn't support setting style attribute\n\t\t\tif (textWidth) {\n\t\t\t\tdelete styles.width;\n\t\t\t}\n\t\t\tcss(elemWrapper.element, styles);\n\t\t} else {\n\t\t\tfor (n in styles) {\n\t\t\t\tserializedCss += n.replace(/([A-Z])/g, hyphenate) + ':' + styles[n] + ';';\n\t\t\t}\n\t\t\tattr(elem, 'style', serializedCss); // #1881\n\t\t}\n\n\n\t\t// re-build text\n\t\tif (textWidth && elemWrapper.added) {\n\t\t\telemWrapper.renderer.buildText(elemWrapper);\n\t\t}\n\n\t\treturn elemWrapper;\n\t},\n\n\t/**\n\t * Add an event listener\n\t * @param {String} eventType\n\t * @param {Function} handler\n\t */\n\ton: function (eventType, handler) {\n\t\tvar svgElement = this,\n\t\t\telement = svgElement.element;\n\t\t\n\t\t// touch\n\t\tif (hasTouch && eventType === 'click') {\n\t\t\telement.ontouchstart = function (e) {\t\t\t\n\t\t\t\tsvgElement.touchEventFired = Date.now();\t\t\t\t\n\t\t\t\te.preventDefault();\n\t\t\t\thandler.call(element, e);\n\t\t\t};\n\t\t\telement.onclick = function (e) {\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\tif (userAgent.indexOf('Android') === -1 || Date.now() - (svgElement.touchEventFired || 0) > 1100) { // #2269\n\t\t\t\t\thandler.call(element, e);\n\t\t\t\t}\n\t\t\t};\t\t\t\n\t\t} else {\n\t\t\t// simplest possible event model for internal use\n\t\t\telement['on' + eventType] = handler;\n\t\t}\n\t\treturn this;\n\t},\n\n\t/**\n\t * Set the coordinates needed to draw a consistent radial gradient across\n\t * pie slices regardless of positioning inside the chart. The format is\n\t * [centerX, centerY, diameter] in pixels.\n\t */\n\tsetRadialReference: function (coordinates) {\n\t\tthis.element.radialReference = coordinates;\n\t\treturn this;\n\t},\n\n\t/**\n\t * Move an object and its children by x and y values\n\t * @param {Number} x\n\t * @param {Number} y\n\t */\n\ttranslate: function (x, y) {\n\t\treturn this.attr({\n\t\t\ttranslateX: x,\n\t\t\ttranslateY: y\n\t\t});\n\t},\n\n\t/**\n\t * Invert a group, rotate and flip\n\t */\n\tinvert: function () {\n\t\tvar wrapper = this;\n\t\twrapper.inverted = true;\n\t\twrapper.updateTransform();\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * Apply CSS to HTML elements. This is used in text within SVG rendering and\n\t * by the VML renderer\n\t */\n\thtmlCss: function (styles) {\n\t\tvar wrapper = this,\n\t\t\telement = wrapper.element,\n\t\t\ttextWidth = styles && element.tagName === 'SPAN' && styles.width;\n\n\t\tif (textWidth) {\n\t\t\tdelete styles.width;\n\t\t\twrapper.textWidth = textWidth;\n\t\t\twrapper.updateTransform();\n\t\t}\n\n\t\twrapper.styles = extend(wrapper.styles, styles);\n\t\tcss(wrapper.element, styles);\n\n\t\treturn wrapper;\n\t},\n\n\n\n\t/**\n\t * VML and useHTML method for calculating the bounding box based on offsets\n\t * @param {Boolean} refresh Whether to force a fresh value from the DOM or to\n\t * use the cached value\n\t *\n\t * @return {Object} A hash containing values for x, y, width and height\n\t */\n\n\thtmlGetBBox: function () {\n\t\tvar wrapper = this,\n\t\t\telement = wrapper.element,\n\t\t\tbBox = wrapper.bBox;\n\n\t\t// faking getBBox in exported SVG in legacy IE\n\t\tif (!bBox) {\n\t\t\t// faking getBBox in exported SVG in legacy IE (is this a duplicate of the fix for #1079?)\n\t\t\tif (element.nodeName === 'text') {\n\t\t\t\telement.style.position = ABSOLUTE;\n\t\t\t}\n\n\t\t\tbBox = wrapper.bBox = {\n\t\t\t\tx: element.offsetLeft,\n\t\t\t\ty: element.offsetTop,\n\t\t\t\twidth: element.offsetWidth,\n\t\t\t\theight: element.offsetHeight\n\t\t\t};\n\t\t}\n\n\t\treturn bBox;\n\t},\n\n\t/**\n\t * VML override private method to update elements based on internal\n\t * properties based on SVG transform\n\t */\n\thtmlUpdateTransform: function () {\n\t\t// aligning non added elements is expensive\n\t\tif (!this.added) {\n\t\t\tthis.alignOnAdd = true;\n\t\t\treturn;\n\t\t}\n\n\t\tvar wrapper = this,\n\t\t\trenderer = wrapper.renderer,\n\t\t\telem = wrapper.element,\n\t\t\ttranslateX = wrapper.translateX || 0,\n\t\t\ttranslateY = wrapper.translateY || 0,\n\t\t\tx = wrapper.x || 0,\n\t\t\ty = wrapper.y || 0,\n\t\t\talign = wrapper.textAlign || 'left',\n\t\t\talignCorrection = { left: 0, center: 0.5, right: 1 }[align],\n\t\t\tnonLeft = align && align !== 'left',\n\t\t\tshadows = wrapper.shadows;\n\n\t\t// apply translate\n\t\tcss(elem, {\n\t\t\tmarginLeft: translateX,\n\t\t\tmarginTop: translateY\n\t\t});\n\t\tif (shadows) { // used in labels/tooltip\n\t\t\teach(shadows, function (shadow) {\n\t\t\t\tcss(shadow, {\n\t\t\t\t\tmarginLeft: translateX + 1,\n\t\t\t\t\tmarginTop: translateY + 1\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// apply inversion\n\t\tif (wrapper.inverted) { // wrapper is a group\n\t\t\teach(elem.childNodes, function (child) {\n\t\t\t\trenderer.invertChild(child, elem);\n\t\t\t});\n\t\t}\n\n\t\tif (elem.tagName === 'SPAN') {\n\n\t\t\tvar width, height,\n\t\t\t\trotation = wrapper.rotation,\n\t\t\t\tbaseline,\n\t\t\t\tradians = 0,\n\t\t\t\tcostheta = 1,\n\t\t\t\tsintheta = 0,\n\t\t\t\tquad,\n\t\t\t\ttextWidth = pInt(wrapper.textWidth),\n\t\t\t\txCorr = wrapper.xCorr || 0,\n\t\t\t\tyCorr = wrapper.yCorr || 0,\n\t\t\t\tcurrentTextTransform = [rotation, align, elem.innerHTML, wrapper.textWidth].join(',');\n\n\t\t\tif (currentTextTransform !== wrapper.cTT) { // do the calculations and DOM access only if properties changed\n\n\t\t\t\tif (defined(rotation)) {\n\n\t\t\t\t\tradians = rotation * deg2rad; // deg to rad\n\t\t\t\t\tcostheta = mathCos(radians);\n\t\t\t\t\tsintheta = mathSin(radians);\n\n\t\t\t\t\twrapper.setSpanRotation(rotation, sintheta, costheta);\n\n\t\t\t\t}\n\n\t\t\t\twidth = pick(wrapper.elemWidth, elem.offsetWidth);\n\t\t\t\theight = pick(wrapper.elemHeight, elem.offsetHeight);\n\n\t\t\t\t// update textWidth\n\t\t\t\tif (width > textWidth && /[ \\-]/.test(elem.textContent || elem.innerText)) { // #983, #1254\n\t\t\t\t\tcss(elem, {\n\t\t\t\t\t\twidth: textWidth + PX,\n\t\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\t\twhiteSpace: 'normal'\n\t\t\t\t\t});\n\t\t\t\t\twidth = textWidth;\n\t\t\t\t}\n\n\t\t\t\t// correct x and y\n\t\t\t\tbaseline = renderer.fontMetrics(elem.style.fontSize).b;\n\t\t\t\txCorr = costheta < 0 && -width;\n\t\t\t\tyCorr = sintheta < 0 && -height;\n\n\t\t\t\t// correct for baseline and corners spilling out after rotation\n\t\t\t\tquad = costheta * sintheta < 0;\n\t\t\t\txCorr += sintheta * baseline * (quad ? 1 - alignCorrection : alignCorrection);\n\t\t\t\tyCorr -= costheta * baseline * (rotation ? (quad ? alignCorrection : 1 - alignCorrection) : 1);\n\n\t\t\t\t// correct for the length/height of the text\n\t\t\t\tif (nonLeft) {\n\t\t\t\t\txCorr -= width * alignCorrection * (costheta < 0 ? -1 : 1);\n\t\t\t\t\tif (rotation) {\n\t\t\t\t\t\tyCorr -= height * alignCorrection * (sintheta < 0 ? -1 : 1);\n\t\t\t\t\t}\n\t\t\t\t\tcss(elem, {\n\t\t\t\t\t\ttextAlign: align\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// record correction\n\t\t\t\twrapper.xCorr = xCorr;\n\t\t\t\twrapper.yCorr = yCorr;\n\t\t\t}\n\n\t\t\t// apply position with correction\n\t\t\tcss(elem, {\n\t\t\t\tleft: (x + xCorr) + PX,\n\t\t\t\ttop: (y + yCorr) + PX\n\t\t\t});\n\n\t\t\t// force reflow in webkit to apply the left and top on useHTML element (#1249)\n\t\t\tif (isWebKit) {\n\t\t\t\theight = elem.offsetHeight; // assigned to height for JSLint purpose\n\t\t\t}\n\n\t\t\t// record current text transform\n\t\t\twrapper.cTT = currentTextTransform;\n\t\t}\n\t},\n\n\t/**\n\t * Set the rotation of an individual HTML span\n\t */\n\tsetSpanRotation: function (rotation) {\n\t\tvar rotationStyle = {},\n\t\t\tcssTransformKey = isIE ? '-ms-transform' : isWebKit ? '-webkit-transform' : isFirefox ? 'MozTransform' : isOpera ? '-o-transform' : '';\n\n\t\trotationStyle[cssTransformKey] = rotationStyle.transform = 'rotate(' + rotation + 'deg)';\n\t\tcss(this.element, rotationStyle);\n\t},\n\n\t/**\n\t * Private method to update the transform attribute based on internal\n\t * properties\n\t */\n\tupdateTransform: function () {\n\t\tvar wrapper = this,\n\t\t\ttranslateX = wrapper.translateX || 0,\n\t\t\ttranslateY = wrapper.translateY || 0,\n\t\t\tscaleX = wrapper.scaleX,\n\t\t\tscaleY = wrapper.scaleY,\n\t\t\tinverted = wrapper.inverted,\n\t\t\trotation = wrapper.rotation,\n\t\t\ttransform;\n\n\t\t// flipping affects translate as adjustment for flipping around the group's axis\n\t\tif (inverted) {\n\t\t\ttranslateX += wrapper.attr('width');\n\t\t\ttranslateY += wrapper.attr('height');\n\t\t}\n\n\t\t// Apply translate. Nearly all transformed elements have translation, so instead\n\t\t// of checking for translate = 0, do it always (#1767, #1846).\n\t\ttransform = ['translate(' + translateX + ',' + translateY + ')'];\n\n\t\t// apply rotation\n\t\tif (inverted) {\n\t\t\ttransform.push('rotate(90) scale(-1,1)');\n\t\t} else if (rotation) { // text rotation\n\t\t\ttransform.push('rotate(' + rotation + ' ' + (wrapper.x || 0) + ' ' + (wrapper.y || 0) + ')');\n\t\t}\n\n\t\t// apply scale\n\t\tif (defined(scaleX) || defined(scaleY)) {\n\t\t\ttransform.push('scale(' + pick(scaleX, 1) + ' ' + pick(scaleY, 1) + ')');\n\t\t}\n\n\t\tif (transform.length) {\n\t\t\tattr(wrapper.element, 'transform', transform.join(' '));\n\t\t}\n\t},\n\t/**\n\t * Bring the element to the front\n\t */\n\ttoFront: function () {\n\t\tvar element = this.element;\n\t\telement.parentNode.appendChild(element);\n\t\treturn this;\n\t},\n\n\n\t/**\n\t * Break down alignment options like align, verticalAlign, x and y\n\t * to x and y relative to the chart.\n\t *\n\t * @param {Object} alignOptions\n\t * @param {Boolean} alignByTranslate\n\t * @param {String[Object} box The box to align to, needs a width and height. When the\n\t *        box is a string, it refers to an object in the Renderer. For example, when\n\t *        box is 'spacingBox', it refers to Renderer.spacingBox which holds width, height\n\t *        x and y properties.\n\t *\n\t */\n\talign: function (alignOptions, alignByTranslate, box) {\n\t\tvar align,\n\t\t\tvAlign,\n\t\t\tx,\n\t\t\ty,\n\t\t\tattribs = {},\n\t\t\talignTo,\n\t\t\trenderer = this.renderer,\n\t\t\talignedObjects = renderer.alignedObjects;\n\n\t\t// First call on instanciate\n\t\tif (alignOptions) {\n\t\t\tthis.alignOptions = alignOptions;\n\t\t\tthis.alignByTranslate = alignByTranslate;\n\t\t\tif (!box || isString(box)) { // boxes other than renderer handle this internally\n\t\t\t\tthis.alignTo = alignTo = box || 'renderer';\n\t\t\t\terase(alignedObjects, this); // prevent duplicates, like legendGroup after resize\n\t\t\t\talignedObjects.push(this);\n\t\t\t\tbox = null; // reassign it below\n\t\t\t}\n\n\t\t// When called on resize, no arguments are supplied\n\t\t} else {\n\t\t\talignOptions = this.alignOptions;\n\t\t\talignByTranslate = this.alignByTranslate;\n\t\t\talignTo = this.alignTo;\n\t\t}\n\n\t\tbox = pick(box, renderer[alignTo], renderer);\n\n\t\t// Assign variables\n\t\talign = alignOptions.align;\n\t\tvAlign = alignOptions.verticalAlign;\n\t\tx = (box.x || 0) + (alignOptions.x || 0); // default: left align\n\t\ty = (box.y || 0) + (alignOptions.y || 0); // default: top align\n\n\t\t// Align\n\t\tif (align === 'right' || align === 'center') {\n\t\t\tx += (box.width - (alignOptions.width || 0)) /\n\t\t\t\t\t{ right: 1, center: 2 }[align];\n\t\t}\n\t\tattribs[alignByTranslate ? 'translateX' : 'x'] = mathRound(x);\n\n\n\t\t// Vertical align\n\t\tif (vAlign === 'bottom' || vAlign === 'middle') {\n\t\t\ty += (box.height - (alignOptions.height || 0)) /\n\t\t\t\t\t({ bottom: 1, middle: 2 }[vAlign] || 1);\n\n\t\t}\n\t\tattribs[alignByTranslate ? 'translateY' : 'y'] = mathRound(y);\n\n\t\t// Animate only if already placed\n\t\tthis[this.placed ? 'animate' : 'attr'](attribs);\n\t\tthis.placed = true;\n\t\tthis.alignAttr = attribs;\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get the bounding box (width, height, x and y) for the element\n\t */\n\tgetBBox: function () {\n\t\tvar wrapper = this,\n\t\t\tbBox = wrapper.bBox,\n\t\t\trenderer = wrapper.renderer,\n\t\t\twidth,\n\t\t\theight,\n\t\t\trotation = wrapper.rotation,\n\t\t\telement = wrapper.element,\n\t\t\tstyles = wrapper.styles,\n\t\t\trad = rotation * deg2rad;\n\n\t\tif (!bBox) {\n\t\t\t// SVG elements\n\t\t\tif (element.namespaceURI === SVG_NS || renderer.forExport) {\n\t\t\t\ttry { // Fails in Firefox if the container has display: none.\n\n\t\t\t\t\tbBox = element.getBBox ?\n\t\t\t\t\t\t// SVG: use extend because IE9 is not allowed to change width and height in case\n\t\t\t\t\t\t// of rotation (below)\n\t\t\t\t\t\textend({}, element.getBBox()) :\n\t\t\t\t\t\t// Canvas renderer and legacy IE in export mode\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twidth: element.offsetWidth,\n\t\t\t\t\t\t\theight: element.offsetHeight\n\t\t\t\t\t\t};\n\t\t\t\t} catch (e) {}\n\n\t\t\t\t// If the bBox is not set, the try-catch block above failed. The other condition\n\t\t\t\t// is for Opera that returns a width of -Infinity on hidden elements.\n\t\t\t\tif (!bBox || bBox.width < 0) {\n\t\t\t\t\tbBox = { width: 0, height: 0 };\n\t\t\t\t}\n\n\n\t\t\t// VML Renderer or useHTML within SVG\n\t\t\t} else {\n\n\t\t\t\tbBox = wrapper.htmlGetBBox();\n\n\t\t\t}\n\n\t\t\t// True SVG elements as well as HTML elements in modern browsers using the .useHTML option\n\t\t\t// need to compensated for rotation\n\t\t\tif (renderer.isSVG) {\n\t\t\t\twidth = bBox.width;\n\t\t\t\theight = bBox.height;\n\n\t\t\t\t// Workaround for wrong bounding box in IE9 and IE10 (#1101, #1505, #1669)\n\t\t\t\tif (isIE && styles && styles.fontSize === '11px' && height.toPrecision(3) === '22.7') {\n\t\t\t\t\tbBox.height = height = 14;\n\t\t\t\t}\n\n\t\t\t\t// Adjust for rotated text\n\t\t\t\tif (rotation) {\n\t\t\t\t\tbBox.width = mathAbs(height * mathSin(rad)) + mathAbs(width * mathCos(rad));\n\t\t\t\t\tbBox.height = mathAbs(height * mathCos(rad)) + mathAbs(width * mathSin(rad));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twrapper.bBox = bBox;\n\t\t}\n\t\treturn bBox;\n\t},\n\n\t/**\n\t * Show the element\n\t */\n\tshow: function () {\n\t\treturn this.attr({ visibility: VISIBLE });\n\t},\n\n\t/**\n\t * Hide the element\n\t */\n\thide: function () {\n\t\treturn this.attr({ visibility: HIDDEN });\n\t},\n\n\tfadeOut: function (duration) {\n\t\tvar elemWrapper = this;\n\t\telemWrapper.animate({\n\t\t\topacity: 0\n\t\t}, {\n\t\t\tduration: duration || 150,\n\t\t\tcomplete: function () {\n\t\t\t\telemWrapper.hide();\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Add the element\n\t * @param {Object|Undefined} parent Can be an element, an element wrapper or undefined\n\t *    to append the element to the renderer.box.\n\t */\n\tadd: function (parent) {\n\n\t\tvar renderer = this.renderer,\n\t\t\tparentWrapper = parent || renderer,\n\t\t\tparentNode = parentWrapper.element || renderer.box,\n\t\t\tchildNodes = parentNode.childNodes,\n\t\t\telement = this.element,\n\t\t\tzIndex = attr(element, 'zIndex'),\n\t\t\totherElement,\n\t\t\totherZIndex,\n\t\t\ti,\n\t\t\tinserted;\n\n\t\tif (parent) {\n\t\t\tthis.parentGroup = parent;\n\t\t}\n\n\t\t// mark as inverted\n\t\tthis.parentInverted = parent && parent.inverted;\n\n\t\t// build formatted text\n\t\tif (this.textStr !== undefined) {\n\t\t\trenderer.buildText(this);\n\t\t}\n\n\t\t// mark the container as having z indexed children\n\t\tif (zIndex) {\n\t\t\tparentWrapper.handleZ = true;\n\t\t\tzIndex = pInt(zIndex);\n\t\t}\n\n\t\t// insert according to this and other elements' zIndex\n\t\tif (parentWrapper.handleZ) { // this element or any of its siblings has a z index\n\t\t\tfor (i = 0; i < childNodes.length; i++) {\n\t\t\t\totherElement = childNodes[i];\n\t\t\t\totherZIndex = attr(otherElement, 'zIndex');\n\t\t\t\tif (otherElement !== element && (\n\t\t\t\t\t\t// insert before the first element with a higher zIndex\n\t\t\t\t\t\tpInt(otherZIndex) > zIndex ||\n\t\t\t\t\t\t// if no zIndex given, insert before the first element with a zIndex\n\t\t\t\t\t\t(!defined(zIndex) && defined(otherZIndex))\n\n\t\t\t\t\t\t)) {\n\t\t\t\t\tparentNode.insertBefore(element, otherElement);\n\t\t\t\t\tinserted = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// default: append at the end\n\t\tif (!inserted) {\n\t\t\tparentNode.appendChild(element);\n\t\t}\n\n\t\t// mark as added\n\t\tthis.added = true;\n\n\t\t// fire an event for internal hooks\n\t\tfireEvent(this, 'add');\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Removes a child either by removeChild or move to garbageBin.\n\t * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not.\n\t */\n\tsafeRemoveChild: function (element) {\n\t\tvar parentNode = element.parentNode;\n\t\tif (parentNode) {\n\t\t\tparentNode.removeChild(element);\n\t\t}\n\t},\n\n\t/**\n\t * Destroy the element and element wrapper\n\t */\n\tdestroy: function () {\n\t\tvar wrapper = this,\n\t\t\telement = wrapper.element || {},\n\t\t\tshadows = wrapper.shadows,\n\t\t\tparentToClean = wrapper.renderer.isSVG && element.nodeName === 'SPAN' && element.parentNode,\n\t\t\tgrandParent,\n\t\t\tkey,\n\t\t\ti;\n\n\t\t// remove events\n\t\telement.onclick = element.onmouseout = element.onmouseover = element.onmousemove = element.point = null;\n\t\tstop(wrapper); // stop running animations\n\n\t\tif (wrapper.clipPath) {\n\t\t\twrapper.clipPath = wrapper.clipPath.destroy();\n\t\t}\n\n\t\t// Destroy stops in case this is a gradient object\n\t\tif (wrapper.stops) {\n\t\t\tfor (i = 0; i < wrapper.stops.length; i++) {\n\t\t\t\twrapper.stops[i] = wrapper.stops[i].destroy();\n\t\t\t}\n\t\t\twrapper.stops = null;\n\t\t}\n\n\t\t// remove element\n\t\twrapper.safeRemoveChild(element);\n\n\t\t// destroy shadows\n\t\tif (shadows) {\n\t\t\teach(shadows, function (shadow) {\n\t\t\t\twrapper.safeRemoveChild(shadow);\n\t\t\t});\n\t\t}\n\n\t\t// In case of useHTML, clean up empty containers emulating SVG groups (#1960).\n\t\twhile (parentToClean && parentToClean.childNodes.length === 0) {\n\t\t\tgrandParent = parentToClean.parentNode;\n\t\t\twrapper.safeRemoveChild(parentToClean);\n\t\t\tparentToClean = grandParent;\n\t\t}\n\n\t\t// remove from alignObjects\n\t\tif (wrapper.alignTo) {\n\t\t\terase(wrapper.renderer.alignedObjects, wrapper);\n\t\t}\n\n\t\tfor (key in wrapper) {\n\t\t\tdelete wrapper[key];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Add a shadow to the element. Must be done after the element is added to the DOM\n\t * @param {Boolean|Object} shadowOptions\n\t */\n\tshadow: function (shadowOptions, group, cutOff) {\n\t\tvar shadows = [],\n\t\t\ti,\n\t\t\tshadow,\n\t\t\telement = this.element,\n\t\t\tstrokeWidth,\n\t\t\tshadowWidth,\n\t\t\tshadowElementOpacity,\n\n\t\t\t// compensate for inverted plot area\n\t\t\ttransform;\n\n\n\t\tif (shadowOptions) {\n\t\t\tshadowWidth = pick(shadowOptions.width, 3);\n\t\t\tshadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth;\n\t\t\ttransform = this.parentInverted ?\n\t\t\t\t'(-1,-1)' :\n\t\t\t\t'(' + pick(shadowOptions.offsetX, 1) + ', ' + pick(shadowOptions.offsetY, 1) + ')';\n\t\t\tfor (i = 1; i <= shadowWidth; i++) {\n\t\t\t\tshadow = element.cloneNode(0);\n\t\t\t\tstrokeWidth = (shadowWidth * 2) + 1 - (2 * i);\n\t\t\t\tattr(shadow, {\n\t\t\t\t\t'isShadow': 'true',\n\t\t\t\t\t'stroke': shadowOptions.color || 'black',\n\t\t\t\t\t'stroke-opacity': shadowElementOpacity * i,\n\t\t\t\t\t'stroke-width': strokeWidth,\n\t\t\t\t\t'transform': 'translate' + transform,\n\t\t\t\t\t'fill': NONE\n\t\t\t\t});\n\t\t\t\tif (cutOff) {\n\t\t\t\t\tattr(shadow, 'height', mathMax(attr(shadow, 'height') - strokeWidth, 0));\n\t\t\t\t\tshadow.cutHeight = strokeWidth;\n\t\t\t\t}\n\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.element.appendChild(shadow);\n\t\t\t\t} else {\n\t\t\t\t\telement.parentNode.insertBefore(shadow, element);\n\t\t\t\t}\n\n\t\t\t\tshadows.push(shadow);\n\t\t\t}\n\n\t\t\tthis.shadows = shadows;\n\t\t}\n\t\treturn this;\n\n\t}\n};\n\n\n/**\n * The default SVG renderer\n */\nvar SVGRenderer = function () {\n\tthis.init.apply(this, arguments);\n};\nSVGRenderer.prototype = {\n\tElement: SVGElement,\n\n\t/**\n\t * Initialize the SVGRenderer\n\t * @param {Object} container\n\t * @param {Number} width\n\t * @param {Number} height\n\t * @param {Boolean} forExport\n\t */\n\tinit: function (container, width, height, forExport) {\n\t\tvar renderer = this,\n\t\t\tloc = location,\n\t\t\tboxWrapper,\n\t\t\telement,\n\t\t\tdesc;\n\n\t\tboxWrapper = renderer.createElement('svg')\n\t\t\t.attr({\n\t\t\t\tversion: '1.1'\n\t\t\t});\n\t\telement = boxWrapper.element;\n\t\tcontainer.appendChild(element);\n\n\t\t// For browsers other than IE, add the namespace attribute (#1978)\n\t\tif (container.innerHTML.indexOf('xmlns') === -1) {\n\t\t\tattr(element, 'xmlns', SVG_NS);\n\t\t}\n\n\t\t// object properties\n\t\trenderer.isSVG = true;\n\t\trenderer.box = element;\n\t\trenderer.boxWrapper = boxWrapper;\n\t\trenderer.alignedObjects = [];\n\n\t\t// Page url used for internal references. #24, #672, #1070\n\t\trenderer.url = (isFirefox || isWebKit) && doc.getElementsByTagName('base').length ?\n\t\t\tloc.href\n\t\t\t\t.replace(/#.*?$/, '') // remove the hash\n\t\t\t\t.replace(/([\\('\\)])/g, '\\\\$1') // escape parantheses and quotes\n\t\t\t\t.replace(/ /g, '%20') : // replace spaces (needed for Safari only)\n\t\t\t'';\n\n\t\t// Add description\n\t\tdesc = this.createElement('desc').add();\n\t\tdesc.element.appendChild(doc.createTextNode('Created with ' + PRODUCT + ' ' + VERSION));\n\n\n\t\trenderer.defs = this.createElement('defs').add();\n\t\trenderer.forExport = forExport;\n\t\trenderer.gradients = {}; // Object where gradient SvgElements are stored\n\n\t\trenderer.setSize(width, height, false);\n\n\n\n\t\t// Issue 110 workaround:\n\t\t// In Firefox, if a div is positioned by percentage, its pixel position may land\n\t\t// between pixels. The container itself doesn't display this, but an SVG element\n\t\t// inside this container will be drawn at subpixel precision. In order to draw\n\t\t// sharp lines, this must be compensated for. This doesn't seem to work inside\n\t\t// iframes though (like in jsFiddle).\n\t\tvar subPixelFix, rect;\n\t\tif (isFirefox && container.getBoundingClientRect) {\n\t\t\trenderer.subPixelFix = subPixelFix = function () {\n\t\t\t\tcss(container, { left: 0, top: 0 });\n\t\t\t\trect = container.getBoundingClientRect();\n\t\t\t\tcss(container, {\n\t\t\t\t\tleft: (mathCeil(rect.left) - rect.left) + PX,\n\t\t\t\t\ttop: (mathCeil(rect.top) - rect.top) + PX\n\t\t\t\t});\n\t\t\t};\n\n\t\t\t// run the fix now\n\t\t\tsubPixelFix();\n\n\t\t\t// run it on resize\n\t\t\taddEvent(win, 'resize', subPixelFix);\n\t\t}\n\t},\n\n\t/**\n\t * Detect whether the renderer is hidden. This happens when one of the parent elements\n\t * has display: none. #608.\n\t */\n\tisHidden: function () {\n\t\treturn !this.boxWrapper.getBBox().width;\n\t},\n\n\t/**\n\t * Destroys the renderer and its allocated members.\n\t */\n\tdestroy: function () {\n\t\tvar renderer = this,\n\t\t\trendererDefs = renderer.defs;\n\t\trenderer.box = null;\n\t\trenderer.boxWrapper = renderer.boxWrapper.destroy();\n\n\t\t// Call destroy on all gradient elements\n\t\tdestroyObjectProperties(renderer.gradients || {});\n\t\trenderer.gradients = null;\n\n\t\t// Defs are null in VMLRenderer\n\t\t// Otherwise, destroy them here.\n\t\tif (rendererDefs) {\n\t\t\trenderer.defs = rendererDefs.destroy();\n\t\t}\n\n\t\t// Remove sub pixel fix handler\n\t\t// We need to check that there is a handler, otherwise all functions that are registered for event 'resize' are removed\n\t\t// See issue #982\n\t\tif (renderer.subPixelFix) {\n\t\t\tremoveEvent(win, 'resize', renderer.subPixelFix);\n\t\t}\n\n\t\trenderer.alignedObjects = null;\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Create a wrapper for an SVG element\n\t * @param {Object} nodeName\n\t */\n\tcreateElement: function (nodeName) {\n\t\tvar wrapper = new this.Element();\n\t\twrapper.init(this, nodeName);\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * Dummy function for use in canvas renderer\n\t */\n\tdraw: function () {},\n\n\t/**\n\t * Parse a simple HTML string into SVG tspans\n\t *\n\t * @param {Object} textNode The parent text SVG node\n\t */\n\tbuildText: function (wrapper) {\n\t\tvar textNode = wrapper.element,\n\t\t\trenderer = this,\n\t\t\tforExport = renderer.forExport,\n\t\t\tlines = pick(wrapper.textStr, '').toString()\n\t\t\t\t.replace(/<(b|strong)>/g, '<span style=\"font-weight:bold\">')\n\t\t\t\t.replace(/<(i|em)>/g, '<span style=\"font-style:italic\">')\n\t\t\t\t.replace(/<a/g, '<span')\n\t\t\t\t.replace(/<\\/(b|strong|i|em|a)>/g, '</span>')\n\t\t\t\t.split(/<br.*?>/g),\n\t\t\tchildNodes = textNode.childNodes,\n\t\t\tstyleRegex = /style=\"([^\"]+)\"/,\n\t\t\threfRegex = /href=\"(http[^\"]+)\"/,\n\t\t\tparentX = attr(textNode, 'x'),\n\t\t\ttextStyles = wrapper.styles,\n\t\t\twidth = textStyles && textStyles.width && pInt(textStyles.width),\n\t\t\ttextLineHeight = textStyles && textStyles.lineHeight,\n\t\t\ti = childNodes.length;\n\n\t\t/// remove old text\n\t\twhile (i--) {\n\t\t\ttextNode.removeChild(childNodes[i]);\n\t\t}\n\n\t\tif (width && !wrapper.added) {\n\t\t\tthis.box.appendChild(textNode); // attach it to the DOM to read offset width\n\t\t}\n\n\t\t// remove empty line at end\n\t\tif (lines[lines.length - 1] === '') {\n\t\t\tlines.pop();\n\t\t}\n\n\t\t// build the lines\n\t\teach(lines, function (line, lineNo) {\n\t\t\tvar spans, spanNo = 0;\n\n\t\t\tline = line.replace(/<span/g, '|||<span').replace(/<\\/span>/g, '</span>|||');\n\t\t\tspans = line.split('|||');\n\n\t\t\teach(spans, function (span) {\n\t\t\t\tif (span !== '' || spans.length === 1) {\n\t\t\t\t\tvar attributes = {},\n\t\t\t\t\t\ttspan = doc.createElementNS(SVG_NS, 'tspan'),\n\t\t\t\t\t\tspanStyle; // #390\n\t\t\t\t\tif (styleRegex.test(span)) {\n\t\t\t\t\t\tspanStyle = span.match(styleRegex)[1].replace(/(;| |^)color([ :])/, '$1fill$2');\n\t\t\t\t\t\tattr(tspan, 'style', spanStyle);\n\t\t\t\t\t}\n\t\t\t\t\tif (hrefRegex.test(span) && !forExport) { // Not for export - #1529\n\t\t\t\t\t\tattr(tspan, 'onclick', 'location.href=\\\"' + span.match(hrefRegex)[1] + '\\\"');\n\t\t\t\t\t\tcss(tspan, { cursor: 'pointer' });\n\t\t\t\t\t}\n\n\t\t\t\t\tspan = (span.replace(/<(.|\\n)*?>/g, '') || ' ')\n\t\t\t\t\t\t.replace(/&lt;/g, '<')\n\t\t\t\t\t\t.replace(/&gt;/g, '>');\n\n\t\t\t\t\t// Nested tags aren't supported, and cause crash in Safari (#1596)\n\t\t\t\t\tif (span !== ' ') {\n\n\t\t\t\t\t\t// add the text node\n\t\t\t\t\t\ttspan.appendChild(doc.createTextNode(span));\n\n\t\t\t\t\t\tif (!spanNo) { // first span in a line, align it to the left\n\t\t\t\t\t\t\tattributes.x = parentX;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattributes.dx = 0; // #16\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// add attributes\n\t\t\t\t\t\tattr(tspan, attributes);\n\n\t\t\t\t\t\t// first span on subsequent line, add the line height\n\t\t\t\t\t\tif (!spanNo && lineNo) {\n\n\t\t\t\t\t\t\t// allow getting the right offset height in exporting in IE\n\t\t\t\t\t\t\tif (!hasSVG && forExport) {\n\t\t\t\t\t\t\t\tcss(tspan, { display: 'block' });\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Set the line height based on the font size of either\n\t\t\t\t\t\t\t// the text element or the tspan element\n\t\t\t\t\t\t\tattr(\n\t\t\t\t\t\t\t\ttspan,\n\t\t\t\t\t\t\t\t'dy',\n\t\t\t\t\t\t\t\ttextLineHeight || renderer.fontMetrics(\n\t\t\t\t\t\t\t\t\t/px$/.test(tspan.style.fontSize) ?\n\t\t\t\t\t\t\t\t\t\ttspan.style.fontSize :\n\t\t\t\t\t\t\t\t\t\ttextStyles.fontSize\n\t\t\t\t\t\t\t\t).h,\n\t\t\t\t\t\t\t\t// Safari 6.0.2 - too optimized for its own good (#1539)\n\t\t\t\t\t\t\t\t// TODO: revisit this with future versions of Safari\n\t\t\t\t\t\t\t\tisWebKit && tspan.offsetHeight\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Append it\n\t\t\t\t\t\ttextNode.appendChild(tspan);\n\n\t\t\t\t\t\tspanNo++;\n\n\t\t\t\t\t\t// check width and apply soft breaks\n\t\t\t\t\t\tif (width) {\n\t\t\t\t\t\t\tvar words = span.replace(/([^\\^])-/g, '$1- ').split(' '), // #1273\n\t\t\t\t\t\t\t\ttooLong,\n\t\t\t\t\t\t\t\tactualWidth,\n\t\t\t\t\t\t\t\tclipHeight = wrapper._clipHeight,\n\t\t\t\t\t\t\t\trest = [],\n\t\t\t\t\t\t\t\tdy = pInt(textLineHeight || 16),\n\t\t\t\t\t\t\t\tsoftLineNo = 1,\n\t\t\t\t\t\t\t\tbBox;\n\n\t\t\t\t\t\t\twhile (words.length || rest.length) {\n\t\t\t\t\t\t\t\tdelete wrapper.bBox; // delete cache\n\t\t\t\t\t\t\t\tbBox = wrapper.getBBox();\n\t\t\t\t\t\t\t\tactualWidth = bBox.width;\n\t\t\t\t\t\t\t\ttooLong = actualWidth > width;\n\t\t\t\t\t\t\t\tif (!tooLong || words.length === 1) { // new line needed\n\t\t\t\t\t\t\t\t\twords = rest;\n\t\t\t\t\t\t\t\t\trest = [];\n\t\t\t\t\t\t\t\t\tif (words.length) {\n\t\t\t\t\t\t\t\t\t\tsoftLineNo++;\n\n\t\t\t\t\t\t\t\t\t\tif (clipHeight && softLineNo * dy > clipHeight) {\n\t\t\t\t\t\t\t\t\t\t\twords = ['...'];\n\t\t\t\t\t\t\t\t\t\t\twrapper.attr('title', wrapper.textStr);\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\ttspan = doc.createElementNS(SVG_NS, 'tspan');\n\t\t\t\t\t\t\t\t\t\t\tattr(tspan, {\n\t\t\t\t\t\t\t\t\t\t\t\tdy: dy,\n\t\t\t\t\t\t\t\t\t\t\t\tx: parentX\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\tif (spanStyle) { // #390\n\t\t\t\t\t\t\t\t\t\t\t\tattr(tspan, 'style', spanStyle);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttextNode.appendChild(tspan);\n\n\t\t\t\t\t\t\t\t\t\t\tif (actualWidth > width) { // a single word is pressing it out\n\t\t\t\t\t\t\t\t\t\t\t\twidth = actualWidth;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else { // append to existing line tspan\n\t\t\t\t\t\t\t\t\ttspan.removeChild(tspan.firstChild);\n\t\t\t\t\t\t\t\t\trest.unshift(words.pop());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (words.length) {\n\t\t\t\t\t\t\t\t\ttspan.appendChild(doc.createTextNode(words.join(' ').replace(/- /g, '-')));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n\t * Create a button with preset states\n\t * @param {String} text\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Function} callback\n\t * @param {Object} normalState\n\t * @param {Object} hoverState\n\t * @param {Object} pressedState\n\t */\n\tbutton: function (text, x, y, callback, normalState, hoverState, pressedState, disabledState) {\n\t\tvar label = this.label(text, x, y, null, null, null, null, null, 'button'),\n\t\t\tcurState = 0,\n\t\t\tstateOptions,\n\t\t\tstateStyle,\n\t\t\tnormalStyle,\n\t\t\thoverStyle,\n\t\t\tpressedStyle,\n\t\t\tdisabledStyle,\n\t\t\tSTYLE = 'style',\n\t\t\tverticalGradient = { x1: 0, y1: 0, x2: 0, y2: 1 };\n\n\t\t// Normal state - prepare the attributes\n\t\tnormalState = merge({\n\t\t\t'stroke-width': 1,\n\t\t\tstroke: '#CCCCCC',\n\t\t\tfill: {\n\t\t\t\tlinearGradient: verticalGradient,\n\t\t\t\tstops: [\n\t\t\t\t\t[0, '#FEFEFE'],\n\t\t\t\t\t[1, '#F6F6F6']\n\t\t\t\t]\n\t\t\t},\n\t\t\tr: 2,\n\t\t\tpadding: 5,\n\t\t\tstyle: {\n\t\t\t\tcolor: 'black'\n\t\t\t}\n\t\t}, normalState);\n\t\tnormalStyle = normalState[STYLE];\n\t\tdelete normalState[STYLE];\n\n\t\t// Hover state\n\t\thoverState = merge(normalState, {\n\t\t\tstroke: '#68A',\n\t\t\tfill: {\n\t\t\t\tlinearGradient: verticalGradient,\n\t\t\t\tstops: [\n\t\t\t\t\t[0, '#FFF'],\n\t\t\t\t\t[1, '#ACF']\n\t\t\t\t]\n\t\t\t}\n\t\t}, hoverState);\n\t\thoverStyle = hoverState[STYLE];\n\t\tdelete hoverState[STYLE];\n\n\t\t// Pressed state\n\t\tpressedState = merge(normalState, {\n\t\t\tstroke: '#68A',\n\t\t\tfill: {\n\t\t\t\tlinearGradient: verticalGradient,\n\t\t\t\tstops: [\n\t\t\t\t\t[0, '#9BD'],\n\t\t\t\t\t[1, '#CDF']\n\t\t\t\t]\n\t\t\t}\n\t\t}, pressedState);\n\t\tpressedStyle = pressedState[STYLE];\n\t\tdelete pressedState[STYLE];\n\n\t\t// Disabled state\n\t\tdisabledState = merge(normalState, {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t}\n\t\t}, disabledState);\n\t\tdisabledStyle = disabledState[STYLE];\n\t\tdelete disabledState[STYLE];\n\n\t\t// Add the events. IE9 and IE10 need mouseover and mouseout to funciton (#667).\n\t\taddEvent(label.element, isIE ? 'mouseover' : 'mouseenter', function () {\n\t\t\tif (curState !== 3) {\n\t\t\t\tlabel.attr(hoverState)\n\t\t\t\t\t.css(hoverStyle);\n\t\t\t}\n\t\t});\n\t\taddEvent(label.element, isIE ? 'mouseout' : 'mouseleave', function () {\n\t\t\tif (curState !== 3) {\n\t\t\t\tstateOptions = [normalState, hoverState, pressedState][curState];\n\t\t\t\tstateStyle = [normalStyle, hoverStyle, pressedStyle][curState];\n\t\t\t\tlabel.attr(stateOptions)\n\t\t\t\t\t.css(stateStyle);\n\t\t\t}\n\t\t});\n\n\t\tlabel.setState = function (state) {\n\t\t\tlabel.state = curState = state;\n\t\t\tif (!state) {\n\t\t\t\tlabel.attr(normalState)\n\t\t\t\t\t.css(normalStyle);\n\t\t\t} else if (state === 2) {\n\t\t\t\tlabel.attr(pressedState)\n\t\t\t\t\t.css(pressedStyle);\n\t\t\t} else if (state === 3) {\n\t\t\t\tlabel.attr(disabledState)\n\t\t\t\t\t.css(disabledStyle);\n\t\t\t}\n\t\t};\n\n\t\treturn label\n\t\t\t.on('click', function () {\n\t\t\t\tif (curState !== 3) {\n\t\t\t\t\tcallback.call(label);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.attr(normalState)\n\t\t\t.css(extend({ cursor: 'default' }, normalStyle));\n\t},\n\n\t/**\n\t * Make a straight line crisper by not spilling out to neighbour pixels\n\t * @param {Array} points\n\t * @param {Number} width\n\t */\n\tcrispLine: function (points, width) {\n\t\t// points format: [M, 0, 0, L, 100, 0]\n\t\t// normalize to a crisp line\n\t\tif (points[1] === points[4]) {\n\t\t\t// Substract due to #1129. Now bottom and left axis gridlines behave the same.\n\t\t\tpoints[1] = points[4] = mathRound(points[1]) - (width % 2 / 2);\n\t\t}\n\t\tif (points[2] === points[5]) {\n\t\t\tpoints[2] = points[5] = mathRound(points[2]) + (width % 2 / 2);\n\t\t}\n\t\treturn points;\n\t},\n\n\n\t/**\n\t * Draw a path\n\t * @param {Array} path An SVG path in array form\n\t */\n\tpath: function (path) {\n\t\tvar attr = {\n\t\t\tfill: NONE\n\t\t};\n\t\tif (isArray(path)) {\n\t\t\tattr.d = path;\n\t\t} else if (isObject(path)) { // attributes\n\t\t\textend(attr, path);\n\t\t}\n\t\treturn this.createElement('path').attr(attr);\n\t},\n\n\t/**\n\t * Draw and return an SVG circle\n\t * @param {Number} x The x position\n\t * @param {Number} y The y position\n\t * @param {Number} r The radius\n\t */\n\tcircle: function (x, y, r) {\n\t\tvar attr = isObject(x) ?\n\t\t\tx :\n\t\t\t{\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\tr: r\n\t\t\t};\n\n\t\treturn this.createElement('circle').attr(attr);\n\t},\n\n\t/**\n\t * Draw and return an arc\n\t * @param {Number} x X position\n\t * @param {Number} y Y position\n\t * @param {Number} r Radius\n\t * @param {Number} innerR Inner radius like used in donut charts\n\t * @param {Number} start Starting angle\n\t * @param {Number} end Ending angle\n\t */\n\tarc: function (x, y, r, innerR, start, end) {\n\t\tvar arc;\n\n\t\tif (isObject(x)) {\n\t\t\ty = x.y;\n\t\t\tr = x.r;\n\t\t\tinnerR = x.innerR;\n\t\t\tstart = x.start;\n\t\t\tend = x.end;\n\t\t\tx = x.x;\n\t\t}\n\n\t\t// Arcs are defined as symbols for the ability to set\n\t\t// attributes in attr and animate\n\t\tarc = this.symbol('arc', x || 0, y || 0, r || 0, r || 0, {\n\t\t\tinnerR: innerR || 0,\n\t\t\tstart: start || 0,\n\t\t\tend: end || 0\n\t\t});\n\t\tarc.r = r; // #959\n\t\treturn arc;\n\t},\n\n\t/**\n\t * Draw and return a rectangle\n\t * @param {Number} x Left position\n\t * @param {Number} y Top position\n\t * @param {Number} width\n\t * @param {Number} height\n\t * @param {Number} r Border corner radius\n\t * @param {Number} strokeWidth A stroke width can be supplied to allow crisp drawing\n\t */\n\trect: function (x, y, width, height, r, strokeWidth) {\n\n\t\tr = isObject(x) ? x.r : r;\n\n\t\tvar wrapper = this.createElement('rect').attr({\n\t\t\t\trx: r,\n\t\t\t\try: r,\n\t\t\t\tfill: NONE\n\t\t\t});\n\t\treturn wrapper.attr(\n\t\t\t\tisObject(x) ?\n\t\t\t\t\tx :\n\t\t\t\t\t// do not crispify when an object is passed in (as in column charts)\n\t\t\t\t\twrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0))\n\t\t\t);\n\t},\n\n\t/**\n\t * Resize the box and re-align all aligned elements\n\t * @param {Object} width\n\t * @param {Object} height\n\t * @param {Boolean} animate\n\t *\n\t */\n\tsetSize: function (width, height, animate) {\n\t\tvar renderer = this,\n\t\t\talignedObjects = renderer.alignedObjects,\n\t\t\ti = alignedObjects.length;\n\n\t\trenderer.width = width;\n\t\trenderer.height = height;\n\n\t\trenderer.boxWrapper[pick(animate, true) ? 'animate' : 'attr']({\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t});\n\n\t\twhile (i--) {\n\t\t\talignedObjects[i].align();\n\t\t}\n\t},\n\n\t/**\n\t * Create a group\n\t * @param {String} name The group will be given a class name of 'highcharts-{name}'.\n\t *     This can be used for styling and scripting.\n\t */\n\tg: function (name) {\n\t\tvar elem = this.createElement('g');\n\t\treturn defined(name) ? elem.attr({ 'class': PREFIX + name }) : elem;\n\t},\n\n\t/**\n\t * Display an image\n\t * @param {String} src\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\timage: function (src, x, y, width, height) {\n\t\tvar attribs = {\n\t\t\t\tpreserveAspectRatio: NONE\n\t\t\t},\n\t\t\telemWrapper;\n\n\t\t// optional properties\n\t\tif (arguments.length > 1) {\n\t\t\textend(attribs, {\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t});\n\t\t}\n\n\t\telemWrapper = this.createElement('image').attr(attribs);\n\n\t\t// set the href in the xlink namespace\n\t\tif (elemWrapper.element.setAttributeNS) {\n\t\t\telemWrapper.element.setAttributeNS('http://www.w3.org/1999/xlink',\n\t\t\t\t'href', src);\n\t\t} else {\n\t\t\t// could be exporting in IE\n\t\t\t// using href throws \"not supported\" in ie7 and under, requries regex shim to fix later\n\t\t\telemWrapper.element.setAttribute('hc-svg-href', src);\n\t}\n\n\t\treturn elemWrapper;\n\t},\n\n\t/**\n\t * Draw a symbol out of pre-defined shape paths from the namespace 'symbol' object.\n\t *\n\t * @param {Object} symbol\n\t * @param {Object} x\n\t * @param {Object} y\n\t * @param {Object} radius\n\t * @param {Object} options\n\t */\n\tsymbol: function (symbol, x, y, width, height, options) {\n\n\t\tvar obj,\n\n\t\t\t// get the symbol definition function\n\t\t\tsymbolFn = this.symbols[symbol],\n\n\t\t\t// check if there's a path defined for this symbol\n\t\t\tpath = symbolFn && symbolFn(\n\t\t\t\tmathRound(x),\n\t\t\t\tmathRound(y),\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\toptions\n\t\t\t),\n\n\t\t\timageElement,\n\t\t\timageRegex = /^url\\((.*?)\\)$/,\n\t\t\timageSrc,\n\t\t\timageSize,\n\t\t\tcenterImage;\n\n\t\tif (path) {\n\n\t\t\tobj = this.path(path);\n\t\t\t// expando properties for use in animate and attr\n\t\t\textend(obj, {\n\t\t\t\tsymbolName: symbol,\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t});\n\t\t\tif (options) {\n\t\t\t\textend(obj, options);\n\t\t\t}\n\n\n\t\t// image symbols\n\t\t} else if (imageRegex.test(symbol)) {\n\n\t\t\t// On image load, set the size and position\n\t\t\tcenterImage = function (img, size) {\n\t\t\t\tif (img.element) { // it may be destroyed in the meantime (#1390)\n\t\t\t\t\timg.attr({\n\t\t\t\t\t\twidth: size[0],\n\t\t\t\t\t\theight: size[1]\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!img.alignByTranslate) { // #185\n\t\t\t\t\t\timg.translate(\n\t\t\t\t\t\t\tmathRound((width - size[0]) / 2), // #1378\n\t\t\t\t\t\t\tmathRound((height - size[1]) / 2)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\timageSrc = symbol.match(imageRegex)[1];\n\t\t\timageSize = symbolSizes[imageSrc];\n\n\t\t\t// Ireate the image synchronously, add attribs async\n\t\t\tobj = this.image(imageSrc)\n\t\t\t\t.attr({\n\t\t\t\t\tx: x,\n\t\t\t\t\ty: y\n\t\t\t\t});\n\t\t\tobj.isImg = true;\n\n\t\t\tif (imageSize) {\n\t\t\t\tcenterImage(obj, imageSize);\n\t\t\t} else {\n\t\t\t\t// Initialize image to be 0 size so export will still function if there's no cached sizes.\n\t\t\t\t//\n\t\t\t\tobj.attr({ width: 0, height: 0 });\n\n\t\t\t\t// Create a dummy JavaScript image to get the width and height. Due to a bug in IE < 8,\n\t\t\t\t// the created element must be assigned to a variable in order to load (#292).\n\t\t\t\timageElement = createElement('img', {\n\t\t\t\t\tonload: function () {\n\t\t\t\t\t\tcenterImage(obj, symbolSizes[imageSrc] = [this.width, this.height]);\n\t\t\t\t\t},\n\t\t\t\t\tsrc: imageSrc\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t/**\n\t * An extendable collection of functions for defining symbol paths.\n\t */\n\tsymbols: {\n\t\t'circle': function (x, y, w, h) {\n\t\t\tvar cpw = 0.166 * w;\n\t\t\treturn [\n\t\t\t\tM, x + w / 2, y,\n\t\t\t\t'C', x + w + cpw, y, x + w + cpw, y + h, x + w / 2, y + h,\n\t\t\t\t'C', x - cpw, y + h, x - cpw, y, x + w / 2, y,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\n\t\t'square': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x, y,\n\t\t\t\tL, x + w, y,\n\t\t\t\tx + w, y + h,\n\t\t\t\tx, y + h,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\n\t\t'triangle': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x + w / 2, y,\n\t\t\t\tL, x + w, y + h,\n\t\t\t\tx, y + h,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\n\t\t'triangle-down': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x, y,\n\t\t\t\tL, x + w, y,\n\t\t\t\tx + w / 2, y + h,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\t\t'diamond': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x + w / 2, y,\n\t\t\t\tL, x + w, y + h / 2,\n\t\t\t\tx + w / 2, y + h,\n\t\t\t\tx, y + h / 2,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\t\t'arc': function (x, y, w, h, options) {\n\t\t\tvar start = options.start,\n\t\t\t\tradius = options.r || w || h,\n\t\t\t\tend = options.end - 0.001, // to prevent cos and sin of start and end from becoming equal on 360 arcs (related: #1561)\n\t\t\t\tinnerRadius = options.innerR,\n\t\t\t\topen = options.open,\n\t\t\t\tcosStart = mathCos(start),\n\t\t\t\tsinStart = mathSin(start),\n\t\t\t\tcosEnd = mathCos(end),\n\t\t\t\tsinEnd = mathSin(end),\n\t\t\t\tlongArc = options.end - start < mathPI ? 0 : 1;\n\n\t\t\treturn [\n\t\t\t\tM,\n\t\t\t\tx + radius * cosStart,\n\t\t\t\ty + radius * sinStart,\n\t\t\t\t'A', // arcTo\n\t\t\t\tradius, // x radius\n\t\t\t\tradius, // y radius\n\t\t\t\t0, // slanting\n\t\t\t\tlongArc, // long or short arc\n\t\t\t\t1, // clockwise\n\t\t\t\tx + radius * cosEnd,\n\t\t\t\ty + radius * sinEnd,\n\t\t\t\topen ? M : L,\n\t\t\t\tx + innerRadius * cosEnd,\n\t\t\t\ty + innerRadius * sinEnd,\n\t\t\t\t'A', // arcTo\n\t\t\t\tinnerRadius, // x radius\n\t\t\t\tinnerRadius, // y radius\n\t\t\t\t0, // slanting\n\t\t\t\tlongArc, // long or short arc\n\t\t\t\t0, // clockwise\n\t\t\t\tx + innerRadius * cosStart,\n\t\t\t\ty + innerRadius * sinStart,\n\n\t\t\t\topen ? '' : 'Z' // close\n\t\t\t];\n\t\t}\n\t},\n\n\t/**\n\t * Define a clipping rectangle\n\t * @param {String} id\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tclipRect: function (x, y, width, height) {\n\t\tvar wrapper,\n\t\t\tid = PREFIX + idCounter++,\n\n\t\t\tclipPath = this.createElement('clipPath').attr({\n\t\t\t\tid: id\n\t\t\t}).add(this.defs);\n\n\t\twrapper = this.rect(x, y, width, height, 0).add(clipPath);\n\t\twrapper.id = id;\n\t\twrapper.clipPath = clipPath;\n\n\t\treturn wrapper;\n\t},\n\n\n\t/**\n\t * Take a color and return it if it's a string, make it a gradient if it's a\n\t * gradient configuration object. Prior to Highstock, an array was used to define\n\t * a linear gradient with pixel positions relative to the SVG. In newer versions\n\t * we change the coordinates to apply relative to the shape, using coordinates\n\t * 0-1 within the shape. To preserve backwards compatibility, linearGradient\n\t * in this definition is an object of x1, y1, x2 and y2.\n\t *\n\t * @param {Object} color The color or config object\n\t */\n\tcolor: function (color, elem, prop) {\n\t\tvar renderer = this,\n\t\t\tcolorObject,\n\t\t\tregexRgba = /^rgba/,\n\t\t\tgradName,\n\t\t\tgradAttr,\n\t\t\tgradients,\n\t\t\tgradientObject,\n\t\t\tstops,\n\t\t\tstopColor,\n\t\t\tstopOpacity,\n\t\t\tradialReference,\n\t\t\tn,\n\t\t\tid,\n\t\t\tkey = [];\n\n\t\t// Apply linear or radial gradients\n\t\tif (color && color.linearGradient) {\n\t\t\tgradName = 'linearGradient';\n\t\t} else if (color && color.radialGradient) {\n\t\t\tgradName = 'radialGradient';\n\t\t}\n\n\t\tif (gradName) {\n\t\t\tgradAttr = color[gradName];\n\t\t\tgradients = renderer.gradients;\n\t\t\tstops = color.stops;\n\t\t\tradialReference = elem.radialReference;\n\n\t\t\t// Keep < 2.2 kompatibility\n\t\t\tif (isArray(gradAttr)) {\n\t\t\t\tcolor[gradName] = gradAttr = {\n\t\t\t\t\tx1: gradAttr[0],\n\t\t\t\t\ty1: gradAttr[1],\n\t\t\t\t\tx2: gradAttr[2],\n\t\t\t\t\ty2: gradAttr[3],\n\t\t\t\t\tgradientUnits: 'userSpaceOnUse'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Correct the radial gradient for the radial reference system\n\t\t\tif (gradName === 'radialGradient' && radialReference && !defined(gradAttr.gradientUnits)) {\n\t\t\t\tgradAttr = merge(gradAttr, {\n\t\t\t\t\tcx: (radialReference[0] - radialReference[2] / 2) + gradAttr.cx * radialReference[2],\n\t\t\t\t\tcy: (radialReference[1] - radialReference[2] / 2) + gradAttr.cy * radialReference[2],\n\t\t\t\t\tr: gradAttr.r * radialReference[2],\n\t\t\t\t\tgradientUnits: 'userSpaceOnUse'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Build the unique key to detect whether we need to create a new element (#1282)\n\t\t\tfor (n in gradAttr) {\n\t\t\t\tif (n !== 'id') {\n\t\t\t\t\tkey.push(n, gradAttr[n]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (n in stops) {\n\t\t\t\tkey.push(stops[n]);\n\t\t\t}\n\t\t\tkey = key.join(',');\n\n\t\t\t// Check if a gradient object with the same config object is created within this renderer\n\t\t\tif (gradients[key]) {\n\t\t\t\tid = gradients[key].id;\n\n\t\t\t} else {\n\n\t\t\t\t// Set the id and create the element\n\t\t\t\tgradAttr.id = id = PREFIX + idCounter++;\n\t\t\t\tgradients[key] = gradientObject = renderer.createElement(gradName)\n\t\t\t\t\t.attr(gradAttr)\n\t\t\t\t\t.add(renderer.defs);\n\n\n\t\t\t\t// The gradient needs to keep a list of stops to be able to destroy them\n\t\t\t\tgradientObject.stops = [];\n\t\t\t\teach(stops, function (stop) {\n\t\t\t\t\tvar stopObject;\n\t\t\t\t\tif (regexRgba.test(stop[1])) {\n\t\t\t\t\t\tcolorObject = Color(stop[1]);\n\t\t\t\t\t\tstopColor = colorObject.get('rgb');\n\t\t\t\t\t\tstopOpacity = colorObject.get('a');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstopColor = stop[1];\n\t\t\t\t\t\tstopOpacity = 1;\n\t\t\t\t\t}\n\t\t\t\t\tstopObject = renderer.createElement('stop').attr({\n\t\t\t\t\t\toffset: stop[0],\n\t\t\t\t\t\t'stop-color': stopColor,\n\t\t\t\t\t\t'stop-opacity': stopOpacity\n\t\t\t\t\t}).add(gradientObject);\n\n\t\t\t\t\t// Add the stop element to the gradient\n\t\t\t\t\tgradientObject.stops.push(stopObject);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Return the reference to the gradient object\n\t\t\treturn 'url(' + renderer.url + '#' + id + ')';\n\n\t\t// Webkit and Batik can't show rgba.\n\t\t} else if (regexRgba.test(color)) {\n\t\t\tcolorObject = Color(color);\n\t\t\tattr(elem, prop + '-opacity', colorObject.get('a'));\n\n\t\t\treturn colorObject.get('rgb');\n\n\n\t\t} else {\n\t\t\t// Remove the opacity attribute added above. Does not throw if the attribute is not there.\n\t\t\telem.removeAttribute(prop + '-opacity');\n\n\t\t\treturn color;\n\t\t}\n\n\t},\n\n\n\t/**\n\t * Add text to the SVG object\n\t * @param {String} str\n\t * @param {Number} x Left position\n\t * @param {Number} y Top position\n\t * @param {Boolean} useHTML Use HTML to render the text\n\t */\n\ttext: function (str, x, y, useHTML) {\n\n\t\t// declare variables\n\t\tvar renderer = this,\n\t\t\tdefaultChartStyle = defaultOptions.chart.style,\n\t\t\tfakeSVG = useCanVG || (!hasSVG && renderer.forExport),\n\t\t\twrapper;\n\n\t\tif (useHTML && !renderer.forExport) {\n\t\t\treturn renderer.html(str, x, y);\n\t\t}\n\n\t\tx = mathRound(pick(x, 0));\n\t\ty = mathRound(pick(y, 0));\n\n\t\twrapper = renderer.createElement('text')\n\t\t\t.attr({\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\ttext: str\n\t\t\t})\n\t\t\t.css({\n\t\t\t\tfontFamily: defaultChartStyle.fontFamily,\n\t\t\t\tfontSize: defaultChartStyle.fontSize\n\t\t\t});\n\n\t\t// Prevent wrapping from creating false offsetWidths in export in legacy IE (#1079, #1063)\n\t\tif (fakeSVG) {\n\t\t\twrapper.css({\n\t\t\t\tposition: ABSOLUTE\n\t\t\t});\n\t\t}\n\n\t\twrapper.x = x;\n\t\twrapper.y = y;\n\t\treturn wrapper;\n\t},\n\n\n\t/**\n\t * Create HTML text node. This is used by the VML renderer as well as the SVG\n\t * renderer through the useHTML option.\n\t *\n\t * @param {String} str\n\t * @param {Number} x\n\t * @param {Number} y\n\t */\n\thtml: function (str, x, y) {\n\t\tvar defaultChartStyle = defaultOptions.chart.style,\n\t\t\twrapper = this.createElement('span'),\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\telement = wrapper.element,\n\t\t\trenderer = wrapper.renderer;\n\n\t\t// Text setter\n\t\tattrSetters.text = function (value) {\n\t\t\tif (value !== element.innerHTML) {\n\t\t\t\tdelete this.bBox;\n\t\t\t}\n\t\t\telement.innerHTML = value;\n\t\t\treturn false;\n\t\t};\n\n\t\t// Various setters which rely on update transform\n\t\tattrSetters.x = attrSetters.y = attrSetters.align = function (value, key) {\n\t\t\tif (key === 'align') {\n\t\t\t\tkey = 'textAlign'; // Do not overwrite the SVGElement.align method. Same as VML.\n\t\t\t}\n\t\t\twrapper[key] = value;\n\t\t\twrapper.htmlUpdateTransform();\n\t\t\treturn false;\n\t\t};\n\n\t\t// Set the default attributes\n\t\twrapper.attr({\n\t\t\t\ttext: str,\n\t\t\t\tx: mathRound(x),\n\t\t\t\ty: mathRound(y)\n\t\t\t})\n\t\t\t.css({\n\t\t\t\tposition: ABSOLUTE,\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tfontFamily: defaultChartStyle.fontFamily,\n\t\t\t\tfontSize: defaultChartStyle.fontSize\n\t\t\t});\n\n\t\t// Use the HTML specific .css method\n\t\twrapper.css = wrapper.htmlCss;\n\n\t\t// This is specific for HTML within SVG\n\t\tif (renderer.isSVG) {\n\t\t\twrapper.add = function (svgGroupWrapper) {\n\n\t\t\t\tvar htmlGroup,\n\t\t\t\t\tcontainer = renderer.box.parentNode,\n\t\t\t\t\tparentGroup,\n\t\t\t\t\tparents = [];\n\n\t\t\t\t// Create a mock group to hold the HTML elements\n\t\t\t\tif (svgGroupWrapper) {\n\t\t\t\t\thtmlGroup = svgGroupWrapper.div;\n\t\t\t\t\tif (!htmlGroup) {\n\n\t\t\t\t\t\t// Read the parent chain into an array and read from top down\n\t\t\t\t\t\tparentGroup = svgGroupWrapper;\n\t\t\t\t\t\twhile (parentGroup) {\n\n\t\t\t\t\t\t\tparents.push(parentGroup);\n\n\t\t\t\t\t\t\t// Move up to the next parent group\n\t\t\t\t\t\t\tparentGroup = parentGroup.parentGroup;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Ensure dynamically updating position when any parent is translated\n\t\t\t\t\t\teach(parents.reverse(), function (parentGroup) {\n\t\t\t\t\t\t\tvar htmlGroupStyle;\n\n\t\t\t\t\t\t\t// Create a HTML div and append it to the parent div to emulate\n\t\t\t\t\t\t\t// the SVG group structure\n\t\t\t\t\t\t\thtmlGroup = parentGroup.div = parentGroup.div || createElement(DIV, {\n\t\t\t\t\t\t\t\tclassName: attr(parentGroup.element, 'class')\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tposition: ABSOLUTE,\n\t\t\t\t\t\t\t\tleft: (parentGroup.translateX || 0) + PX,\n\t\t\t\t\t\t\t\ttop: (parentGroup.translateY || 0) + PX\n\t\t\t\t\t\t\t}, htmlGroup || container); // the top group is appended to container\n\n\t\t\t\t\t\t\t// Shortcut\n\t\t\t\t\t\t\thtmlGroupStyle = htmlGroup.style;\n\n\t\t\t\t\t\t\t// Set listeners to update the HTML div's position whenever the SVG group\n\t\t\t\t\t\t\t// position is changed\n\t\t\t\t\t\t\textend(parentGroup.attrSetters, {\n\t\t\t\t\t\t\t\ttranslateX: function (value) {\n\t\t\t\t\t\t\t\t\thtmlGroupStyle.left = value + PX;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttranslateY: function (value) {\n\t\t\t\t\t\t\t\t\thtmlGroupStyle.top = value + PX;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tvisibility: function (value, key) {\n\t\t\t\t\t\t\t\t\thtmlGroupStyle[key] = value;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thtmlGroup = container;\n\t\t\t\t}\n\n\t\t\t\thtmlGroup.appendChild(element);\n\n\t\t\t\t// Shared with VML:\n\t\t\t\twrapper.added = true;\n\t\t\t\tif (wrapper.alignOnAdd) {\n\t\t\t\t\twrapper.htmlUpdateTransform();\n\t\t\t\t}\n\n\t\t\t\treturn wrapper;\n\t\t\t};\n\t\t}\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * Utility to return the baseline offset and total line height from the font size\n\t */\n\tfontMetrics: function (fontSize) {\n\t\tfontSize = pInt(fontSize || 11);\n\n\t\t// Empirical values found by comparing font size and bounding box height.\n\t\t// Applies to the default font family. http://jsfiddle.net/highcharts/7xvn7/\n\t\tvar lineHeight = fontSize < 24 ? fontSize + 4 : mathRound(fontSize * 1.2),\n\t\t\tbaseline = mathRound(lineHeight * 0.8);\n\n\t\treturn {\n\t\t\th: lineHeight,\n\t\t\tb: baseline\n\t\t};\n\t},\n\n\t/**\n\t * Add a label, a text item that can hold a colored or gradient background\n\t * as well as a border and shadow.\n\t * @param {string} str\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {String} shape\n\t * @param {Number} anchorX In case the shape has a pointer, like a flag, this is the\n\t *    coordinates it should be pinned to\n\t * @param {Number} anchorY\n\t * @param {Boolean} baseline Whether to position the label relative to the text baseline,\n\t *    like renderer.text, or to the upper border of the rectangle.\n\t * @param {String} className Class name for the group\n\t */\n\tlabel: function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) {\n\n\t\tvar renderer = this,\n\t\t\twrapper = renderer.g(className),\n\t\t\ttext = renderer.text('', 0, 0, useHTML)\n\t\t\t\t.attr({\n\t\t\t\t\tzIndex: 1\n\t\t\t\t}),\n\t\t\t\t//.add(wrapper),\n\t\t\tbox,\n\t\t\tbBox,\n\t\t\talignFactor = 0,\n\t\t\tpadding = 3,\n\t\t\tpaddingLeft = 0,\n\t\t\twidth,\n\t\t\theight,\n\t\t\twrapperX,\n\t\t\twrapperY,\n\t\t\tcrispAdjust = 0,\n\t\t\tdeferredAttr = {},\n\t\t\tbaselineOffset,\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\tneedsBox;\n\n\t\t/**\n\t\t * This function runs after the label is added to the DOM (when the bounding box is\n\t\t * available), and after the text of the label is updated to detect the new bounding\n\t\t * box and reflect it in the border box.\n\t\t */\n\t\tfunction updateBoxSize() {\n\t\t\tvar boxX,\n\t\t\t\tboxY,\n\t\t\t\tstyle = text.element.style;\n\n\t\t\tbBox = (width === undefined || height === undefined || wrapper.styles.textAlign) &&\n\t\t\t\ttext.getBBox();\n\t\t\twrapper.width = (width || bBox.width || 0) + 2 * padding + paddingLeft;\n\t\t\twrapper.height = (height || bBox.height || 0) + 2 * padding;\n\n\t\t\t// update the label-scoped y offset\n\t\t\tbaselineOffset = padding + renderer.fontMetrics(style && style.fontSize).b;\n\n\t\t\tif (needsBox) {\n\n\t\t\t\t// create the border box if it is not already present\n\t\t\t\tif (!box) {\n\t\t\t\t\tboxX = mathRound(-alignFactor * padding);\n\t\t\t\t\tboxY = baseline ? -baselineOffset : 0;\n\n\t\t\t\t\twrapper.box = box = shape ?\n\t\t\t\t\t\trenderer.symbol(shape, boxX, boxY, wrapper.width, wrapper.height) :\n\t\t\t\t\t\trenderer.rect(boxX, boxY, wrapper.width, wrapper.height, 0, deferredAttr[STROKE_WIDTH]);\n\t\t\t\t\tbox.add(wrapper);\n\t\t\t\t}\n\n\t\t\t\t// apply the box attributes\n\t\t\t\tif (!box.isImg) { // #1630\n\t\t\t\t\tbox.attr(merge({\n\t\t\t\t\t\twidth: wrapper.width,\n\t\t\t\t\t\theight: wrapper.height\n\t\t\t\t\t}, deferredAttr));\n\t\t\t\t}\n\t\t\t\tdeferredAttr = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * This function runs after setting text or padding, but only if padding is changed\n\t\t */\n\t\tfunction updateTextPadding() {\n\t\t\tvar styles = wrapper.styles,\n\t\t\t\ttextAlign = styles && styles.textAlign,\n\t\t\t\tx = paddingLeft + padding * (1 - alignFactor),\n\t\t\t\ty;\n\n\t\t\t// determin y based on the baseline\n\t\t\ty = baseline ? 0 : baselineOffset;\n\n\t\t\t// compensate for alignment\n\t\t\tif (defined(width) && (textAlign === 'center' || textAlign === 'right')) {\n\t\t\t\tx += { center: 0.5, right: 1 }[textAlign] * (width - bBox.width);\n\t\t\t}\n\n\t\t\t// update if anything changed\n\t\t\tif (x !== text.x || y !== text.y) {\n\t\t\t\ttext.attr({\n\t\t\t\t\tx: x,\n\t\t\t\t\ty: y\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// record current values\n\t\t\ttext.x = x;\n\t\t\ttext.y = y;\n\t\t}\n\n\t\t/**\n\t\t * Set a box attribute, or defer it if the box is not yet created\n\t\t * @param {Object} key\n\t\t * @param {Object} value\n\t\t */\n\t\tfunction boxAttr(key, value) {\n\t\t\tif (box) {\n\t\t\t\tbox.attr(key, value);\n\t\t\t} else {\n\t\t\t\tdeferredAttr[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tfunction getSizeAfterAdd() {\n\t\t\ttext.add(wrapper);\n\t\t\twrapper.attr({\n\t\t\t\ttext: str, // alignment is available now\n\t\t\t\tx: x,\n\t\t\t\ty: y\n\t\t\t});\n\n\t\t\tif (box && defined(anchorX)) {\n\t\t\t\twrapper.attr({\n\t\t\t\t\tanchorX: anchorX,\n\t\t\t\t\tanchorY: anchorY\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * After the text element is added, get the desired size of the border box\n\t\t * and add it before the text in the DOM.\n\t\t */\n\t\taddEvent(wrapper, 'add', getSizeAfterAdd);\n\n\t\t/*\n\t\t * Add specific attribute setters.\n\t\t */\n\n\t\t// only change local variables\n\t\tattrSetters.width = function (value) {\n\t\t\twidth = value;\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.height = function (value) {\n\t\t\theight = value;\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.padding =  function (value) {\n\t\t\tif (defined(value) && value !== padding) {\n\t\t\t\tpadding = value;\n\t\t\t\tupdateTextPadding();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.paddingLeft =  function (value) {\n\t\t\tif (defined(value) && value !== paddingLeft) {\n\t\t\t\tpaddingLeft = value;\n\t\t\t\tupdateTextPadding();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n\t\t// change local variable and set attribue as well\n\t\tattrSetters.align = function (value) {\n\t\t\talignFactor = { left: 0, center: 0.5, right: 1 }[value];\n\t\t\treturn false; // prevent setting text-anchor on the group\n\t\t};\n\n\t\t// apply these to the box and the text alike\n\t\tattrSetters.text = function (value, key) {\n\t\t\ttext.attr(key, value);\n\t\t\tupdateBoxSize();\n\t\t\tupdateTextPadding();\n\t\t\treturn false;\n\t\t};\n\n\t\t// apply these to the box but not to the text\n\t\tattrSetters[STROKE_WIDTH] = function (value, key) {\n\t\t\tneedsBox = true;\n\t\t\tcrispAdjust = value % 2 / 2;\n\t\t\tboxAttr(key, value);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.stroke = attrSetters.fill = attrSetters.r = function (value, key) {\n\t\t\tif (key === 'fill') {\n\t\t\t\tneedsBox = true;\n\t\t\t}\n\t\t\tboxAttr(key, value);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.anchorX = function (value, key) {\n\t\t\tanchorX = value;\n\t\t\tboxAttr(key, value + crispAdjust - wrapperX);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.anchorY = function (value, key) {\n\t\t\tanchorY = value;\n\t\t\tboxAttr(key, value - wrapperY);\n\t\t\treturn false;\n\t\t};\n\n\t\t// rename attributes\n\t\tattrSetters.x = function (value) {\n\t\t\twrapper.x = value; // for animation getter\n\t\t\tvalue -= alignFactor * ((width || bBox.width) + padding);\n\t\t\twrapperX = mathRound(value);\n\n\t\t\twrapper.attr('translateX', wrapperX);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.y = function (value) {\n\t\t\twrapperY = wrapper.y = mathRound(value);\n\t\t\twrapper.attr('translateY', wrapperY);\n\t\t\treturn false;\n\t\t};\n\n\t\t// Redirect certain methods to either the box or the text\n\t\tvar baseCss = wrapper.css;\n\t\treturn extend(wrapper, {\n\t\t\t/**\n\t\t\t * Pick up some properties and apply them to the text instead of the wrapper\n\t\t\t */\n\t\t\tcss: function (styles) {\n\t\t\t\tif (styles) {\n\t\t\t\t\tvar textStyles = {};\n\t\t\t\t\tstyles = merge(styles); // create a copy to avoid altering the original object (#537)\n\t\t\t\t\teach(['fontSize', 'fontWeight', 'fontFamily', 'color', 'lineHeight', 'width', 'textDecoration', 'textShadow'], function (prop) {\n\t\t\t\t\t\tif (styles[prop] !== UNDEFINED) {\n\t\t\t\t\t\t\ttextStyles[prop] = styles[prop];\n\t\t\t\t\t\t\tdelete styles[prop];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\ttext.css(textStyles);\n\t\t\t\t}\n\t\t\t\treturn baseCss.call(wrapper, styles);\n\t\t\t},\n\t\t\t/**\n\t\t\t * Return the bounding box of the box, not the group\n\t\t\t */\n\t\t\tgetBBox: function () {\n\t\t\t\treturn {\n\t\t\t\t\twidth: bBox.width + 2 * padding,\n\t\t\t\t\theight: bBox.height + 2 * padding,\n\t\t\t\t\tx: bBox.x - padding,\n\t\t\t\t\ty: bBox.y - padding\n\t\t\t\t};\n\t\t\t},\n\t\t\t/**\n\t\t\t * Apply the shadow to the box\n\t\t\t */\n\t\t\tshadow: function (b) {\n\t\t\t\tif (box) {\n\t\t\t\t\tbox.shadow(b);\n\t\t\t\t}\n\t\t\t\treturn wrapper;\n\t\t\t},\n\t\t\t/**\n\t\t\t * Destroy and release memory.\n\t\t\t */\n\t\t\tdestroy: function () {\n\t\t\t\tremoveEvent(wrapper, 'add', getSizeAfterAdd);\n\n\t\t\t\t// Added by button implementation\n\t\t\t\tremoveEvent(wrapper.element, 'mouseenter');\n\t\t\t\tremoveEvent(wrapper.element, 'mouseleave');\n\n\t\t\t\tif (text) {\n\t\t\t\t\ttext = text.destroy();\n\t\t\t\t}\n\t\t\t\tif (box) {\n\t\t\t\t\tbox = box.destroy();\n\t\t\t\t}\n\t\t\t\t// Call base implementation to destroy the rest\n\t\t\t\tSVGElement.prototype.destroy.call(wrapper);\n\n\t\t\t\t// Release local pointers (#1298)\n\t\t\t\twrapper = renderer = updateBoxSize = updateTextPadding = boxAttr = getSizeAfterAdd = null;\n\t\t\t}\n\t\t});\n\t}\n}; // end SVGRenderer\n\n\n// general renderer\nRenderer = SVGRenderer;\n\n\n/* ****************************************************************************\n *                                                                            *\n * START OF INTERNET EXPLORER <= 8 SPECIFIC CODE                              *\n *                                                                            *\n * For applications and websites that don't need IE support, like platform    *\n * targeted mobile apps and web apps, this code can be removed.               *\n *                                                                            *\n *****************************************************************************/\n\n/**\n * @constructor\n */\nvar VMLRenderer, VMLElement;\nif (!hasSVG && !useCanVG) {\n\n/**\n * The VML element wrapper.\n */\nHighcharts.VMLElement = VMLElement = {\n\n\t/**\n\t * Initialize a new VML element wrapper. It builds the markup as a string\n\t * to minimize DOM traffic.\n\t * @param {Object} renderer\n\t * @param {Object} nodeName\n\t */\n\tinit: function (renderer, nodeName) {\n\t\tvar wrapper = this,\n\t\t\tmarkup =  ['<', nodeName, ' filled=\"f\" stroked=\"f\"'],\n\t\t\tstyle = ['position: ', ABSOLUTE, ';'],\n\t\t\tisDiv = nodeName === DIV;\n\n\t\t// divs and shapes need size\n\t\tif (nodeName === 'shape' || isDiv) {\n\t\t\tstyle.push('left:0;top:0;width:1px;height:1px;');\n\t\t}\n\t\tstyle.push('visibility: ', isDiv ? HIDDEN : VISIBLE);\n\n\t\tmarkup.push(' style=\"', style.join(''), '\"/>');\n\n\t\t// create element with default attributes and style\n\t\tif (nodeName) {\n\t\t\tmarkup = isDiv || nodeName === 'span' || nodeName === 'img' ?\n\t\t\t\tmarkup.join('')\n\t\t\t\t: renderer.prepVML(markup);\n\t\t\twrapper.element = createElement(markup);\n\t\t}\n\n\t\twrapper.renderer = renderer;\n\t\twrapper.attrSetters = {};\n\t},\n\n\t/**\n\t * Add the node to the given parent\n\t * @param {Object} parent\n\t */\n\tadd: function (parent) {\n\t\tvar wrapper = this,\n\t\t\trenderer = wrapper.renderer,\n\t\t\telement = wrapper.element,\n\t\t\tbox = renderer.box,\n\t\t\tinverted = parent && parent.inverted,\n\n\t\t\t// get the parent node\n\t\t\tparentNode = parent ?\n\t\t\t\tparent.element || parent :\n\t\t\t\tbox;\n\n\n\t\t// if the parent group is inverted, apply inversion on all children\n\t\tif (inverted) { // only on groups\n\t\t\trenderer.invertChild(element, parentNode);\n\t\t}\n\n\t\t// append it\n\t\tparentNode.appendChild(element);\n\n\t\t// align text after adding to be able to read offset\n\t\twrapper.added = true;\n\t\tif (wrapper.alignOnAdd && !wrapper.deferUpdateTransform) {\n\t\t\twrapper.updateTransform();\n\t\t}\n\n\t\t// fire an event for internal hooks\n\t\tfireEvent(wrapper, 'add');\n\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * VML always uses htmlUpdateTransform\n\t */\n\tupdateTransform: SVGElement.prototype.htmlUpdateTransform,\n\n\t/**\n\t * Set the rotation of a span with oldIE's filter\n\t */\n\tsetSpanRotation: function (rotation, sintheta, costheta) {\n\t\t// Adjust for alignment and rotation. Rotation of useHTML content is not yet implemented\n\t\t// but it can probably be implemented for Firefox 3.5+ on user request. FF3.5+\n\t\t// has support for CSS3 transform. The getBBox method also needs to be updated\n\t\t// to compensate for the rotation, like it currently does for SVG.\n\t\t// Test case: http://highcharts.com/tests/?file=text-rotation\n\t\tcss(this.element, {\n\t\t\tfilter: rotation ? ['progid:DXImageTransform.Microsoft.Matrix(M11=', costheta,\n\t\t\t\t', M12=', -sintheta, ', M21=', sintheta, ', M22=', costheta,\n\t\t\t\t', sizingMethod=\\'auto expand\\')'].join('') : NONE\n\t\t});\n\t},\n\n\t/**\n\t * Converts a subset of an SVG path definition to its VML counterpart. Takes an array\n\t * as the parameter and returns a string.\n\t */\n\tpathToVML: function (value) {\n\t\t// convert paths\n\t\tvar i = value.length,\n\t\t\tpath = [],\n\t\t\tclockwise;\n\n\t\twhile (i--) {\n\n\t\t\t// Multiply by 10 to allow subpixel precision.\n\t\t\t// Substracting half a pixel seems to make the coordinates\n\t\t\t// align with SVG, but this hasn't been tested thoroughly\n\t\t\tif (isNumber(value[i])) {\n\t\t\t\tpath[i] = mathRound(value[i] * 10) - 5;\n\t\t\t} else if (value[i] === 'Z') { // close the path\n\t\t\t\tpath[i] = 'x';\n\t\t\t} else {\n\t\t\t\tpath[i] = value[i];\n\n\t\t\t\t// When the start X and end X coordinates of an arc are too close,\n\t\t\t\t// they are rounded to the same value above. In this case, substract 1 from the end X\n\t\t\t\t// position. #760, #1371.\n\t\t\t\tif (value.isArc && (value[i] === 'wa' || value[i] === 'at')) {\n\t\t\t\t\tclockwise = value[i] === 'wa' ? 1 : -1; // #1642\n\t\t\t\t\tif (path[i + 5] === path[i + 7]) {\n\t\t\t\t\t\tpath[i + 7] -= clockwise;\n\t\t\t\t\t}\n\t\t\t\t\t// Start and end Y (#1410)\n\t\t\t\t\tif (path[i + 6] === path[i + 8]) {\n\t\t\t\t\t\tpath[i + 8] -= clockwise;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Loop up again to handle path shortcuts (#2132)\n\t\t/*while (i++ < path.length) {\n\t\t\tif (path[i] === 'H') { // horizontal line to\n\t\t\t\tpath[i] = 'L';\n\t\t\t\tpath.splice(i + 2, 0, path[i - 1]);\n\t\t\t} else if (path[i] === 'V') { // vertical line to\n\t\t\t\tpath[i] = 'L';\n\t\t\t\tpath.splice(i + 1, 0, path[i - 2]);\n\t\t\t}\n\t\t}*/\n\t\treturn path.join(' ') || 'x';\n\t},\n\n\t/**\n\t * Get or set attributes\n\t */\n\tattr: function (hash, val) {\n\t\tvar wrapper = this,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\ti,\n\t\t\tresult,\n\t\t\telement = wrapper.element || {},\n\t\t\telemStyle = element.style,\n\t\t\tnodeName = element.nodeName,\n\t\t\trenderer = wrapper.renderer,\n\t\t\tsymbolName = wrapper.symbolName,\n\t\t\thasSetSymbolSize,\n\t\t\tshadows = wrapper.shadows,\n\t\t\tskipAttr,\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\tret = wrapper;\n\n\t\t// single key-value pair\n\t\tif (isString(hash) && defined(val)) {\n\t\t\tkey = hash;\n\t\t\thash = {};\n\t\t\thash[key] = val;\n\t\t}\n\n\t\t// used as a getter, val is undefined\n\t\tif (isString(hash)) {\n\t\t\tkey = hash;\n\t\t\tif (key === 'strokeWidth' || key === 'stroke-width') {\n\t\t\t\tret = wrapper.strokeweight;\n\t\t\t} else {\n\t\t\t\tret = wrapper[key];\n\t\t\t}\n\n\t\t// setter\n\t\t} else {\n\t\t\tfor (key in hash) {\n\t\t\t\tvalue = hash[key];\n\t\t\t\tskipAttr = false;\n\n\t\t\t\t// check for a specific attribute setter\n\t\t\t\tresult = attrSetters[key] && attrSetters[key].call(wrapper, value, key);\n\n\t\t\t\tif (result !== false && value !== null) { // #620\n\n\t\t\t\t\tif (result !== UNDEFINED) {\n\t\t\t\t\t\tvalue = result; // the attribute setter has returned a new value to set\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// prepare paths\n\t\t\t\t\t// symbols\n\t\t\t\t\tif (symbolName && /^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(key)) {\n\t\t\t\t\t\t// if one of the symbol size affecting parameters are changed,\n\t\t\t\t\t\t// check all the others only once for each call to an element's\n\t\t\t\t\t\t// .attr() method\n\t\t\t\t\t\tif (!hasSetSymbolSize) {\n\t\t\t\t\t\t\twrapper.symbolAttr(hash);\n\n\t\t\t\t\t\t\thasSetSymbolSize = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t} else if (key === 'd') {\n\t\t\t\t\t\tvalue = value || [];\n\t\t\t\t\t\twrapper.d = value.join(' '); // used in getter for animation\n\n\t\t\t\t\t\telement.path = value = wrapper.pathToVML(value);\n\n\t\t\t\t\t\t// update shadows\n\t\t\t\t\t\tif (shadows) {\n\t\t\t\t\t\t\ti = shadows.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tshadows[i].path = shadows[i].cutOff ? this.cutOffPath(value, shadows[i].cutOff) : value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// handle visibility\n\t\t\t\t\t} else if (key === 'visibility') {\n\n\t\t\t\t\t\t// let the shadow follow the main element\n\t\t\t\t\t\tif (shadows) {\n\t\t\t\t\t\t\ti = shadows.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tshadows[i].style[key] = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Instead of toggling the visibility CSS property, move the div out of the viewport.\n\t\t\t\t\t\t// This works around #61 and #586\n\t\t\t\t\t\tif (nodeName === 'DIV') {\n\t\t\t\t\t\t\tvalue = value === HIDDEN ? '-999em' : 0;\n\n\t\t\t\t\t\t\t// In order to redraw, IE7 needs the div to be visible when tucked away\n\t\t\t\t\t\t\t// outside the viewport. So the visibility is actually opposite of\n\t\t\t\t\t\t\t// the expected value. This applies to the tooltip only.\n\t\t\t\t\t\t\tif (!docMode8) {\n\t\t\t\t\t\t\t\telemStyle[key] = value ? VISIBLE : HIDDEN;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tkey = 'top';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telemStyle[key] = value;\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// directly mapped to css\n\t\t\t\t\t} else if (key === 'zIndex') {\n\n\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\telemStyle[key] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// x, y, width, height\n\t\t\t\t\t} else if (inArray(key, ['x', 'y', 'width', 'height']) !== -1) {\n\n\t\t\t\t\t\twrapper[key] = value; // used in getter\n\n\t\t\t\t\t\tif (key === 'x' || key === 'y') {\n\t\t\t\t\t\t\tkey = { x: 'left', y: 'top' }[key];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvalue = mathMax(0, value); // don't set width or height below zero (#311)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// clipping rectangle special\n\t\t\t\t\t\tif (wrapper.updateClipping) {\n\t\t\t\t\t\t\twrapper[key] = value; // the key is now 'left' or 'top' for 'x' and 'y'\n\t\t\t\t\t\t\twrapper.updateClipping();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// normal\n\t\t\t\t\t\t\telemStyle[key] = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// class name\n\t\t\t\t\t} else if (key === 'class' && nodeName === 'DIV') {\n\t\t\t\t\t\t// IE8 Standards mode has problems retrieving the className\n\t\t\t\t\t\telement.className = value;\n\n\t\t\t\t\t// stroke\n\t\t\t\t\t} else if (key === 'stroke') {\n\n\t\t\t\t\t\tvalue = renderer.color(value, element, key);\n\n\t\t\t\t\t\tkey = 'strokecolor';\n\n\t\t\t\t\t// stroke width\n\t\t\t\t\t} else if (key === 'stroke-width' || key === 'strokeWidth') {\n\t\t\t\t\t\telement.stroked = value ? true : false;\n\t\t\t\t\t\tkey = 'strokeweight';\n\t\t\t\t\t\twrapper[key] = value; // used in getter, issue #113\n\t\t\t\t\t\tif (isNumber(value)) {\n\t\t\t\t\t\t\tvalue += PX;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// dashStyle\n\t\t\t\t\t} else if (key === 'dashstyle') {\n\t\t\t\t\t\tvar strokeElem = element.getElementsByTagName('stroke')[0] ||\n\t\t\t\t\t\t\tcreateElement(renderer.prepVML(['<stroke/>']), null, null, element);\n\t\t\t\t\t\tstrokeElem[key] = value || 'solid';\n\t\t\t\t\t\twrapper.dashstyle = value; /* because changing stroke-width will change the dash length\n\t\t\t\t\t\t\tand cause an epileptic effect */\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// fill\n\t\t\t\t\t} else if (key === 'fill') {\n\n\t\t\t\t\t\tif (nodeName === 'SPAN') { // text color\n\t\t\t\t\t\t\telemStyle.color = value;\n\t\t\t\t\t\t} else if (nodeName !== 'IMG') { // #1336\n\t\t\t\t\t\t\telement.filled = value !== NONE ? true : false;\n\n\t\t\t\t\t\t\tvalue = renderer.color(value, element, key, wrapper);\n\n\t\t\t\t\t\t\tkey = 'fillcolor';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// opacity: don't bother - animation is too slow and filters introduce artifacts\n\t\t\t\t\t} else if (key === 'opacity') {\n\t\t\t\t\t\t/*css(element, {\n\t\t\t\t\t\t\topacity: value\n\t\t\t\t\t\t});*/\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// rotation on VML elements\n\t\t\t\t\t} else if (nodeName === 'shape' && key === 'rotation') {\n\n\t\t\t\t\t\twrapper[key] = element.style[key] = value; // style is for #1873\n\n\t\t\t\t\t\t// Correction for the 1x1 size of the shape container. Used in gauge needles.\n\t\t\t\t\t\telement.style.left = -mathRound(mathSin(value * deg2rad) + 1) + PX;\n\t\t\t\t\t\telement.style.top = mathRound(mathCos(value * deg2rad)) + PX;\n\n\t\t\t\t\t// translation for animation\n\t\t\t\t\t} else if (key === 'translateX' || key === 'translateY' || key === 'rotation') {\n\t\t\t\t\t\twrapper[key] = value;\n\t\t\t\t\t\twrapper.updateTransform();\n\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// text for rotated and non-rotated elements\n\t\t\t\t\t} else if (key === 'text') {\n\t\t\t\t\t\tthis.bBox = null;\n\t\t\t\t\t\telement.innerHTML = value;\n\t\t\t\t\t\tskipAttr = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif (!skipAttr) {\n\t\t\t\t\t\tif (docMode8) { // IE8 setAttribute bug\n\t\t\t\t\t\t\telement[key] = value;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattr(element, key, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Set the element's clipping to a predefined rectangle\n\t *\n\t * @param {String} id The id of the clip rectangle\n\t */\n\tclip: function (clipRect) {\n\t\tvar wrapper = this,\n\t\t\tclipMembers,\n\t\t\tcssRet;\n\n\t\tif (clipRect) {\n\t\t\tclipMembers = clipRect.members;\n\t\t\terase(clipMembers, wrapper); // Ensure unique list of elements (#1258)\n\t\t\tclipMembers.push(wrapper);\n\t\t\twrapper.destroyClip = function () {\n\t\t\t\terase(clipMembers, wrapper);\n\t\t\t};\n\t\t\tcssRet = clipRect.getCSS(wrapper);\n\n\t\t} else {\n\t\t\tif (wrapper.destroyClip) {\n\t\t\t\twrapper.destroyClip();\n\t\t\t}\n\t\t\tcssRet = { clip: docMode8 ? 'inherit' : 'rect(auto)' }; // #1214\n\t\t}\n\n\t\treturn wrapper.css(cssRet);\n\n\t},\n\n\t/**\n\t * Set styles for the element\n\t * @param {Object} styles\n\t */\n\tcss: SVGElement.prototype.htmlCss,\n\n\t/**\n\t * Removes a child either by removeChild or move to garbageBin.\n\t * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not.\n\t */\n\tsafeRemoveChild: function (element) {\n\t\t// discardElement will detach the node from its parent before attaching it\n\t\t// to the garbage bin. Therefore it is important that the node is attached and have parent.\n\t\tif (element.parentNode) {\n\t\t\tdiscardElement(element);\n\t\t}\n\t},\n\n\t/**\n\t * Extend element.destroy by removing it from the clip members array\n\t */\n\tdestroy: function () {\n\t\tif (this.destroyClip) {\n\t\t\tthis.destroyClip();\n\t\t}\n\n\t\treturn SVGElement.prototype.destroy.apply(this);\n\t},\n\n\t/**\n\t * Add an event listener. VML override for normalizing event parameters.\n\t * @param {String} eventType\n\t * @param {Function} handler\n\t */\n\ton: function (eventType, handler) {\n\t\t// simplest possible event model for internal use\n\t\tthis.element['on' + eventType] = function () {\n\t\t\tvar evt = win.event;\n\t\t\tevt.target = evt.srcElement;\n\t\t\thandler(evt);\n\t\t};\n\t\treturn this;\n\t},\n\n\t/**\n\t * In stacked columns, cut off the shadows so that they don't overlap\n\t */\n\tcutOffPath: function (path, length) {\n\n\t\tvar len;\n\n\t\tpath = path.split(/[ ,]/);\n\t\tlen = path.length;\n\n\t\tif (len === 9 || len === 11) {\n\t\t\tpath[len - 4] = path[len - 2] = pInt(path[len - 2]) - 10 * length;\n\t\t}\n\t\treturn path.join(' ');\n\t},\n\n\t/**\n\t * Apply a drop shadow by copying elements and giving them different strokes\n\t * @param {Boolean|Object} shadowOptions\n\t */\n\tshadow: function (shadowOptions, group, cutOff) {\n\t\tvar shadows = [],\n\t\t\ti,\n\t\t\telement = this.element,\n\t\t\trenderer = this.renderer,\n\t\t\tshadow,\n\t\t\telemStyle = element.style,\n\t\t\tmarkup,\n\t\t\tpath = element.path,\n\t\t\tstrokeWidth,\n\t\t\tmodifiedPath,\n\t\t\tshadowWidth,\n\t\t\tshadowElementOpacity;\n\n\t\t// some times empty paths are not strings\n\t\tif (path && typeof path.value !== 'string') {\n\t\t\tpath = 'x';\n\t\t}\n\t\tmodifiedPath = path;\n\n\t\tif (shadowOptions) {\n\t\t\tshadowWidth = pick(shadowOptions.width, 3);\n\t\t\tshadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth;\n\t\t\tfor (i = 1; i <= 3; i++) {\n\n\t\t\t\tstrokeWidth = (shadowWidth * 2) + 1 - (2 * i);\n\n\t\t\t\t// Cut off shadows for stacked column items\n\t\t\t\tif (cutOff) {\n\t\t\t\t\tmodifiedPath = this.cutOffPath(path.value, strokeWidth + 0.5);\n\t\t\t\t}\n\n\t\t\t\tmarkup = ['<shape isShadow=\"true\" strokeweight=\"', strokeWidth,\n\t\t\t\t\t'\" filled=\"false\" path=\"', modifiedPath,\n\t\t\t\t\t'\" coordsize=\"10 10\" style=\"', element.style.cssText, '\" />'];\n\n\t\t\t\tshadow = createElement(renderer.prepVML(markup),\n\t\t\t\t\tnull, {\n\t\t\t\t\t\tleft: pInt(elemStyle.left) + pick(shadowOptions.offsetX, 1),\n\t\t\t\t\t\ttop: pInt(elemStyle.top) + pick(shadowOptions.offsetY, 1)\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (cutOff) {\n\t\t\t\t\tshadow.cutOff = strokeWidth + 1;\n\t\t\t\t}\n\n\t\t\t\t// apply the opacity\n\t\t\t\tmarkup = ['<stroke color=\"', shadowOptions.color || 'black', '\" opacity=\"', shadowElementOpacity * i, '\"/>'];\n\t\t\t\tcreateElement(renderer.prepVML(markup), null, null, shadow);\n\n\n\t\t\t\t// insert it\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.element.appendChild(shadow);\n\t\t\t\t} else {\n\t\t\t\t\telement.parentNode.insertBefore(shadow, element);\n\t\t\t\t}\n\n\t\t\t\t// record it\n\t\t\t\tshadows.push(shadow);\n\n\t\t\t}\n\n\t\t\tthis.shadows = shadows;\n\t\t}\n\t\treturn this;\n\n\t}\n};\nVMLElement = extendClass(SVGElement, VMLElement);\n\n/**\n * The VML renderer\n */\nvar VMLRendererExtension = { // inherit SVGRenderer\n\n\tElement: VMLElement,\n\tisIE8: userAgent.indexOf('MSIE 8.0') > -1,\n\n\n\t/**\n\t * Initialize the VMLRenderer\n\t * @param {Object} container\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tinit: function (container, width, height) {\n\t\tvar renderer = this,\n\t\t\tboxWrapper,\n\t\t\tbox;\n\n\t\trenderer.alignedObjects = [];\n\n\t\tboxWrapper = renderer.createElement(DIV);\n\t\tbox = boxWrapper.element;\n\t\tbox.style.position = RELATIVE; // for freeform drawing using renderer directly\n\t\tcontainer.appendChild(boxWrapper.element);\n\n\n\t\t// generate the containing box\n\t\trenderer.isVML = true;\n\t\trenderer.box = box;\n\t\trenderer.boxWrapper = boxWrapper;\n\n\n\t\trenderer.setSize(width, height, false);\n\n\t\t// The only way to make IE6 and IE7 print is to use a global namespace. However,\n\t\t// with IE8 the only way to make the dynamic shapes visible in screen and print mode\n\t\t// seems to be to add the xmlns attribute and the behaviour style inline.\n\t\tif (!doc.namespaces.hcv) {\n\n\t\t\tdoc.namespaces.add('hcv', 'urn:schemas-microsoft-com:vml');\n\n\t\t\t// Setup default CSS (#2153)\n\t\t\t(doc.styleSheets.length ? doc.styleSheets[0] : doc.createStyleSheet()).cssText +=\n\t\t\t\t'hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke' +\n\t\t\t\t'{ behavior:url(#default#VML); display: inline-block; } ';\n\n\t\t}\n\t},\n\n\n\t/**\n\t * Detect whether the renderer is hidden. This happens when one of the parent elements\n\t * has display: none\n\t */\n\tisHidden: function () {\n\t\treturn !this.box.offsetWidth;\n\t},\n\n\t/**\n\t * Define a clipping rectangle. In VML it is accomplished by storing the values\n\t * for setting the CSS style to all associated members.\n\t *\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tclipRect: function (x, y, width, height) {\n\n\t\t// create a dummy element\n\t\tvar clipRect = this.createElement(),\n\t\t\tisObj = isObject(x);\n\n\t\t// mimic a rectangle with its style object for automatic updating in attr\n\t\treturn extend(clipRect, {\n\t\t\tmembers: [],\n\t\t\tleft: (isObj ? x.x : x) + 1,\n\t\t\ttop: (isObj ? x.y : y) + 1,\n\t\t\twidth: (isObj ? x.width : width) - 1,\n\t\t\theight: (isObj ? x.height : height) - 1,\n\t\t\tgetCSS: function (wrapper) {\n\t\t\t\tvar element = wrapper.element,\n\t\t\t\t\tnodeName = element.nodeName,\n\t\t\t\t\tisShape = nodeName === 'shape',\n\t\t\t\t\tinverted = wrapper.inverted,\n\t\t\t\t\trect = this,\n\t\t\t\t\ttop = rect.top - (isShape ? element.offsetTop : 0),\n\t\t\t\t\tleft = rect.left,\n\t\t\t\t\tright = left + rect.width,\n\t\t\t\t\tbottom = top + rect.height,\n\t\t\t\t\tret = {\n\t\t\t\t\t\tclip: 'rect(' +\n\t\t\t\t\t\t\tmathRound(inverted ? left : top) + 'px,' +\n\t\t\t\t\t\t\tmathRound(inverted ? bottom : right) + 'px,' +\n\t\t\t\t\t\t\tmathRound(inverted ? right : bottom) + 'px,' +\n\t\t\t\t\t\t\tmathRound(inverted ? top : left) + 'px)'\n\t\t\t\t\t};\n\n\t\t\t\t// issue 74 workaround\n\t\t\t\tif (!inverted && docMode8 && nodeName === 'DIV') {\n\t\t\t\t\textend(ret, {\n\t\t\t\t\t\twidth: right + PX,\n\t\t\t\t\t\theight: bottom + PX\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// used in attr and animation to update the clipping of all members\n\t\t\tupdateClipping: function () {\n\t\t\t\teach(clipRect.members, function (member) {\n\t\t\t\t\tmember.css(clipRect.getCSS(member));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t},\n\n\n\t/**\n\t * Take a color and return it if it's a string, make it a gradient if it's a\n\t * gradient configuration object, and apply opacity.\n\t *\n\t * @param {Object} color The color or config object\n\t */\n\tcolor: function (color, elem, prop, wrapper) {\n\t\tvar renderer = this,\n\t\t\tcolorObject,\n\t\t\tregexRgba = /^rgba/,\n\t\t\tmarkup,\n\t\t\tfillType,\n\t\t\tret = NONE;\n\n\t\t// Check for linear or radial gradient\n\t\tif (color && color.linearGradient) {\n\t\t\tfillType = 'gradient';\n\t\t} else if (color && color.radialGradient) {\n\t\t\tfillType = 'pattern';\n\t\t}\n\n\n\t\tif (fillType) {\n\n\t\t\tvar stopColor,\n\t\t\t\tstopOpacity,\n\t\t\t\tgradient = color.linearGradient || color.radialGradient,\n\t\t\t\tx1,\n\t\t\t\ty1,\n\t\t\t\tx2,\n\t\t\t\ty2,\n\t\t\t\topacity1,\n\t\t\t\topacity2,\n\t\t\t\tcolor1,\n\t\t\t\tcolor2,\n\t\t\t\tfillAttr = '',\n\t\t\t\tstops = color.stops,\n\t\t\t\tfirstStop,\n\t\t\t\tlastStop,\n\t\t\t\tcolors = [],\n\t\t\t\taddFillNode = function () {\n\t\t\t\t\t// Add the fill subnode. When colors attribute is used, the meanings of opacity and o:opacity2\n\t\t\t\t\t// are reversed.\n\t\t\t\t\tmarkup = ['<fill colors=\"' + colors.join(',') + '\" opacity=\"', opacity2, '\" o:opacity2=\"', opacity1,\n\t\t\t\t\t\t'\" type=\"', fillType, '\" ', fillAttr, 'focus=\"100%\" method=\"any\" />'];\n\t\t\t\t\tcreateElement(renderer.prepVML(markup), null, null, elem);\n\t\t\t\t};\n\n\t\t\t// Extend from 0 to 1\n\t\t\tfirstStop = stops[0];\n\t\t\tlastStop = stops[stops.length - 1];\n\t\t\tif (firstStop[0] > 0) {\n\t\t\t\tstops.unshift([\n\t\t\t\t\t0,\n\t\t\t\t\tfirstStop[1]\n\t\t\t\t]);\n\t\t\t}\n\t\t\tif (lastStop[0] < 1) {\n\t\t\t\tstops.push([\n\t\t\t\t\t1,\n\t\t\t\t\tlastStop[1]\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\t// Compute the stops\n\t\t\teach(stops, function (stop, i) {\n\t\t\t\tif (regexRgba.test(stop[1])) {\n\t\t\t\t\tcolorObject = Color(stop[1]);\n\t\t\t\t\tstopColor = colorObject.get('rgb');\n\t\t\t\t\tstopOpacity = colorObject.get('a');\n\t\t\t\t} else {\n\t\t\t\t\tstopColor = stop[1];\n\t\t\t\t\tstopOpacity = 1;\n\t\t\t\t}\n\n\t\t\t\t// Build the color attribute\n\t\t\t\tcolors.push((stop[0] * 100) + '% ' + stopColor);\n\n\t\t\t\t// Only start and end opacities are allowed, so we use the first and the last\n\t\t\t\tif (!i) {\n\t\t\t\t\topacity1 = stopOpacity;\n\t\t\t\t\tcolor2 = stopColor;\n\t\t\t\t} else {\n\t\t\t\t\topacity2 = stopOpacity;\n\t\t\t\t\tcolor1 = stopColor;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Apply the gradient to fills only.\n\t\t\tif (prop === 'fill') {\n\n\t\t\t\t// Handle linear gradient angle\n\t\t\t\tif (fillType === 'gradient') {\n\t\t\t\t\tx1 = gradient.x1 || gradient[0] || 0;\n\t\t\t\t\ty1 = gradient.y1 || gradient[1] || 0;\n\t\t\t\t\tx2 = gradient.x2 || gradient[2] || 0;\n\t\t\t\t\ty2 = gradient.y2 || gradient[3] || 0;\n\t\t\t\t\tfillAttr = 'angle=\"' + (90  - math.atan(\n\t\t\t\t\t\t(y2 - y1) / // y vector\n\t\t\t\t\t\t(x2 - x1) // x vector\n\t\t\t\t\t\t) * 180 / mathPI) + '\"';\n\n\t\t\t\t\taddFillNode();\n\n\t\t\t\t// Radial (circular) gradient\n\t\t\t\t} else {\n\n\t\t\t\t\tvar r = gradient.r,\n\t\t\t\t\t\tsizex = r * 2,\n\t\t\t\t\t\tsizey = r * 2,\n\t\t\t\t\t\tcx = gradient.cx,\n\t\t\t\t\t\tcy = gradient.cy,\n\t\t\t\t\t\tradialReference = elem.radialReference,\n\t\t\t\t\t\tbBox,\n\t\t\t\t\t\tapplyRadialGradient = function () {\n\t\t\t\t\t\t\tif (radialReference) {\n\t\t\t\t\t\t\t\tbBox = wrapper.getBBox();\n\t\t\t\t\t\t\t\tcx += (radialReference[0] - bBox.x) / bBox.width - 0.5;\n\t\t\t\t\t\t\t\tcy += (radialReference[1] - bBox.y) / bBox.height - 0.5;\n\t\t\t\t\t\t\t\tsizex *= radialReference[2] / bBox.width;\n\t\t\t\t\t\t\t\tsizey *= radialReference[2] / bBox.height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfillAttr = 'src=\"' + defaultOptions.global.VMLRadialGradientURL + '\" ' +\n\t\t\t\t\t\t\t\t'size=\"' + sizex + ',' + sizey + '\" ' +\n\t\t\t\t\t\t\t\t'origin=\"0.5,0.5\" ' +\n\t\t\t\t\t\t\t\t'position=\"' + cx + ',' + cy + '\" ' +\n\t\t\t\t\t\t\t\t'color2=\"' + color2 + '\" ';\n\n\t\t\t\t\t\t\taddFillNode();\n\t\t\t\t\t\t};\n\n\t\t\t\t\t// Apply radial gradient\n\t\t\t\t\tif (wrapper.added) {\n\t\t\t\t\t\tapplyRadialGradient();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// We need to know the bounding box to get the size and position right\n\t\t\t\t\t\taddEvent(wrapper, 'add', applyRadialGradient);\n\t\t\t\t\t}\n\n\t\t\t\t\t// The fill element's color attribute is broken in IE8 standards mode, so we\n\t\t\t\t\t// need to set the parent shape's fillcolor attribute instead.\n\t\t\t\t\tret = color1;\n\t\t\t\t}\n\n\t\t\t// Gradients are not supported for VML stroke, return the first color. #722.\n\t\t\t} else {\n\t\t\t\tret = stopColor;\n\t\t\t}\n\n\t\t// if the color is an rgba color, split it and add a fill node\n\t\t// to hold the opacity component\n\t\t} else if (regexRgba.test(color) && elem.tagName !== 'IMG') {\n\n\t\t\tcolorObject = Color(color);\n\n\t\t\tmarkup = ['<', prop, ' opacity=\"', colorObject.get('a'), '\"/>'];\n\t\t\tcreateElement(this.prepVML(markup), null, null, elem);\n\n\t\t\tret = colorObject.get('rgb');\n\n\n\t\t} else {\n\t\t\tvar propNodes = elem.getElementsByTagName(prop); // 'stroke' or 'fill' node\n\t\t\tif (propNodes.length) {\n\t\t\t\tpropNodes[0].opacity = 1;\n\t\t\t\tpropNodes[0].type = 'solid';\n\t\t\t}\n\t\t\tret = color;\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Take a VML string and prepare it for either IE8 or IE6/IE7.\n\t * @param {Array} markup A string array of the VML markup to prepare\n\t */\n\tprepVML: function (markup) {\n\t\tvar vmlStyle = 'display:inline-block;behavior:url(#default#VML);',\n\t\t\tisIE8 = this.isIE8;\n\n\t\tmarkup = markup.join('');\n\n\t\tif (isIE8) { // add xmlns and style inline\n\t\t\tmarkup = markup.replace('/>', ' xmlns=\"urn:schemas-microsoft-com:vml\" />');\n\t\t\tif (markup.indexOf('style=\"') === -1) {\n\t\t\t\tmarkup = markup.replace('/>', ' style=\"' + vmlStyle + '\" />');\n\t\t\t} else {\n\t\t\t\tmarkup = markup.replace('style=\"', 'style=\"' + vmlStyle);\n\t\t\t}\n\n\t\t} else { // add namespace\n\t\t\tmarkup = markup.replace('<', '<hcv:');\n\t\t}\n\n\t\treturn markup;\n\t},\n\n\t/**\n\t * Create rotated and aligned text\n\t * @param {String} str\n\t * @param {Number} x\n\t * @param {Number} y\n\t */\n\ttext: SVGRenderer.prototype.html,\n\n\t/**\n\t * Create and return a path element\n\t * @param {Array} path\n\t */\n\tpath: function (path) {\n\t\tvar attr = {\n\t\t\t// subpixel precision down to 0.1 (width and height = 1px)\n\t\t\tcoordsize: '10 10'\n\t\t};\n\t\tif (isArray(path)) {\n\t\t\tattr.d = path;\n\t\t} else if (isObject(path)) { // attributes\n\t\t\textend(attr, path);\n\t\t}\n\t\t// create the shape\n\t\treturn this.createElement('shape').attr(attr);\n\t},\n\n\t/**\n\t * Create and return a circle element. In VML circles are implemented as\n\t * shapes, which is faster than v:oval\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} r\n\t */\n\tcircle: function (x, y, r) {\n\t\tvar circle = this.symbol('circle');\n\t\tif (isObject(x)) {\n\t\t\tr = x.r;\n\t\t\ty = x.y;\n\t\t\tx = x.x;\n\t\t}\n\t\tcircle.isCircle = true; // Causes x and y to mean center (#1682)\n\t\tcircle.r = r;\n\t\treturn circle.attr({ x: x, y: y });\n\t},\n\n\t/**\n\t * Create a group using an outer div and an inner v:group to allow rotating\n\t * and flipping. A simple v:group would have problems with positioning\n\t * child HTML elements and CSS clip.\n\t *\n\t * @param {String} name The name of the group\n\t */\n\tg: function (name) {\n\t\tvar wrapper,\n\t\t\tattribs;\n\n\t\t// set the class name\n\t\tif (name) {\n\t\t\tattribs = { 'className': PREFIX + name, 'class': PREFIX + name };\n\t\t}\n\n\t\t// the div to hold HTML and clipping\n\t\twrapper = this.createElement(DIV).attr(attribs);\n\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * VML override to create a regular HTML image\n\t * @param {String} src\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\timage: function (src, x, y, width, height) {\n\t\tvar obj = this.createElement('img')\n\t\t\t.attr({ src: src });\n\n\t\tif (arguments.length > 1) {\n\t\t\tobj.attr({\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t});\n\t\t}\n\t\treturn obj;\n\t},\n\n\t/**\n\t * VML uses a shape for rect to overcome bugs and rotation problems\n\t */\n\trect: function (x, y, width, height, r, strokeWidth) {\n\n\t\tvar wrapper = this.symbol('rect');\n\t\twrapper.r = isObject(x) ? x.r : r;\n\n\t\t//return wrapper.attr(wrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0)));\n\t\treturn wrapper.attr(\n\t\t\t\tisObject(x) ?\n\t\t\t\t\tx :\n\t\t\t\t\t// do not crispify when an object is passed in (as in column charts)\n\t\t\t\t\twrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0))\n\t\t\t);\n\t},\n\n\t/**\n\t * In the VML renderer, each child of an inverted div (group) is inverted\n\t * @param {Object} element\n\t * @param {Object} parentNode\n\t */\n\tinvertChild: function (element, parentNode) {\n\t\tvar parentStyle = parentNode.style;\n\t\tcss(element, {\n\t\t\tflip: 'x',\n\t\t\tleft: pInt(parentStyle.width) - 1,\n\t\t\ttop: pInt(parentStyle.height) - 1,\n\t\t\trotation: -90\n\t\t});\n\t},\n\n\t/**\n\t * Symbol definitions that override the parent SVG renderer's symbols\n\t *\n\t */\n\tsymbols: {\n\t\t// VML specific arc function\n\t\tarc: function (x, y, w, h, options) {\n\t\t\tvar start = options.start,\n\t\t\t\tend = options.end,\n\t\t\t\tradius = options.r || w || h,\n\t\t\t\tinnerRadius = options.innerR,\n\t\t\t\tcosStart = mathCos(start),\n\t\t\t\tsinStart = mathSin(start),\n\t\t\t\tcosEnd = mathCos(end),\n\t\t\t\tsinEnd = mathSin(end),\n\t\t\t\tret;\n\n\t\t\tif (end - start === 0) { // no angle, don't show it.\n\t\t\t\treturn ['x'];\n\t\t\t}\n\n\t\t\tret = [\n\t\t\t\t'wa', // clockwise arc to\n\t\t\t\tx - radius, // left\n\t\t\t\ty - radius, // top\n\t\t\t\tx + radius, // right\n\t\t\t\ty + radius, // bottom\n\t\t\t\tx + radius * cosStart, // start x\n\t\t\t\ty + radius * sinStart, // start y\n\t\t\t\tx + radius * cosEnd, // end x\n\t\t\t\ty + radius * sinEnd  // end y\n\t\t\t];\n\n\t\t\tif (options.open && !innerRadius) {\n\t\t\t\tret.push(\n\t\t\t\t\t'e',\n\t\t\t\t\tM,\n\t\t\t\t\tx,// - innerRadius,\n\t\t\t\t\ty// - innerRadius\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.push(\n\t\t\t\t'at', // anti clockwise arc to\n\t\t\t\tx - innerRadius, // left\n\t\t\t\ty - innerRadius, // top\n\t\t\t\tx + innerRadius, // right\n\t\t\t\ty + innerRadius, // bottom\n\t\t\t\tx + innerRadius * cosEnd, // start x\n\t\t\t\ty + innerRadius * sinEnd, // start y\n\t\t\t\tx + innerRadius * cosStart, // end x\n\t\t\t\ty + innerRadius * sinStart, // end y\n\t\t\t\t'x', // finish path\n\t\t\t\t'e' // close\n\t\t\t);\n\n\t\t\tret.isArc = true;\n\t\t\treturn ret;\n\n\t\t},\n\t\t// Add circle symbol path. This performs significantly faster than v:oval.\n\t\tcircle: function (x, y, w, h, wrapper) {\n\n\t\t\tif (wrapper) {\n\t\t\t\tw = h = 2 * wrapper.r;\n\t\t\t}\n\n\t\t\t// Center correction, #1682\n\t\t\tif (wrapper && wrapper.isCircle) {\n\t\t\t\tx -= w / 2;\n\t\t\t\ty -= h / 2;\n\t\t\t}\n\n\t\t\t// Return the path\n\t\t\treturn [\n\t\t\t\t'wa', // clockwisearcto\n\t\t\t\tx, // left\n\t\t\t\ty, // top\n\t\t\t\tx + w, // right\n\t\t\t\ty + h, // bottom\n\t\t\t\tx + w, // start x\n\t\t\t\ty + h / 2,     // start y\n\t\t\t\tx + w, // end x\n\t\t\t\ty + h / 2,     // end y\n\t\t\t\t//'x', // finish path\n\t\t\t\t'e' // close\n\t\t\t];\n\t\t},\n\t\t/**\n\t\t * Add rectangle symbol path which eases rotation and omits arcsize problems\n\t\t * compared to the built-in VML roundrect shape\n\t\t *\n\t\t * @param {Number} left Left position\n\t\t * @param {Number} top Top position\n\t\t * @param {Number} r Border radius\n\t\t * @param {Object} options Width and height\n\t\t */\n\n\t\trect: function (left, top, width, height, options) {\n\n\t\t\tvar right = left + width,\n\t\t\t\tbottom = top + height,\n\t\t\t\tret,\n\t\t\t\tr;\n\n\t\t\t// No radius, return the more lightweight square\n\t\t\tif (!defined(options) || !options.r) {\n\t\t\t\tret = SVGRenderer.prototype.symbols.square.apply(0, arguments);\n\n\t\t\t// Has radius add arcs for the corners\n\t\t\t} else {\n\n\t\t\t\tr = mathMin(options.r, width, height);\n\t\t\t\tret = [\n\t\t\t\t\tM,\n\t\t\t\t\tleft + r, top,\n\n\t\t\t\t\tL,\n\t\t\t\t\tright - r, top,\n\t\t\t\t\t'wa',\n\t\t\t\t\tright - 2 * r, top,\n\t\t\t\t\tright, top + 2 * r,\n\t\t\t\t\tright - r, top,\n\t\t\t\t\tright, top + r,\n\n\t\t\t\t\tL,\n\t\t\t\t\tright, bottom - r,\n\t\t\t\t\t'wa',\n\t\t\t\t\tright - 2 * r, bottom - 2 * r,\n\t\t\t\t\tright, bottom,\n\t\t\t\t\tright, bottom - r,\n\t\t\t\t\tright - r, bottom,\n\n\t\t\t\t\tL,\n\t\t\t\t\tleft + r, bottom,\n\t\t\t\t\t'wa',\n\t\t\t\t\tleft, bottom - 2 * r,\n\t\t\t\t\tleft + 2 * r, bottom,\n\t\t\t\t\tleft + r, bottom,\n\t\t\t\t\tleft, bottom - r,\n\n\t\t\t\t\tL,\n\t\t\t\t\tleft, top + r,\n\t\t\t\t\t'wa',\n\t\t\t\t\tleft, top,\n\t\t\t\t\tleft + 2 * r, top + 2 * r,\n\t\t\t\t\tleft, top + r,\n\t\t\t\t\tleft + r, top,\n\n\n\t\t\t\t\t'x',\n\t\t\t\t\t'e'\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t}\n};\nHighcharts.VMLRenderer = VMLRenderer = function () {\n\tthis.init.apply(this, arguments);\n};\nVMLRenderer.prototype = merge(SVGRenderer.prototype, VMLRendererExtension);\n\n\t// general renderer\n\tRenderer = VMLRenderer;\n}\n\n/* ****************************************************************************\n *                                                                            *\n * END OF INTERNET EXPLORER <= 8 SPECIFIC CODE                                *\n *                                                                            *\n *****************************************************************************/\n/* ****************************************************************************\n *                                                                            *\n * START OF ANDROID < 3 SPECIFIC CODE. THIS CAN BE REMOVED IF YOU'RE NOT      *\n * TARGETING THAT SYSTEM.                                                     *\n *                                                                            *\n *****************************************************************************/\nvar CanVGRenderer,\n\tCanVGController;\n\nif (useCanVG) {\n\t/**\n\t * The CanVGRenderer is empty from start to keep the source footprint small.\n\t * When requested, the CanVGController downloads the rest of the source packaged\n\t * together with the canvg library.\n\t */\n\tHighcharts.CanVGRenderer = CanVGRenderer = function () {\n\t\t// Override the global SVG namespace to fake SVG/HTML that accepts CSS\n\t\tSVG_NS = 'http://www.w3.org/1999/xhtml';\n\t};\n\n\t/**\n\t * Start with an empty symbols object. This is needed when exporting is used (exporting.src.js will add a few symbols), but \n\t * the implementation from SvgRenderer will not be merged in until first render.\n\t */\n\tCanVGRenderer.prototype.symbols = {};\n\n\t/**\n\t * Handles on demand download of canvg rendering support.\n\t */\n\tCanVGController = (function () {\n\t\t// List of renderering calls\n\t\tvar deferredRenderCalls = [];\n\n\t\t/**\n\t\t * When downloaded, we are ready to draw deferred charts.\n\t\t */\n\t\tfunction drawDeferred() {\n\t\t\tvar callLength = deferredRenderCalls.length,\n\t\t\t\tcallIndex;\n\n\t\t\t// Draw all pending render calls\n\t\t\tfor (callIndex = 0; callIndex < callLength; callIndex++) {\n\t\t\t\tdeferredRenderCalls[callIndex]();\n\t\t\t}\n\t\t\t// Clear the list\n\t\t\tdeferredRenderCalls = [];\n\t\t}\n\n\t\treturn {\n\t\t\tpush: function (func, scriptLocation) {\n\t\t\t\t// Only get the script once\n\t\t\t\tif (deferredRenderCalls.length === 0) {\n\t\t\t\t\tgetScript(scriptLocation, drawDeferred);\n\t\t\t\t}\n\t\t\t\t// Register render call\n\t\t\t\tdeferredRenderCalls.push(func);\n\t\t\t}\n\t\t};\n\t}());\n\n\tRenderer = CanVGRenderer;\n} // end CanVGRenderer\n\n/* ****************************************************************************\n *                                                                            *\n * END OF ANDROID < 3 SPECIFIC CODE                                           *\n *                                                                            *\n *****************************************************************************/\n\n/**\n * The Tick class\n */\nfunction Tick(axis, pos, type, noLabel) {\n\tthis.axis = axis;\n\tthis.pos = pos;\n\tthis.type = type || '';\n\tthis.isNew = true;\n\n\tif (!type && !noLabel) {\n\t\tthis.addLabel();\n\t}\n}\n\nTick.prototype = {\n\t/**\n\t * Write the tick label\n\t */\n\taddLabel: function () {\n\t\tvar tick = this,\n\t\t\taxis = tick.axis,\n\t\t\toptions = axis.options,\n\t\t\tchart = axis.chart,\n\t\t\thoriz = axis.horiz,\n\t\t\tcategories = axis.categories,\n\t\t\tnames = axis.series[0] && axis.series[0].names,\n\t\t\tpos = tick.pos,\n\t\t\tlabelOptions = options.labels,\n\t\t\tstr,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\twidth = (horiz && categories &&\n\t\t\t\t!labelOptions.step && !labelOptions.staggerLines &&\n\t\t\t\t!labelOptions.rotation &&\n\t\t\t\tchart.plotWidth / tickPositions.length) ||\n\t\t\t\t(!horiz && (chart.margin[3] || chart.chartWidth * 0.33)), // #1580, #1931\n\t\t\tisFirst = pos === tickPositions[0],\n\t\t\tisLast = pos === tickPositions[tickPositions.length - 1],\n\t\t\tcss,\n\t\t\tattr,\n\t\t\tvalue = categories ?\n\t\t\t\tpick(categories[pos], names && names[pos], pos) : \n\t\t\t\tpos,\n\t\t\tlabel = tick.label,\n\t\t\ttickPositionInfo = tickPositions.info,\n\t\t\tdateTimeLabelFormat;\n\n\t\t// Set the datetime label format. If a higher rank is set for this position, use that. If not,\n\t\t// use the general format.\n\t\tif (axis.isDatetimeAxis && tickPositionInfo) {\n\t\t\tdateTimeLabelFormat = options.dateTimeLabelFormats[tickPositionInfo.higherRanks[pos] || tickPositionInfo.unitName];\n\t\t}\n\n\t\t// set properties for access in render method\n\t\ttick.isFirst = isFirst;\n\t\ttick.isLast = isLast;\n\n\t\t// get the string\n\t\tstr = axis.labelFormatter.call({\n\t\t\taxis: axis,\n\t\t\tchart: chart,\n\t\t\tisFirst: isFirst,\n\t\t\tisLast: isLast,\n\t\t\tdateTimeLabelFormat: dateTimeLabelFormat,\n\t\t\tvalue: axis.isLog ? correctFloat(lin2log(value)) : value\n\t\t});\n\n\t\t// prepare CSS\n\t\tcss = width && { width: mathMax(1, mathRound(width - 2 * (labelOptions.padding || 10))) + PX };\n\t\tcss = extend(css, labelOptions.style);\n\n\t\t// first call\n\t\tif (!defined(label)) {\n\t\t\tattr = {\n\t\t\t\talign: axis.labelAlign\n\t\t\t};\n\t\t\tif (isNumber(labelOptions.rotation)) {\n\t\t\t\tattr.rotation = labelOptions.rotation;\n\t\t\t}\n\t\t\tif (width && labelOptions.ellipsis) {\n\t\t\t\tattr._clipHeight = axis.len / tickPositions.length;\n\t\t\t}\n\n\t\t\ttick.label =\n\t\t\t\tdefined(str) && labelOptions.enabled ?\n\t\t\t\t\tchart.renderer.text(\n\t\t\t\t\t\t\tstr,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tlabelOptions.useHTML\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(attr)\n\t\t\t\t\t\t// without position absolute, IE export sometimes is wrong\n\t\t\t\t\t\t.css(css)\n\t\t\t\t\t\t.add(axis.labelGroup) :\n\t\t\t\t\tnull;\n\n\t\t// update\n\t\t} else if (label) {\n\t\t\tlabel.attr({\n\t\t\t\t\ttext: str\n\t\t\t\t})\n\t\t\t\t.css(css);\n\t\t}\n\t},\n\n\t/**\n\t * Get the offset height or width of the label\n\t */\n\tgetLabelSize: function () {\n\t\tvar label = this.label,\n\t\t\taxis = this.axis;\n\t\treturn label ?\n\t\t\t((this.labelBBox = label.getBBox()))[axis.horiz ? 'height' : 'width'] :\n\t\t\t0;\n\t},\n\n\t/**\n\t * Find how far the labels extend to the right and left of the tick's x position. Used for anti-collision\n\t * detection with overflow logic.\n\t */\n\tgetLabelSides: function () {\n\t\tvar bBox = this.labelBBox, // assume getLabelSize has run at this point\n\t\t\taxis = this.axis,\n\t\t\toptions = axis.options,\n\t\t\tlabelOptions = options.labels,\n\t\t\twidth = bBox.width,\n\t\t\tleftSide = width * { left: 0, center: 0.5, right: 1 }[axis.labelAlign] - labelOptions.x;\n\n\t\treturn [-leftSide, width - leftSide];\n\t},\n\n\t/**\n\t * Handle the label overflow by adjusting the labels to the left and right edge, or\n\t * hide them if they collide into the neighbour label.\n\t */\n\thandleOverflow: function (index, xy) {\n\t\tvar show = true,\n\t\t\taxis = this.axis,\n\t\t\tchart = axis.chart,\n\t\t\tisFirst = this.isFirst,\n\t\t\tisLast = this.isLast,\n\t\t\tx = xy.x,\n\t\t\treversed = axis.reversed,\n\t\t\ttickPositions = axis.tickPositions;\n\n\t\tif (isFirst || isLast) {\n\n\t\t\tvar sides = this.getLabelSides(),\n\t\t\t\tleftSide = sides[0],\n\t\t\t\trightSide = sides[1],\n\t\t\t\tplotLeft = chart.plotLeft,\n\t\t\t\tplotRight = plotLeft + axis.len,\n\t\t\t\tneighbour = axis.ticks[tickPositions[index + (isFirst ? 1 : -1)]],\n\t\t\t\tneighbourEdge = neighbour && neighbour.label.xy && neighbour.label.xy.x + neighbour.getLabelSides()[isFirst ? 0 : 1];\n\n\t\t\tif ((isFirst && !reversed) || (isLast && reversed)) {\n\t\t\t\t// Is the label spilling out to the left of the plot area?\n\t\t\t\tif (x + leftSide < plotLeft) {\n\n\t\t\t\t\t// Align it to plot left\n\t\t\t\t\tx = plotLeft - leftSide;\n\n\t\t\t\t\t// Hide it if it now overlaps the neighbour label\n\t\t\t\t\tif (neighbour && x + rightSide > neighbourEdge) {\n\t\t\t\t\t\tshow = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// Is the label spilling out to the right of the plot area?\n\t\t\t\tif (x + rightSide > plotRight) {\n\n\t\t\t\t\t// Align it to plot right\n\t\t\t\t\tx = plotRight - rightSide;\n\n\t\t\t\t\t// Hide it if it now overlaps the neighbour label\n\t\t\t\t\tif (neighbour && x + leftSide < neighbourEdge) {\n\t\t\t\t\t\tshow = false;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the modified x position of the label\n\t\t\txy.x = x;\n\t\t}\n\t\treturn show;\n\t},\n\n\t/**\n\t * Get the x and y position for ticks and labels\n\t */\n\tgetPosition: function (horiz, pos, tickmarkOffset, old) {\n\t\tvar axis = this.axis,\n\t\t\tchart = axis.chart,\n\t\t\tcHeight = (old && chart.oldChartHeight) || chart.chartHeight;\n\t\t\n\t\treturn {\n\t\t\tx: horiz ?\n\t\t\t\taxis.translate(pos + tickmarkOffset, null, null, old) + axis.transB :\n\t\t\t\taxis.left + axis.offset + (axis.opposite ? ((old && chart.oldChartWidth) || chart.chartWidth) - axis.right - axis.left : 0),\n\n\t\t\ty: horiz ?\n\t\t\t\tcHeight - axis.bottom + axis.offset - (axis.opposite ? axis.height : 0) :\n\t\t\t\tcHeight - axis.translate(pos + tickmarkOffset, null, null, old) - axis.transB\n\t\t};\n\t\t\n\t},\n\t\n\t/**\n\t * Get the x, y position of the tick label\n\t */\n\tgetLabelPosition: function (x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {\n\t\tvar axis = this.axis,\n\t\t\ttransA = axis.transA,\n\t\t\treversed = axis.reversed,\n\t\t\tstaggerLines = axis.staggerLines,\n\t\t\tbaseline = axis.chart.renderer.fontMetrics(labelOptions.style.fontSize).b,\n\t\t\trotation = labelOptions.rotation;\n\t\t\t\n\t\tx = x + labelOptions.x - (tickmarkOffset && horiz ?\n\t\t\ttickmarkOffset * transA * (reversed ? -1 : 1) : 0);\n\t\ty = y + labelOptions.y - (tickmarkOffset && !horiz ?\n\t\t\ttickmarkOffset * transA * (reversed ? 1 : -1) : 0);\n\n\t\t// Correct for rotation (#1764)\n\t\tif (rotation && axis.side === 2) {\n\t\t\ty -= baseline - baseline * mathCos(rotation * deg2rad);\n\t\t}\n\t\t\n\t\t// Vertically centered\n\t\tif (!defined(labelOptions.y) && !rotation) { // #1951\n\t\t\ty += baseline - label.getBBox().height / 2;\n\t\t}\n\t\t\n\t\t// Correct for staggered labels\n\t\tif (staggerLines) {\n\t\t\ty += (index / (step || 1) % staggerLines) * (axis.labelOffset / staggerLines);\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\t\n\t/**\n\t * Extendible method to return the path of the marker\n\t */\n\tgetMarkPath: function (x, y, tickLength, tickWidth, horiz, renderer) {\n\t\treturn renderer.crispLine([\n\t\t\t\tM,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tL,\n\t\t\t\tx + (horiz ? 0 : -tickLength),\n\t\t\t\ty + (horiz ? tickLength : 0)\n\t\t\t], tickWidth);\n\t},\n\n\t/**\n\t * Put everything in place\n\t *\n\t * @param index {Number}\n\t * @param old {Boolean} Use old coordinates to prepare an animation into new position\n\t */\n\trender: function (index, old, opacity) {\n\t\tvar tick = this,\n\t\t\taxis = tick.axis,\n\t\t\toptions = axis.options,\n\t\t\tchart = axis.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\thoriz = axis.horiz,\n\t\t\ttype = tick.type,\n\t\t\tlabel = tick.label,\n\t\t\tpos = tick.pos,\n\t\t\tlabelOptions = options.labels,\n\t\t\tgridLine = tick.gridLine,\n\t\t\tgridPrefix = type ? type + 'Grid' : 'grid',\n\t\t\ttickPrefix = type ? type + 'Tick' : 'tick',\n\t\t\tgridLineWidth = options[gridPrefix + 'LineWidth'],\n\t\t\tgridLineColor = options[gridPrefix + 'LineColor'],\n\t\t\tdashStyle = options[gridPrefix + 'LineDashStyle'],\n\t\t\ttickLength = options[tickPrefix + 'Length'],\n\t\t\ttickWidth = options[tickPrefix + 'Width'] || 0,\n\t\t\ttickColor = options[tickPrefix + 'Color'],\n\t\t\ttickPosition = options[tickPrefix + 'Position'],\n\t\t\tgridLinePath,\n\t\t\tmark = tick.mark,\n\t\t\tmarkPath,\n\t\t\tstep = labelOptions.step,\n\t\t\tattribs,\n\t\t\tshow = true,\n\t\t\ttickmarkOffset = axis.tickmarkOffset,\n\t\t\txy = tick.getPosition(horiz, pos, tickmarkOffset, old),\n\t\t\tx = xy.x,\n\t\t\ty = xy.y,\n\t\t\treverseCrisp = ((horiz && x === axis.pos + axis.len) || (!horiz && y === axis.pos)) ? -1 : 1, // #1480, #1687\n\t\t\tstaggerLines = axis.staggerLines;\n\n\t\tthis.isActive = true;\n\t\t\n\t\t// create the grid line\n\t\tif (gridLineWidth) {\n\t\t\tgridLinePath = axis.getPlotLinePath(pos + tickmarkOffset, gridLineWidth * reverseCrisp, old, true);\n\n\t\t\tif (gridLine === UNDEFINED) {\n\t\t\t\tattribs = {\n\t\t\t\t\tstroke: gridLineColor,\n\t\t\t\t\t'stroke-width': gridLineWidth\n\t\t\t\t};\n\t\t\t\tif (dashStyle) {\n\t\t\t\t\tattribs.dashstyle = dashStyle;\n\t\t\t\t}\n\t\t\t\tif (!type) {\n\t\t\t\t\tattribs.zIndex = 1;\n\t\t\t\t}\n\t\t\t\tif (old) {\n\t\t\t\t\tattribs.opacity = 0;\n\t\t\t\t}\n\t\t\t\ttick.gridLine = gridLine =\n\t\t\t\t\tgridLineWidth ?\n\t\t\t\t\t\trenderer.path(gridLinePath)\n\t\t\t\t\t\t\t.attr(attribs).add(axis.gridGroup) :\n\t\t\t\t\t\tnull;\n\t\t\t}\n\n\t\t\t// If the parameter 'old' is set, the current call will be followed\n\t\t\t// by another call, therefore do not do any animations this time\n\t\t\tif (!old && gridLine && gridLinePath) {\n\t\t\t\tgridLine[tick.isNew ? 'attr' : 'animate']({\n\t\t\t\t\td: gridLinePath,\n\t\t\t\t\topacity: opacity\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// create the tick mark\n\t\tif (tickWidth && tickLength) {\n\n\t\t\t// negate the length\n\t\t\tif (tickPosition === 'inside') {\n\t\t\t\ttickLength = -tickLength;\n\t\t\t}\n\t\t\tif (axis.opposite) {\n\t\t\t\ttickLength = -tickLength;\n\t\t\t}\n\n\t\t\tmarkPath = tick.getMarkPath(x, y, tickLength, tickWidth * reverseCrisp, horiz, renderer);\n\n\t\t\tif (mark) { // updating\n\t\t\t\tmark.animate({\n\t\t\t\t\td: markPath,\n\t\t\t\t\topacity: opacity\n\t\t\t\t});\n\t\t\t} else { // first time\n\t\t\t\ttick.mark = renderer.path(\n\t\t\t\t\tmarkPath\n\t\t\t\t).attr({\n\t\t\t\t\tstroke: tickColor,\n\t\t\t\t\t'stroke-width': tickWidth,\n\t\t\t\t\topacity: opacity\n\t\t\t\t}).add(axis.axisGroup);\n\t\t\t}\n\t\t}\n\n\t\t// the label is created on init - now move it into place\n\t\tif (label && !isNaN(x)) {\n\t\t\tlabel.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step);\n\n\t\t\t// Apply show first and show last. If the tick is both first and last, it is \n\t\t\t// a single centered tick, in which case we show the label anyway (#2100).\n\t\t\tif ((tick.isFirst && !tick.isLast && !pick(options.showFirstLabel, 1)) ||\n\t\t\t\t\t(tick.isLast && !tick.isFirst && !pick(options.showLastLabel, 1))) {\n\t\t\t\tshow = false;\n\n\t\t\t// Handle label overflow and show or hide accordingly\n\t\t\t} else if (!staggerLines && horiz && labelOptions.overflow === 'justify' && !tick.handleOverflow(index, xy)) {\n\t\t\t\tshow = false;\n\t\t\t}\n\n\t\t\t// apply step\n\t\t\tif (step && index % step) {\n\t\t\t\t// show those indices dividable by step\n\t\t\t\tshow = false;\n\t\t\t}\n\n\t\t\t// Set the new position, and show or hide\n\t\t\tif (show && !isNaN(xy.y)) {\n\t\t\t\txy.opacity = opacity;\n\t\t\t\tlabel[tick.isNew ? 'attr' : 'animate'](xy);\n\t\t\t\ttick.isNew = false;\n\t\t\t} else {\n\t\t\t\tlabel.attr('y', -9999); // #1338\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Destructor for the tick prototype\n\t */\n\tdestroy: function () {\n\t\tdestroyObjectProperties(this, this.axis);\n\t}\n};\n\n/**\n * The object wrapper for plot lines and plot bands\n * @param {Object} options\n */\nfunction PlotLineOrBand(axis, options) {\n\tthis.axis = axis;\n\n\tif (options) {\n\t\tthis.options = options;\n\t\tthis.id = options.id;\n\t}\n}\n\nPlotLineOrBand.prototype = {\n\t\n\t/**\n\t * Render the plot line or plot band. If it is already existing,\n\t * move it.\n\t */\n\trender: function () {\n\t\tvar plotLine = this,\n\t\t\taxis = plotLine.axis,\n\t\t\thoriz = axis.horiz,\n\t\t\thalfPointRange = (axis.pointRange || 0) / 2,\n\t\t\toptions = plotLine.options,\n\t\t\toptionsLabel = options.label,\n\t\t\tlabel = plotLine.label,\n\t\t\twidth = options.width,\n\t\t\tto = options.to,\n\t\t\tfrom = options.from,\n\t\t\tisBand = defined(from) && defined(to),\n\t\t\tvalue = options.value,\n\t\t\tdashStyle = options.dashStyle,\n\t\t\tsvgElem = plotLine.svgElem,\n\t\t\tpath = [],\n\t\t\taddEvent,\n\t\t\teventType,\n\t\t\txs,\n\t\t\tys,\n\t\t\tx,\n\t\t\ty,\n\t\t\tcolor = options.color,\n\t\t\tzIndex = options.zIndex,\n\t\t\tevents = options.events,\n\t\t\tattribs,\n\t\t\trenderer = axis.chart.renderer;\n\n\t\t// logarithmic conversion\n\t\tif (axis.isLog) {\n\t\t\tfrom = log2lin(from);\n\t\t\tto = log2lin(to);\n\t\t\tvalue = log2lin(value);\n\t\t}\n\n\t\t// plot line\n\t\tif (width) {\n\t\t\tpath = axis.getPlotLinePath(value, width);\n\t\t\tattribs = {\n\t\t\t\tstroke: color,\n\t\t\t\t'stroke-width': width\n\t\t\t};\n\t\t\tif (dashStyle) {\n\t\t\t\tattribs.dashstyle = dashStyle;\n\t\t\t}\n\t\t} else if (isBand) { // plot band\n\t\t\t\n\t\t\t// keep within plot area\n\t\t\tfrom = mathMax(from, axis.min - halfPointRange);\n\t\t\tto = mathMin(to, axis.max + halfPointRange);\n\t\t\t\n\t\t\tpath = axis.getPlotBandPath(from, to, options);\n\t\t\tattribs = {\n\t\t\t\tfill: color\n\t\t\t};\n\t\t\tif (options.borderWidth) {\n\t\t\t\tattribs.stroke = options.borderColor;\n\t\t\t\tattribs['stroke-width'] = options.borderWidth;\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t\t// zIndex\n\t\tif (defined(zIndex)) {\n\t\t\tattribs.zIndex = zIndex;\n\t\t}\n\n\t\t// common for lines and bands\n\t\tif (svgElem) {\n\t\t\tif (path) {\n\t\t\t\tsvgElem.animate({\n\t\t\t\t\td: path\n\t\t\t\t}, null, svgElem.onGetPath);\n\t\t\t} else {\n\t\t\t\tsvgElem.hide();\n\t\t\t\tsvgElem.onGetPath = function () {\n\t\t\t\t\tsvgElem.show();\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (path && path.length) {\n\t\t\tplotLine.svgElem = svgElem = renderer.path(path)\n\t\t\t\t.attr(attribs).add();\n\n\t\t\t// events\n\t\t\tif (events) {\n\t\t\t\taddEvent = function (eventType) {\n\t\t\t\t\tsvgElem.on(eventType, function (e) {\n\t\t\t\t\t\tevents[eventType].apply(plotLine, [e]);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tfor (eventType in events) {\n\t\t\t\t\taddEvent(eventType);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// the plot band/line label\n\t\tif (optionsLabel && defined(optionsLabel.text) && path && path.length && axis.width > 0 && axis.height > 0) {\n\t\t\t// apply defaults\n\t\t\toptionsLabel = merge({\n\t\t\t\talign: horiz && isBand && 'center',\n\t\t\t\tx: horiz ? !isBand && 4 : 10,\n\t\t\t\tverticalAlign : !horiz && isBand && 'middle',\n\t\t\t\ty: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4,\n\t\t\t\trotation: horiz && !isBand && 90\n\t\t\t}, optionsLabel);\n\n\t\t\t// add the SVG element\n\t\t\tif (!label) {\n\t\t\t\tplotLine.label = label = renderer.text(\n\t\t\t\t\t\toptionsLabel.text,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\toptionsLabel.useHTML\n\t\t\t\t\t)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\talign: optionsLabel.textAlign || optionsLabel.align,\n\t\t\t\t\t\trotation: optionsLabel.rotation,\n\t\t\t\t\t\tzIndex: zIndex\n\t\t\t\t\t})\n\t\t\t\t\t.css(optionsLabel.style)\n\t\t\t\t\t.add();\n\t\t\t}\n\n\t\t\t// get the bounding box and align the label\n\t\t\txs = [path[1], path[4], pick(path[6], path[1])];\n\t\t\tys = [path[2], path[5], pick(path[7], path[2])];\n\t\t\tx = arrayMin(xs);\n\t\t\ty = arrayMin(ys);\n\n\t\t\tlabel.align(optionsLabel, false, {\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: arrayMax(xs) - x,\n\t\t\t\theight: arrayMax(ys) - y\n\t\t\t});\n\t\t\tlabel.show();\n\n\t\t} else if (label) { // move out of sight\n\t\t\tlabel.hide();\n\t\t}\n\n\t\t// chainable\n\t\treturn plotLine;\n\t},\n\n\t/**\n\t * Remove the plot line or band\n\t */\n\tdestroy: function () {\n\t\t// remove it from the lookup\n\t\terase(this.axis.plotLinesAndBands, this);\n\t\t\n\t\tdelete this.axis;\n\t\tdestroyObjectProperties(this);\n\t}\n};\n/**\n * The class for stack items\n */\nfunction StackItem(axis, options, isNegative, x, stackOption, stacking) {\n\t\n\tvar inverted = axis.chart.inverted;\n\n\tthis.axis = axis;\n\n\t// Tells if the stack is negative\n\tthis.isNegative = isNegative;\n\n\t// Save the options to be able to style the label\n\tthis.options = options;\n\n\t// Save the x value to be able to position the label later\n\tthis.x = x;\n\n\t// Initialize total value\n\tthis.total = null;\n\n\t// This will keep each points' extremes stored by series.index\n\tthis.points = {};\n\n\t// Save the stack option on the series configuration object, and whether to treat it as percent\n\tthis.stack = stackOption;\n\tthis.percent = stacking === 'percent';\n\n\t// The align options and text align varies on whether the stack is negative and\n\t// if the chart is inverted or not.\n\t// First test the user supplied value, then use the dynamic.\n\tthis.alignOptions = {\n\t\talign: options.align || (inverted ? (isNegative ? 'left' : 'right') : 'center'),\n\t\tverticalAlign: options.verticalAlign || (inverted ? 'middle' : (isNegative ? 'bottom' : 'top')),\n\t\ty: pick(options.y, inverted ? 4 : (isNegative ? 14 : -6)),\n\t\tx: pick(options.x, inverted ? (isNegative ? -6 : 6) : 0)\n\t};\n\n\tthis.textAlign = options.textAlign || (inverted ? (isNegative ? 'right' : 'left') : 'center');\n}\n\nStackItem.prototype = {\n\tdestroy: function () {\n\t\tdestroyObjectProperties(this, this.axis);\n\t},\n\n\t/**\n\t * Renders the stack total label and adds it to the stack label group.\n\t */\n\trender: function (group) {\n\t\tvar options = this.options,\n\t\t\tformatOption = options.format,\n\t\t\tstr = formatOption ?\n\t\t\t\tformat(formatOption, this) : \n\t\t\t\toptions.formatter.call(this);  // format the text in the label\n\n\t\t// Change the text to reflect the new total and set visibility to hidden in case the serie is hidden\n\t\tif (this.label) {\n\t\t\tthis.label.attr({text: str, visibility: HIDDEN});\n\t\t// Create new label\n\t\t} else {\n\t\t\tthis.label =\n\t\t\t\tthis.axis.chart.renderer.text(str, 0, 0, options.useHTML)\t\t// dummy positions, actual position updated with setOffset method in columnseries\n\t\t\t\t\t.css(options.style)\t\t\t\t// apply style\n\t\t\t\t\t.attr({\n\t\t\t\t\t\talign: this.textAlign,\t\t\t\t// fix the text-anchor\n\t\t\t\t\t\trotation: options.rotation,\t// rotation\n\t\t\t\t\t\tvisibility: HIDDEN\t\t\t\t\t// hidden until setOffset is called\n\t\t\t\t\t})\t\t\t\t\n\t\t\t\t\t.add(group);\t\t\t\t\t\t\t// add to the labels-group\n\t\t}\n\t},\n\n\t/**\n\t * Sets the offset that the stack has from the x value and repositions the label.\n\t */\n\tsetOffset: function (xOffset, xWidth) {\n\t\tvar stackItem = this,\n\t\t\taxis = stackItem.axis,\n\t\t\tchart = axis.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tneg = this.isNegative,\t\t\t\t\t\t\t// special treatment is needed for negative stacks\n\t\t\ty = axis.translate(this.percent ? 100 : this.total, 0, 0, 0, 1), // stack value translated mapped to chart coordinates\n\t\t\tyZero = axis.translate(0),\t\t\t\t\t\t// stack origin\n\t\t\th = mathAbs(y - yZero),\t\t\t\t\t\t\t// stack height\n\t\t\tx = chart.xAxis[0].translate(this.x) + xOffset,\t// stack x position\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tstackBox = {\t// this is the box for the complete stack\n\t\t\t\tx: inverted ? (neg ? y : y - h) : x,\n\t\t\t\ty: inverted ? plotHeight - x - xWidth : (neg ? (plotHeight - y - h) : plotHeight - y),\n\t\t\t\twidth: inverted ? h : xWidth,\n\t\t\t\theight: inverted ? xWidth : h\n\t\t\t},\n\t\t\tlabel = this.label,\n\t\t\talignAttr;\n\t\t\n\t\tif (label) {\n\t\t\tlabel.align(this.alignOptions, null, stackBox);\t// align the label to the box\n\t\t\t\t\n\t\t\t// Set visibility (#678)\n\t\t\talignAttr = label.alignAttr;\n\t\t\tlabel.attr({ \n\t\t\t\tvisibility: this.options.crop === false || chart.isInsidePlot(alignAttr.x, alignAttr.y) ? \n\t\t\t\t\t(hasSVG ? 'inherit' : VISIBLE) : \n\t\t\t\t\tHIDDEN\n\t\t\t});\n\t\t}\n\t}\n};\n/**\n * Create a new axis object\n * @param {Object} chart\n * @param {Object} options\n */\nfunction Axis() {\n\tthis.init.apply(this, arguments);\n}\n\nAxis.prototype = {\n\t\n\t/**\n\t * Default options for the X axis - the Y axis has extended defaults \n\t */\n\tdefaultOptions: {\n\t\t// allowDecimals: null,\n\t\t// alternateGridColor: null,\n\t\t// categories: [],\n\t\tdateTimeLabelFormats: {\n\t\t\tmillisecond: '%H:%M:%S.%L',\n\t\t\tsecond: '%H:%M:%S',\n\t\t\tminute: '%H:%M',\n\t\t\thour: '%H:%M',\n\t\t\tday: '%e. %b',\n\t\t\tweek: '%e. %b',\n\t\t\tmonth: '%b \\'%y',\n\t\t\tyear: '%Y'\n\t\t},\n\t\tendOnTick: false,\n\t\tgridLineColor: '#C0C0C0',\n\t\t// gridLineDashStyle: 'solid',\n\t\t// gridLineWidth: 0,\n\t\t// reversed: false,\n\t\n\t\tlabels: defaultLabelOptions,\n\t\t\t// { step: null },\n\t\tlineColor: '#C0D0E0',\n\t\tlineWidth: 1,\n\t\t//linkedTo: null,\n\t\t//max: undefined,\n\t\t//min: undefined,\n\t\tminPadding: 0.01,\n\t\tmaxPadding: 0.01,\n\t\t//minRange: null,\n\t\tminorGridLineColor: '#E0E0E0',\n\t\t// minorGridLineDashStyle: null,\n\t\tminorGridLineWidth: 1,\n\t\tminorTickColor: '#A0A0A0',\n\t\t//minorTickInterval: null,\n\t\tminorTickLength: 2,\n\t\tminorTickPosition: 'outside', // inside or outside\n\t\t//minorTickWidth: 0,\n\t\t//opposite: false,\n\t\t//offset: 0,\n\t\t//plotBands: [{\n\t\t//\tevents: {},\n\t\t//\tzIndex: 1,\n\t\t//\tlabels: { align, x, verticalAlign, y, style, rotation, textAlign }\n\t\t//}],\n\t\t//plotLines: [{\n\t\t//\tevents: {}\n\t\t//  dashStyle: {}\n\t\t//\tzIndex:\n\t\t//\tlabels: { align, x, verticalAlign, y, style, rotation, textAlign }\n\t\t//}],\n\t\t//reversed: false,\n\t\t// showFirstLabel: true,\n\t\t// showLastLabel: true,\n\t\tstartOfWeek: 1,\n\t\tstartOnTick: false,\n\t\ttickColor: '#C0D0E0',\n\t\t//tickInterval: null,\n\t\ttickLength: 5,\n\t\ttickmarkPlacement: 'between', // on or between\n\t\ttickPixelInterval: 100,\n\t\ttickPosition: 'outside',\n\t\ttickWidth: 1,\n\t\ttitle: {\n\t\t\t//text: null,\n\t\t\talign: 'middle', // low, middle or high\n\t\t\t//margin: 0 for horizontal, 10 for vertical axes,\n\t\t\t//rotation: 0,\n\t\t\t//side: 'outside',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#4d759e',\n\t\t\t\t//font: defaultFont.replace('normal', 'bold')\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t\t//x: 0,\n\t\t\t//y: 0\n\t\t},\n\t\ttype: 'linear' // linear, logarithmic or datetime\n\t},\n\t\n\t/**\n\t * This options set extends the defaultOptions for Y axes\n\t */\n\tdefaultYAxisOptions: {\n\t\tendOnTick: true,\n\t\tgridLineWidth: 1,\n\t\ttickPixelInterval: 72,\n\t\tshowLastLabel: true,\n\t\tlabels: {\n\t\t\tx: -8,\n\t\t\ty: 3\n\t\t},\n\t\tlineWidth: 0,\n\t\tmaxPadding: 0.05,\n\t\tminPadding: 0.05,\n\t\tstartOnTick: true,\n\t\ttickWidth: 0,\n\t\ttitle: {\n\t\t\trotation: 270,\n\t\t\ttext: 'Values'\n\t\t},\n\t\tstackLabels: {\n\t\t\tenabled: false,\n\t\t\t//align: dynamic,\n\t\t\t//y: dynamic,\n\t\t\t//x: dynamic,\n\t\t\t//verticalAlign: dynamic,\n\t\t\t//textAlign: dynamic,\n\t\t\t//rotation: 0,\n\t\t\tformatter: function () {\n\t\t\t\treturn numberFormat(this.total, -1);\n\t\t\t},\n\t\t\tstyle: defaultLabelOptions.style\n\t\t}\n\t},\n\t\n\t/**\n\t * These options extend the defaultOptions for left axes\n\t */\n\tdefaultLeftAxisOptions: {\n\t\tlabels: {\n\t\t\tx: -8,\n\t\t\ty: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 270\n\t\t}\n\t},\n\t\n\t/**\n\t * These options extend the defaultOptions for right axes\n\t */\n\tdefaultRightAxisOptions: {\n\t\tlabels: {\n\t\t\tx: 8,\n\t\t\ty: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 90\n\t\t}\n\t},\n\t\n\t/**\n\t * These options extend the defaultOptions for bottom axes\n\t */\n\tdefaultBottomAxisOptions: {\n\t\tlabels: {\n\t\t\tx: 0,\n\t\t\ty: 14\n\t\t\t// overflow: undefined,\n\t\t\t// staggerLines: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 0\n\t\t}\n\t},\n\t/**\n\t * These options extend the defaultOptions for left axes\n\t */\n\tdefaultTopAxisOptions: {\n\t\tlabels: {\n\t\t\tx: 0,\n\t\t\ty: -5\n\t\t\t// overflow: undefined\n\t\t\t// staggerLines: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 0\n\t\t}\n\t},\n\t\n\t/**\n\t * Initialize the axis\n\t */\n\tinit: function (chart, userOptions) {\n\t\t\t\n\t\t\n\t\tvar isXAxis = userOptions.isX,\n\t\t\taxis = this;\n\t\n\t\t// Flag, is the axis horizontal\n\t\taxis.horiz = chart.inverted ? !isXAxis : isXAxis;\n\t\t\n\t\t// Flag, isXAxis\n\t\taxis.isXAxis = isXAxis;\n\t\taxis.xOrY = isXAxis ? 'x' : 'y';\n\t\n\t\n\t\taxis.opposite = userOptions.opposite; // needed in setOptions\n\t\taxis.side = axis.horiz ?\n\t\t\t\t(axis.opposite ? 0 : 2) : // top : bottom\n\t\t\t\t(axis.opposite ? 1 : 3);  // right : left\n\t\n\t\taxis.setOptions(userOptions);\n\t\t\n\t\n\t\tvar options = this.options,\n\t\t\ttype = options.type,\n\t\t\tisDatetimeAxis = type === 'datetime';\n\t\n\t\taxis.labelFormatter = options.labels.formatter || axis.defaultLabelFormatter; // can be overwritten by dynamic format\n\t\n\t\n\t\t// Flag, stagger lines or not\n\t\taxis.userOptions = userOptions;\n\t\n\t\t//axis.axisTitleMargin = UNDEFINED,// = options.title.margin,\n\t\taxis.minPixelPadding = 0;\n\t\t//axis.ignoreMinPadding = UNDEFINED; // can be set to true by a column or bar series\n\t\t//axis.ignoreMaxPadding = UNDEFINED;\n\t\n\t\taxis.chart = chart;\n\t\taxis.reversed = options.reversed;\n\t\taxis.zoomEnabled = options.zoomEnabled !== false;\n\t\n\t\t// Initial categories\n\t\taxis.categories = options.categories || type === 'category';\n\t\n\t\t// Elements\n\t\t//axis.axisGroup = UNDEFINED;\n\t\t//axis.gridGroup = UNDEFINED;\n\t\t//axis.axisTitle = UNDEFINED;\n\t\t//axis.axisLine = UNDEFINED;\n\t\n\t\t// Shorthand types\n\t\taxis.isLog = type === 'logarithmic';\n\t\taxis.isDatetimeAxis = isDatetimeAxis;\n\t\n\t\t// Flag, if axis is linked to another axis\n\t\taxis.isLinked = defined(options.linkedTo);\n\t\t// Linked axis.\n\t\t//axis.linkedParent = UNDEFINED;\t\n\t\t\n\t\t// Tick positions\n\t\t//axis.tickPositions = UNDEFINED; // array containing predefined positions\n\t\t// Tick intervals\n\t\t//axis.tickInterval = UNDEFINED;\n\t\t//axis.minorTickInterval = UNDEFINED;\n\t\t\n\t\taxis.tickmarkOffset = (axis.categories && options.tickmarkPlacement === 'between') ? 0.5 : 0;\n\t\n\t\t// Major ticks\n\t\taxis.ticks = {};\n\t\t// Minor ticks\n\t\taxis.minorTicks = {};\n\t\t//axis.tickAmount = UNDEFINED;\n\t\n\t\t// List of plotLines/Bands\n\t\taxis.plotLinesAndBands = [];\n\t\n\t\t// Alternate bands\n\t\taxis.alternateBands = {};\n\t\n\t\t// Axis metrics\n\t\t//axis.left = UNDEFINED;\n\t\t//axis.top = UNDEFINED;\n\t\t//axis.width = UNDEFINED;\n\t\t//axis.height = UNDEFINED;\n\t\t//axis.bottom = UNDEFINED;\n\t\t//axis.right = UNDEFINED;\n\t\t//axis.transA = UNDEFINED;\n\t\t//axis.transB = UNDEFINED;\n\t\t//axis.oldTransA = UNDEFINED;\n\t\taxis.len = 0;\n\t\t//axis.oldMin = UNDEFINED;\n\t\t//axis.oldMax = UNDEFINED;\n\t\t//axis.oldUserMin = UNDEFINED;\n\t\t//axis.oldUserMax = UNDEFINED;\n\t\t//axis.oldAxisLength = UNDEFINED;\n\t\taxis.minRange = axis.userMinRange = options.minRange || options.maxZoom;\n\t\taxis.range = options.range;\n\t\taxis.offset = options.offset || 0;\n\t\n\t\n\t\t// Dictionary for stacks\n\t\taxis.stacks = {};\n\t\taxis.oldStacks = {};\n\n\t\t// Dictionary for stacks max values\n\t\taxis.stackExtremes = {};\n\n\t\t// Min and max in the data\n\t\t//axis.dataMin = UNDEFINED,\n\t\t//axis.dataMax = UNDEFINED,\n\t\n\t\t// The axis range\n\t\taxis.max = null;\n\t\taxis.min = null;\n\t\n\t\t// User set min and max\n\t\t//axis.userMin = UNDEFINED,\n\t\t//axis.userMax = UNDEFINED,\n\n\t\t// Run Axis\n\t\t\n\t\tvar eventType,\n\t\t\tevents = axis.options.events;\n\n\t\t// Register\n\t\tif (inArray(axis, chart.axes) === -1) { // don't add it again on Axis.update()\n\t\t\tchart.axes.push(axis);\n\t\t\tchart[isXAxis ? 'xAxis' : 'yAxis'].push(axis);\n\t\t}\n\n\t\taxis.series = axis.series || []; // populated by Series\n\n\t\t// inverted charts have reversed xAxes as default\n\t\tif (chart.inverted && isXAxis && axis.reversed === UNDEFINED) {\n\t\t\taxis.reversed = true;\n\t\t}\n\n\t\taxis.removePlotBand = axis.removePlotBandOrLine;\n\t\taxis.removePlotLine = axis.removePlotBandOrLine;\n\n\n\t\t// register event listeners\n\t\tfor (eventType in events) {\n\t\t\taddEvent(axis, eventType, events[eventType]);\n\t\t}\n\n\t\t// extend logarithmic axis\n\t\tif (axis.isLog) {\n\t\t\taxis.val2lin = log2lin;\n\t\t\taxis.lin2val = lin2log;\n\t\t}\n\t},\n\t\n\t/**\n\t * Merge and set options\n\t */\n\tsetOptions: function (userOptions) {\n\t\tthis.options = merge(\n\t\t\tthis.defaultOptions,\n\t\t\tthis.isXAxis ? {} : this.defaultYAxisOptions,\n\t\t\t[this.defaultTopAxisOptions, this.defaultRightAxisOptions,\n\t\t\t\tthis.defaultBottomAxisOptions, this.defaultLeftAxisOptions][this.side],\n\t\t\tmerge(\n\t\t\t\tdefaultOptions[this.isXAxis ? 'xAxis' : 'yAxis'], // if set in setOptions (#1053)\n\t\t\t\tuserOptions\n\t\t\t)\n\t\t);\n\t},\n\n\t/**\n\t * Update the axis with a new options structure\n\t */\n\tupdate: function (newOptions, redraw) {\n\t\tvar chart = this.chart;\n\n\t\tnewOptions = chart.options[this.xOrY + 'Axis'][this.options.index] = merge(this.userOptions, newOptions);\n\n\t\tthis.destroy(true);\n\t\tthis._addedPlotLB = this.userMin = this.userMax = UNDEFINED; // #1611, #2306\n\n\t\tthis.init(chart, extend(newOptions, { events: UNDEFINED }));\n\n\t\tchart.isDirtyBox = true;\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw();\n\t\t}\n\t},\t\n\t\n\t/**\n     * Remove the axis from the chart\n     */\n\tremove: function (redraw) {\n\t\tvar chart = this.chart,\n\t\t\tkey = this.xOrY + 'Axis'; // xAxis or yAxis\n\n\t\t// Remove associated series\n\t\teach(this.series, function (series) {\n\t\t\tseries.remove(false);\n\t\t});\n\n\t\t// Remove the axis\n\t\terase(chart.axes, this);\n\t\terase(chart[key], this);\n\t\tchart.options[key].splice(this.options.index, 1);\n\t\teach(chart[key], function (axis, i) { // Re-index, #1706\n\t\t\taxis.options.index = i;\n\t\t});\n\t\tthis.destroy();\n\t\tchart.isDirtyBox = true;\n\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw();\n\t\t}\n\t},\n\t\n\t/** \n\t * The default label formatter. The context is a special config object for the label.\n\t */\n\tdefaultLabelFormatter: function () {\n\t\tvar axis = this.axis,\n\t\t\tvalue = this.value,\n\t\t\tcategories = axis.categories, \n\t\t\tdateTimeLabelFormat = this.dateTimeLabelFormat,\n\t\t\tnumericSymbols = defaultOptions.lang.numericSymbols,\n\t\t\ti = numericSymbols && numericSymbols.length,\n\t\t\tmulti,\n\t\t\tret,\n\t\t\tformatOption = axis.options.labels.format,\n\t\t\t\n\t\t\t// make sure the same symbol is added for all labels on a linear axis\n\t\t\tnumericSymbolDetector = axis.isLog ? value : axis.tickInterval;\n\n\t\tif (formatOption) {\n\t\t\tret = format(formatOption, this);\n\t\t\n\t\t} else if (categories) {\n\t\t\tret = value;\n\t\t\n\t\t} else if (dateTimeLabelFormat) { // datetime axis\n\t\t\tret = dateFormat(dateTimeLabelFormat, value);\n\t\t\n\t\t} else if (i && numericSymbolDetector >= 1000) {\n\t\t\t// Decide whether we should add a numeric symbol like k (thousands) or M (millions).\n\t\t\t// If we are to enable this in tooltip or other places as well, we can move this\n\t\t\t// logic to the numberFormatter and enable it by a parameter.\n\t\t\twhile (i-- && ret === UNDEFINED) {\n\t\t\t\tmulti = Math.pow(1000, i + 1);\n\t\t\t\tif (numericSymbolDetector >= multi && numericSymbols[i] !== null) {\n\t\t\t\t\tret = numberFormat(value / multi, -1) + numericSymbols[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (ret === UNDEFINED) {\n\t\t\tif (value >= 1000) { // add thousands separators\n\t\t\t\tret = numberFormat(value, 0);\n\n\t\t\t} else { // small numbers\n\t\t\t\tret = numberFormat(value, -1);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Get the minimum and maximum for the series of each axis\n\t */\n\tgetSeriesExtremes: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart;\n\n\t\taxis.hasVisibleSeries = false;\n\n\t\t// reset dataMin and dataMax in case we're redrawing\n\t\taxis.dataMin = axis.dataMax = null;\n\n\t\t// reset cached stacking extremes\n\t\taxis.stackExtremes = {};\n\n\t\taxis.buildStacks();\n\n\t\t// loop through this axis' series\n\t\teach(axis.series, function (series) {\n\n\t\t\tif (series.visible || !chart.options.chart.ignoreHiddenSeries) {\n\n\t\t\t\tvar seriesOptions = series.options,\n\t\t\t\t\txData,\n\t\t\t\t\tthreshold = seriesOptions.threshold,\n\t\t\t\t\tseriesDataMin,\n\t\t\t\t\tseriesDataMax;\n\n\t\t\t\taxis.hasVisibleSeries = true;\n\n\t\t\t\t// Validate threshold in logarithmic axes\n\t\t\t\tif (axis.isLog && threshold <= 0) {\n\t\t\t\t\tthreshold = null;\n\t\t\t\t}\n\n\t\t\t\t// Get dataMin and dataMax for X axes\n\t\t\t\tif (axis.isXAxis) {\n\t\t\t\t\txData = series.xData;\n\t\t\t\t\tif (xData.length) {\n\t\t\t\t\t\taxis.dataMin = mathMin(pick(axis.dataMin, xData[0]), arrayMin(xData));\n\t\t\t\t\t\taxis.dataMax = mathMax(pick(axis.dataMax, xData[0]), arrayMax(xData));\n\t\t\t\t\t}\n\n\t\t\t\t// Get dataMin and dataMax for Y axes, as well as handle stacking and processed data\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get this particular series extremes\n\t\t\t\t\tseries.getExtremes();\n\t\t\t\t\tseriesDataMax = series.dataMax;\n\t\t\t\t\tseriesDataMin = series.dataMin;\n\n\t\t\t\t\t// Get the dataMin and dataMax so far. If percentage is used, the min and max are\n\t\t\t\t\t// always 0 and 100. If seriesDataMin and seriesDataMax is null, then series\n\t\t\t\t\t// doesn't have active y data, we continue with nulls\n\t\t\t\t\tif (defined(seriesDataMin) && defined(seriesDataMax)) {\n\t\t\t\t\t\taxis.dataMin = mathMin(pick(axis.dataMin, seriesDataMin), seriesDataMin);\n\t\t\t\t\t\taxis.dataMax = mathMax(pick(axis.dataMax, seriesDataMax), seriesDataMax);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Adjust to threshold\n\t\t\t\t\tif (defined(threshold)) {\n\t\t\t\t\t\tif (axis.dataMin >= threshold) {\n\t\t\t\t\t\t\taxis.dataMin = threshold;\n\t\t\t\t\t\t\taxis.ignoreMinPadding = true;\n\t\t\t\t\t\t} else if (axis.dataMax < threshold) {\n\t\t\t\t\t\t\taxis.dataMax = threshold;\n\t\t\t\t\t\t\taxis.ignoreMaxPadding = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Translate from axis value to pixel position on the chart, or back\n\t *\n\t */\n\ttranslate: function (val, backwards, cvsCoord, old, handleLog, pointPlacement) {\n\t\tvar axis = this,\n\t\t\taxisLength = axis.len,\n\t\t\tsign = 1,\n\t\t\tcvsOffset = 0,\n\t\t\tlocalA = old ? axis.oldTransA : axis.transA,\n\t\t\tlocalMin = old ? axis.oldMin : axis.min,\n\t\t\treturnValue,\n\t\t\tminPixelPadding = axis.minPixelPadding,\n\t\t\tpostTranslate = (axis.options.ordinal || (axis.isLog && handleLog)) && axis.lin2val;\n\n\t\tif (!localA) {\n\t\t\tlocalA = axis.transA;\n\t\t}\n\n\t\t// In vertical axes, the canvas coordinates start from 0 at the top like in \n\t\t// SVG. \n\t\tif (cvsCoord) {\n\t\t\tsign *= -1; // canvas coordinates inverts the value\n\t\t\tcvsOffset = axisLength;\n\t\t}\n\n\t\t// Handle reversed axis\n\t\tif (axis.reversed) { \n\t\t\tsign *= -1;\n\t\t\tcvsOffset -= sign * axisLength;\n\t\t}\n\n\t\t// From pixels to value\n\t\tif (backwards) { // reverse translation\n\t\t\t\n\t\t\tval = val * sign + cvsOffset;\n\t\t\tval -= minPixelPadding;\n\t\t\treturnValue = val / localA + localMin; // from chart pixel to value\n\t\t\tif (postTranslate) { // log and ordinal axes\n\t\t\t\treturnValue = axis.lin2val(returnValue);\n\t\t\t}\n\n\t\t// From value to pixels\n\t\t} else {\n\t\t\tif (postTranslate) { // log and ordinal axes\n\t\t\t\tval = axis.val2lin(val);\n\t\t\t}\n\t\t\tif (pointPlacement === 'between') {\n\t\t\t\tpointPlacement = 0.5;\n\t\t\t}\n\t\t\treturnValue = sign * (val - localMin) * localA + cvsOffset + (sign * minPixelPadding) +\n\t\t\t\t(isNumber(pointPlacement) ? localA * pointPlacement * axis.pointRange : 0);\n\t\t}\n\n\t\treturn returnValue;\n\t},\n\n\t/**\n\t * Utility method to translate an axis value to pixel position. \n\t * @param {Number} value A value in terms of axis units\n\t * @param {Boolean} paneCoordinates Whether to return the pixel coordinate relative to the chart\n\t *        or just the axis/pane itself.\n\t */\n\ttoPixels: function (value, paneCoordinates) {\n\t\treturn this.translate(value, false, !this.horiz, null, true) + (paneCoordinates ? 0 : this.pos);\n\t},\n\n\t/*\n\t * Utility method to translate a pixel position in to an axis value\n\t * @param {Number} pixel The pixel value coordinate\n\t * @param {Boolean} paneCoordiantes Whether the input pixel is relative to the chart or just the\n\t *        axis/pane itself.\n\t */\n\ttoValue: function (pixel, paneCoordinates) {\n\t\treturn this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, null, true);\n\t},\n\n\t/**\n\t * Create the path for a plot line that goes from the given value on\n\t * this axis, across the plot to the opposite side\n\t * @param {Number} value\n\t * @param {Number} lineWidth Used for calculation crisp line\n\t * @param {Number] old Use old coordinates (for resizing and rescaling)\n\t */\n\tgetPlotLinePath: function (value, lineWidth, old, force) {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\taxisLeft = axis.left,\n\t\t\taxisTop = axis.top,\n\t\t\tx1,\n\t\t\ty1,\n\t\t\tx2,\n\t\t\ty2,\n\t\t\ttranslatedValue = axis.translate(value, null, null, old),\n\t\t\tcHeight = (old && chart.oldChartHeight) || chart.chartHeight,\n\t\t\tcWidth = (old && chart.oldChartWidth) || chart.chartWidth,\n\t\t\tskip,\n\t\t\ttransB = axis.transB;\n\n\t\tx1 = x2 = mathRound(translatedValue + transB);\n\t\ty1 = y2 = mathRound(cHeight - translatedValue - transB);\n\n\t\tif (isNaN(translatedValue)) { // no min or max\n\t\t\tskip = true;\n\n\t\t} else if (axis.horiz) {\n\t\t\ty1 = axisTop;\n\t\t\ty2 = cHeight - axis.bottom;\n\t\t\tif (x1 < axisLeft || x1 > axisLeft + axis.width) {\n\t\t\t\tskip = true;\n\t\t\t}\n\t\t} else {\n\t\t\tx1 = axisLeft;\n\t\t\tx2 = cWidth - axis.right;\n\n\t\t\tif (y1 < axisTop || y1 > axisTop + axis.height) {\n\t\t\t\tskip = true;\n\t\t\t}\n\t\t}\n\t\treturn skip && !force ?\n\t\t\tnull :\n\t\t\tchart.renderer.crispLine([M, x1, y1, L, x2, y2], lineWidth || 0);\n\t},\n\t\n\t/**\n\t * Create the path for a plot band\n\t */\n\tgetPlotBandPath: function (from, to) {\n\n\t\tvar toPath = this.getPlotLinePath(to),\n\t\t\tpath = this.getPlotLinePath(from);\n\t\t\t\n\t\tif (path && toPath) {\n\t\t\tpath.push(\n\t\t\t\ttoPath[4],\n\t\t\t\ttoPath[5],\n\t\t\t\ttoPath[1],\n\t\t\t\ttoPath[2]\n\t\t\t);\n\t\t} else { // outside the axis area\n\t\t\tpath = null;\n\t\t}\n\t\t\n\t\treturn path;\n\t},\n\t\n\t/**\n\t * Set the tick positions of a linear axis to round values like whole tens or every five.\n\t */\n\tgetLinearTickPositions: function (tickInterval, min, max) {\n\t\tvar pos,\n\t\t\tlastPos,\n\t\t\troundedMin = correctFloat(mathFloor(min / tickInterval) * tickInterval),\n\t\t\troundedMax = correctFloat(mathCeil(max / tickInterval) * tickInterval),\n\t\t\ttickPositions = [];\n\n\t\t// Populate the intermediate values\n\t\tpos = roundedMin;\n\t\twhile (pos <= roundedMax) {\n\n\t\t\t// Place the tick on the rounded value\n\t\t\ttickPositions.push(pos);\n\n\t\t\t// Always add the raw tickInterval, not the corrected one.\n\t\t\tpos = correctFloat(pos + tickInterval);\n\n\t\t\t// If the interval is not big enough in the current min - max range to actually increase\n\t\t\t// the loop variable, we need to break out to prevent endless loop. Issue #619\n\t\t\tif (pos === lastPos) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Record the last value\n\t\t\tlastPos = pos;\n\t\t}\n\t\treturn tickPositions;\n\t},\n\t\n\t/**\n\t * Set the tick positions of a logarithmic axis\n\t */\n\tgetLogTickPositions: function (interval, min, max, minor) {\n\t\tvar axis = this,\n\t\t\toptions = axis.options,\n\t\t\taxisLength = axis.len,\n\t\t\t// Since we use this method for both major and minor ticks,\n\t\t\t// use a local variable and return the result\n\t\t\tpositions = []; \n\t\t\n\t\t// Reset\n\t\tif (!minor) {\n\t\t\taxis._minorAutoInterval = null;\n\t\t}\n\t\t\n\t\t// First case: All ticks fall on whole logarithms: 1, 10, 100 etc.\n\t\tif (interval >= 0.5) {\n\t\t\tinterval = mathRound(interval);\n\t\t\tpositions = axis.getLinearTickPositions(interval, min, max);\n\t\t\t\n\t\t// Second case: We need intermediary ticks. For example \n\t\t// 1, 2, 4, 6, 8, 10, 20, 40 etc. \n\t\t} else if (interval >= 0.08) {\n\t\t\tvar roundedMin = mathFloor(min),\n\t\t\t\tintermediate,\n\t\t\t\ti,\n\t\t\t\tj,\n\t\t\t\tlen,\n\t\t\t\tpos,\n\t\t\t\tlastPos,\n\t\t\t\tbreak2;\n\t\t\t\t\n\t\t\tif (interval > 0.3) {\n\t\t\t\tintermediate = [1, 2, 4];\n\t\t\t} else if (interval > 0.15) { // 0.2 equals five minor ticks per 1, 10, 100 etc\n\t\t\t\tintermediate = [1, 2, 4, 6, 8];\n\t\t\t} else { // 0.1 equals ten minor ticks per 1, 10, 100 etc\n\t\t\t\tintermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n\t\t\t}\n\t\t\t\n\t\t\tfor (i = roundedMin; i < max + 1 && !break2; i++) {\n\t\t\t\tlen = intermediate.length;\n\t\t\t\tfor (j = 0; j < len && !break2; j++) {\n\t\t\t\t\tpos = log2lin(lin2log(i) * intermediate[j]);\n\t\t\t\t\t\n\t\t\t\t\tif (pos > min && (!minor || lastPos <= max)) { // #1670\n\t\t\t\t\t\tpositions.push(lastPos);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (lastPos > max) {\n\t\t\t\t\t\tbreak2 = true;\n\t\t\t\t\t}\n\t\t\t\t\tlastPos = pos;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t// Third case: We are so deep in between whole logarithmic values that\n\t\t// we might as well handle the tick positions like a linear axis. For\n\t\t// example 1.01, 1.02, 1.03, 1.04.\n\t\t} else {\n\t\t\tvar realMin = lin2log(min),\n\t\t\t\trealMax = lin2log(max),\n\t\t\t\ttickIntervalOption = options[minor ? 'minorTickInterval' : 'tickInterval'],\n\t\t\t\tfilteredTickIntervalOption = tickIntervalOption === 'auto' ? null : tickIntervalOption,\n\t\t\t\ttickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1),\n\t\t\t\ttotalPixelLength = minor ? axisLength / axis.tickPositions.length : axisLength;\n\t\t\t\n\t\t\tinterval = pick(\n\t\t\t\tfilteredTickIntervalOption,\n\t\t\t\taxis._minorAutoInterval,\n\t\t\t\t(realMax - realMin) * tickPixelIntervalOption / (totalPixelLength || 1)\n\t\t\t);\n\t\t\t\n\t\t\tinterval = normalizeTickInterval(\n\t\t\t\tinterval, \n\t\t\t\tnull, \n\t\t\t\tgetMagnitude(interval)\n\t\t\t);\n\t\t\t\n\t\t\tpositions = map(axis.getLinearTickPositions(\n\t\t\t\tinterval, \n\t\t\t\trealMin,\n\t\t\t\trealMax\t\n\t\t\t), log2lin);\n\t\t\t\n\t\t\tif (!minor) {\n\t\t\t\taxis._minorAutoInterval = interval / 5;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Set the axis-level tickInterval variable \n\t\tif (!minor) {\n\t\t\taxis.tickInterval = interval;\n\t\t}\n\t\treturn positions;\n\t},\n\n\t/**\n\t * Return the minor tick positions. For logarithmic axes, reuse the same logic\n\t * as for major ticks.\n\t */\n\tgetMinorTickPositions: function () {\n\t\tvar axis = this,\n\t\t\toptions = axis.options,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\tminorTickInterval = axis.minorTickInterval,\n\t\t\tminorTickPositions = [],\n\t\t\tpos,\n\t\t\ti,\n\t\t\tlen;\n\t\t\n\t\tif (axis.isLog) {\n\t\t\tlen = tickPositions.length;\n\t\t\tfor (i = 1; i < len; i++) {\n\t\t\t\tminorTickPositions = minorTickPositions.concat(\n\t\t\t\t\taxis.getLogTickPositions(minorTickInterval, tickPositions[i - 1], tickPositions[i], true)\n\t\t\t\t);\t\n\t\t\t}\n\t\t} else if (axis.isDatetimeAxis && options.minorTickInterval === 'auto') { // #1314\n\t\t\tminorTickPositions = minorTickPositions.concat(\n\t\t\t\tgetTimeTicks(\n\t\t\t\t\tnormalizeTimeTickInterval(minorTickInterval),\n\t\t\t\t\taxis.min,\n\t\t\t\t\taxis.max,\n\t\t\t\t\toptions.startOfWeek\n\t\t\t\t)\n\t\t\t);\n\t\t\tif (minorTickPositions[0] < axis.min) {\n\t\t\t\tminorTickPositions.shift();\n\t\t\t}\n\t\t} else {\t\t\t\n\t\t\tfor (pos = axis.min + (tickPositions[0] - axis.min) % minorTickInterval; pos <= axis.max; pos += minorTickInterval) {\n\t\t\t\tminorTickPositions.push(pos);\n\t\t\t}\n\t\t}\n\t\treturn minorTickPositions;\n\t},\n\n\t/**\n\t * Adjust the min and max for the minimum range. Keep in mind that the series data is \n\t * not yet processed, so we don't have information on data cropping and grouping, or \n\t * updated axis.pointRange or series.pointRange. The data can't be processed until\n\t * we have finally established min and max.\n\t */\n\tadjustForMinRange: function () {\n\t\tvar axis = this,\n\t\t\toptions = axis.options,\n\t\t\tmin = axis.min,\n\t\t\tmax = axis.max,\n\t\t\tzoomOffset,\n\t\t\tspaceAvailable = axis.dataMax - axis.dataMin >= axis.minRange,\n\t\t\tclosestDataRange,\n\t\t\ti,\n\t\t\tdistance,\n\t\t\txData,\n\t\t\tloopLength,\n\t\t\tminArgs,\n\t\t\tmaxArgs;\n\n\t\t// Set the automatic minimum range based on the closest point distance\n\t\tif (axis.isXAxis && axis.minRange === UNDEFINED && !axis.isLog) {\n\n\t\t\tif (defined(options.min) || defined(options.max)) {\n\t\t\t\taxis.minRange = null; // don't do this again\n\n\t\t\t} else {\n\n\t\t\t\t// Find the closest distance between raw data points, as opposed to\n\t\t\t\t// closestPointRange that applies to processed points (cropped and grouped)\n\t\t\t\teach(axis.series, function (series) {\n\t\t\t\t\txData = series.xData;\n\t\t\t\t\tloopLength = series.xIncrement ? 1 : xData.length - 1;\n\t\t\t\t\tfor (i = loopLength; i > 0; i--) {\n\t\t\t\t\t\tdistance = xData[i] - xData[i - 1];\n\t\t\t\t\t\tif (closestDataRange === UNDEFINED || distance < closestDataRange) {\n\t\t\t\t\t\t\tclosestDataRange = distance;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\taxis.minRange = mathMin(closestDataRange * 5, axis.dataMax - axis.dataMin);\n\t\t\t}\n\t\t}\n\n\t\t// if minRange is exceeded, adjust\n\t\tif (max - min < axis.minRange) {\n\t\t\tvar minRange = axis.minRange;\n\t\t\tzoomOffset = (minRange - max + min) / 2;\n\n\t\t\t// if min and max options have been set, don't go beyond it\n\t\t\tminArgs = [min - zoomOffset, pick(options.min, min - zoomOffset)];\n\t\t\tif (spaceAvailable) { // if space is available, stay within the data range\n\t\t\t\tminArgs[2] = axis.dataMin;\n\t\t\t}\n\t\t\tmin = arrayMax(minArgs);\n\n\t\t\tmaxArgs = [min + minRange, pick(options.max, min + minRange)];\n\t\t\tif (spaceAvailable) { // if space is availabe, stay within the data range\n\t\t\t\tmaxArgs[2] = axis.dataMax;\n\t\t\t}\n\n\t\t\tmax = arrayMin(maxArgs);\n\n\t\t\t// now if the max is adjusted, adjust the min back\n\t\t\tif (max - min < minRange) {\n\t\t\t\tminArgs[0] = max - minRange;\n\t\t\t\tminArgs[1] = pick(options.min, max - minRange);\n\t\t\t\tmin = arrayMax(minArgs);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Record modified extremes\n\t\taxis.min = min;\n\t\taxis.max = max;\n\t},\n\n\t/**\n\t * Update translation information\n\t */\n\tsetAxisTranslation: function (saveOld) {\n\t\tvar axis = this,\n\t\t\trange = axis.max - axis.min,\n\t\t\tpointRange = 0,\n\t\t\tclosestPointRange,\n\t\t\tminPointOffset = 0,\n\t\t\tpointRangePadding = 0,\n\t\t\tlinkedParent = axis.linkedParent,\n\t\t\tordinalCorrection,\n\t\t\ttransA = axis.transA;\n\n\t\t// adjust translation for padding\n\t\tif (axis.isXAxis) {\n\t\t\tif (linkedParent) {\n\t\t\t\tminPointOffset = linkedParent.minPointOffset;\n\t\t\t\tpointRangePadding = linkedParent.pointRangePadding;\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\teach(axis.series, function (series) {\n\t\t\t\t\tvar seriesPointRange = series.pointRange,\n\t\t\t\t\t\tpointPlacement = series.options.pointPlacement,\n\t\t\t\t\t\tseriesClosestPointRange = series.closestPointRange;\n\n\t\t\t\t\tif (seriesPointRange > range) { // #1446\n\t\t\t\t\t\tseriesPointRange = 0;\n\t\t\t\t\t}\n\t\t\t\t\tpointRange = mathMax(pointRange, seriesPointRange);\n\t\t\t\t\t\n\t\t\t\t\t// minPointOffset is the value padding to the left of the axis in order to make\n\t\t\t\t\t// room for points with a pointRange, typically columns. When the pointPlacement option\n\t\t\t\t\t// is 'between' or 'on', this padding does not apply.\n\t\t\t\t\tminPointOffset = mathMax(\n\t\t\t\t\t\tminPointOffset, \n\t\t\t\t\t\tisString(pointPlacement) ? 0 : seriesPointRange / 2\n\t\t\t\t\t);\n\t\t\t\t\t\n\t\t\t\t\t// Determine the total padding needed to the length of the axis to make room for the \n\t\t\t\t\t// pointRange. If the series' pointPlacement is 'on', no padding is added.\n\t\t\t\t\tpointRangePadding = mathMax(\n\t\t\t\t\t\tpointRangePadding,\n\t\t\t\t\t\tpointPlacement === 'on' ? 0 : seriesPointRange\n\t\t\t\t\t);\n\n\t\t\t\t\t// Set the closestPointRange\n\t\t\t\t\tif (!series.noSharedTooltip && defined(seriesClosestPointRange)) {\n\t\t\t\t\t\tclosestPointRange = defined(closestPointRange) ?\n\t\t\t\t\t\t\tmathMin(closestPointRange, seriesClosestPointRange) :\n\t\t\t\t\t\t\tseriesClosestPointRange;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t// Record minPointOffset and pointRangePadding\n\t\t\tordinalCorrection = axis.ordinalSlope && closestPointRange ? axis.ordinalSlope / closestPointRange : 1; // #988, #1853\n\t\t\taxis.minPointOffset = minPointOffset = minPointOffset * ordinalCorrection;\n\t\t\taxis.pointRangePadding = pointRangePadding = pointRangePadding * ordinalCorrection;\n\n\t\t\t// pointRange means the width reserved for each point, like in a column chart\n\t\t\taxis.pointRange = mathMin(pointRange, range);\n\n\t\t\t// closestPointRange means the closest distance between points. In columns\n\t\t\t// it is mostly equal to pointRange, but in lines pointRange is 0 while closestPointRange\n\t\t\t// is some other value\n\t\t\taxis.closestPointRange = closestPointRange;\n\t\t}\n\n\t\t// Secondary values\n\t\tif (saveOld) {\n\t\t\taxis.oldTransA = transA;\n\t\t}\n\t\taxis.translationSlope = axis.transA = transA = axis.len / ((range + pointRangePadding) || 1);\n\t\taxis.transB = axis.horiz ? axis.left : axis.bottom; // translation addend\n\t\taxis.minPixelPadding = transA * minPointOffset;\n\t},\n\n\t/**\n\t * Set the tick positions to round values and optionally extend the extremes\n\t * to the nearest tick\n\t */\n\tsetTickPositions: function (secondPass) {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\toptions = axis.options,\n\t\t\tisLog = axis.isLog,\n\t\t\tisDatetimeAxis = axis.isDatetimeAxis,\n\t\t\tisXAxis = axis.isXAxis,\n\t\t\tisLinked = axis.isLinked,\n\t\t\ttickPositioner = axis.options.tickPositioner,\n\t\t\tmaxPadding = options.maxPadding,\n\t\t\tminPadding = options.minPadding,\n\t\t\tlength,\n\t\t\tlinkedParentExtremes,\n\t\t\ttickIntervalOption = options.tickInterval,\n\t\t\tminTickIntervalOption = options.minTickInterval,\n\t\t\ttickPixelIntervalOption = options.tickPixelInterval,\n\t\t\ttickPositions,\n\t\t\tkeepTwoTicksOnly,\n\t\t\tcategories = axis.categories;\n\n\t\t// linked axis gets the extremes from the parent axis\n\t\tif (isLinked) {\n\t\t\taxis.linkedParent = chart[isXAxis ? 'xAxis' : 'yAxis'][options.linkedTo];\n\t\t\tlinkedParentExtremes = axis.linkedParent.getExtremes();\n\t\t\taxis.min = pick(linkedParentExtremes.min, linkedParentExtremes.dataMin);\n\t\t\taxis.max = pick(linkedParentExtremes.max, linkedParentExtremes.dataMax);\n\t\t\tif (options.type !== axis.linkedParent.options.type) {\n\t\t\t\terror(11, 1); // Can't link axes of different type\n\t\t\t}\n\t\t} else { // initial min and max from the extreme data values\n\t\t\taxis.min = pick(axis.userMin, options.min, axis.dataMin);\n\t\t\taxis.max = pick(axis.userMax, options.max, axis.dataMax);\n\t\t}\n\n\t\tif (isLog) {\n\t\t\tif (!secondPass && mathMin(axis.min, pick(axis.dataMin, axis.min)) <= 0) { // #978\n\t\t\t\terror(10, 1); // Can't plot negative values on log axis\n\t\t\t}\n\t\t\taxis.min = correctFloat(log2lin(axis.min)); // correctFloat cures #934\n\t\t\taxis.max = correctFloat(log2lin(axis.max));\n\t\t}\n\n\t\t// handle zoomed range\n\t\tif (axis.range) {\n\t\t\taxis.userMin = axis.min = mathMax(axis.min, axis.max - axis.range); // #618\n\t\t\taxis.userMax = axis.max;\n\t\t\tif (secondPass) {\n\t\t\t\taxis.range = null;  // don't use it when running setExtremes\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Hook for adjusting this.min and this.max. Used by bubble series.\n\t\tif (axis.beforePadding) {\n\t\t\taxis.beforePadding();\n\t\t}\n\n\t\t// adjust min and max for the minimum range\n\t\taxis.adjustForMinRange();\n\t\t\n\t\t// Pad the values to get clear of the chart's edges. To avoid tickInterval taking the padding\n\t\t// into account, we do this after computing tick interval (#1337).\n\t\tif (!categories && !axis.usePercentage && !isLinked && defined(axis.min) && defined(axis.max)) {\n\t\t\tlength = axis.max - axis.min;\n\t\t\tif (length) {\n\t\t\t\tif (!defined(options.min) && !defined(axis.userMin) && minPadding && (axis.dataMin < 0 || !axis.ignoreMinPadding)) {\n\t\t\t\t\taxis.min -= length * minPadding;\n\t\t\t\t}\n\t\t\t\tif (!defined(options.max) && !defined(axis.userMax)  && maxPadding && (axis.dataMax > 0 || !axis.ignoreMaxPadding)) {\n\t\t\t\t\taxis.max += length * maxPadding;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// get tickInterval\n\t\tif (axis.min === axis.max || axis.min === undefined || axis.max === undefined) {\n\t\t\taxis.tickInterval = 1;\n\t\t} else if (isLinked && !tickIntervalOption &&\n\t\t\t\ttickPixelIntervalOption === axis.linkedParent.options.tickPixelInterval) {\n\t\t\taxis.tickInterval = axis.linkedParent.tickInterval;\n\t\t} else {\n\t\t\taxis.tickInterval = pick(\n\t\t\t\ttickIntervalOption,\n\t\t\t\tcategories ? // for categoried axis, 1 is default, for linear axis use tickPix\n\t\t\t\t\t1 :\n\t\t\t\t\t// don't let it be more than the data range\n\t\t\t\t\t(axis.max - axis.min) * tickPixelIntervalOption / mathMax(axis.len, tickPixelIntervalOption)\n\t\t\t);\n\t\t\t// For squished axes, set only two ticks\n\t\t\tif (!defined(tickIntervalOption) && axis.len < tickPixelIntervalOption && !this.isRadial) {\n\t\t\t\tkeepTwoTicksOnly = true;\n\t\t\t\taxis.tickInterval /= 4; // tick extremes closer to the real values\n\t\t\t}\n\t\t}\n\n\t\t// Now we're finished detecting min and max, crop and group series data. This\n\t\t// is in turn needed in order to find tick positions in ordinal axes. \n\t\tif (isXAxis && !secondPass) {\n\t\t\teach(axis.series, function (series) {\n\t\t\t\tseries.processData(axis.min !== axis.oldMin || axis.max !== axis.oldMax);\n\t\t\t});\n\t\t}\n\n\t\t// set the translation factor used in translate function\n\t\taxis.setAxisTranslation(true);\n\n\t\t// hook for ordinal axes and radial axes\n\t\tif (axis.beforeSetTickPositions) {\n\t\t\taxis.beforeSetTickPositions();\n\t\t}\n\t\t\n\t\t// hook for extensions, used in Highstock ordinal axes\n\t\tif (axis.postProcessTickInterval) {\n\t\t\taxis.tickInterval = axis.postProcessTickInterval(axis.tickInterval);\n\t\t}\n\n\t\t// In column-like charts, don't cramp in more ticks than there are points (#1943)\n\t\tif (axis.pointRange) {\n\t\t\taxis.tickInterval = mathMax(axis.pointRange, axis.tickInterval);\n\t\t}\n\t\t\n\t\t// Before normalizing the tick interval, handle minimum tick interval. This applies only if tickInterval is not defined.\n\t\tif (!tickIntervalOption && axis.tickInterval < minTickIntervalOption) {\n\t\t\taxis.tickInterval = minTickIntervalOption;\n\t\t}\n\n\t\t// for linear axes, get magnitude and normalize the interval\n\t\tif (!isDatetimeAxis && !isLog) { // linear\n\t\t\tif (!tickIntervalOption) {\n\t\t\t\taxis.tickInterval = normalizeTickInterval(axis.tickInterval, null, getMagnitude(axis.tickInterval), options);\n\t\t\t}\n\t\t}\n\n\t\t// get minorTickInterval\n\t\taxis.minorTickInterval = options.minorTickInterval === 'auto' && axis.tickInterval ?\n\t\t\t\taxis.tickInterval / 5 : options.minorTickInterval;\n\n\t\t// find the tick positions\n\t\taxis.tickPositions = tickPositions = options.tickPositions ?\n\t\t\t[].concat(options.tickPositions) : // Work on a copy (#1565)\n\t\t\t(tickPositioner && tickPositioner.apply(axis, [axis.min, axis.max]));\n\t\tif (!tickPositions) {\n\t\t\t\n\t\t\t// Too many ticks\n\t\t\tif (!axis.ordinalPositions && (axis.max - axis.min) / axis.tickInterval > mathMax(2 * axis.len, 200)) {\n\t\t\t\terror(19, true);\n\t\t\t}\n\t\t\t\n\t\t\tif (isDatetimeAxis) {\n\t\t\t\ttickPositions = (axis.getNonLinearTimeTicks || getTimeTicks)(\n\t\t\t\t\tnormalizeTimeTickInterval(axis.tickInterval, options.units),\n\t\t\t\t\taxis.min,\n\t\t\t\t\taxis.max,\n\t\t\t\t\toptions.startOfWeek,\n\t\t\t\t\taxis.ordinalPositions,\n\t\t\t\t\taxis.closestPointRange,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t} else if (isLog) {\n\t\t\t\ttickPositions = axis.getLogTickPositions(axis.tickInterval, axis.min, axis.max);\n\t\t\t} else {\n\t\t\t\ttickPositions = axis.getLinearTickPositions(axis.tickInterval, axis.min, axis.max);\n\t\t\t}\n\t\t\tif (keepTwoTicksOnly) {\n\t\t\t\ttickPositions.splice(1, tickPositions.length - 2);\n\t\t\t}\n\n\t\t\taxis.tickPositions = tickPositions;\n\t\t}\n\n\t\tif (!isLinked) {\n\n\t\t\t// reset min/max or remove extremes based on start/end on tick\n\t\t\tvar roundedMin = tickPositions[0],\n\t\t\t\troundedMax = tickPositions[tickPositions.length - 1],\n\t\t\t\tminPointOffset = axis.minPointOffset || 0,\n\t\t\t\tsinglePad;\n\n\t\t\tif (options.startOnTick) {\n\t\t\t\taxis.min = roundedMin;\n\t\t\t} else if (axis.min - minPointOffset > roundedMin) {\n\t\t\t\ttickPositions.shift();\n\t\t\t}\n\n\t\t\tif (options.endOnTick) {\n\t\t\t\taxis.max = roundedMax;\n\t\t\t} else if (axis.max + minPointOffset < roundedMax) {\n\t\t\t\ttickPositions.pop();\n\t\t\t}\n\t\t\t\n\t\t\t// When there is only one point, or all points have the same value on this axis, then min\n\t\t\t// and max are equal and tickPositions.length is 1. In this case, add some padding\n\t\t\t// in order to center the point, but leave it with one tick. #1337.\n\t\t\tif (tickPositions.length === 1) {\n\t\t\t\tsinglePad = 0.001; // The lowest possible number to avoid extra padding on columns\n\t\t\t\taxis.min -= singlePad;\n\t\t\t\taxis.max += singlePad;\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Set the max ticks of either the x and y axis collection\n\t */\n\tsetMaxTicks: function () {\n\t\t\n\t\tvar chart = this.chart,\n\t\t\tmaxTicks = chart.maxTicks || {},\n\t\t\ttickPositions = this.tickPositions,\n\t\t\tkey = this._maxTicksKey = [this.xOrY, this.pos, this.len].join('-');\n\t\t\n\t\tif (!this.isLinked && !this.isDatetimeAxis && tickPositions && tickPositions.length > (maxTicks[key] || 0) && this.options.alignTicks !== false) {\n\t\t\tmaxTicks[key] = tickPositions.length;\n\t\t}\n\t\tchart.maxTicks = maxTicks;\n\t},\n\n\t/**\n\t * When using multiple axes, adjust the number of ticks to match the highest\n\t * number of ticks in that group\n\t */\n\tadjustTickAmount: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\tkey = axis._maxTicksKey,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\tmaxTicks = chart.maxTicks;\n\n\t\tif (maxTicks && maxTicks[key] && !axis.isDatetimeAxis && !axis.categories && !axis.isLinked && axis.options.alignTicks !== false) { // only apply to linear scale\n\t\t\tvar oldTickAmount = axis.tickAmount,\n\t\t\t\tcalculatedTickAmount = tickPositions.length,\n\t\t\t\ttickAmount;\n\n\t\t\t// set the axis-level tickAmount to use below\n\t\t\taxis.tickAmount = tickAmount = maxTicks[key];\n\n\t\t\tif (calculatedTickAmount < tickAmount) {\n\t\t\t\twhile (tickPositions.length < tickAmount) {\n\t\t\t\t\ttickPositions.push(correctFloat(\n\t\t\t\t\t\ttickPositions[tickPositions.length - 1] + axis.tickInterval\n\t\t\t\t\t));\n\t\t\t\t}\n\t\t\t\taxis.transA *= (calculatedTickAmount - 1) / (tickAmount - 1);\n\t\t\t\taxis.max = tickPositions[tickPositions.length - 1];\n\n\t\t\t}\n\t\t\tif (defined(oldTickAmount) && tickAmount !== oldTickAmount) {\n\t\t\t\taxis.isDirty = true;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Set the scale based on data min and max, user set min and max or options\n\t *\n\t */\n\tsetScale: function () {\n\t\tvar axis = this,\n\t\t\tstacks = axis.stacks,\n\t\t\ttype,\n\t\t\ti,\n\t\t\tisDirtyData,\n\t\t\tisDirtyAxisLength;\n\n\t\taxis.oldMin = axis.min;\n\t\taxis.oldMax = axis.max;\n\t\taxis.oldAxisLength = axis.len;\n\n\t\t// set the new axisLength\n\t\taxis.setAxisSize();\n\t\t//axisLength = horiz ? axisWidth : axisHeight;\n\t\tisDirtyAxisLength = axis.len !== axis.oldAxisLength;\n\n\t\t// is there new data?\n\t\teach(axis.series, function (series) {\n\t\t\tif (series.isDirtyData || series.isDirty ||\n\t\t\t\t\tseries.xAxis.isDirty) { // when x axis is dirty, we need new data extremes for y as well\n\t\t\t\tisDirtyData = true;\n\t\t\t}\n\t\t});\n\n\t\t// do we really need to go through all this?\n\t\tif (isDirtyAxisLength || isDirtyData || axis.isLinked || axis.forceRedraw ||\n\t\t\taxis.userMin !== axis.oldUserMin || axis.userMax !== axis.oldUserMax) {\n\t\t\t\n\t\t\t// reset stacks\n\t\t\tif (!axis.isXAxis) {\n\t\t\t\tfor (type in stacks) {\n\t\t\t\t\tdelete stacks[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\taxis.forceRedraw = false;\n\n\t\t\t// get data extremes if needed\n\t\t\taxis.getSeriesExtremes();\n\n\t\t\t// get fixed positions based on tickInterval\n\t\t\taxis.setTickPositions();\n\n\t\t\t// record old values to decide whether a rescale is necessary later on (#540)\n\t\t\taxis.oldUserMin = axis.userMin;\n\t\t\taxis.oldUserMax = axis.userMax;\n\n\t\t\t// Mark as dirty if it is not already set to dirty and extremes have changed. #595.\n\t\t\tif (!axis.isDirty) {\n\t\t\t\taxis.isDirty = isDirtyAxisLength || axis.min !== axis.oldMin || axis.max !== axis.oldMax;\n\t\t\t}\n\t\t} else if (!axis.isXAxis) {\n\t\t\tif (axis.oldStacks) {\n\t\t\t\tstacks = axis.stacks = axis.oldStacks;\n\t\t\t}\n\n\t\t\t// reset stacks\n\t\t\tfor (type in stacks) {\n\t\t\t\tfor (i in stacks[type]) {\n\t\t\t\t\tstacks[type][i].cum = stacks[type][i].total;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Set the maximum tick amount\n\t\taxis.setMaxTicks();\n\t},\n\n\t/**\n\t * Set the extremes and optionally redraw\n\t * @param {Number} newMin\n\t * @param {Number} newMax\n\t * @param {Boolean} redraw\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t * @param {Object} eventArguments \n\t *\n\t */\n\tsetExtremes: function (newMin, newMax, redraw, animation, eventArguments) {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart;\n\n\t\tredraw = pick(redraw, true); // defaults to true\n\n\t\t// Extend the arguments with min and max\n\t\teventArguments = extend(eventArguments, {\n\t\t\tmin: newMin,\n\t\t\tmax: newMax\n\t\t});\n\n\t\t// Fire the event\n\t\tfireEvent(axis, 'setExtremes', eventArguments, function () { // the default event handler\n\n\t\t\taxis.userMin = newMin;\n\t\t\taxis.userMax = newMax;\n\t\t\taxis.eventArgs = eventArguments;\n\n\t\t\t// Mark for running afterSetExtremes\n\t\t\taxis.isDirtyExtremes = true;\n\n\t\t\t// redraw\n\t\t\tif (redraw) {\n\t\t\t\tchart.redraw(animation);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Overridable method for zooming chart. Pulled out in a separate method to allow overriding\n\t * in stock charts.\n\t */\n\tzoom: function (newMin, newMax) {\n\n\t\t// Prevent pinch zooming out of range. Check for defined is for #1946.\n\t\tif (!this.allowZoomOutside) {\n\t\t\tif (defined(this.dataMin) && newMin <= this.dataMin) {\n\t\t\t\tnewMin = UNDEFINED;\n\t\t\t}\n\t\t\tif (defined(this.dataMax) && newMax >= this.dataMax) {\n\t\t\t\tnewMax = UNDEFINED;\n\t\t\t}\n\t\t}\n\n\t\t// In full view, displaying the reset zoom button is not required\n\t\tthis.displayBtn = newMin !== UNDEFINED || newMax !== UNDEFINED;\n\t\t\n\t\t// Do it\n\t\tthis.setExtremes(\n\t\t\tnewMin,\n\t\t\tnewMax,\n\t\t\tfalse, \n\t\t\tUNDEFINED, \n\t\t\t{ trigger: 'zoom' }\n\t\t);\n\t\treturn true;\n\t},\n\t\n\t/**\n\t * Update the axis metrics\n\t */\n\tsetAxisSize: function () {\n\t\tvar chart = this.chart,\n\t\t\toptions = this.options,\n\t\t\toffsetLeft = options.offsetLeft || 0,\n\t\t\toffsetRight = options.offsetRight || 0,\n\t\t\thoriz = this.horiz,\n\t\t\twidth,\n\t\t\theight,\n\t\t\ttop,\n\t\t\tleft;\n\n\t\t// Expose basic values to use in Series object and navigator\n\t\tthis.left = left = pick(options.left, chart.plotLeft + offsetLeft);\n\t\tthis.top = top = pick(options.top, chart.plotTop);\n\t\tthis.width = width = pick(options.width, chart.plotWidth - offsetLeft + offsetRight);\n\t\tthis.height = height = pick(options.height, chart.plotHeight);\n\t\tthis.bottom = chart.chartHeight - height - top;\n\t\tthis.right = chart.chartWidth - width - left;\n\n\t\t// Direction agnostic properties\n\t\tthis.len = mathMax(horiz ? width : height, 0); // mathMax fixes #905\n\t\tthis.pos = horiz ? left : top; // distance from SVG origin\n\t},\n\n\t/**\n\t * Get the actual axis extremes\n\t */\n\tgetExtremes: function () {\n\t\tvar axis = this,\n\t\t\tisLog = axis.isLog;\n\n\t\treturn {\n\t\t\tmin: isLog ? correctFloat(lin2log(axis.min)) : axis.min,\n\t\t\tmax: isLog ? correctFloat(lin2log(axis.max)) : axis.max,\n\t\t\tdataMin: axis.dataMin,\n\t\t\tdataMax: axis.dataMax,\n\t\t\tuserMin: axis.userMin,\n\t\t\tuserMax: axis.userMax\n\t\t};\n\t},\n\n\t/**\n\t * Get the zero plane either based on zero or on the min or max value.\n\t * Used in bar and area plots\n\t */\n\tgetThreshold: function (threshold) {\n\t\tvar axis = this,\n\t\t\tisLog = axis.isLog;\n\n\t\tvar realMin = isLog ? lin2log(axis.min) : axis.min,\n\t\t\trealMax = isLog ? lin2log(axis.max) : axis.max;\n\t\t\n\t\tif (realMin > threshold || threshold === null) {\n\t\t\tthreshold = realMin;\n\t\t} else if (realMax < threshold) {\n\t\t\tthreshold = realMax;\n\t\t}\n\n\t\treturn axis.translate(threshold, 0, 1, 0, 1);\n\t},\n\n\taddPlotBand: function (options) {\n\t\tthis.addPlotBandOrLine(options, 'plotBands');\n\t},\n\t\n\taddPlotLine: function (options) {\n\t\tthis.addPlotBandOrLine(options, 'plotLines');\n\t},\n\n\t/**\n\t * Add a plot band or plot line after render time\n\t *\n\t * @param options {Object} The plotBand or plotLine configuration object\n\t */\n\taddPlotBandOrLine: function (options, coll) {\n\t\tvar obj = new PlotLineOrBand(this, options).render(),\n\t\t\tuserOptions = this.userOptions;\n\n\t\tif (obj) { // #2189\n\t\t\t// Add it to the user options for exporting and Axis.update\n\t\t\tif (coll) {\n\t\t\t\tuserOptions[coll] = userOptions[coll] || [];\n\t\t\t\tuserOptions[coll].push(options); \n\t\t\t}\n\t\t\tthis.plotLinesAndBands.push(obj); \n\t\t}\n\t\t\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Compute auto alignment for the axis label based on which side the axis is on \n\t * and the given rotation for the label\n\t */\n\tautoLabelAlign: function (rotation) {\n\t\tvar ret, \n\t\t\tangle = (pick(rotation, 0) - (this.side * 90) + 720) % 360;\n\n\t\tif (angle > 15 && angle < 165) {\n\t\t\tret = 'right';\n\t\t} else if (angle > 195 && angle < 345) {\n\t\t\tret = 'left';\n\t\t} else {\n\t\t\tret = 'center';\n\t\t}\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Render the tick labels to a preliminary position to get their sizes\n\t */\n\tgetOffset: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = axis.options,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\tticks = axis.ticks,\n\t\t\thoriz = axis.horiz,\n\t\t\tside = axis.side,\n\t\t\tinvertedSide = chart.inverted ? [1, 0, 3, 2][side] : side,\n\t\t\thasData,\n\t\t\tshowAxis,\n\t\t\ttitleOffset = 0,\n\t\t\ttitleOffsetOption,\n\t\t\ttitleMargin = 0,\n\t\t\taxisTitleOptions = options.title,\n\t\t\tlabelOptions = options.labels,\n\t\t\tlabelOffset = 0, // reset\n\t\t\taxisOffset = chart.axisOffset,\n\t\t\tclipOffset = chart.clipOffset,\n\t\t\tdirectionFactor = [-1, 1, 1, -1][side],\n\t\t\tn,\n\t\t\ti,\n\t\t\tautoStaggerLines = 1,\n\t\t\tmaxStaggerLines = pick(labelOptions.maxStaggerLines, 5),\n\t\t\tsortedPositions,\n\t\t\tlastRight,\n\t\t\toverlap,\n\t\t\tpos,\n\t\t\tbBox,\n\t\t\tx,\n\t\t\tw,\n\t\t\tlineNo;\n\t\t\t\n\t\t// For reuse in Axis.render\n\t\taxis.hasData = hasData = (axis.hasVisibleSeries || (defined(axis.min) && defined(axis.max) && !!tickPositions));\n\t\taxis.showAxis = showAxis = hasData || pick(options.showEmpty, true);\n\n\t\t// Set/reset staggerLines\n\t\taxis.staggerLines = axis.horiz && labelOptions.staggerLines;\n\t\t\n\t\t// Create the axisGroup and gridGroup elements on first iteration\n\t\tif (!axis.axisGroup) {\n\t\t\taxis.gridGroup = renderer.g('grid')\n\t\t\t\t.attr({ zIndex: options.gridZIndex || 1 })\n\t\t\t\t.add();\n\t\t\taxis.axisGroup = renderer.g('axis')\n\t\t\t\t.attr({ zIndex: options.zIndex || 2 })\n\t\t\t\t.add();\n\t\t\taxis.labelGroup = renderer.g('axis-labels')\n\t\t\t\t.attr({ zIndex: labelOptions.zIndex || 7 })\n\t\t\t\t.add();\n\t\t}\n\n\t\tif (hasData || axis.isLinked) {\n\t\t\t\n\t\t\t// Set the explicit or automatic label alignment\n\t\t\taxis.labelAlign = pick(labelOptions.align || axis.autoLabelAlign(labelOptions.rotation));\n\n\t\t\teach(tickPositions, function (pos) {\n\t\t\t\tif (!ticks[pos]) {\n\t\t\t\t\tticks[pos] = new Tick(axis, pos);\n\t\t\t\t} else {\n\t\t\t\t\tticks[pos].addLabel(); // update labels depending on tick interval\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Handle automatic stagger lines\n\t\t\tif (axis.horiz && !axis.staggerLines && maxStaggerLines && !labelOptions.rotation) {\n\t\t\t\tsortedPositions = axis.reversed ? [].concat(tickPositions).reverse() : tickPositions;\n\t\t\t\twhile (autoStaggerLines < maxStaggerLines) {\n\t\t\t\t\tlastRight = [];\n\t\t\t\t\toverlap = false;\n\t\t\t\t\t\n\t\t\t\t\tfor (i = 0; i < sortedPositions.length; i++) {\n\t\t\t\t\t\tpos = sortedPositions[i];\n\t\t\t\t\t\tbBox = ticks[pos].label && ticks[pos].label.getBBox();\n\t\t\t\t\t\tw = bBox ? bBox.width : 0;\n\t\t\t\t\t\tlineNo = i % autoStaggerLines;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (w) {\n\t\t\t\t\t\t\tx = axis.translate(pos); // don't handle log\n\t\t\t\t\t\t\tif (lastRight[lineNo] !== UNDEFINED && x < lastRight[lineNo]) {\n\t\t\t\t\t\t\t\toverlap = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastRight[lineNo] = x + w;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (overlap) {\n\t\t\t\t\t\tautoStaggerLines++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (autoStaggerLines > 1) {\n\t\t\t\t\taxis.staggerLines = autoStaggerLines;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\teach(tickPositions, function (pos) {\n\t\t\t\t// left side must be align: right and right side must have align: left for labels\n\t\t\t\tif (side === 0 || side === 2 || { 1: 'left', 3: 'right' }[side] === axis.labelAlign) {\n\n\t\t\t\t\t// get the highest offset\n\t\t\t\t\tlabelOffset = mathMax(\n\t\t\t\t\t\tticks[pos].getLabelSize(),\n\t\t\t\t\t\tlabelOffset\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t});\n\t\t\tif (axis.staggerLines) {\n\t\t\t\tlabelOffset *= axis.staggerLines;\n\t\t\t\taxis.labelOffset = labelOffset;\n\t\t\t}\n\t\t\t\n\n\t\t} else { // doesn't have data\n\t\t\tfor (n in ticks) {\n\t\t\t\tticks[n].destroy();\n\t\t\t\tdelete ticks[n];\n\t\t\t}\n\t\t}\n\n\t\tif (axisTitleOptions && axisTitleOptions.text && axisTitleOptions.enabled !== false) { \n\t\t\tif (!axis.axisTitle) {\n\t\t\t\taxis.axisTitle = renderer.text(\n\t\t\t\t\taxisTitleOptions.text,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\taxisTitleOptions.useHTML\n\t\t\t\t)\n\t\t\t\t.attr({\n\t\t\t\t\tzIndex: 7,\n\t\t\t\t\trotation: axisTitleOptions.rotation || 0,\n\t\t\t\t\talign:\n\t\t\t\t\t\taxisTitleOptions.textAlign ||\n\t\t\t\t\t\t{ low: 'left', middle: 'center', high: 'right' }[axisTitleOptions.align]\n\t\t\t\t})\n\t\t\t\t.css(axisTitleOptions.style)\n\t\t\t\t.add(axis.axisGroup);\n\t\t\t\taxis.axisTitle.isNew = true;\n\t\t\t}\n\n\t\t\tif (showAxis) {\n\t\t\t\ttitleOffset = axis.axisTitle.getBBox()[horiz ? 'height' : 'width'];\n\t\t\t\ttitleMargin = pick(axisTitleOptions.margin, horiz ? 5 : 10);\n\t\t\t\ttitleOffsetOption = axisTitleOptions.offset;\n\t\t\t}\n\n\t\t\t// hide or show the title depending on whether showEmpty is set\n\t\t\taxis.axisTitle[showAxis ? 'show' : 'hide']();\n\t\t}\n\t\t\n\t\t// handle automatic or user set offset\n\t\taxis.offset = directionFactor * pick(options.offset, axisOffset[side]);\n\t\t\n\t\taxis.axisTitleMargin =\n\t\t\tpick(titleOffsetOption,\n\t\t\t\tlabelOffset + titleMargin +\n\t\t\t\t(side !== 2 && labelOffset && directionFactor * options.labels[horiz ? 'y' : 'x'])\n\t\t\t);\n\n\t\taxisOffset[side] = mathMax(\n\t\t\taxisOffset[side],\n\t\t\taxis.axisTitleMargin + titleOffset + directionFactor * axis.offset\n\t\t);\n\t\tclipOffset[invertedSide] = mathMax(clipOffset[invertedSide], mathFloor(options.lineWidth / 2) * 2);\n\t},\n\t\n\t/**\n\t * Get the path for the axis line\n\t */\n\tgetLinePath: function (lineWidth) {\n\t\tvar chart = this.chart,\n\t\t\topposite = this.opposite,\n\t\t\toffset = this.offset,\n\t\t\thoriz = this.horiz,\n\t\t\tlineLeft = this.left + (opposite ? this.width : 0) + offset,\n\t\t\tlineTop = chart.chartHeight - this.bottom - (opposite ? this.height : 0) + offset;\n\t\t\t\n\t\tif (opposite) {\n\t\t\tlineWidth *= -1; // crispify the other way - #1480, #1687\n\t\t}\n\n\t\treturn chart.renderer.crispLine([\n\t\t\t\tM,\n\t\t\t\thoriz ?\n\t\t\t\t\tthis.left :\n\t\t\t\t\tlineLeft,\n\t\t\t\thoriz ?\n\t\t\t\t\tlineTop :\n\t\t\t\t\tthis.top,\n\t\t\t\tL,\n\t\t\t\thoriz ?\n\t\t\t\t\tchart.chartWidth - this.right :\n\t\t\t\t\tlineLeft,\n\t\t\t\thoriz ?\n\t\t\t\t\tlineTop :\n\t\t\t\t\tchart.chartHeight - this.bottom\n\t\t\t], lineWidth);\n\t},\n\t\n\t/**\n\t * Position the title\n\t */\n\tgetTitlePosition: function () {\n\t\t// compute anchor points for each of the title align options\n\t\tvar horiz = this.horiz,\n\t\t\taxisLeft = this.left,\n\t\t\taxisTop = this.top,\n\t\t\taxisLength = this.len,\n\t\t\taxisTitleOptions = this.options.title,\t\t\t\n\t\t\tmargin = horiz ? axisLeft : axisTop,\n\t\t\topposite = this.opposite,\n\t\t\toffset = this.offset,\n\t\t\tfontSize = pInt(axisTitleOptions.style.fontSize || 12),\n\t\t\t\n\t\t\t// the position in the length direction of the axis\n\t\t\talongAxis = {\n\t\t\t\tlow: margin + (horiz ? 0 : axisLength),\n\t\t\t\tmiddle: margin + axisLength / 2,\n\t\t\t\thigh: margin + (horiz ? axisLength : 0)\n\t\t\t}[axisTitleOptions.align],\n\t\n\t\t\t// the position in the perpendicular direction of the axis\n\t\t\toffAxis = (horiz ? axisTop + this.height : axisLeft) +\n\t\t\t\t(horiz ? 1 : -1) * // horizontal axis reverses the margin\n\t\t\t\t(opposite ? -1 : 1) * // so does opposite axes\n\t\t\t\tthis.axisTitleMargin +\n\t\t\t\t(this.side === 2 ? fontSize : 0);\n\n\t\treturn {\n\t\t\tx: horiz ?\n\t\t\t\talongAxis :\n\t\t\t\toffAxis + (opposite ? this.width : 0) + offset +\n\t\t\t\t\t(axisTitleOptions.x || 0), // x\n\t\t\ty: horiz ?\n\t\t\t\toffAxis - (opposite ? this.height : 0) + offset :\n\t\t\t\talongAxis + (axisTitleOptions.y || 0) // y\n\t\t};\n\t},\n\t\n\t/**\n\t * Render the axis\n\t */\n\trender: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = axis.options,\n\t\t\tisLog = axis.isLog,\n\t\t\tisLinked = axis.isLinked,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\taxisTitle = axis.axisTitle,\n\t\t\tstacks = axis.stacks,\n\t\t\tticks = axis.ticks,\n\t\t\tminorTicks = axis.minorTicks,\n\t\t\talternateBands = axis.alternateBands,\n\t\t\tstackLabelOptions = options.stackLabels,\n\t\t\talternateGridColor = options.alternateGridColor,\n\t\t\ttickmarkOffset = axis.tickmarkOffset,\n\t\t\tlineWidth = options.lineWidth,\n\t\t\tlinePath,\n\t\t\thasRendered = chart.hasRendered,\n\t\t\tslideInTicks = hasRendered && defined(axis.oldMin) && !isNaN(axis.oldMin),\n\t\t\thasData = axis.hasData,\n\t\t\tshowAxis = axis.showAxis,\n\t\t\tfrom,\n\t\t\tto;\n\n\t\t// Mark all elements inActive before we go over and mark the active ones\n\t\teach([ticks, minorTicks, alternateBands], function (coll) {\n\t\t\tvar pos;\n\t\t\tfor (pos in coll) {\n\t\t\t\tcoll[pos].isActive = false;\n\t\t\t}\n\t\t});\n\n\t\t// If the series has data draw the ticks. Else only the line and title\n\t\tif (hasData || isLinked) {\n\n\t\t\t// minor ticks\n\t\t\tif (axis.minorTickInterval && !axis.categories) {\n\t\t\t\teach(axis.getMinorTickPositions(), function (pos) {\n\t\t\t\t\tif (!minorTicks[pos]) {\n\t\t\t\t\t\tminorTicks[pos] = new Tick(axis, pos, 'minor');\n\t\t\t\t\t}\n\n\t\t\t\t\t// render new ticks in old position\n\t\t\t\t\tif (slideInTicks && minorTicks[pos].isNew) {\n\t\t\t\t\t\tminorTicks[pos].render(null, true);\n\t\t\t\t\t}\n\n\t\t\t\t\tminorTicks[pos].render(null, false, 1);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Major ticks. Pull out the first item and render it last so that\n\t\t\t// we can get the position of the neighbour label. #808.\n\t\t\tif (tickPositions.length) { // #1300\n\t\t\t\teach(tickPositions.slice(1).concat([tickPositions[0]]), function (pos, i) {\n\t\n\t\t\t\t\t// Reorganize the indices\n\t\t\t\t\ti = (i === tickPositions.length - 1) ? 0 : i + 1;\n\t\n\t\t\t\t\t// linked axes need an extra check to find out if\n\t\t\t\t\tif (!isLinked || (pos >= axis.min && pos <= axis.max)) {\n\t\n\t\t\t\t\t\tif (!ticks[pos]) {\n\t\t\t\t\t\t\tticks[pos] = new Tick(axis, pos);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// render new ticks in old position\n\t\t\t\t\t\tif (slideInTicks && ticks[pos].isNew) {\n\t\t\t\t\t\t\tticks[pos].render(i, true);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tticks[pos].render(i, false, 1);\n\t\t\t\t\t}\n\t\n\t\t\t\t});\n\t\t\t\t// In a categorized axis, the tick marks are displayed between labels. So\n\t\t\t\t// we need to add a tick mark and grid line at the left edge of the X axis.\n\t\t\t\tif (tickmarkOffset && axis.min === 0) {\n\t\t\t\t\tif (!ticks[-1]) {\n\t\t\t\t\t\tticks[-1] = new Tick(axis, -1, null, true);\n\t\t\t\t\t}\n\t\t\t\t\tticks[-1].render(-1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\n\t\t\t// alternate grid color\n\t\t\tif (alternateGridColor) {\n\t\t\t\teach(tickPositions, function (pos, i) {\n\t\t\t\t\tif (i % 2 === 0 && pos < axis.max) {\n\t\t\t\t\t\tif (!alternateBands[pos]) {\n\t\t\t\t\t\t\talternateBands[pos] = new PlotLineOrBand(axis);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfrom = pos + tickmarkOffset; // #949\n\t\t\t\t\t\tto = tickPositions[i + 1] !== UNDEFINED ? tickPositions[i + 1] + tickmarkOffset : axis.max;\n\t\t\t\t\t\talternateBands[pos].options = {\n\t\t\t\t\t\t\tfrom: isLog ? lin2log(from) : from,\n\t\t\t\t\t\t\tto: isLog ? lin2log(to) : to,\n\t\t\t\t\t\t\tcolor: alternateGridColor\n\t\t\t\t\t\t};\n\t\t\t\t\t\talternateBands[pos].render();\n\t\t\t\t\t\talternateBands[pos].isActive = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// custom plot lines and bands\n\t\t\tif (!axis._addedPlotLB) { // only first time\n\t\t\t\teach((options.plotLines || []).concat(options.plotBands || []), function (plotLineOptions) {\n\t\t\t\t\taxis.addPlotBandOrLine(plotLineOptions);\n\t\t\t\t});\n\t\t\t\taxis._addedPlotLB = true;\n\t\t\t}\n\n\t\t} // end if hasData\n\n\t\t// Remove inactive ticks\n\t\teach([ticks, minorTicks, alternateBands], function (coll) {\n\t\t\tvar pos, \n\t\t\t\ti,\n\t\t\t\tforDestruction = [],\n\t\t\t\tdelay = globalAnimation ? globalAnimation.duration || 500 : 0,\n\t\t\t\tdestroyInactiveItems = function () {\n\t\t\t\t\ti = forDestruction.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t// When resizing rapidly, the same items may be destroyed in different timeouts,\n\t\t\t\t\t\t// or the may be reactivated\n\t\t\t\t\t\tif (coll[forDestruction[i]] && !coll[forDestruction[i]].isActive) {\n\t\t\t\t\t\t\tcoll[forDestruction[i]].destroy();\n\t\t\t\t\t\t\tdelete coll[forDestruction[i]];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t};\n\n\t\t\tfor (pos in coll) {\n\n\t\t\t\tif (!coll[pos].isActive) {\n\t\t\t\t\t// Render to zero opacity\n\t\t\t\t\tcoll[pos].render(pos, false, 0);\n\t\t\t\t\tcoll[pos].isActive = false;\n\t\t\t\t\tforDestruction.push(pos);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// When the objects are finished fading out, destroy them\n\t\t\tif (coll === alternateBands || !chart.hasRendered || !delay) {\n\t\t\t\tdestroyInactiveItems();\n\t\t\t} else if (delay) {\n\t\t\t\tsetTimeout(destroyInactiveItems, delay);\n\t\t\t}\n\t\t});\n\n\t\t// Static items. As the axis group is cleared on subsequent calls\n\t\t// to render, these items are added outside the group.\n\t\t// axis line\n\t\tif (lineWidth) {\n\t\t\tlinePath = axis.getLinePath(lineWidth);\n\t\t\tif (!axis.axisLine) {\n\t\t\t\taxis.axisLine = renderer.path(linePath)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tstroke: options.lineColor,\n\t\t\t\t\t\t'stroke-width': lineWidth,\n\t\t\t\t\t\tzIndex: 7\n\t\t\t\t\t})\n\t\t\t\t\t.add(axis.axisGroup);\n\t\t\t} else {\n\t\t\t\taxis.axisLine.animate({ d: linePath });\n\t\t\t}\n\n\t\t\t// show or hide the line depending on options.showEmpty\n\t\t\taxis.axisLine[showAxis ? 'show' : 'hide']();\n\t\t}\n\n\t\tif (axisTitle && showAxis) {\n\t\t\t\n\t\t\taxisTitle[axisTitle.isNew ? 'attr' : 'animate'](\n\t\t\t\taxis.getTitlePosition()\n\t\t\t);\n\t\t\taxisTitle.isNew = false;\n\t\t}\n\n\t\t// Stacked totals:\n\t\tif (stackLabelOptions && stackLabelOptions.enabled) {\n\t\t\tvar stackKey, oneStack, stackCategory,\n\t\t\t\tstackTotalGroup = axis.stackTotalGroup;\n\n\t\t\t// Create a separate group for the stack total labels\n\t\t\tif (!stackTotalGroup) {\n\t\t\t\taxis.stackTotalGroup = stackTotalGroup =\n\t\t\t\t\trenderer.g('stack-labels')\n\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\tvisibility: VISIBLE,\n\t\t\t\t\t\t\tzIndex: 6\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.add();\n\t\t\t}\n\n\t\t\t// plotLeft/Top will change when y axis gets wider so we need to translate the\n\t\t\t// stackTotalGroup at every render call. See bug #506 and #516\n\t\t\tstackTotalGroup.translate(chart.plotLeft, chart.plotTop);\n\n\t\t\t// Render each stack total\n\t\t\tfor (stackKey in stacks) {\n\t\t\t\toneStack = stacks[stackKey];\n\t\t\t\tfor (stackCategory in oneStack) {\n\t\t\t\t\toneStack[stackCategory].render(stackTotalGroup);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// End stacked totals\n\n\t\taxis.isDirty = false;\n\t},\n\n\t/**\n\t * Remove a plot band or plot line from the chart by id\n\t * @param {Object} id\n\t */\n\tremovePlotBandOrLine: function (id) {\n\t\tvar plotLinesAndBands = this.plotLinesAndBands,\n\t\t\toptions = this.options,\n\t\t\tuserOptions = this.userOptions,\n\t\t\ti = plotLinesAndBands.length;\n\t\twhile (i--) {\n\t\t\tif (plotLinesAndBands[i].id === id) {\n\t\t\t\tplotLinesAndBands[i].destroy();\n\t\t\t}\n\t\t}\n\t\teach([options.plotLines || [], userOptions.plotLines || [], options.plotBands || [], userOptions.plotBands || []], function (arr) {\n\t\t\ti = arr.length;\n\t\t\twhile (i--) {\n\t\t\t\tif (arr[i].id === id) {\n\t\t\t\t\terase(arr, arr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t},\n\n\t/**\n\t * Update the axis title by options\n\t */\n\tsetTitle: function (newTitleOptions, redraw) {\n\t\tthis.update({ title: newTitleOptions }, redraw);\n\t},\n\n\t/**\n\t * Redraw the axis to reflect changes in the data or axis extremes\n\t */\n\tredraw: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\tpointer = chart.pointer;\n\n\t\t// hide tooltip and hover states\n\t\tif (pointer.reset) {\n\t\t\tpointer.reset(true);\n\t\t}\n\n\t\t// render the axis\n\t\taxis.render();\n\n\t\t// move plot lines and bands\n\t\teach(axis.plotLinesAndBands, function (plotLine) {\n\t\t\tplotLine.render();\n\t\t});\n\n\t\t// mark associated series as dirty and ready for redraw\n\t\teach(axis.series, function (series) {\n\t\t\tseries.isDirty = true;\n\t\t});\n\n\t},\n\n\t/**\n\t * Build the stacks from top down\n\t */\n\tbuildStacks: function () {\n\t\tvar series = this.series,\n\t\t\ti = series.length;\n\t\tif (!this.isXAxis) {\n\t\t\twhile (i--) {\n\t\t\t\tseries[i].setStackedPoints();\n\t\t\t}\n\t\t\t// Loop up again to compute percent stack\n\t\t\tif (this.usePercentage) {\n\t\t\t\tfor (i = 0; i < series.length; i++) {\n\t\t\t\t\tseries[i].setPercentStacks();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Set new axis categories and optionally redraw\n\t * @param {Array} categories\n\t * @param {Boolean} redraw\n\t */\n\tsetCategories: function (categories, redraw) {\n\t\tthis.update({ categories: categories }, redraw);\n\t},\n\n\t/**\n\t * Destroys an Axis instance.\n\t */\n\tdestroy: function (keepEvents) {\n\t\tvar axis = this,\n\t\t\tstacks = axis.stacks,\n\t\t\tstackKey,\n\t\t\tplotLinesAndBands = axis.plotLinesAndBands,\n\t\t\ti;\n\n\t\t// Remove the events\n\t\tif (!keepEvents) {\n\t\t\tremoveEvent(axis);\n\t\t}\n\n\t\t// Destroy each stack total\n\t\tfor (stackKey in stacks) {\n\t\t\tdestroyObjectProperties(stacks[stackKey]);\n\n\t\t\tstacks[stackKey] = null;\n\t\t}\n\n\t\t// Destroy collections\n\t\teach([axis.ticks, axis.minorTicks, axis.alternateBands], function (coll) {\n\t\t\tdestroyObjectProperties(coll);\n\t\t});\n\t\ti = plotLinesAndBands.length;\n\t\twhile (i--) { // #1975\n\t\t\tplotLinesAndBands[i].destroy();\n\t\t}\n\n\t\t// Destroy local variables\n\t\teach(['stackTotalGroup', 'axisLine', 'axisGroup', 'gridGroup', 'labelGroup', 'axisTitle'], function (prop) {\n\t\t\tif (axis[prop]) {\n\t\t\t\taxis[prop] = axis[prop].destroy();\n\t\t\t}\n\t\t});\n\t}\n\n\t\n}; // end Axis\n\n/**\n * The tooltip object\n * @param {Object} chart The chart instance\n * @param {Object} options Tooltip options\n */\nfunction Tooltip() {\n\tthis.init.apply(this, arguments);\n}\n\nTooltip.prototype = {\n\n\tinit: function (chart, options) {\n\n\t\tvar borderWidth = options.borderWidth,\n\t\t\tstyle = options.style,\n\t\t\tpadding = pInt(style.padding);\n\n\t\t// Save the chart and options\n\t\tthis.chart = chart;\n\t\tthis.options = options;\n\n\t\t// Keep track of the current series\n\t\t//this.currentSeries = UNDEFINED;\n\n\t\t// List of crosshairs\n\t\tthis.crosshairs = [];\n\n\t\t// Current values of x and y when animating\n\t\tthis.now = { x: 0, y: 0 };\n\n\t\t// The tooltip is initially hidden\n\t\tthis.isHidden = true;\n\n\n\t\t// create the label\n\t\tthis.label = chart.renderer.label('', 0, 0, options.shape, null, null, options.useHTML, null, 'tooltip')\n\t\t\t.attr({\n\t\t\t\tpadding: padding,\n\t\t\t\tfill: options.backgroundColor,\n\t\t\t\t'stroke-width': borderWidth,\n\t\t\t\tr: options.borderRadius,\n\t\t\t\tzIndex: 8\n\t\t\t})\n\t\t\t.css(style)\n\t\t\t.css({ padding: 0 }) // Remove it from VML, the padding is applied as an attribute instead (#1117)\n\t\t\t.add()\n\t\t\t.attr({ y: -999 }); // #2301\n\n\t\t// When using canVG the shadow shows up as a gray circle\n\t\t// even if the tooltip is hidden.\n\t\tif (!useCanVG) {\n\t\t\tthis.label.shadow(options.shadow);\n\t\t}\n\n\t\t// Public property for getting the shared state.\n\t\tthis.shared = options.shared;\n\t},\n\n\t/**\n\t * Destroy the tooltip and its elements.\n\t */\n\tdestroy: function () {\n\t\teach(this.crosshairs, function (crosshair) {\n\t\t\tif (crosshair) {\n\t\t\t\tcrosshair.destroy();\n\t\t\t}\n\t\t});\n\n\t\t// Destroy and clear local variables\n\t\tif (this.label) {\n\t\t\tthis.label = this.label.destroy();\n\t\t}\n\t\tclearTimeout(this.hideTimer);\n\t\tclearTimeout(this.tooltipTimeout);\n\t},\n\n\t/**\n\t * Provide a soft movement for the tooltip\n\t *\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @private\n\t */\n\tmove: function (x, y, anchorX, anchorY) {\n\t\tvar tooltip = this,\n\t\t\tnow = tooltip.now,\n\t\t\tanimate = tooltip.options.animation !== false && !tooltip.isHidden;\n\n\t\t// get intermediate values for animation\n\t\textend(now, {\n\t\t\tx: animate ? (2 * now.x + x) / 3 : x,\n\t\t\ty: animate ? (now.y + y) / 2 : y,\n\t\t\tanchorX: animate ? (2 * now.anchorX + anchorX) / 3 : anchorX,\n\t\t\tanchorY: animate ? (now.anchorY + anchorY) / 2 : anchorY\n\t\t});\n\n\t\t// move to the intermediate value\n\t\ttooltip.label.attr(now);\n\n\t\t\n\t\t// run on next tick of the mouse tracker\n\t\tif (animate && (mathAbs(x - now.x) > 1 || mathAbs(y - now.y) > 1)) {\n\t\t\n\t\t\t// never allow two timeouts\n\t\t\tclearTimeout(this.tooltipTimeout);\n\t\t\t\n\t\t\t// set the fixed interval ticking for the smooth tooltip\n\t\t\tthis.tooltipTimeout = setTimeout(function () {\n\t\t\t\t// The interval function may still be running during destroy, so check that the chart is really there before calling.\n\t\t\t\tif (tooltip) {\n\t\t\t\t\ttooltip.move(x, y, anchorX, anchorY);\n\t\t\t\t}\n\t\t\t}, 32);\n\t\t\t\n\t\t}\n\t},\n\n\t/**\n\t * Hide the tooltip\n\t */\n\thide: function () {\n\t\tvar tooltip = this,\n\t\t\thoverPoints;\n\t\t\n\t\tclearTimeout(this.hideTimer); // disallow duplicate timers (#1728, #1766)\n\t\tif (!this.isHidden) {\n\t\t\thoverPoints = this.chart.hoverPoints;\n\n\t\t\tthis.hideTimer = setTimeout(function () {\n\t\t\t\ttooltip.label.fadeOut();\n\t\t\t\ttooltip.isHidden = true;\n\t\t\t}, pick(this.options.hideDelay, 500));\n\n\t\t\t// hide previous hoverPoints and set new\n\t\t\tif (hoverPoints) {\n\t\t\t\teach(hoverPoints, function (point) {\n\t\t\t\t\tpoint.setState();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.chart.hoverPoints = null;\n\t\t}\n\t},\n\n\t/**\n\t * Hide the crosshairs\n\t */\n\thideCrosshairs: function () {\n\t\teach(this.crosshairs, function (crosshair) {\n\t\t\tif (crosshair) {\n\t\t\t\tcrosshair.hide();\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** \n\t * Extendable method to get the anchor position of the tooltip\n\t * from a point or set of points\n\t */\n\tgetAnchor: function (points, mouseEvent) {\n\t\tvar ret,\n\t\t\tchart = this.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotX = 0,\n\t\t\tplotY = 0,\n\t\t\tyAxis;\n\t\t\n\t\tpoints = splat(points);\n\t\t\n\t\t// Pie uses a special tooltipPos\n\t\tret = points[0].tooltipPos;\n\t\t\n\t\t// When tooltip follows mouse, relate the position to the mouse\n\t\tif (this.followPointer && mouseEvent) {\n\t\t\tif (mouseEvent.chartX === UNDEFINED) {\n\t\t\t\tmouseEvent = chart.pointer.normalize(mouseEvent);\n\t\t\t}\n\t\t\tret = [\n\t\t\t\tmouseEvent.chartX - chart.plotLeft,\n\t\t\t\tmouseEvent.chartY - plotTop\n\t\t\t];\n\t\t}\n\t\t// When shared, use the average position\n\t\tif (!ret) {\n\t\t\teach(points, function (point) {\n\t\t\t\tyAxis = point.series.yAxis;\n\t\t\t\tplotX += point.plotX;\n\t\t\t\tplotY += (point.plotLow ? (point.plotLow + point.plotHigh) / 2 : point.plotY) +\n\t\t\t\t\t(!inverted && yAxis ? yAxis.top - plotTop : 0); // #1151\n\t\t\t});\n\t\t\t\n\t\t\tplotX /= points.length;\n\t\t\tplotY /= points.length;\n\t\t\t\n\t\t\tret = [\n\t\t\t\tinverted ? chart.plotWidth - plotY : plotX,\n\t\t\t\tthis.shared && !inverted && points.length > 1 && mouseEvent ? \n\t\t\t\t\tmouseEvent.chartY - plotTop : // place shared tooltip next to the mouse (#424)\n\t\t\t\t\tinverted ? chart.plotHeight - plotX : plotY\n\t\t\t];\n\t\t}\n\n\t\treturn map(ret, mathRound);\n\t},\n\t\n\t/**\n\t * Place the tooltip in a chart without spilling over\n\t * and not covering the point it self.\n\t */\n\tgetPosition: function (boxWidth, boxHeight, point) {\n\t\t\n\t\t// Set up the variables\n\t\tvar chart = this.chart,\n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tdistance = pick(this.options.distance, 12),\n\t\t\tpointX = point.plotX,\n\t\t\tpointY = point.plotY,\n\t\t\tx = pointX + plotLeft + (chart.inverted ? distance : -boxWidth - distance),\n\t\t\ty = pointY - boxHeight + plotTop + 15, // 15 means the point is 15 pixels up from the bottom of the tooltip\n\t\t\talignedRight;\n\t\n\t\t// It is too far to the left, adjust it\n\t\tif (x < 7) {\n\t\t\tx = plotLeft + mathMax(pointX, 0) + distance;\n\t\t}\n\t\n\t\t// Test to see if the tooltip is too far to the right,\n\t\t// if it is, move it back to be inside and then up to not cover the point.\n\t\tif ((x + boxWidth) > (plotLeft + plotWidth)) {\n\t\t\tx -= (x + boxWidth) - (plotLeft + plotWidth);\n\t\t\ty = pointY - boxHeight + plotTop - distance;\n\t\t\talignedRight = true;\n\t\t}\n\t\n\t\t// If it is now above the plot area, align it to the top of the plot area\n\t\tif (y < plotTop + 5) {\n\t\t\ty = plotTop + 5;\n\t\n\t\t\t// If the tooltip is still covering the point, move it below instead\n\t\t\tif (alignedRight && pointY >= y && pointY <= (y + boxHeight)) {\n\t\t\t\ty = pointY + plotTop + distance; // below\n\t\t\t}\n\t\t} \n\t\n\t\t// Now if the tooltip is below the chart, move it up. It's better to cover the\n\t\t// point than to disappear outside the chart. #834.\n\t\tif (y + boxHeight > plotTop + plotHeight) {\n\t\t\ty = mathMax(plotTop, plotTop + plotHeight - boxHeight - distance); // below\n\t\t}\n\t\n\t\treturn {x: x, y: y};\n\t},\n\n\t/**\n\t * In case no user defined formatter is given, this will be used. Note that the context\n\t * here is an object holding point, series, x, y etc.\n\t */\n\tdefaultFormatter: function (tooltip) {\n\t\tvar items = this.points || splat(this),\n\t\t\tseries = items[0].series,\n\t\t\ts;\n\n\t\t// build the header\n\t\ts = [series.tooltipHeaderFormatter(items[0])];\n\n\t\t// build the values\n\t\teach(items, function (item) {\n\t\t\tseries = item.series;\n\t\t\ts.push((series.tooltipFormatter && series.tooltipFormatter(item)) ||\n\t\t\t\titem.point.tooltipFormatter(series.tooltipOptions.pointFormat));\n\t\t});\n\n\t\t// footer\n\t\ts.push(tooltip.options.footerFormat || '');\n\n\t\treturn s.join('');\n\t},\n\n\t/**\n\t * Refresh the tooltip's text and position.\n\t * @param {Object} point\n\t */\n\trefresh: function (point, mouseEvent) {\n\t\tvar tooltip = this,\n\t\t\tchart = tooltip.chart,\n\t\t\tlabel = tooltip.label,\n\t\t\toptions = tooltip.options,\n\t\t\tx,\n\t\t\ty,\n\t\t\tanchor,\n\t\t\ttextConfig = {},\n\t\t\ttext,\n\t\t\tpointConfig = [],\n\t\t\tformatter = options.formatter || tooltip.defaultFormatter,\n\t\t\thoverPoints = chart.hoverPoints,\n\t\t\tborderColor,\n\t\t\tcrosshairsOptions = options.crosshairs,\n\t\t\tshared = tooltip.shared,\n\t\t\tcurrentSeries;\n\t\t\t\n\t\tclearTimeout(this.hideTimer);\n\t\t\n\t\t// get the reference point coordinates (pie charts use tooltipPos)\n\t\ttooltip.followPointer = splat(point)[0].series.tooltipOptions.followPointer;\n\t\tanchor = tooltip.getAnchor(point, mouseEvent);\n\t\tx = anchor[0];\n\t\ty = anchor[1];\n\n\t\t// shared tooltip, array is sent over\n\t\tif (shared && !(point.series && point.series.noSharedTooltip)) {\n\t\t\t\n\t\t\t// hide previous hoverPoints and set new\n\t\t\t\n\t\t\tchart.hoverPoints = point;\n\t\t\tif (hoverPoints) {\n\t\t\t\teach(hoverPoints, function (point) {\n\t\t\t\t\tpoint.setState();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\teach(point, function (item) {\n\t\t\t\titem.setState(HOVER_STATE);\n\n\t\t\t\tpointConfig.push(item.getLabelConfig());\n\t\t\t});\n\n\t\t\ttextConfig = {\n\t\t\t\tx: point[0].category,\n\t\t\t\ty: point[0].y\n\t\t\t};\n\t\t\ttextConfig.points = pointConfig;\n\t\t\tpoint = point[0];\n\n\t\t// single point tooltip\n\t\t} else {\n\t\t\ttextConfig = point.getLabelConfig();\n\t\t}\n\t\ttext = formatter.call(textConfig, tooltip);\n\n\t\t// register the current series\n\t\tcurrentSeries = point.series;\n\n\t\t// update the inner HTML\n\t\tif (text === false) {\n\t\t\tthis.hide();\n\t\t} else {\n\n\t\t\t// show it\n\t\t\tif (tooltip.isHidden) {\n\t\t\t\tstop(label);\n\t\t\t\tlabel.attr('opacity', 1).show();\n\t\t\t}\n\n\t\t\t// update text\n\t\t\tlabel.attr({\n\t\t\t\ttext: text\n\t\t\t});\n\n\t\t\t// set the stroke color of the box\n\t\t\tborderColor = options.borderColor || point.color || currentSeries.color || '#606060';\n\t\t\tlabel.attr({\n\t\t\t\tstroke: borderColor\n\t\t\t});\n\t\t\t\n\t\t\ttooltip.updatePosition({ plotX: x, plotY: y });\n\t\t\n\t\t\tthis.isHidden = false;\n\t\t}\n\n\t\t// crosshairs\n\t\tif (crosshairsOptions) {\n\t\t\tcrosshairsOptions = splat(crosshairsOptions); // [x, y]\n\n\t\t\tvar path,\n\t\t\t\ti = crosshairsOptions.length,\n\t\t\t\tattribs,\n\t\t\t\taxis,\n\t\t\t\tval,\n\t\t\t\tseries;\n\n\t\t\twhile (i--) {\n\t\t\t\tseries = point.series;\n\t\t\t\taxis = series[i ? 'yAxis' : 'xAxis'];\n\t\t\t\tif (crosshairsOptions[i] && axis) {\n\t\t\t\t\tval = i ? pick(point.stackY, point.y) : point.x; // #814\n\t\t\t\t\tif (axis.isLog) { // #1671\n\t\t\t\t\t\tval = log2lin(val);\n\t\t\t\t\t}\n\t\t\t\t\tif (i === 1 && series.modifyValue) { // #1205, #2316\n\t\t\t\t\t\tval = series.modifyValue(val);\n\t\t\t\t\t}\n\n\t\t\t\t\tpath = axis.getPlotLinePath(\n\t\t\t\t\t\tval,\n\t\t\t\t\t\t1\n\t\t\t\t\t);\n\n\t\t\t\t\tif (tooltip.crosshairs[i]) {\n\t\t\t\t\t\ttooltip.crosshairs[i].attr({ d: path, visibility: VISIBLE });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattribs = {\n\t\t\t\t\t\t\t'stroke-width': crosshairsOptions[i].width || 1,\n\t\t\t\t\t\t\tstroke: crosshairsOptions[i].color || '#C0C0C0',\n\t\t\t\t\t\t\tzIndex: crosshairsOptions[i].zIndex || 2\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (crosshairsOptions[i].dashStyle) {\n\t\t\t\t\t\t\tattribs.dashstyle = crosshairsOptions[i].dashStyle;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttooltip.crosshairs[i] = chart.renderer.path(path)\n\t\t\t\t\t\t\t.attr(attribs)\n\t\t\t\t\t\t\t.add();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfireEvent(chart, 'tooltipRefresh', {\n\t\t\t\ttext: text,\n\t\t\t\tx: x + chart.plotLeft,\n\t\t\t\ty: y + chart.plotTop,\n\t\t\t\tborderColor: borderColor\n\t\t\t});\n\t},\n\t\n\t/**\n\t * Find the new position and perform the move\n\t */\n\tupdatePosition: function (point) {\n\t\tvar chart = this.chart,\n\t\t\tlabel = this.label, \n\t\t\tpos = (this.options.positioner || this.getPosition).call(\n\t\t\t\tthis,\n\t\t\t\tlabel.width,\n\t\t\t\tlabel.height,\n\t\t\t\tpoint\n\t\t\t);\n\n\t\t// do the move\n\t\tthis.move(\n\t\t\tmathRound(pos.x), \n\t\t\tmathRound(pos.y), \n\t\t\tpoint.plotX + chart.plotLeft, \n\t\t\tpoint.plotY + chart.plotTop\n\t\t);\n\t}\n};\n/**\n * The mouse tracker object. All methods starting with \"on\" are primary DOM event handlers. \n * Subsequent methods should be named differently from what they are doing.\n * @param {Object} chart The Chart instance\n * @param {Object} options The root options object\n */\nfunction Pointer(chart, options) {\n\tthis.init(chart, options);\n}\n\nPointer.prototype = {\n\t/**\n\t * Initialize Pointer\n\t */\n\tinit: function (chart, options) {\n\t\t\n\t\tvar chartOptions = options.chart,\n\t\t\tchartEvents = chartOptions.events,\n\t\t\tzoomType = useCanVG ? '' : chartOptions.zoomType,\n\t\t\tinverted = chart.inverted,\n\t\t\tzoomX,\n\t\t\tzoomY;\n\n\t\t// Store references\n\t\tthis.options = options;\n\t\tthis.chart = chart;\n\t\t\n\t\t// Zoom status\n\t\tthis.zoomX = zoomX = /x/.test(zoomType);\n\t\tthis.zoomY = zoomY = /y/.test(zoomType);\n\t\tthis.zoomHor = (zoomX && !inverted) || (zoomY && inverted);\n\t\tthis.zoomVert = (zoomY && !inverted) || (zoomX && inverted);\n\n\t\t// Do we need to handle click on a touch device?\n\t\tthis.runChartClick = chartEvents && !!chartEvents.click;\n\n\t\tthis.pinchDown = [];\n\t\tthis.lastValidTouch = {};\n\n\t\tif (options.tooltip.enabled) {\n\t\t\tchart.tooltip = new Tooltip(chart, options.tooltip);\n\t\t}\n\n\t\tthis.setDOMEvents();\n\t}, \n\n\t/**\n\t * Add crossbrowser support for chartX and chartY\n\t * @param {Object} e The event object in standard browsers\n\t */\n\tnormalize: function (e, chartPosition) {\n\t\tvar chartX,\n\t\t\tchartY,\n\t\t\tePos;\n\n\t\t// common IE normalizing\n\t\te = e || win.event;\n\t\tif (!e.target) {\n\t\t\te.target = e.srcElement;\n\t\t}\n\n\t\t// Framework specific normalizing (#1165)\n\t\te = washMouseEvent(e);\n\t\t\n\t\t// iOS\n\t\tePos = e.touches ? e.touches.item(0) : e;\n\n\t\t// Get mouse position\n\t\tif (!chartPosition) {\n\t\t\tthis.chartPosition = chartPosition = offset(this.chart.container);\n\t\t}\n\n\t\t// chartX and chartY\n\t\tif (ePos.pageX === UNDEFINED) { // IE < 9. #886.\n\t\t\tchartX = mathMax(e.x, e.clientX - chartPosition.left); // #2005, #2129: the second case is \n\t\t\t\t// for IE10 quirks mode within framesets\n\t\t\tchartY = e.y;\n\t\t} else {\n\t\t\tchartX = ePos.pageX - chartPosition.left;\n\t\t\tchartY = ePos.pageY - chartPosition.top;\n\t\t}\n\n\t\treturn extend(e, {\n\t\t\tchartX: mathRound(chartX),\n\t\t\tchartY: mathRound(chartY)\n\t\t});\n\t},\n\n\t/**\n\t * Get the click position in terms of axis values.\n\t *\n\t * @param {Object} e A pointer event\n\t */\n\tgetCoordinates: function (e) {\n\t\tvar coordinates = {\n\t\t\t\txAxis: [],\n\t\t\t\tyAxis: []\n\t\t\t};\n\n\t\teach(this.chart.axes, function (axis) {\n\t\t\tcoordinates[axis.isXAxis ? 'xAxis' : 'yAxis'].push({\n\t\t\t\taxis: axis,\n\t\t\t\tvalue: axis.toValue(e[axis.horiz ? 'chartX' : 'chartY'])\n\t\t\t});\n\t\t});\n\t\treturn coordinates;\n\t},\n\t\n\t/**\n\t * Return the index in the tooltipPoints array, corresponding to pixel position in \n\t * the plot area.\n\t */\n\tgetIndex: function (e) {\n\t\tvar chart = this.chart;\n\t\treturn chart.inverted ? \n\t\t\tchart.plotHeight + chart.plotTop - e.chartY : \n\t\t\te.chartX - chart.plotLeft;\n\t},\n\n\t/**\n\t * With line type charts with a single tracker, get the point closest to the mouse.\n\t * Run Point.onMouseOver and display tooltip for the point or points.\n\t */\n\trunPointActions: function (e) {\n\t\tvar pointer = this,\n\t\t\tchart = pointer.chart,\n\t\t\tseries = chart.series,\n\t\t\ttooltip = chart.tooltip,\n\t\t\tpoint,\n\t\t\tpoints,\n\t\t\thoverPoint = chart.hoverPoint,\n\t\t\thoverSeries = chart.hoverSeries,\n\t\t\ti,\n\t\t\tj,\n\t\t\tdistance = chart.chartWidth,\n\t\t\tindex = pointer.getIndex(e),\n\t\t\tanchor;\n\n\t\t// shared tooltip\n\t\tif (tooltip && pointer.options.tooltip.shared && !(hoverSeries && hoverSeries.noSharedTooltip)) {\n\t\t\tpoints = [];\n\n\t\t\t// loop over all series and find the ones with points closest to the mouse\n\t\t\ti = series.length;\n\t\t\tfor (j = 0; j < i; j++) {\n\t\t\t\tif (series[j].visible &&\n\t\t\t\t\t\tseries[j].options.enableMouseTracking !== false &&\n\t\t\t\t\t\t!series[j].noSharedTooltip && series[j].tooltipPoints.length) {\n\t\t\t\t\tpoint = series[j].tooltipPoints[index];\n\t\t\t\t\tif (point && point.series) { // not a dummy point, #1544\n\t\t\t\t\t\tpoint._dist = mathAbs(index - point.clientX);\n\t\t\t\t\t\tdistance = mathMin(distance, point._dist);\n\t\t\t\t\t\tpoints.push(point);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// remove furthest points\n\t\t\ti = points.length;\n\t\t\twhile (i--) {\n\t\t\t\tif (points[i]._dist > distance) {\n\t\t\t\t\tpoints.splice(i, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// refresh the tooltip if necessary\n\t\t\tif (points.length && (points[0].clientX !== pointer.hoverX)) {\n\t\t\t\ttooltip.refresh(points, e);\n\t\t\t\tpointer.hoverX = points[0].clientX;\n\t\t\t}\n\t\t}\n\n\t\t// separate tooltip and general mouse events\n\t\tif (hoverSeries && hoverSeries.tracker) { // only use for line-type series with common tracker\n\n\t\t\t// get the point\n\t\t\tpoint = hoverSeries.tooltipPoints[index];\n\n\t\t\t// a new point is hovered, refresh the tooltip\n\t\t\tif (point && point !== hoverPoint) {\n\n\t\t\t\t// trigger the events\n\t\t\t\tpoint.onMouseOver(e);\n\n\t\t\t}\n\t\t\t\n\t\t} else if (tooltip && tooltip.followPointer && !tooltip.isHidden) {\n\t\t\tanchor = tooltip.getAnchor([{}], e);\n\t\t\ttooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] });\n\t\t}\n\t},\n\n\n\n\t/**\n\t * Reset the tracking by hiding the tooltip, the hover series state and the hover point\n\t * \n\t * @param allowMove {Boolean} Instead of destroying the tooltip altogether, allow moving it if possible\n\t */\n\treset: function (allowMove) {\n\t\tvar pointer = this,\n\t\t\tchart = pointer.chart,\n\t\t\thoverSeries = chart.hoverSeries,\n\t\t\thoverPoint = chart.hoverPoint,\n\t\t\ttooltip = chart.tooltip,\n\t\t\ttooltipPoints = tooltip && tooltip.shared ? chart.hoverPoints : hoverPoint;\n\t\t\t\n\t\t// Narrow in allowMove\n\t\tallowMove = allowMove && tooltip && tooltipPoints;\n\t\t\t\n\t\t// Check if the points have moved outside the plot area, #1003\n\t\tif (allowMove && splat(tooltipPoints)[0].plotX === UNDEFINED) {\n\t\t\tallowMove = false;\n\t\t}\t\n\n\t\t// Just move the tooltip, #349\n\t\tif (allowMove) {\n\t\t\ttooltip.refresh(tooltipPoints);\n\n\t\t// Full reset\n\t\t} else {\n\n\t\t\tif (hoverPoint) {\n\t\t\t\thoverPoint.onMouseOut();\n\t\t\t}\n\n\t\t\tif (hoverSeries) {\n\t\t\t\thoverSeries.onMouseOut();\n\t\t\t}\n\n\t\t\tif (tooltip) {\n\t\t\t\ttooltip.hide();\n\t\t\t\ttooltip.hideCrosshairs();\n\t\t\t}\n\n\t\t\tpointer.hoverX = null;\n\n\t\t}\n\t},\n\n\t/**\n\t * Scale series groups to a certain scale and translation\n\t */\n\tscaleGroups: function (attribs, clip) {\n\n\t\tvar chart = this.chart,\n\t\t\tseriesAttribs;\n\n\t\t// Scale each series\n\t\teach(chart.series, function (series) {\n\t\t\tseriesAttribs = attribs || series.getPlotBox(); // #1701\n\t\t\tif (series.xAxis && series.xAxis.zoomEnabled) {\n\t\t\t\tseries.group.attr(seriesAttribs);\n\t\t\t\tif (series.markerGroup) {\n\t\t\t\t\tseries.markerGroup.attr(seriesAttribs);\n\t\t\t\t\tseries.markerGroup.clip(clip ? chart.clipRect : null);\n\t\t\t\t}\n\t\t\t\tif (series.dataLabelsGroup) {\n\t\t\t\t\tseries.dataLabelsGroup.attr(seriesAttribs);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\t// Clip\n\t\tchart.clipRect.attr(clip || chart.clipBox);\n\t},\n\n\t/**\n\t * Run translation operations for each direction (horizontal and vertical) independently\n\t */\n\tpinchTranslateDirection: function (horiz, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch) {\n\t\tvar chart = this.chart,\n\t\t\txy = horiz ? 'x' : 'y',\n\t\t\tXY = horiz ? 'X' : 'Y',\n\t\t\tsChartXY = 'chart' + XY,\n\t\t\twh = horiz ? 'width' : 'height',\n\t\t\tplotLeftTop = chart['plot' + (horiz ? 'Left' : 'Top')],\n\t\t\tselectionWH,\n\t\t\tselectionXY,\n\t\t\tclipXY,\n\t\t\tscale = 1,\n\t\t\tinverted = chart.inverted,\n\t\t\tbounds = chart.bounds[horiz ? 'h' : 'v'],\n\t\t\tsingleTouch = pinchDown.length === 1,\n\t\t\ttouch0Start = pinchDown[0][sChartXY],\n\t\t\ttouch0Now = touches[0][sChartXY],\n\t\t\ttouch1Start = !singleTouch && pinchDown[1][sChartXY],\n\t\t\ttouch1Now = !singleTouch && touches[1][sChartXY],\n\t\t\toutOfBounds,\n\t\t\ttransformScale,\n\t\t\tscaleKey,\n\t\t\tsetScale = function () {\n\t\t\t\tif (!singleTouch && mathAbs(touch0Start - touch1Start) > 20) { // Don't zoom if fingers are too close on this axis\n\t\t\t\t\tscale = mathAbs(touch0Now - touch1Now) / mathAbs(touch0Start - touch1Start);\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tclipXY = ((plotLeftTop - touch0Now) / scale) + touch0Start;\n\t\t\t\tselectionWH = chart['plot' + (horiz ? 'Width' : 'Height')] / scale;\n\t\t\t};\n\n\t\t// Set the scale, first pass\n\t\tsetScale();\n\n\t\tselectionXY = clipXY; // the clip position (x or y) is altered if out of bounds, the selection position is not\n\n\t\t// Out of bounds\n\t\tif (selectionXY < bounds.min) {\n\t\t\tselectionXY = bounds.min;\n\t\t\toutOfBounds = true;\n\t\t} else if (selectionXY + selectionWH > bounds.max) {\n\t\t\tselectionXY = bounds.max - selectionWH;\n\t\t\toutOfBounds = true;\n\t\t}\n\t\t\n\t\t// Is the chart dragged off its bounds, determined by dataMin and dataMax?\n\t\tif (outOfBounds) {\n\n\t\t\t// Modify the touchNow position in order to create an elastic drag movement. This indicates\n\t\t\t// to the user that the chart is responsive but can't be dragged further.\n\t\t\ttouch0Now -= 0.8 * (touch0Now - lastValidTouch[xy][0]);\n\t\t\tif (!singleTouch) {\n\t\t\t\ttouch1Now -= 0.8 * (touch1Now - lastValidTouch[xy][1]);\n\t\t\t}\n\n\t\t\t// Set the scale, second pass to adapt to the modified touchNow positions\n\t\t\tsetScale();\n\n\t\t} else {\n\t\t\tlastValidTouch[xy] = [touch0Now, touch1Now];\n\t\t}\n\n\t\t\n\t\t// Set geometry for clipping, selection and transformation\n\t\tif (!inverted) { // TODO: implement clipping for inverted charts\n\t\t\tclip[xy] = clipXY - plotLeftTop;\n\t\t\tclip[wh] = selectionWH;\n\t\t}\n\t\tscaleKey = inverted ? (horiz ? 'scaleY' : 'scaleX') : 'scale' + XY;\n\t\ttransformScale = inverted ? 1 / scale : scale;\n\n\t\tselectionMarker[wh] = selectionWH;\n\t\tselectionMarker[xy] = selectionXY;\n\t\ttransform[scaleKey] = scale;\n\t\ttransform['translate' + XY] = (transformScale * plotLeftTop) + (touch0Now - (transformScale * touch0Start));\n\t},\n\t\n\t/**\n\t * Handle touch events with two touches\n\t */\n\tpinch: function (e) {\n\n\t\tvar self = this,\n\t\t\tchart = self.chart,\n\t\t\tpinchDown = self.pinchDown,\n\t\t\tfollowTouchMove = chart.tooltip && chart.tooltip.options.followTouchMove,\n\t\t\ttouches = e.touches,\n\t\t\ttouchesLength = touches.length,\n\t\t\tlastValidTouch = self.lastValidTouch,\n\t\t\tzoomHor = self.zoomHor || self.pinchHor,\n\t\t\tzoomVert = self.zoomVert || self.pinchVert,\n\t\t\thasZoom = zoomHor || zoomVert,\n\t\t\tselectionMarker = self.selectionMarker,\n\t\t\ttransform = {},\n\t\t\tfireClickEvent = touchesLength === 1 && ((self.inClass(e.target, PREFIX + 'tracker') && \n\t\t\t\tchart.runTrackerClick) || chart.runChartClick),\n\t\t\tclip = {};\n\n\t\t// On touch devices, only proceed to trigger click if a handler is defined\n\t\tif ((hasZoom || followTouchMove) && !fireClickEvent) {\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\t// Normalize each touch\n\t\tmap(touches, function (e) {\n\t\t\treturn self.normalize(e);\n\t\t});\n\t\t\t\n\t\t// Register the touch start position\n\t\tif (e.type === 'touchstart') {\n\t\t\teach(touches, function (e, i) {\n\t\t\t\tpinchDown[i] = { chartX: e.chartX, chartY: e.chartY };\n\t\t\t});\n\t\t\tlastValidTouch.x = [pinchDown[0].chartX, pinchDown[1] && pinchDown[1].chartX];\n\t\t\tlastValidTouch.y = [pinchDown[0].chartY, pinchDown[1] && pinchDown[1].chartY];\n\n\t\t\t// Identify the data bounds in pixels\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\tif (axis.zoomEnabled) {\n\t\t\t\t\tvar bounds = chart.bounds[axis.horiz ? 'h' : 'v'],\n\t\t\t\t\t\tminPixelPadding = axis.minPixelPadding,\n\t\t\t\t\t\tmin = axis.toPixels(axis.dataMin),\n\t\t\t\t\t\tmax = axis.toPixels(axis.dataMax),\n\t\t\t\t\t\tabsMin = mathMin(min, max),\n\t\t\t\t\t\tabsMax = mathMax(min, max);\n\n\t\t\t\t\t// Store the bounds for use in the touchmove handler\n\t\t\t\t\tbounds.min = mathMin(axis.pos, absMin - minPixelPadding);\n\t\t\t\t\tbounds.max = mathMax(axis.pos + axis.len, absMax + minPixelPadding);\n\t\t\t\t}\n\t\t\t});\n\t\t\n\t\t// Event type is touchmove, handle panning and pinching\n\t\t} else if (pinchDown.length) { // can be 0 when releasing, if touchend fires first\n\t\t\t\n\n\t\t\t// Set the marker\n\t\t\tif (!selectionMarker) {\n\t\t\t\tself.selectionMarker = selectionMarker = extend({\n\t\t\t\t\tdestroy: noop\n\t\t\t\t}, chart.plotBox);\n\t\t\t}\n\n\t\t\t\n\n\t\t\tif (zoomHor) {\n\t\t\t\tself.pinchTranslateDirection(true, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch);\n\t\t\t}\n\t\t\tif (zoomVert) {\n\t\t\t\tself.pinchTranslateDirection(false, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch);\n\t\t\t}\n\n\t\t\tself.hasPinched = hasZoom;\n\n\t\t\t// Scale and translate the groups to provide visual feedback during pinching\n\t\t\tself.scaleGroups(transform, clip);\n\t\t\t\n\t\t\t// Optionally move the tooltip on touchmove\n\t\t\tif (!hasZoom && followTouchMove && touchesLength === 1) {\n\t\t\t\tthis.runPointActions(self.normalize(e));\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Start a drag operation\n\t */\n\tdragStart: function (e) {\n\t\tvar chart = this.chart;\n\n\t\t// Record the start position\n\t\tchart.mouseIsDown = e.type;\n\t\tchart.cancelClick = false;\n\t\tchart.mouseDownX = this.mouseDownX = e.chartX;\n\t\tchart.mouseDownY = this.mouseDownY = e.chartY;\n\t},\n\n\t/**\n\t * Perform a drag operation in response to a mousemove event while the mouse is down\n\t */\n\tdrag: function (e) {\n\n\t\tvar chart = this.chart,\n\t\t\tchartOptions = chart.options.chart,\n\t\t\tchartX = e.chartX,\n\t\t\tchartY = e.chartY,\n\t\t\tzoomHor = this.zoomHor,\n\t\t\tzoomVert = this.zoomVert,\n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tclickedInside,\n\t\t\tsize,\n\t\t\tmouseDownX = this.mouseDownX,\n\t\t\tmouseDownY = this.mouseDownY;\n\n\t\t// If the mouse is outside the plot area, adjust to cooordinates\n\t\t// inside to prevent the selection marker from going outside\n\t\tif (chartX < plotLeft) {\n\t\t\tchartX = plotLeft;\n\t\t} else if (chartX > plotLeft + plotWidth) {\n\t\t\tchartX = plotLeft + plotWidth;\n\t\t}\n\n\t\tif (chartY < plotTop) {\n\t\t\tchartY = plotTop;\n\t\t} else if (chartY > plotTop + plotHeight) {\n\t\t\tchartY = plotTop + plotHeight;\n\t\t}\n\t\t\n\t\t// determine if the mouse has moved more than 10px\n\t\tthis.hasDragged = Math.sqrt(\n\t\t\tMath.pow(mouseDownX - chartX, 2) +\n\t\t\tMath.pow(mouseDownY - chartY, 2)\n\t\t);\n\t\tif (this.hasDragged > 10) {\n\t\t\tclickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop);\n\n\t\t\t// make a selection\n\t\t\tif (chart.hasCartesianSeries && (this.zoomX || this.zoomY) && clickedInside) {\n\t\t\t\tif (!this.selectionMarker) {\n\t\t\t\t\tthis.selectionMarker = chart.renderer.rect(\n\t\t\t\t\t\tplotLeft,\n\t\t\t\t\t\tplotTop,\n\t\t\t\t\t\tzoomHor ? 1 : plotWidth,\n\t\t\t\t\t\tzoomVert ? 1 : plotHeight,\n\t\t\t\t\t\t0\n\t\t\t\t\t)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tfill: chartOptions.selectionMarkerFill || 'rgba(69,114,167,0.25)',\n\t\t\t\t\t\tzIndex: 7\n\t\t\t\t\t})\n\t\t\t\t\t.add();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// adjust the width of the selection marker\n\t\t\tif (this.selectionMarker && zoomHor) {\n\t\t\t\tsize = chartX - mouseDownX;\n\t\t\t\tthis.selectionMarker.attr({\n\t\t\t\t\twidth: mathAbs(size),\n\t\t\t\t\tx: (size > 0 ? 0 : size) + mouseDownX\n\t\t\t\t});\n\t\t\t}\n\t\t\t// adjust the height of the selection marker\n\t\t\tif (this.selectionMarker && zoomVert) {\n\t\t\t\tsize = chartY - mouseDownY;\n\t\t\t\tthis.selectionMarker.attr({\n\t\t\t\t\theight: mathAbs(size),\n\t\t\t\t\ty: (size > 0 ? 0 : size) + mouseDownY\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// panning\n\t\t\tif (clickedInside && !this.selectionMarker && chartOptions.panning) {\n\t\t\t\tchart.pan(e, chartOptions.panning);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * On mouse up or touch end across the entire document, drop the selection.\n\t */\n\tdrop: function (e) {\n\t\tvar chart = this.chart,\n\t\t\thasPinched = this.hasPinched;\n\n\t\tif (this.selectionMarker) {\n\t\t\tvar selectionData = {\n\t\t\t\t\txAxis: [],\n\t\t\t\t\tyAxis: [],\n\t\t\t\t\toriginalEvent: e.originalEvent || e\n\t\t\t\t},\n\t\t\t\tselectionBox = this.selectionMarker,\n\t\t\t\tselectionLeft = selectionBox.x,\n\t\t\t\tselectionTop = selectionBox.y,\n\t\t\t\trunZoom;\n\t\t\t// a selection has been made\n\t\t\tif (this.hasDragged || hasPinched) {\n\n\t\t\t\t// record each axis' min and max\n\t\t\t\teach(chart.axes, function (axis) {\n\t\t\t\t\tif (axis.zoomEnabled) {\n\t\t\t\t\t\tvar horiz = axis.horiz,\n\t\t\t\t\t\t\tselectionMin = axis.toValue((horiz ? selectionLeft : selectionTop)),\n\t\t\t\t\t\t\tselectionMax = axis.toValue((horiz ? selectionLeft + selectionBox.width : selectionTop + selectionBox.height));\n\n\t\t\t\t\t\tif (!isNaN(selectionMin) && !isNaN(selectionMax)) { // #859\n\t\t\t\t\t\t\tselectionData[axis.xOrY + 'Axis'].push({\n\t\t\t\t\t\t\t\taxis: axis,\n\t\t\t\t\t\t\t\tmin: mathMin(selectionMin, selectionMax), // for reversed axes,\n\t\t\t\t\t\t\t\tmax: mathMax(selectionMin, selectionMax)\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\trunZoom = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (runZoom) {\n\t\t\t\t\tfireEvent(chart, 'selection', selectionData, function (args) { \n\t\t\t\t\t\tchart.zoom(extend(args, hasPinched ? { animation: false } : null)); \n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tthis.selectionMarker = this.selectionMarker.destroy();\n\n\t\t\t// Reset scaling preview\n\t\t\tif (hasPinched) {\n\t\t\t\tthis.scaleGroups();\n\t\t\t}\n\t\t}\n\n\t\t// Reset all\n\t\tif (chart) { // it may be destroyed on mouse up - #877\n\t\t\tcss(chart.container, { cursor: chart._cursor });\n\t\t\tchart.cancelClick = this.hasDragged > 10; // #370\n\t\t\tchart.mouseIsDown = this.hasDragged = this.hasPinched = false;\n\t\t\tthis.pinchDown = [];\n\t\t}\n\t},\n\n\tonContainerMouseDown: function (e) {\n\n\t\te = this.normalize(e);\n\n\t\t// issue #295, dragging not always working in Firefox\n\t\tif (e.preventDefault) {\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\tthis.dragStart(e);\n\t},\n\n\t\n\n\tonDocumentMouseUp: function (e) {\n\t\tthis.drop(e);\n\t},\n\n\t/**\n\t * Special handler for mouse move that will hide the tooltip when the mouse leaves the plotarea.\n\t * Issue #149 workaround. The mouseleave event does not always fire. \n\t */\n\tonDocumentMouseMove: function (e) {\n\t\tvar chart = this.chart,\n\t\t\tchartPosition = this.chartPosition,\n\t\t\thoverSeries = chart.hoverSeries;\n\n\t\te = this.normalize(e, chartPosition);\n\n\t\t// If we're outside, hide the tooltip\n\t\tif (chartPosition && hoverSeries && !this.inClass(e.target, 'highcharts-tracker') &&\n\t\t\t\t!chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\t\t\tthis.reset();\n\t\t}\n\t},\n\n\t/**\n\t * When mouse leaves the container, hide the tooltip.\n\t */\n\tonContainerMouseLeave: function () {\n\t\tthis.reset();\n\t\tthis.chartPosition = null; // also reset the chart position, used in #149 fix\n\t},\n\n\t// The mousemove, touchmove and touchstart event handler\n\tonContainerMouseMove: function (e) {\n\n\t\tvar chart = this.chart;\n\n\t\t// normalize\n\t\te = this.normalize(e);\n\n\t\t// #295\n\t\te.returnValue = false;\n\t\t\n\t\t\n\t\tif (chart.mouseIsDown === 'mousedown') {\n\t\t\tthis.drag(e);\n\t\t} \n\t\t\n\t\t// Show the tooltip and run mouse over events (#977)\n\t\tif ((this.inClass(e.target, 'highcharts-tracker') || \n\t\t\t\tchart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) && !chart.openMenu) {\n\t\t\tthis.runPointActions(e);\n\t\t}\n\t},\n\n\t/**\n\t * Utility to detect whether an element has, or has a parent with, a specific\n\t * class name. Used on detection of tracker objects and on deciding whether\n\t * hovering the tooltip should cause the active series to mouse out.\n\t */\n\tinClass: function (element, className) {\n\t\tvar elemClassName;\n\t\twhile (element) {\n\t\t\telemClassName = attr(element, 'class');\n\t\t\tif (elemClassName) {\n\t\t\t\tif (elemClassName.indexOf(className) !== -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (elemClassName.indexOf(PREFIX + 'container') !== -1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telement = element.parentNode;\n\t\t}\t\t\n\t},\n\n\tonTrackerMouseOut: function (e) {\n\t\tvar series = this.chart.hoverSeries;\n\t\tif (series && !series.options.stickyTracking && !this.inClass(e.toElement || e.relatedTarget, PREFIX + 'tooltip')) {\n\t\t\tseries.onMouseOut();\n\t\t}\n\t},\n\n\tonContainerClick: function (e) {\n\t\tvar chart = this.chart,\n\t\t\thoverPoint = chart.hoverPoint, \n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tinverted = chart.inverted,\n\t\t\tchartPosition,\n\t\t\tplotX,\n\t\t\tplotY;\n\t\t\n\t\te = this.normalize(e);\n\t\te.cancelBubble = true; // IE specific\n\n\t\tif (!chart.cancelClick) {\n\t\t\t\n\t\t\t// On tracker click, fire the series and point events. #783, #1583\n\t\t\tif (hoverPoint && this.inClass(e.target, PREFIX + 'tracker')) {\n\t\t\t\tchartPosition = this.chartPosition;\n\t\t\t\tplotX = hoverPoint.plotX;\n\t\t\t\tplotY = hoverPoint.plotY;\n\n\t\t\t\t// add page position info\n\t\t\t\textend(hoverPoint, {\n\t\t\t\t\tpageX: chartPosition.left + plotLeft +\n\t\t\t\t\t\t(inverted ? chart.plotWidth - plotY : plotX),\n\t\t\t\t\tpageY: chartPosition.top + plotTop +\n\t\t\t\t\t\t(inverted ? chart.plotHeight - plotX : plotY)\n\t\t\t\t});\n\t\t\t\n\t\t\t\t// the series click event\n\t\t\t\tfireEvent(hoverPoint.series, 'click', extend(e, {\n\t\t\t\t\tpoint: hoverPoint\n\t\t\t\t}));\n\n\t\t\t\t// the point click event\n\t\t\t\tif (chart.hoverPoint) { // it may be destroyed (#1844)\n\t\t\t\t\thoverPoint.firePointEvent('click', e);\n\t\t\t\t}\n\n\t\t\t// When clicking outside a tracker, fire a chart event\n\t\t\t} else {\n\t\t\t\textend(e, this.getCoordinates(e));\n\n\t\t\t\t// fire a click event in the chart\n\t\t\t\tif (chart.isInsidePlot(e.chartX - plotLeft, e.chartY - plotTop)) {\n\t\t\t\t\tfireEvent(chart, 'click', e);\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\t},\n\n\tonContainerTouchStart: function (e) {\n\t\tvar chart = this.chart;\n\n\t\tif (e.touches.length === 1) {\n\n\t\t\te = this.normalize(e);\n\n\t\t\tif (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\n\t\t\t\t// Prevent the click pseudo event from firing unless it is set in the options\n\t\t\t\t/*if (!chart.runChartClick) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}*/\n\t\t\t\n\t\t\t\t// Run mouse events and display tooltip etc\n\t\t\t\tthis.runPointActions(e);\n\n\t\t\t\tthis.pinch(e);\n\n\t\t\t} else {\n\t\t\t\t// Hide the tooltip on touching outside the plot area (#1203)\n\t\t\t\tthis.reset();\n\t\t\t}\n\n\t\t} else if (e.touches.length === 2) {\n\t\t\tthis.pinch(e);\n\t\t}\t\t\n\t},\n\n\tonContainerTouchMove: function (e) {\n\t\tif (e.touches.length === 1 || e.touches.length === 2) {\n\t\t\tthis.pinch(e);\n\t\t}\n\t},\n\n\tonDocumentTouchEnd: function (e) {\n\t\tthis.drop(e);\n\t},\n\n\t/**\n\t * Set the JS DOM events on the container and document. This method should contain\n\t * a one-to-one assignment between methods and their handlers. Any advanced logic should\n\t * be moved to the handler reflecting the event's name.\n\t */\n\tsetDOMEvents: function () {\n\n\t\tvar pointer = this,\n\t\t\tcontainer = pointer.chart.container,\n\t\t\tevents;\n\n\t\tthis._events = events = [\n\t\t\t[container, 'onmousedown', 'onContainerMouseDown'],\n\t\t\t[container, 'onmousemove', 'onContainerMouseMove'],\n\t\t\t[container, 'onclick', 'onContainerClick'],\n\t\t\t[container, 'mouseleave', 'onContainerMouseLeave'],\n\t\t\t[doc, 'mousemove', 'onDocumentMouseMove'],\n\t\t\t[doc, 'mouseup', 'onDocumentMouseUp']\n\t\t];\n\n\t\tif (hasTouch) {\n\t\t\tevents.push(\n\t\t\t\t[container, 'ontouchstart', 'onContainerTouchStart'],\n\t\t\t\t[container, 'ontouchmove', 'onContainerTouchMove'],\n\t\t\t\t[doc, 'touchend', 'onDocumentTouchEnd']\n\t\t\t);\n\t\t}\n\n\t\teach(events, function (eventConfig) {\n\n\t\t\t// First, create the callback function that in turn calls the method on Pointer\n\t\t\tpointer['_' + eventConfig[2]] = function (e) {\n\t\t\t\tpointer[eventConfig[2]](e);\n\t\t\t};\n\n\t\t\t// Now attach the function, either as a direct property or through addEvent\n\t\t\tif (eventConfig[1].indexOf('on') === 0) {\n\t\t\t\teventConfig[0][eventConfig[1]] = pointer['_' + eventConfig[2]];\n\t\t\t} else {\n\t\t\t\taddEvent(eventConfig[0], eventConfig[1], pointer['_' + eventConfig[2]]);\n\t\t\t}\n\t\t});\n\n\t\t\n\t},\n\n\t/**\n\t * Destroys the Pointer object and disconnects DOM events.\n\t */\n\tdestroy: function () {\n\t\tvar pointer = this;\n\n\t\t// Release all DOM events\n\t\teach(pointer._events, function (eventConfig) {\t\n\t\t\tif (eventConfig[1].indexOf('on') === 0) {\n\t\t\t\teventConfig[0][eventConfig[1]] = null; // delete breaks oldIE\n\t\t\t} else {\t\t\n\t\t\t\tremoveEvent(eventConfig[0], eventConfig[1], pointer['_' + eventConfig[2]]);\n\t\t\t}\n\t\t});\n\t\tdelete pointer._events;\n\n\t\t// memory and CPU leak\n\t\tclearInterval(pointer.tooltipTimeout);\n\t}\n};\n/**\n * The overview of the chart's series\n */\nfunction Legend(chart, options) {\n\tthis.init(chart, options);\n}\n\nLegend.prototype = {\n\t\n\t/**\n\t * Initialize the legend\n\t */\n\tinit: function (chart, options) {\n\t\t\n\t\tvar legend = this,\n\t\t\titemStyle = options.itemStyle,\n\t\t\tpadding = pick(options.padding, 8),\n\t\t\titemMarginTop = options.itemMarginTop || 0;\n\t\n\t\tthis.options = options;\n\n\t\tif (!options.enabled) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tlegend.baseline = pInt(itemStyle.fontSize) + 3 + itemMarginTop; // used in Series prototype\n\t\tlegend.itemStyle = itemStyle;\n\t\tlegend.itemHiddenStyle = merge(itemStyle, options.itemHiddenStyle);\n\t\tlegend.itemMarginTop = itemMarginTop;\n\t\tlegend.padding = padding;\n\t\tlegend.initialItemX = padding;\n\t\tlegend.initialItemY = padding - 5; // 5 is the number of pixels above the text\n\t\tlegend.maxItemWidth = 0;\n\t\tlegend.chart = chart;\n\t\tlegend.itemHeight = 0;\n\t\tlegend.lastLineHeight = 0;\n\n\t\t// Render it\n\t\tlegend.render();\n\n\t\t// move checkboxes\n\t\taddEvent(legend.chart, 'endResize', function () { \n\t\t\tlegend.positionCheckboxes();\n\t\t});\n\n\t},\n\n\t/**\n\t * Set the colors for the legend item\n\t * @param {Object} item A Series or Point instance\n\t * @param {Object} visible Dimmed or colored\n\t */\n\tcolorizeItem: function (item, visible) {\n\t\tvar legend = this,\n\t\t\toptions = legend.options,\n\t\t\tlegendItem = item.legendItem,\n\t\t\tlegendLine = item.legendLine,\n\t\t\tlegendSymbol = item.legendSymbol,\n\t\t\thiddenColor = legend.itemHiddenStyle.color,\n\t\t\ttextColor = visible ? options.itemStyle.color : hiddenColor,\n\t\t\tsymbolColor = visible ? item.color : hiddenColor,\n\t\t\tmarkerOptions = item.options && item.options.marker,\n\t\t\tsymbolAttr = {\n\t\t\t\tstroke: symbolColor,\n\t\t\t\tfill: symbolColor\n\t\t\t},\n\t\t\tkey,\n\t\t\tval;\n\t\t\n\t\tif (legendItem) {\n\t\t\tlegendItem.css({ fill: textColor, color: textColor }); // color for #1553, oldIE\n\t\t}\n\t\tif (legendLine) {\n\t\t\tlegendLine.attr({ stroke: symbolColor });\n\t\t}\n\t\t\n\t\tif (legendSymbol) {\n\t\t\t\n\t\t\t// Apply marker options\n\t\t\tif (markerOptions && legendSymbol.isMarker) { // #585\n\t\t\t\tmarkerOptions = item.convertAttribs(markerOptions);\n\t\t\t\tfor (key in markerOptions) {\n\t\t\t\t\tval = markerOptions[key];\n\t\t\t\t\tif (val !== UNDEFINED) {\n\t\t\t\t\t\tsymbolAttr[key] = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlegendSymbol.attr(symbolAttr);\n\t\t}\n\t},\n\n\t/**\n\t * Position the legend item\n\t * @param {Object} item A Series or Point instance\n\t */\n\tpositionItem: function (item) {\n\t\tvar legend = this,\n\t\t\toptions = legend.options,\n\t\t\tsymbolPadding = options.symbolPadding,\n\t\t\tltr = !options.rtl,\n\t\t\tlegendItemPos = item._legendItemPos,\n\t\t\titemX = legendItemPos[0],\n\t\t\titemY = legendItemPos[1],\n\t\t\tcheckbox = item.checkbox;\n\n\t\tif (item.legendGroup) {\n\t\t\titem.legendGroup.translate(\n\t\t\t\tltr ? itemX : legend.legendWidth - itemX - 2 * symbolPadding - 4,\n\t\t\t\titemY\n\t\t\t);\n\t\t}\n\n\t\tif (checkbox) {\n\t\t\tcheckbox.x = itemX;\n\t\t\tcheckbox.y = itemY;\n\t\t}\n\t},\n\n\t/**\n\t * Destroy a single legend item\n\t * @param {Object} item The series or point\n\t */\n\tdestroyItem: function (item) {\n\t\tvar checkbox = item.checkbox;\n\n\t\t// destroy SVG elements\n\t\teach(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function (key) {\n\t\t\tif (item[key]) {\n\t\t\t\titem[key] = item[key].destroy();\n\t\t\t}\n\t\t});\n\n\t\tif (checkbox) {\n\t\t\tdiscardElement(item.checkbox);\n\t\t}\n\t},\n\n\t/**\n\t * Destroys the legend.\n\t */\n\tdestroy: function () {\n\t\tvar legend = this,\n\t\t\tlegendGroup = legend.group,\n\t\t\tbox = legend.box;\n\n\t\tif (box) {\n\t\t\tlegend.box = box.destroy();\n\t\t}\n\n\t\tif (legendGroup) {\n\t\t\tlegend.group = legendGroup.destroy();\n\t\t}\n\t},\n\n\t/**\n\t * Position the checkboxes after the width is determined\n\t */\n\tpositionCheckboxes: function (scrollOffset) {\n\t\tvar alignAttr = this.group.alignAttr,\n\t\t\ttranslateY,\n\t\t\tclipHeight = this.clipHeight || this.legendHeight;\n\n\t\tif (alignAttr) {\n\t\t\ttranslateY = alignAttr.translateY;\n\t\t\teach(this.allItems, function (item) {\n\t\t\t\tvar checkbox = item.checkbox,\n\t\t\t\t\ttop;\n\t\t\t\t\n\t\t\t\tif (checkbox) {\n\t\t\t\t\ttop = (translateY + checkbox.y + (scrollOffset || 0) + 3);\n\t\t\t\t\tcss(checkbox, {\n\t\t\t\t\t\tleft: (alignAttr.translateX + item.legendItemWidth + checkbox.x - 20) + PX,\n\t\t\t\t\t\ttop: top + PX,\n\t\t\t\t\t\tdisplay: top > translateY - 6 && top < translateY + clipHeight - 6 ? '' : NONE\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Render the legend title on top of the legend\n\t */\n\trenderTitle: function () {\n\t\tvar options = this.options,\n\t\t\tpadding = this.padding,\n\t\t\ttitleOptions = options.title,\n\t\t\ttitleHeight = 0,\n\t\t\tbBox;\n\t\t\n\t\tif (titleOptions.text) {\n\t\t\tif (!this.title) {\n\t\t\t\tthis.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, null, null, null, null, null, 'legend-title')\n\t\t\t\t\t.attr({ zIndex: 1 })\n\t\t\t\t\t.css(titleOptions.style)\n\t\t\t\t\t.add(this.group);\n\t\t\t}\n\t\t\tbBox = this.title.getBBox();\n\t\t\ttitleHeight = bBox.height;\n\t\t\tthis.offsetWidth = bBox.width; // #1717\n\t\t\tthis.contentGroup.attr({ translateY: titleHeight });\n\t\t}\n\t\tthis.titleHeight = titleHeight;\n\t},\n\n\t/**\n\t * Render a single specific legend item\n\t * @param {Object} item A series or point\n\t */\n\trenderItem: function (item) {\n\t\tvar legend = this,\n\t\t\tchart = legend.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = legend.options,\n\t\t\thorizontal = options.layout === 'horizontal',\n\t\t\tsymbolWidth = options.symbolWidth,\n\t\t\tsymbolPadding = options.symbolPadding,\n\t\t\titemStyle = legend.itemStyle,\n\t\t\titemHiddenStyle = legend.itemHiddenStyle,\n\t\t\tpadding = legend.padding,\n\t\t\titemDistance = horizontal ? pick(options.itemDistance, 8) : 0,\n\t\t\tltr = !options.rtl,\n\t\t\titemHeight,\n\t\t\twidthOption = options.width,\n\t\t\titemMarginBottom = options.itemMarginBottom || 0,\n\t\t\titemMarginTop = legend.itemMarginTop,\n\t\t\tinitialItemX = legend.initialItemX,\n\t\t\tbBox,\n\t\t\titemWidth,\n\t\t\tli = item.legendItem,\n\t\t\tseries = item.series || item,\n\t\t\titemOptions = series.options,\n\t\t\tshowCheckbox = itemOptions.showCheckbox,\n\t\t\tuseHTML = options.useHTML;\n\n\t\tif (!li) { // generate it once, later move it\n\n\t\t\t// Generate the group box\n\t\t\t// A group to hold the symbol and text. Text is to be appended in Legend class.\n\t\t\titem.legendGroup = renderer.g('legend-item')\n\t\t\t\t.attr({ zIndex: 1 })\n\t\t\t\t.add(legend.scrollGroup);\n\n\t\t\t// Draw the legend symbol inside the group box\n\t\t\tseries.drawLegendSymbol(legend, item);\n\n\t\t\t// Generate the list item text and add it to the group\n\t\t\titem.legendItem = li = renderer.text(\n\t\t\t\t\toptions.labelFormat ? format(options.labelFormat, item) : options.labelFormatter.call(item),\n\t\t\t\t\tltr ? symbolWidth + symbolPadding : -symbolPadding,\n\t\t\t\t\tlegend.baseline,\n\t\t\t\t\tuseHTML\n\t\t\t\t)\n\t\t\t\t.css(merge(item.visible ? itemStyle : itemHiddenStyle)) // merge to prevent modifying original (#1021)\n\t\t\t\t.attr({\n\t\t\t\t\talign: ltr ? 'left' : 'right',\n\t\t\t\t\tzIndex: 2\n\t\t\t\t})\n\t\t\t\t.add(item.legendGroup);\n\n\t\t\t// Set the events on the item group, or in case of useHTML, the item itself (#1249)\n\t\t\t(useHTML ? li : item.legendGroup).on('mouseover', function () {\n\t\t\t\t\titem.setState(HOVER_STATE);\n\t\t\t\t\tli.css(legend.options.itemHoverStyle);\n\t\t\t\t})\n\t\t\t\t.on('mouseout', function () {\n\t\t\t\t\tli.css(item.visible ? itemStyle : itemHiddenStyle);\n\t\t\t\t\titem.setState();\n\t\t\t\t})\n\t\t\t\t.on('click', function (event) {\n\t\t\t\t\tvar strLegendItemClick = 'legendItemClick',\n\t\t\t\t\t\tfnLegendItemClick = function () {\n\t\t\t\t\t\t\titem.setVisible();\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t// Pass over the click/touch event. #4.\n\t\t\t\t\tevent = {\n\t\t\t\t\t\tbrowserEvent: event\n\t\t\t\t\t};\n\n\t\t\t\t\t// click the name or symbol\n\t\t\t\t\tif (item.firePointEvent) { // point\n\t\t\t\t\t\titem.firePointEvent(strLegendItemClick, event, fnLegendItemClick);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfireEvent(item, strLegendItemClick, event, fnLegendItemClick);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t// Colorize the items\n\t\t\tlegend.colorizeItem(item, item.visible);\n\n\t\t\t// add the HTML checkbox on top\n\t\t\tif (itemOptions && showCheckbox) {\n\t\t\t\titem.checkbox = createElement('input', {\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchecked: item.selected,\n\t\t\t\t\tdefaultChecked: item.selected // required by IE7\n\t\t\t\t}, options.itemCheckboxStyle, chart.container);\n\n\t\t\t\taddEvent(item.checkbox, 'click', function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\tfireEvent(item, 'checkboxClick', {\n\t\t\t\t\t\t\tchecked: target.checked\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\titem.select();\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// calculate the positions for the next line\n\t\tbBox = li.getBBox();\n\n\t\titemWidth = item.legendItemWidth =\n\t\t\toptions.itemWidth || symbolWidth + symbolPadding + bBox.width + itemDistance +\n\t\t\t(showCheckbox ? 20 : 0);\n\t\tlegend.itemHeight = itemHeight = bBox.height;\n\n\t\t// if the item exceeds the width, start a new line\n\t\tif (horizontal && legend.itemX - initialItemX + itemWidth >\n\t\t\t\t(widthOption || (chart.chartWidth - 2 * padding - initialItemX))) {\n\t\t\tlegend.itemX = initialItemX;\n\t\t\tlegend.itemY += itemMarginTop + legend.lastLineHeight + itemMarginBottom;\n\t\t\tlegend.lastLineHeight = 0; // reset for next line\n\t\t}\n\n\t\t// If the item exceeds the height, start a new column\n\t\t/*if (!horizontal && legend.itemY + options.y + itemHeight > chart.chartHeight - spacingTop - spacingBottom) {\n\t\t\tlegend.itemY = legend.initialItemY;\n\t\t\tlegend.itemX += legend.maxItemWidth;\n\t\t\tlegend.maxItemWidth = 0;\n\t\t}*/\n\n\t\t// Set the edge positions\n\t\tlegend.maxItemWidth = mathMax(legend.maxItemWidth, itemWidth);\n\t\tlegend.lastItemY = itemMarginTop + legend.itemY + itemMarginBottom;\n\t\tlegend.lastLineHeight = mathMax(itemHeight, legend.lastLineHeight); // #915\n\n\t\t// cache the position of the newly generated or reordered items\n\t\titem._legendItemPos = [legend.itemX, legend.itemY];\n\n\t\t// advance\n\t\tif (horizontal) {\n\t\t\tlegend.itemX += itemWidth;\n\n\t\t} else {\n\t\t\tlegend.itemY += itemMarginTop + itemHeight + itemMarginBottom;\n\t\t\tlegend.lastLineHeight = itemHeight;\n\t\t}\n\n\t\t// the width of the widest item\n\t\tlegend.offsetWidth = widthOption || mathMax(\n\t\t\t(horizontal ? legend.itemX - initialItemX - itemDistance : itemWidth) + padding,\n\t\t\tlegend.offsetWidth\n\t\t);\n\t},\n\n\t/**\n\t * Render the legend. This method can be called both before and after\n\t * chart.render. If called after, it will only rearrange items instead\n\t * of creating new ones.\n\t */\n\trender: function () {\n\t\tvar legend = this,\n\t\t\tchart = legend.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tlegendGroup = legend.group,\n\t\t\tallItems,\n\t\t\tdisplay,\n\t\t\tlegendWidth,\n\t\t\tlegendHeight,\n\t\t\tbox = legend.box,\n\t\t\toptions = legend.options,\n\t\t\tpadding = legend.padding,\n\t\t\tlegendBorderWidth = options.borderWidth,\n\t\t\tlegendBackgroundColor = options.backgroundColor;\n\n\t\tlegend.itemX = legend.initialItemX;\n\t\tlegend.itemY = legend.initialItemY;\n\t\tlegend.offsetWidth = 0;\n\t\tlegend.lastItemY = 0;\n\n\t\tif (!legendGroup) {\n\t\t\tlegend.group = legendGroup = renderer.g('legend')\n\t\t\t\t.attr({ zIndex: 7 }) \n\t\t\t\t.add();\n\t\t\tlegend.contentGroup = renderer.g()\n\t\t\t\t.attr({ zIndex: 1 }) // above background\n\t\t\t\t.add(legendGroup);\n\t\t\tlegend.scrollGroup = renderer.g()\n\t\t\t\t.add(legend.contentGroup);\n\t\t}\n\t\t\n\t\tlegend.renderTitle();\n\n\t\t// add each series or point\n\t\tallItems = [];\n\t\teach(chart.series, function (serie) {\n\t\t\tvar seriesOptions = serie.options;\n\n\t\t\tif (!seriesOptions.showInLegend || defined(seriesOptions.linkedTo)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// use points or series for the legend item depending on legendType\n\t\t\tallItems = allItems.concat(\n\t\t\t\t\tserie.legendItems ||\n\t\t\t\t\t(seriesOptions.legendType === 'point' ?\n\t\t\t\t\t\t\tserie.data :\n\t\t\t\t\t\t\tserie)\n\t\t\t);\n\t\t});\n\n\t\t// sort by legendIndex\n\t\tstableSort(allItems, function (a, b) {\n\t\t\treturn ((a.options && a.options.legendIndex) || 0) - ((b.options && b.options.legendIndex) || 0);\n\t\t});\n\n\t\t// reversed legend\n\t\tif (options.reversed) {\n\t\t\tallItems.reverse();\n\t\t}\n\n\t\tlegend.allItems = allItems;\n\t\tlegend.display = display = !!allItems.length;\n\n\t\t// render the items\n\t\teach(allItems, function (item) {\n\t\t\tlegend.renderItem(item); \n\t\t});\n\n\t\t// Draw the border\n\t\tlegendWidth = options.width || legend.offsetWidth;\n\t\tlegendHeight = legend.lastItemY + legend.lastLineHeight + legend.titleHeight;\n\t\t\n\t\t\n\t\tlegendHeight = legend.handleOverflow(legendHeight);\n\n\t\tif (legendBorderWidth || legendBackgroundColor) {\n\t\t\tlegendWidth += padding;\n\t\t\tlegendHeight += padding;\n\n\t\t\tif (!box) {\n\t\t\t\tlegend.box = box = renderer.rect(\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tlegendWidth,\n\t\t\t\t\tlegendHeight,\n\t\t\t\t\toptions.borderRadius,\n\t\t\t\t\tlegendBorderWidth || 0\n\t\t\t\t).attr({\n\t\t\t\t\tstroke: options.borderColor,\n\t\t\t\t\t'stroke-width': legendBorderWidth || 0,\n\t\t\t\t\tfill: legendBackgroundColor || NONE\n\t\t\t\t})\n\t\t\t\t.add(legendGroup)\n\t\t\t\t.shadow(options.shadow);\n\t\t\t\tbox.isNew = true;\n\n\t\t\t} else if (legendWidth > 0 && legendHeight > 0) {\n\t\t\t\tbox[box.isNew ? 'attr' : 'animate'](\n\t\t\t\t\tbox.crisp(null, null, null, legendWidth, legendHeight)\n\t\t\t\t);\n\t\t\t\tbox.isNew = false;\n\t\t\t}\n\n\t\t\t// hide the border if no items\n\t\t\tbox[display ? 'show' : 'hide']();\n\t\t}\n\t\t\n\t\tlegend.legendWidth = legendWidth;\n\t\tlegend.legendHeight = legendHeight;\n\n\t\t// Now that the legend width and height are established, put the items in the \n\t\t// final position\n\t\teach(allItems, function (item) {\n\t\t\tlegend.positionItem(item);\n\t\t});\n\n\t\t// 1.x compatibility: positioning based on style\n\t\t/*var props = ['left', 'right', 'top', 'bottom'],\n\t\t\tprop,\n\t\t\ti = 4;\n\t\twhile (i--) {\n\t\t\tprop = props[i];\n\t\t\tif (options.style[prop] && options.style[prop] !== 'auto') {\n\t\t\t\toptions[i < 2 ? 'align' : 'verticalAlign'] = prop;\n\t\t\t\toptions[i < 2 ? 'x' : 'y'] = pInt(options.style[prop]) * (i % 2 ? -1 : 1);\n\t\t\t}\n\t\t}*/\n\n\t\tif (display) {\n\t\t\tlegendGroup.align(extend({\n\t\t\t\twidth: legendWidth,\n\t\t\t\theight: legendHeight\n\t\t\t}, options), true, 'spacingBox');\n\t\t}\n\n\t\tif (!chart.isResizing) {\n\t\t\tthis.positionCheckboxes();\n\t\t}\n\t},\n\t\n\t/**\n\t * Set up the overflow handling by adding navigation with up and down arrows below the\n\t * legend.\n\t */\n\thandleOverflow: function (legendHeight) {\n\t\tvar legend = this,\n\t\t\tchart = this.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tpageCount,\n\t\t\toptions = this.options,\n\t\t\toptionsY = options.y,\n\t\t\talignTop = options.verticalAlign === 'top',\n\t\t\tspaceHeight = chart.spacingBox.height + (alignTop ? -optionsY : optionsY) - this.padding,\n\t\t\tmaxHeight = options.maxHeight,\n\t\t\tclipHeight,\n\t\t\tclipRect = this.clipRect,\n\t\t\tnavOptions = options.navigation,\n\t\t\tanimation = pick(navOptions.animation, true),\n\t\t\tarrowSize = navOptions.arrowSize || 12,\n\t\t\tnav = this.nav;\n\t\t\t\n\t\t// Adjust the height\n\t\tif (options.layout === 'horizontal') {\n\t\t\tspaceHeight /= 2;\n\t\t}\n\t\tif (maxHeight) {\n\t\t\tspaceHeight = mathMin(spaceHeight, maxHeight);\n\t\t}\n\t\t\n\t\t// Reset the legend height and adjust the clipping rectangle\n\t\tif (legendHeight > spaceHeight && !options.useHTML) {\n\n\t\t\tthis.clipHeight = clipHeight = spaceHeight - 20 - this.titleHeight;\n\t\t\tthis.pageCount = pageCount = mathCeil(legendHeight / clipHeight);\n\t\t\tthis.currentPage = pick(this.currentPage, 1);\n\t\t\tthis.fullHeight = legendHeight;\n\t\t\t\n\t\t\t// Only apply clipping if needed. Clipping causes blurred legend in PDF export (#1787)\n\t\t\tif (!clipRect) {\n\t\t\t\tclipRect = legend.clipRect = renderer.clipRect(0, 0, 9999, 0);\n\t\t\t\tlegend.contentGroup.clip(clipRect);\n\t\t\t}\n\t\t\tclipRect.attr({\n\t\t\t\theight: clipHeight\n\t\t\t});\n\t\t\t\n\t\t\t// Add navigation elements\n\t\t\tif (!nav) {\n\t\t\t\tthis.nav = nav = renderer.g().attr({ zIndex: 1 }).add(this.group);\n\t\t\t\tthis.up = renderer.symbol('triangle', 0, 0, arrowSize, arrowSize)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tlegend.scroll(-1, animation);\n\t\t\t\t\t})\n\t\t\t\t\t.add(nav);\n\t\t\t\tthis.pager = renderer.text('', 15, 10)\n\t\t\t\t\t.css(navOptions.style)\n\t\t\t\t\t.add(nav);\n\t\t\t\tthis.down = renderer.symbol('triangle-down', 0, 0, arrowSize, arrowSize)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tlegend.scroll(1, animation);\n\t\t\t\t\t})\n\t\t\t\t\t.add(nav);\n\t\t\t}\n\t\t\t\n\t\t\t// Set initial position\n\t\t\tlegend.scroll(0);\n\t\t\t\n\t\t\tlegendHeight = spaceHeight;\n\t\t\t\n\t\t} else if (nav) {\n\t\t\tclipRect.attr({\n\t\t\t\theight: chart.chartHeight\n\t\t\t});\n\t\t\tnav.hide();\n\t\t\tthis.scrollGroup.attr({\n\t\t\t\ttranslateY: 1\n\t\t\t});\n\t\t\tthis.clipHeight = 0; // #1379\n\t\t}\n\t\t\n\t\treturn legendHeight;\n\t},\n\t\n\t/**\n\t * Scroll the legend by a number of pages\n\t * @param {Object} scrollBy\n\t * @param {Object} animation\n\t */\n\tscroll: function (scrollBy, animation) {\n\t\tvar pageCount = this.pageCount,\n\t\t\tcurrentPage = this.currentPage + scrollBy,\n\t\t\tclipHeight = this.clipHeight,\n\t\t\tnavOptions = this.options.navigation,\n\t\t\tactiveColor = navOptions.activeColor,\n\t\t\tinactiveColor = navOptions.inactiveColor,\n\t\t\tpager = this.pager,\n\t\t\tpadding = this.padding,\n\t\t\tscrollOffset;\n\t\t\n\t\t// When resizing while looking at the last page\n\t\tif (currentPage > pageCount) {\n\t\t\tcurrentPage = pageCount;\n\t\t}\n\t\t\n\t\tif (currentPage > 0) {\n\t\t\t\n\t\t\tif (animation !== UNDEFINED) {\n\t\t\t\tsetAnimation(animation, this.chart);\n\t\t\t}\n\t\t\t\n\t\t\tthis.nav.attr({\n\t\t\t\ttranslateX: padding,\n\t\t\t\ttranslateY: clipHeight + 7 + this.titleHeight,\n\t\t\t\tvisibility: VISIBLE\n\t\t\t});\n\t\t\tthis.up.attr({\n\t\t\t\t\tfill: currentPage === 1 ? inactiveColor : activeColor\n\t\t\t\t})\n\t\t\t\t.css({\n\t\t\t\t\tcursor: currentPage === 1 ? 'default' : 'pointer'\n\t\t\t\t});\n\t\t\tpager.attr({\n\t\t\t\ttext: currentPage + '/' + this.pageCount\n\t\t\t});\n\t\t\tthis.down.attr({\n\t\t\t\t\tx: 18 + this.pager.getBBox().width, // adjust to text width\n\t\t\t\t\tfill: currentPage === pageCount ? inactiveColor : activeColor\n\t\t\t\t})\n\t\t\t\t.css({\n\t\t\t\t\tcursor: currentPage === pageCount ? 'default' : 'pointer'\n\t\t\t\t});\n\t\t\t\n\t\t\tscrollOffset = -mathMin(clipHeight * (currentPage - 1), this.fullHeight - clipHeight + padding) + 1;\n\t\t\tthis.scrollGroup.animate({\n\t\t\t\ttranslateY: scrollOffset\n\t\t\t});\n\t\t\tpager.attr({\n\t\t\t\ttext: currentPage + '/' + pageCount\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tthis.currentPage = currentPage;\n\t\t\tthis.positionCheckboxes(scrollOffset);\n\t\t}\n\t\t\t\n\t}\n\t\n};\n\n// Workaround for #2030, horizontal legend items not displaying in IE11 Preview.\n// TODO: When IE11 is released, check again for this bug, and remove the fix\n// or make a better one.\nif (/Trident.*?11\\.0/.test(userAgent)) {\n\twrap(Legend.prototype, 'positionItem', function (proceed, item) {\n\t\tvar legend = this;\n\t\tsetTimeout(function () {\n\t\t\tproceed.call(legend, item);\n\t\t});\n\t});\n}\n\n/**\n * The chart class\n * @param {Object} options\n * @param {Function} callback Function to run when the chart has loaded\n */\nfunction Chart() {\n\tthis.init.apply(this, arguments);\n}\n\nChart.prototype = {\n\n\t/**\n\t * Initialize the chart\n\t */\n\tinit: function (userOptions, callback) {\n\n\t\t// Handle regular options\n\t\tvar options,\n\t\t\tseriesOptions = userOptions.series; // skip merging data points to increase performance\n\n\t\tuserOptions.series = null;\n\t\toptions = merge(defaultOptions, userOptions); // do the merge\n\t\toptions.series = userOptions.series = seriesOptions; // set back the series data\n\n\t\tvar optionsChart = options.chart;\n\t\t\n\t\t// Create margin & spacing array\n\t\tthis.margin = this.splashArray('margin', optionsChart);\n\t\tthis.spacing = this.splashArray('spacing', optionsChart);\n\n\t\tvar chartEvents = optionsChart.events;\n\n\t\t//this.runChartClick = chartEvents && !!chartEvents.click;\n\t\tthis.bounds = { h: {}, v: {} }; // Pixel data bounds for touch zoom\n\n\t\tthis.callback = callback;\n\t\tthis.isResizing = 0;\n\t\tthis.options = options;\n\t\t//chartTitleOptions = UNDEFINED;\n\t\t//chartSubtitleOptions = UNDEFINED;\n\n\t\tthis.axes = [];\n\t\tthis.series = [];\n\t\tthis.hasCartesianSeries = optionsChart.showAxes;\n\t\t//this.axisOffset = UNDEFINED;\n\t\t//this.maxTicks = UNDEFINED; // handle the greatest amount of ticks on grouped axes\n\t\t//this.inverted = UNDEFINED;\n\t\t//this.loadingShown = UNDEFINED;\n\t\t//this.container = UNDEFINED;\n\t\t//this.chartWidth = UNDEFINED;\n\t\t//this.chartHeight = UNDEFINED;\n\t\t//this.marginRight = UNDEFINED;\n\t\t//this.marginBottom = UNDEFINED;\n\t\t//this.containerWidth = UNDEFINED;\n\t\t//this.containerHeight = UNDEFINED;\n\t\t//this.oldChartWidth = UNDEFINED;\n\t\t//this.oldChartHeight = UNDEFINED;\n\n\t\t//this.renderTo = UNDEFINED;\n\t\t//this.renderToClone = UNDEFINED;\n\n\t\t//this.spacingBox = UNDEFINED\n\n\t\t//this.legend = UNDEFINED;\n\n\t\t// Elements\n\t\t//this.chartBackground = UNDEFINED;\n\t\t//this.plotBackground = UNDEFINED;\n\t\t//this.plotBGImage = UNDEFINED;\n\t\t//this.plotBorder = UNDEFINED;\n\t\t//this.loadingDiv = UNDEFINED;\n\t\t//this.loadingSpan = UNDEFINED;\n\n\t\tvar chart = this,\n\t\t\teventType;\n\n\t\t// Add the chart to the global lookup\n\t\tchart.index = charts.length;\n\t\tcharts.push(chart);\n\n\t\t// Set up auto resize\n\t\tif (optionsChart.reflow !== false) {\n\t\t\taddEvent(chart, 'load', function () {\n\t\t\t\tchart.initReflow();\n\t\t\t});\n\t\t}\n\n\t\t// Chart event handlers\n\t\tif (chartEvents) {\n\t\t\tfor (eventType in chartEvents) {\n\t\t\t\taddEvent(chart, eventType, chartEvents[eventType]);\n\t\t\t}\n\t\t}\n\n\t\tchart.xAxis = [];\n\t\tchart.yAxis = [];\n\n\t\t// Expose methods and variables\n\t\tchart.animation = useCanVG ? false : pick(optionsChart.animation, true);\n\t\tchart.pointCount = 0;\n\t\tchart.counters = new ChartCounters();\n\n\t\tchart.firstRender();\n\t},\n\n\t/**\n\t * Initialize an individual series, called internally before render time\n\t */\n\tinitSeries: function (options) {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\ttype = options.type || optionsChart.type || optionsChart.defaultSeriesType,\n\t\t\tseries,\n\t\t\tconstr = seriesTypes[type];\n\n\t\t// No such series type\n\t\tif (!constr) {\n\t\t\terror(17, true);\n\t\t}\n\n\t\tseries = new constr();\n\t\tseries.init(this, options);\n\t\treturn series;\n\t},\n\n\t/**\n\t * Add a series dynamically after  time\n\t *\n\t * @param {Object} options The config options\n\t * @param {Boolean} redraw Whether to redraw the chart after adding. Defaults to true.\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t *\n\t * @return {Object} series The newly created series object\n\t */\n\taddSeries: function (options, redraw, animation) {\n\t\tvar series,\n\t\t\tchart = this;\n\n\t\tif (options) {\n\t\t\tredraw = pick(redraw, true); // defaults to true\n\n\t\t\tfireEvent(chart, 'addSeries', { options: options }, function () {\n\t\t\t\tseries = chart.initSeries(options);\n\t\t\t\t\n\t\t\t\tchart.isDirtyLegend = true; // the series array is out of sync with the display\n\t\t\t\tchart.linkSeries();\n\t\t\t\tif (redraw) {\n\t\t\t\t\tchart.redraw(animation);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn series;\n\t},\n\n\t/**\n     * Add an axis to the chart\n     * @param {Object} options The axis option\n     * @param {Boolean} isX Whether it is an X axis or a value axis\n     */\n\taddAxis: function (options, isX, redraw, animation) {\n\t\tvar key = isX ? 'xAxis' : 'yAxis',\n\t\t\tchartOptions = this.options,\n\t\t\taxis;\n\n\t\t/*jslint unused: false*/\n\t\taxis = new Axis(this, merge(options, {\n\t\t\tindex: this[key].length,\n\t\t\tisX: isX\n\t\t}));\n\t\t/*jslint unused: true*/\n\n\t\t// Push the new axis options to the chart options\n\t\tchartOptions[key] = splat(chartOptions[key] || {});\n\t\tchartOptions[key].push(options);\n\n\t\tif (pick(redraw, true)) {\n\t\t\tthis.redraw(animation);\n\t\t}\n\t},\n\n\t/**\n\t * Check whether a given point is within the plot area\n\t *\n\t * @param {Number} plotX Pixel x relative to the plot area\n\t * @param {Number} plotY Pixel y relative to the plot area\n\t * @param {Boolean} inverted Whether the chart is inverted\n\t */\n\tisInsidePlot: function (plotX, plotY, inverted) {\n\t\tvar x = inverted ? plotY : plotX,\n\t\t\ty = inverted ? plotX : plotY;\n\t\t\t\n\t\treturn x >= 0 &&\n\t\t\tx <= this.plotWidth &&\n\t\t\ty >= 0 &&\n\t\t\ty <= this.plotHeight;\n\t},\n\n\t/**\n\t * Adjust all axes tick amounts\n\t */\n\tadjustTickAmounts: function () {\n\t\tif (this.options.chart.alignTicks !== false) {\n\t\t\teach(this.axes, function (axis) {\n\t\t\t\taxis.adjustTickAmount();\n\t\t\t});\n\t\t}\n\t\tthis.maxTicks = null;\n\t},\n\n\t/**\n\t * Redraw legend, axes or series based on updated data\n\t *\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\tredraw: function (animation) {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\tseries = chart.series,\n\t\t\tpointer = chart.pointer,\n\t\t\tlegend = chart.legend,\n\t\t\tredrawLegend = chart.isDirtyLegend,\n\t\t\thasStackedSeries,\n\t\t\thasDirtyStacks,\n\t\t\tisDirtyBox = chart.isDirtyBox, // todo: check if it has actually changed?\n\t\t\tseriesLength = series.length,\n\t\t\ti = seriesLength,\n\t\t\tserie,\n\t\t\trenderer = chart.renderer,\n\t\t\tisHiddenChart = renderer.isHidden(),\n\t\t\tafterRedraw = [];\n\t\t\t\n\t\tsetAnimation(animation, chart);\n\t\t\n\t\tif (isHiddenChart) {\n\t\t\tchart.cloneRenderTo();\n\t\t}\n\n\t\t// Adjust title layout (reflow multiline text)\n\t\tchart.layOutTitles();\n\n\t\t// link stacked series\n\t\twhile (i--) {\n\t\t\tserie = series[i];\n\n\t\t\tif (serie.options.stacking) {\n\t\t\t\thasStackedSeries = true;\n\t\t\t\t\n\t\t\t\tif (serie.isDirty) {\n\t\t\t\t\thasDirtyStacks = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (hasDirtyStacks) { // mark others as dirty\n\t\t\ti = seriesLength;\n\t\t\twhile (i--) {\n\t\t\t\tserie = series[i];\n\t\t\t\tif (serie.options.stacking) {\n\t\t\t\t\tserie.isDirty = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// handle updated data in the series\n\t\teach(series, function (serie) {\n\t\t\tif (serie.isDirty) { // prepare the data so axis can read it\n\t\t\t\tif (serie.options.legendType === 'point') {\n\t\t\t\t\tredrawLegend = true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// handle added or removed series\n\t\tif (redrawLegend && legend.options.enabled) { // series or pie points are added or removed\n\t\t\t// draw legend graphics\n\t\t\tlegend.render();\n\n\t\t\tchart.isDirtyLegend = false;\n\t\t}\n\n\t\t// reset stacks\n\t\tif (hasStackedSeries) {\n\t\t\tchart.getStacks();\n\t\t}\n\n\n\t\tif (chart.hasCartesianSeries) {\n\t\t\tif (!chart.isResizing) {\n\n\t\t\t\t// reset maxTicks\n\t\t\t\tchart.maxTicks = null;\n\n\t\t\t\t// set axes scales\n\t\t\t\teach(axes, function (axis) {\n\t\t\t\t\taxis.setScale();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tchart.adjustTickAmounts();\n\t\t\tchart.getMargins();\n\n\t\t\t// If one axis is dirty, all axes must be redrawn (#792, #2169)\n\t\t\teach(axes, function (axis) {\n\t\t\t\tif (axis.isDirty) {\n\t\t\t\t\tisDirtyBox = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// redraw axes\n\t\t\teach(axes, function (axis) {\n\t\t\t\t\n\t\t\t\t// Fire 'afterSetExtremes' only if extremes are set\n\t\t\t\tif (axis.isDirtyExtremes) { // #821\n\t\t\t\t\taxis.isDirtyExtremes = false;\n\t\t\t\t\tafterRedraw.push(function () { // prevent a recursive call to chart.redraw() (#1119)\n\t\t\t\t\t\tfireEvent(axis, 'afterSetExtremes', extend(axis.eventArgs, axis.getExtremes())); // #747, #751\n\t\t\t\t\t\tdelete axis.eventArgs;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (isDirtyBox || hasStackedSeries) {\n\t\t\t\t\taxis.redraw();\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t}\n\t\t// the plot areas size has changed\n\t\tif (isDirtyBox) {\n\t\t\tchart.drawChartBox();\n\t\t}\n\n\n\t\t// redraw affected series\n\t\teach(series, function (serie) {\n\t\t\tif (serie.isDirty && serie.visible &&\n\t\t\t\t\t(!serie.isCartesian || serie.xAxis)) { // issue #153\n\t\t\t\tserie.redraw();\n\t\t\t}\n\t\t});\n\n\t\t// move tooltip or reset\n\t\tif (pointer && pointer.reset) {\n\t\t\tpointer.reset(true);\n\t\t}\n\n\t\t// redraw if canvas\n\t\trenderer.draw();\n\n\t\t// fire the event\n\t\tfireEvent(chart, 'redraw'); // jQuery breaks this when calling it from addEvent. Overwrites chart.redraw\n\t\t\n\t\tif (isHiddenChart) {\n\t\t\tchart.cloneRenderTo(true);\n\t\t}\n\t\t\n\t\t// Fire callbacks that are put on hold until after the redraw\n\t\teach(afterRedraw, function (callback) {\n\t\t\tcallback.call();\n\t\t});\n\t},\n\n\n\n\t/**\n\t * Dim the chart and show a loading text or symbol\n\t * @param {String} str An optional text to show in the loading label instead of the default one\n\t */\n\tshowLoading: function (str) {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\tloadingDiv = chart.loadingDiv;\n\n\t\tvar loadingOptions = options.loading;\n\n\t\t// create the layer at the first call\n\t\tif (!loadingDiv) {\n\t\t\tchart.loadingDiv = loadingDiv = createElement(DIV, {\n\t\t\t\tclassName: PREFIX + 'loading'\n\t\t\t}, extend(loadingOptions.style, {\n\t\t\t\tzIndex: 10,\n\t\t\t\tdisplay: NONE\n\t\t\t}), chart.container);\n\n\t\t\tchart.loadingSpan = createElement(\n\t\t\t\t'span',\n\t\t\t\tnull,\n\t\t\t\tloadingOptions.labelStyle,\n\t\t\t\tloadingDiv\n\t\t\t);\n\n\t\t}\n\n\t\t// update text\n\t\tchart.loadingSpan.innerHTML = str || options.lang.loading;\n\n\t\t// show it\n\t\tif (!chart.loadingShown) {\n\t\t\tcss(loadingDiv, { \n\t\t\t\topacity: 0, \n\t\t\t\tdisplay: '',\n\t\t\t\tleft: chart.plotLeft + PX,\n\t\t\t\ttop: chart.plotTop + PX,\n\t\t\t\twidth: chart.plotWidth + PX,\n\t\t\t\theight: chart.plotHeight + PX\n\t\t\t});\n\t\t\tanimate(loadingDiv, {\n\t\t\t\topacity: loadingOptions.style.opacity\n\t\t\t}, {\n\t\t\t\tduration: loadingOptions.showDuration || 0\n\t\t\t});\n\t\t\tchart.loadingShown = true;\n\t\t}\n\t},\n\n\t/**\n\t * Hide the loading layer\n\t */\n\thideLoading: function () {\n\t\tvar options = this.options,\n\t\t\tloadingDiv = this.loadingDiv;\n\n\t\tif (loadingDiv) {\n\t\t\tanimate(loadingDiv, {\n\t\t\t\topacity: 0\n\t\t\t}, {\n\t\t\t\tduration: options.loading.hideDuration || 100,\n\t\t\t\tcomplete: function () {\n\t\t\t\t\tcss(loadingDiv, { display: NONE });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.loadingShown = false;\n\t},\n\n\t/**\n\t * Get an axis, series or point object by id.\n\t * @param id {String} The id as given in the configuration options\n\t */\n\tget: function (id) {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\tseries = chart.series;\n\n\t\tvar i,\n\t\t\tj,\n\t\t\tpoints;\n\n\t\t// search axes\n\t\tfor (i = 0; i < axes.length; i++) {\n\t\t\tif (axes[i].options.id === id) {\n\t\t\t\treturn axes[i];\n\t\t\t}\n\t\t}\n\n\t\t// search series\n\t\tfor (i = 0; i < series.length; i++) {\n\t\t\tif (series[i].options.id === id) {\n\t\t\t\treturn series[i];\n\t\t\t}\n\t\t}\n\n\t\t// search points\n\t\tfor (i = 0; i < series.length; i++) {\n\t\t\tpoints = series[i].points || [];\n\t\t\tfor (j = 0; j < points.length; j++) {\n\t\t\t\tif (points[j].id === id) {\n\t\t\t\t\treturn points[j];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t},\n\n\t/**\n\t * Create the Axis instances based on the config options\n\t */\n\tgetAxes: function () {\n\t\tvar chart = this,\n\t\t\toptions = this.options,\n\t\t\txAxisOptions = options.xAxis = splat(options.xAxis || {}),\n\t\t\tyAxisOptions = options.yAxis = splat(options.yAxis || {}),\n\t\t\toptionsArray,\n\t\t\taxis;\n\n\t\t// make sure the options are arrays and add some members\n\t\teach(xAxisOptions, function (axis, i) {\n\t\t\taxis.index = i;\n\t\t\taxis.isX = true;\n\t\t});\n\n\t\teach(yAxisOptions, function (axis, i) {\n\t\t\taxis.index = i;\n\t\t});\n\n\t\t// concatenate all axis options into one array\n\t\toptionsArray = xAxisOptions.concat(yAxisOptions);\n\n\t\teach(optionsArray, function (axisOptions) {\n\t\t\taxis = new Axis(chart, axisOptions);\n\t\t});\n\n\t\tchart.adjustTickAmounts();\n\t},\n\n\n\t/**\n\t * Get the currently selected points from all series\n\t */\n\tgetSelectedPoints: function () {\n\t\tvar points = [];\n\t\teach(this.series, function (serie) {\n\t\t\tpoints = points.concat(grep(serie.points || [], function (point) {\n\t\t\t\treturn point.selected;\n\t\t\t}));\n\t\t});\n\t\treturn points;\n\t},\n\n\t/**\n\t * Get the currently selected series\n\t */\n\tgetSelectedSeries: function () {\n\t\treturn grep(this.series, function (serie) {\n\t\t\treturn serie.selected;\n\t\t});\n\t},\n\n\t/**\n\t * Generate stacks for each series and calculate stacks total values\n\t */\n\tgetStacks: function () {\n\t\tvar chart = this;\n\n\t\t// reset stacks for each yAxis\n\t\teach(chart.yAxis, function (axis) {\n\t\t\tif (axis.stacks && axis.hasVisibleSeries) {\n\t\t\t\taxis.oldStacks = axis.stacks;\n\t\t\t}\n\t\t});\n\n\t\teach(chart.series, function (series) {\n\t\t\tif (series.options.stacking && (series.visible === true || chart.options.chart.ignoreHiddenSeries === false)) {\n\t\t\t\tseries.stackKey = series.type + pick(series.options.stack, '');\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Display the zoom button\n\t */\n\tshowResetZoom: function () {\n\t\tvar chart = this,\n\t\t\tlang = defaultOptions.lang,\n\t\t\tbtnOptions = chart.options.chart.resetZoomButton,\n\t\t\ttheme = btnOptions.theme,\n\t\t\tstates = theme.states,\n\t\t\talignTo = btnOptions.relativeTo === 'chart' ? null : 'plotBox';\n\t\t\t\n\t\tthis.resetZoomButton = chart.renderer.button(lang.resetZoom, null, null, function () { chart.zoomOut(); }, theme, states && states.hover)\n\t\t\t.attr({\n\t\t\t\talign: btnOptions.position.align,\n\t\t\t\ttitle: lang.resetZoomTitle\n\t\t\t})\n\t\t\t.add()\n\t\t\t.align(btnOptions.position, false, alignTo);\n\t\t\t\n\t},\n\n\t/**\n\t * Zoom out to 1:1\n\t */\n\tzoomOut: function () {\n\t\tvar chart = this;\n\t\tfireEvent(chart, 'selection', { resetSelection: true }, function () { \n\t\t\tchart.zoom();\n\t\t});\n\t},\n\n\t/**\n\t * Zoom into a given portion of the chart given by axis coordinates\n\t * @param {Object} event\n\t */\n\tzoom: function (event) {\n\t\tvar chart = this,\n\t\t\thasZoomed,\n\t\t\tpointer = chart.pointer,\n\t\t\tdisplayButton = false,\n\t\t\tresetZoomButton;\n\n\t\t// If zoom is called with no arguments, reset the axes\n\t\tif (!event || event.resetSelection) {\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\thasZoomed = axis.zoom();\n\t\t\t});\n\t\t} else { // else, zoom in on all axes\n\t\t\teach(event.xAxis.concat(event.yAxis), function (axisData) {\n\t\t\t\tvar axis = axisData.axis,\n\t\t\t\t\tisXAxis = axis.isXAxis;\n\n\t\t\t\t// don't zoom more than minRange\n\t\t\t\tif (pointer[isXAxis ? 'zoomX' : 'zoomY'] || pointer[isXAxis ? 'pinchX' : 'pinchY']) {\n\t\t\t\t\thasZoomed = axis.zoom(axisData.min, axisData.max);\n\t\t\t\t\tif (axis.displayBtn) {\n\t\t\t\t\t\tdisplayButton = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\t// Show or hide the Reset zoom button\n\t\tresetZoomButton = chart.resetZoomButton;\n\t\tif (displayButton && !resetZoomButton) {\n\t\t\tchart.showResetZoom();\n\t\t} else if (!displayButton && isObject(resetZoomButton)) {\n\t\t\tchart.resetZoomButton = resetZoomButton.destroy();\n\t\t}\n\t\t\n\n\t\t// Redraw\n\t\tif (hasZoomed) {\n\t\t\tchart.redraw(\n\t\t\t\tpick(chart.options.chart.animation, event && event.animation, chart.pointCount < 100) // animation\n\t\t\t);\n\t\t}\n\t},\n\n\t/**\n\t * Pan the chart by dragging the mouse across the pane. This function is called\n\t * on mouse move, and the distance to pan is computed from chartX compared to\n\t * the first chartX position in the dragging operation.\n\t */\n\tpan: function (e, panning) {\n\n\t\tvar chart = this,\n\t\t\thoverPoints = chart.hoverPoints,\n\t\t\tdoRedraw;\n\n\t\t// remove active points for shared tooltip\n\t\tif (hoverPoints) {\n\t\t\teach(hoverPoints, function (point) {\n\t\t\t\tpoint.setState();\n\t\t\t});\n\t\t}\n\n\t\teach(panning === 'xy' ? [1, 0] : [1], function (isX) { // xy is used in maps\n\t\t\tvar mousePos = e[isX ? 'chartX' : 'chartY'],\n\t\t\t\taxis = chart[isX ? 'xAxis' : 'yAxis'][0],\n\t\t\t\tstartPos = chart[isX ? 'mouseDownX' : 'mouseDownY'],\n\t\t\t\thalfPointRange = (axis.pointRange || 0) / 2,\n\t\t\t\textremes = axis.getExtremes(),\n\t\t\t\tnewMin = axis.toValue(startPos - mousePos, true) + halfPointRange,\n\t\t\t\tnewMax = axis.toValue(startPos + chart[isX ? 'plotWidth' : 'plotHeight'] - mousePos, true) - halfPointRange;\n\n\t\t\tif (axis.series.length && newMin > mathMin(extremes.dataMin, extremes.min) && newMax < mathMax(extremes.dataMax, extremes.max)) {\n\t\t\t\taxis.setExtremes(newMin, newMax, false, false, { trigger: 'pan' });\n\t\t\t\tdoRedraw = true;\n\t\t\t}\n\n\t\t\tchart[isX ? 'mouseDownX' : 'mouseDownY'] = mousePos; // set new reference for next run\n\t\t});\n\n\t\tif (doRedraw) {\n\t\t\tchart.redraw(false);\n\t\t}\n\t\tcss(chart.container, { cursor: 'move' });\n\t},\n\n\t/**\n\t * Show the title and subtitle of the chart\n\t *\n\t * @param titleOptions {Object} New title options\n\t * @param subtitleOptions {Object} New subtitle options\n\t *\n\t */\n\tsetTitle: function (titleOptions, subtitleOptions) {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\tchartTitleOptions,\n\t\t\tchartSubtitleOptions;\n\n\t\tchartTitleOptions = options.title = merge(options.title, titleOptions);\n\t\tchartSubtitleOptions = options.subtitle = merge(options.subtitle, subtitleOptions);\n\n\t\t// add title and subtitle\n\t\teach([\n\t\t\t['title', titleOptions, chartTitleOptions],\n\t\t\t['subtitle', subtitleOptions, chartSubtitleOptions]\n\t\t], function (arr) {\n\t\t\tvar name = arr[0],\n\t\t\t\ttitle = chart[name],\n\t\t\t\ttitleOptions = arr[1],\n\t\t\t\tchartTitleOptions = arr[2];\n\n\t\t\tif (title && titleOptions) {\n\t\t\t\tchart[name] = title = title.destroy(); // remove old\n\t\t\t}\n\t\t\t\n\t\t\tif (chartTitleOptions && chartTitleOptions.text && !title) {\n\t\t\t\tchart[name] = chart.renderer.text(\n\t\t\t\t\tchartTitleOptions.text,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tchartTitleOptions.useHTML\n\t\t\t\t)\n\t\t\t\t.attr({\n\t\t\t\t\talign: chartTitleOptions.align,\n\t\t\t\t\t'class': PREFIX + name,\n\t\t\t\t\tzIndex: chartTitleOptions.zIndex || 4\n\t\t\t\t})\n\t\t\t\t.css(chartTitleOptions.style)\n\t\t\t\t.add();\n\t\t\t}\t\n\t\t});\n\t\tchart.layOutTitles();\n\t},\n\n\t/**\n\t * Lay out the chart titles and cache the full offset height for use in getMargins\n\t */\n\tlayOutTitles: function () {\n\t\tvar titleOffset = 0,\n\t\t\ttitle = this.title,\n\t\t\tsubtitle = this.subtitle,\n\t\t\toptions = this.options,\n\t\t\ttitleOptions = options.title,\n\t\t\tsubtitleOptions = options.subtitle,\n\t\t\tautoWidth = this.spacingBox.width - 44; // 44 makes room for default context button\n\n\t\tif (title) {\n\t\t\ttitle\n\t\t\t\t.css({ width: (titleOptions.width || autoWidth) + PX })\n\t\t\t\t.align(extend({ y: 15 }, titleOptions), false, 'spacingBox');\n\t\t\t\n\t\t\tif (!titleOptions.floating && !titleOptions.verticalAlign) {\n\t\t\t\ttitleOffset = title.getBBox().height;\n\n\t\t\t\t// Adjust for browser consistency + backwards compat after #776 fix\n\t\t\t\tif (titleOffset >= 18 && titleOffset <= 25) {\n\t\t\t\t\ttitleOffset = 15; \n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (subtitle) {\n\t\t\tsubtitle\n\t\t\t\t.css({ width: (subtitleOptions.width || autoWidth) + PX })\n\t\t\t\t.align(extend({ y: titleOffset + titleOptions.margin }, subtitleOptions), false, 'spacingBox');\n\t\t\t\n\t\t\tif (!subtitleOptions.floating && !subtitleOptions.verticalAlign) {\n\t\t\t\ttitleOffset = mathCeil(titleOffset + subtitle.getBBox().height);\n\t\t\t}\n\t\t}\n\n\t\tthis.titleOffset = titleOffset; // used in getMargins\n\t},\n\n\t/**\n\t * Get chart width and height according to options and container size\n\t */\n\tgetChartSize: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\trenderTo = chart.renderToClone || chart.renderTo;\n\n\t\t// get inner width and height from jQuery (#824)\n\t\tchart.containerWidth = adapterRun(renderTo, 'width');\n\t\tchart.containerHeight = adapterRun(renderTo, 'height');\n\t\t\n\t\tchart.chartWidth = mathMax(0, optionsChart.width || chart.containerWidth || 600); // #1393, 1460\n\t\tchart.chartHeight = mathMax(0, pick(optionsChart.height,\n\t\t\t// the offsetHeight of an empty container is 0 in standard browsers, but 19 in IE7:\n\t\t\tchart.containerHeight > 19 ? chart.containerHeight : 400));\n\t},\n\n\t/**\n\t * Create a clone of the chart's renderTo div and place it outside the viewport to allow\n\t * size computation on chart.render and chart.redraw\n\t */\n\tcloneRenderTo: function (revert) {\n\t\tvar clone = this.renderToClone,\n\t\t\tcontainer = this.container;\n\t\t\n\t\t// Destroy the clone and bring the container back to the real renderTo div\n\t\tif (revert) {\n\t\t\tif (clone) {\n\t\t\t\tthis.renderTo.appendChild(container);\n\t\t\t\tdiscardElement(clone);\n\t\t\t\tdelete this.renderToClone;\n\t\t\t}\n\t\t\n\t\t// Set up the clone\n\t\t} else {\n\t\t\tif (container && container.parentNode === this.renderTo) {\n\t\t\t\tthis.renderTo.removeChild(container); // do not clone this\n\t\t\t}\n\t\t\tthis.renderToClone = clone = this.renderTo.cloneNode(0);\n\t\t\tcss(clone, {\n\t\t\t\tposition: ABSOLUTE,\n\t\t\t\ttop: '-9999px',\n\t\t\t\tdisplay: 'block' // #833\n\t\t\t});\n\t\t\tdoc.body.appendChild(clone);\n\t\t\tif (container) {\n\t\t\t\tclone.appendChild(container);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Get the containing element, determine the size and create the inner container\n\t * div to hold the chart\n\t */\n\tgetContainer: function () {\n\t\tvar chart = this,\n\t\t\tcontainer,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\tchartWidth,\n\t\t\tchartHeight,\n\t\t\trenderTo,\n\t\t\tindexAttrName = 'data-highcharts-chart',\n\t\t\toldChartIndex,\n\t\t\tcontainerId;\n\n\t\tchart.renderTo = renderTo = optionsChart.renderTo;\n\t\tcontainerId = PREFIX + idCounter++;\n\n\t\tif (isString(renderTo)) {\n\t\t\tchart.renderTo = renderTo = doc.getElementById(renderTo);\n\t\t}\n\t\t\n\t\t// Display an error if the renderTo is wrong\n\t\tif (!renderTo) {\n\t\t\terror(13, true);\n\t\t}\n\t\t\n\t\t// If the container already holds a chart, destroy it\n\t\toldChartIndex = pInt(attr(renderTo, indexAttrName));\n\t\tif (!isNaN(oldChartIndex) && charts[oldChartIndex]) {\n\t\t\tcharts[oldChartIndex].destroy();\n\t\t}\t\t\n\t\t\n\t\t// Make a reference to the chart from the div\n\t\tattr(renderTo, indexAttrName, chart.index);\n\n\t\t// remove previous chart\n\t\trenderTo.innerHTML = '';\n\n\t\t// If the container doesn't have an offsetWidth, it has or is a child of a node\n\t\t// that has display:none. We need to temporarily move it out to a visible\n\t\t// state to determine the size, else the legend and tooltips won't render\n\t\t// properly\n\t\tif (!renderTo.offsetWidth) {\n\t\t\tchart.cloneRenderTo();\n\t\t}\n\n\t\t// get the width and height\n\t\tchart.getChartSize();\n\t\tchartWidth = chart.chartWidth;\n\t\tchartHeight = chart.chartHeight;\n\n\t\t// create the inner container\n\t\tchart.container = container = createElement(DIV, {\n\t\t\t\tclassName: PREFIX + 'container' +\n\t\t\t\t\t(optionsChart.className ? ' ' + optionsChart.className : ''),\n\t\t\t\tid: containerId\n\t\t\t}, extend({\n\t\t\t\tposition: RELATIVE,\n\t\t\t\toverflow: HIDDEN, // needed for context menu (avoid scrollbars) and\n\t\t\t\t\t// content overflow in IE\n\t\t\t\twidth: chartWidth + PX,\n\t\t\t\theight: chartHeight + PX,\n\t\t\t\ttextAlign: 'left',\n\t\t\t\tlineHeight: 'normal', // #427\n\t\t\t\tzIndex: 0, // #1072\n\t\t\t\t'-webkit-tap-highlight-color': 'rgba(0,0,0,0)'\n\t\t\t}, optionsChart.style),\n\t\t\tchart.renderToClone || renderTo\n\t\t);\n\n\t\t// cache the cursor (#1650)\n\t\tchart._cursor = container.style.cursor;\n\n\t\tchart.renderer =\n\t\t\toptionsChart.forExport ? // force SVG, used for SVG export\n\t\t\t\tnew SVGRenderer(container, chartWidth, chartHeight, true) :\n\t\t\t\tnew Renderer(container, chartWidth, chartHeight);\n\n\t\tif (useCanVG) {\n\t\t\t// If we need canvg library, extend and configure the renderer\n\t\t\t// to get the tracker for translating mouse events\n\t\t\tchart.renderer.create(chart, container, chartWidth, chartHeight);\n\t\t}\n\t},\n\n\t/**\n\t * Calculate margins by rendering axis labels in a preliminary position. Title,\n\t * subtitle and legend have already been rendered at this stage, but will be\n\t * moved into their final positions\n\t */\n\tgetMargins: function () {\n\t\tvar chart = this,\n\t\t\tspacing = chart.spacing,\n\t\t\taxisOffset,\n\t\t\tlegend = chart.legend,\n\t\t\tmargin = chart.margin,\n\t\t\tlegendOptions = chart.options.legend,\n\t\t\tlegendMargin = pick(legendOptions.margin, 10),\n\t\t\tlegendX = legendOptions.x,\n\t\t\tlegendY = legendOptions.y,\n\t\t\talign = legendOptions.align,\n\t\t\tverticalAlign = legendOptions.verticalAlign,\n\t\t\ttitleOffset = chart.titleOffset;\n\n\t\tchart.resetMargins();\n\t\taxisOffset = chart.axisOffset;\n\n\t\t// Adjust for title and subtitle\n\t\tif (titleOffset && !defined(margin[0])) {\n\t\t\tchart.plotTop = mathMax(chart.plotTop, titleOffset + chart.options.title.margin + spacing[0]);\n\t\t}\n\t\t\n\t\t// Adjust for legend\n\t\tif (legend.display && !legendOptions.floating) {\n\t\t\tif (align === 'right') { // horizontal alignment handled first\n\t\t\t\tif (!defined(margin[1])) {\n\t\t\t\t\tchart.marginRight = mathMax(\n\t\t\t\t\t\tchart.marginRight,\n\t\t\t\t\t\tlegend.legendWidth - legendX + legendMargin + spacing[1]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (align === 'left') {\n\t\t\t\tif (!defined(margin[3])) {\n\t\t\t\t\tchart.plotLeft = mathMax(\n\t\t\t\t\t\tchart.plotLeft,\n\t\t\t\t\t\tlegend.legendWidth + legendX + legendMargin + spacing[3]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t} else if (verticalAlign === 'top') {\n\t\t\t\tif (!defined(margin[0])) {\n\t\t\t\t\tchart.plotTop = mathMax(\n\t\t\t\t\t\tchart.plotTop,\n\t\t\t\t\t\tlegend.legendHeight + legendY + legendMargin + spacing[0]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t} else if (verticalAlign === 'bottom') {\n\t\t\t\tif (!defined(margin[2])) {\n\t\t\t\t\tchart.marginBottom = mathMax(\n\t\t\t\t\t\tchart.marginBottom,\n\t\t\t\t\t\tlegend.legendHeight - legendY + legendMargin + spacing[2]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// adjust for scroller\n\t\tif (chart.extraBottomMargin) {\n\t\t\tchart.marginBottom += chart.extraBottomMargin;\n\t\t}\n\t\tif (chart.extraTopMargin) {\n\t\t\tchart.plotTop += chart.extraTopMargin;\n\t\t}\n\n\t\t// pre-render axes to get labels offset width\n\t\tif (chart.hasCartesianSeries) {\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\taxis.getOffset();\n\t\t\t});\n\t\t}\n\t\t\n\t\tif (!defined(margin[3])) {\n\t\t\tchart.plotLeft += axisOffset[3];\n\t\t}\n\t\tif (!defined(margin[0])) {\n\t\t\tchart.plotTop += axisOffset[0];\n\t\t}\n\t\tif (!defined(margin[2])) {\n\t\t\tchart.marginBottom += axisOffset[2];\n\t\t}\n\t\tif (!defined(margin[1])) {\n\t\t\tchart.marginRight += axisOffset[1];\n\t\t}\n\n\t\tchart.setChartSize();\n\n\t},\n\n\t/**\n\t * Add the event handlers necessary for auto resizing\n\t *\n\t */\n\tinitReflow: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\trenderTo = chart.renderTo,\n\t\t\treflowTimeout;\n\t\t\t\n\t\tfunction reflow(e) {\n\t\t\tvar width = optionsChart.width || adapterRun(renderTo, 'width'),\n\t\t\t\theight = optionsChart.height || adapterRun(renderTo, 'height'),\n\t\t\t\ttarget = e ? e.target : win; // #805 - MooTools doesn't supply e\n\t\t\t\t\n\t\t\t// Width and height checks for display:none. Target is doc in IE8 and Opera,\n\t\t\t// win in Firefox, Chrome and IE9.\n\t\t\tif (!chart.hasUserSize && width && height && (target === win || target === doc)) {\n\t\t\t\t\n\t\t\t\tif (width !== chart.containerWidth || height !== chart.containerHeight) {\n\t\t\t\t\tclearTimeout(reflowTimeout);\n\t\t\t\t\tchart.reflowTimeout = reflowTimeout = setTimeout(function () {\n\t\t\t\t\t\tif (chart.container) { // It may have been destroyed in the meantime (#1257)\n\t\t\t\t\t\t\tchart.setSize(width, height, false);\n\t\t\t\t\t\t\tchart.hasUserSize = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 100);\n\t\t\t\t}\n\t\t\t\tchart.containerWidth = width;\n\t\t\t\tchart.containerHeight = height;\n\t\t\t}\n\t\t}\n\t\tchart.reflow = reflow;\n\t\taddEvent(win, 'resize', reflow);\n\t\taddEvent(chart, 'destroy', function () {\n\t\t\tremoveEvent(win, 'resize', reflow);\n\t\t});\n\t},\n\n\t/**\n\t * Resize the chart to a given width and height\n\t * @param {Number} width\n\t * @param {Number} height\n\t * @param {Object|Boolean} animation\n\t */\n\tsetSize: function (width, height, animation) {\n\t\tvar chart = this,\n\t\t\tchartWidth,\n\t\t\tchartHeight,\n\t\t\tfireEndResize;\n\n\t\t// Handle the isResizing counter\n\t\tchart.isResizing += 1;\n\t\tfireEndResize = function () {\n\t\t\tif (chart) {\n\t\t\t\tfireEvent(chart, 'endResize', null, function () {\n\t\t\t\t\tchart.isResizing -= 1;\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t// set the animation for the current process\n\t\tsetAnimation(animation, chart);\n\n\t\tchart.oldChartHeight = chart.chartHeight;\n\t\tchart.oldChartWidth = chart.chartWidth;\n\t\tif (defined(width)) {\n\t\t\tchart.chartWidth = chartWidth = mathMax(0, mathRound(width));\n\t\t\tchart.hasUserSize = !!chartWidth;\n\t\t}\n\t\tif (defined(height)) {\n\t\t\tchart.chartHeight = chartHeight = mathMax(0, mathRound(height));\n\t\t}\n\n\t\tcss(chart.container, {\n\t\t\twidth: chartWidth + PX,\n\t\t\theight: chartHeight + PX\n\t\t});\n\t\tchart.setChartSize(true);\n\t\tchart.renderer.setSize(chartWidth, chartHeight, animation);\n\n\t\t// handle axes\n\t\tchart.maxTicks = null;\n\t\teach(chart.axes, function (axis) {\n\t\t\taxis.isDirty = true;\n\t\t\taxis.setScale();\n\t\t});\n\n\t\t// make sure non-cartesian series are also handled\n\t\teach(chart.series, function (serie) {\n\t\t\tserie.isDirty = true;\n\t\t});\n\n\t\tchart.isDirtyLegend = true; // force legend redraw\n\t\tchart.isDirtyBox = true; // force redraw of plot and chart border\n\n\t\tchart.getMargins();\n\n\t\tchart.redraw(animation);\n\n\n\t\tchart.oldChartHeight = null;\n\t\tfireEvent(chart, 'resize');\n\n\t\t// fire endResize and set isResizing back\n\t\t// If animation is disabled, fire without delay\n\t\tif (globalAnimation === false) {\n\t\t\tfireEndResize();\n\t\t} else { // else set a timeout with the animation duration\n\t\t\tsetTimeout(fireEndResize, (globalAnimation && globalAnimation.duration) || 500);\n\t\t}\n\t},\n\n\t/**\n\t * Set the public chart properties. This is done before and after the pre-render\n\t * to determine margin sizes\n\t */\n\tsetChartSize: function (skipAxes) {\n\t\tvar chart = this,\n\t\t\tinverted = chart.inverted,\n\t\t\trenderer = chart.renderer,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\tspacing = chart.spacing,\n\t\t\tclipOffset = chart.clipOffset,\n\t\t\tclipX,\n\t\t\tclipY,\n\t\t\tplotLeft,\n\t\t\tplotTop,\n\t\t\tplotWidth,\n\t\t\tplotHeight,\n\t\t\tplotBorderWidth;\n\n\t\tchart.plotLeft = plotLeft = mathRound(chart.plotLeft);\n\t\tchart.plotTop = plotTop = mathRound(chart.plotTop);\n\t\tchart.plotWidth = plotWidth = mathMax(0, mathRound(chartWidth - plotLeft - chart.marginRight));\n\t\tchart.plotHeight = plotHeight = mathMax(0, mathRound(chartHeight - plotTop - chart.marginBottom));\n\n\t\tchart.plotSizeX = inverted ? plotHeight : plotWidth;\n\t\tchart.plotSizeY = inverted ? plotWidth : plotHeight;\n\t\t\n\t\tchart.plotBorderWidth = optionsChart.plotBorderWidth || 0;\n\n\t\t// Set boxes used for alignment\n\t\tchart.spacingBox = renderer.spacingBox = {\n\t\t\tx: spacing[3],\n\t\t\ty: spacing[0],\n\t\t\twidth: chartWidth - spacing[3] - spacing[1],\n\t\t\theight: chartHeight - spacing[0] - spacing[2]\n\t\t};\n\t\tchart.plotBox = renderer.plotBox = {\n\t\t\tx: plotLeft,\n\t\t\ty: plotTop,\n\t\t\twidth: plotWidth,\n\t\t\theight: plotHeight\n\t\t};\n\n\t\tplotBorderWidth = 2 * mathFloor(chart.plotBorderWidth / 2);\n\t\tclipX = mathCeil(mathMax(plotBorderWidth, clipOffset[3]) / 2);\n\t\tclipY = mathCeil(mathMax(plotBorderWidth, clipOffset[0]) / 2);\n\t\tchart.clipBox = {\n\t\t\tx: clipX, \n\t\t\ty: clipY, \n\t\t\twidth: mathFloor(chart.plotSizeX - mathMax(plotBorderWidth, clipOffset[1]) / 2 - clipX), \n\t\t\theight: mathFloor(chart.plotSizeY - mathMax(plotBorderWidth, clipOffset[2]) / 2 - clipY)\n\t\t};\n\n\t\tif (!skipAxes) {\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\taxis.setAxisSize();\n\t\t\t\taxis.setAxisTranslation();\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Initial margins before auto size margins are applied\n\t */\n\tresetMargins: function () {\n\t\tvar chart = this,\n\t\t\tspacing = chart.spacing,\n\t\t\tmargin = chart.margin;\n\n\t\tchart.plotTop = pick(margin[0], spacing[0]);\n\t\tchart.marginRight = pick(margin[1], spacing[1]);\n\t\tchart.marginBottom = pick(margin[2], spacing[2]);\n\t\tchart.plotLeft = pick(margin[3], spacing[3]);\n\t\tchart.axisOffset = [0, 0, 0, 0]; // top, right, bottom, left\n\t\tchart.clipOffset = [0, 0, 0, 0];\n\t},\n\n\t/**\n\t * Draw the borders and backgrounds for chart and plot area\n\t */\n\tdrawChartBox: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\tchartBackground = chart.chartBackground,\n\t\t\tplotBackground = chart.plotBackground,\n\t\t\tplotBorder = chart.plotBorder,\n\t\t\tplotBGImage = chart.plotBGImage,\n\t\t\tchartBorderWidth = optionsChart.borderWidth || 0,\n\t\t\tchartBackgroundColor = optionsChart.backgroundColor,\n\t\t\tplotBackgroundColor = optionsChart.plotBackgroundColor,\n\t\t\tplotBackgroundImage = optionsChart.plotBackgroundImage,\n\t\t\tplotBorderWidth = optionsChart.plotBorderWidth || 0,\n\t\t\tmgn,\n\t\t\tbgAttr,\n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tplotBox = chart.plotBox,\n\t\t\tclipRect = chart.clipRect,\n\t\t\tclipBox = chart.clipBox;\n\n\t\t// Chart area\n\t\tmgn = chartBorderWidth + (optionsChart.shadow ? 8 : 0);\n\n\t\tif (chartBorderWidth || chartBackgroundColor) {\n\t\t\tif (!chartBackground) {\n\t\t\t\t\n\t\t\t\tbgAttr = {\n\t\t\t\t\tfill: chartBackgroundColor || NONE\n\t\t\t\t};\n\t\t\t\tif (chartBorderWidth) { // #980\n\t\t\t\t\tbgAttr.stroke = optionsChart.borderColor;\n\t\t\t\t\tbgAttr['stroke-width'] = chartBorderWidth;\n\t\t\t\t}\n\t\t\t\tchart.chartBackground = renderer.rect(mgn / 2, mgn / 2, chartWidth - mgn, chartHeight - mgn,\n\t\t\t\t\t\toptionsChart.borderRadius, chartBorderWidth)\n\t\t\t\t\t.attr(bgAttr)\n\t\t\t\t\t.add()\n\t\t\t\t\t.shadow(optionsChart.shadow);\n\n\t\t\t} else { // resize\n\t\t\t\tchartBackground.animate(\n\t\t\t\t\tchartBackground.crisp(null, null, null, chartWidth - mgn, chartHeight - mgn)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\n\t\t// Plot background\n\t\tif (plotBackgroundColor) {\n\t\t\tif (!plotBackground) {\n\t\t\t\tchart.plotBackground = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tfill: plotBackgroundColor\n\t\t\t\t\t})\n\t\t\t\t\t.add()\n\t\t\t\t\t.shadow(optionsChart.plotShadow);\n\t\t\t} else {\n\t\t\t\tplotBackground.animate(plotBox);\n\t\t\t}\n\t\t}\n\t\tif (plotBackgroundImage) {\n\t\t\tif (!plotBGImage) {\n\t\t\t\tchart.plotBGImage = renderer.image(plotBackgroundImage, plotLeft, plotTop, plotWidth, plotHeight)\n\t\t\t\t\t.add();\n\t\t\t} else {\n\t\t\t\tplotBGImage.animate(plotBox);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Plot clip\n\t\tif (!clipRect) {\n\t\t\tchart.clipRect = renderer.clipRect(clipBox);\n\t\t} else {\n\t\t\tclipRect.animate({\n\t\t\t\twidth: clipBox.width,\n\t\t\t\theight: clipBox.height\n\t\t\t});\n\t\t}\n\n\t\t// Plot area border\n\t\tif (plotBorderWidth) {\n\t\t\tif (!plotBorder) {\n\t\t\t\tchart.plotBorder = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0, -plotBorderWidth)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tstroke: optionsChart.plotBorderColor,\n\t\t\t\t\t\t'stroke-width': plotBorderWidth,\n\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t})\n\t\t\t\t\t.add();\n\t\t\t} else {\n\t\t\t\tplotBorder.animate(\n\t\t\t\t\tplotBorder.crisp(null, plotLeft, plotTop, plotWidth, plotHeight)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// reset\n\t\tchart.isDirtyBox = false;\n\t},\n\n\t/**\n\t * Detect whether a certain chart property is needed based on inspecting its options\n\t * and series. This mainly applies to the chart.invert property, and in extensions to \n\t * the chart.angular and chart.polar properties.\n\t */\n\tpropFromSeries: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\tklass,\n\t\t\tseriesOptions = chart.options.series,\n\t\t\ti,\n\t\t\tvalue;\n\t\t\t\n\t\t\t\n\t\teach(['inverted', 'angular', 'polar'], function (key) {\n\t\t\t\n\t\t\t// The default series type's class\n\t\t\tklass = seriesTypes[optionsChart.type || optionsChart.defaultSeriesType];\n\t\t\t\n\t\t\t// Get the value from available chart-wide properties\n\t\t\tvalue = (\n\t\t\t\tchart[key] || // 1. it is set before\n\t\t\t\toptionsChart[key] || // 2. it is set in the options\n\t\t\t\t(klass && klass.prototype[key]) // 3. it's default series class requires it\n\t\t\t);\n\t\n\t\t\t// 4. Check if any the chart's series require it\n\t\t\ti = seriesOptions && seriesOptions.length;\n\t\t\twhile (!value && i--) {\n\t\t\t\tklass = seriesTypes[seriesOptions[i].type];\n\t\t\t\tif (klass && klass.prototype[key]) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Set the chart property\n\t\t\tchart[key] = value;\t\n\t\t});\n\t\t\n\t},\n\n\t/**\n\t * Link two or more series together. This is done initially from Chart.render,\n\t * and after Chart.addSeries and Series.remove.\n\t */\n\tlinkSeries: function () {\n\t\tvar chart = this,\n\t\t\tchartSeries = chart.series;\n\n\t\t// Reset links\n\t\teach(chartSeries, function (series) {\n\t\t\tseries.linkedSeries.length = 0;\n\t\t});\n\n\t\t// Apply new links\n\t\teach(chartSeries, function (series) {\n\t\t\tvar linkedTo = series.options.linkedTo;\n\t\t\tif (isString(linkedTo)) {\n\t\t\t\tif (linkedTo === ':previous') {\n\t\t\t\t\tlinkedTo = chart.series[series.index - 1];\n\t\t\t\t} else {\n\t\t\t\t\tlinkedTo = chart.get(linkedTo);\n\t\t\t\t}\n\t\t\t\tif (linkedTo) {\n\t\t\t\t\tlinkedTo.linkedSeries.push(series);\n\t\t\t\t\tseries.linkedParent = linkedTo;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Render all graphics for the chart\n\t */\n\trender: function () {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = chart.options;\n\n\t\tvar labels = options.labels,\n\t\t\tcredits = options.credits,\n\t\t\tcreditsHref;\n\n\t\t// Title\n\t\tchart.setTitle();\n\n\n\t\t// Legend\n\t\tchart.legend = new Legend(chart, options.legend);\n\n\t\tchart.getStacks(); // render stacks\n\n\t\t// Get margins by pre-rendering axes\n\t\t// set axes scales\n\t\teach(axes, function (axis) {\n\t\t\taxis.setScale();\n\t\t});\n\n\t\tchart.getMargins();\n\n\t\tchart.maxTicks = null; // reset for second pass\n\t\teach(axes, function (axis) {\n\t\t\taxis.setTickPositions(true); // update to reflect the new margins\n\t\t\taxis.setMaxTicks();\n\t\t});\n\t\tchart.adjustTickAmounts();\n\t\tchart.getMargins(); // second pass to check for new labels\n\n\n\t\t// Draw the borders and backgrounds\n\t\tchart.drawChartBox();\t\t\n\n\n\t\t// Axes\n\t\tif (chart.hasCartesianSeries) {\n\t\t\teach(axes, function (axis) {\n\t\t\t\taxis.render();\n\t\t\t});\n\t\t}\n\n\t\t// The series\n\t\tif (!chart.seriesGroup) {\n\t\t\tchart.seriesGroup = renderer.g('series-group')\n\t\t\t\t.attr({ zIndex: 3 })\n\t\t\t\t.add();\n\t\t}\n\t\teach(chart.series, function (serie) {\n\t\t\tserie.translate();\n\t\t\tserie.setTooltipPoints();\n\t\t\tserie.render();\n\t\t});\n\n\t\t// Labels\n\t\tif (labels.items) {\n\t\t\teach(labels.items, function (label) {\n\t\t\t\tvar style = extend(labels.style, label.style),\n\t\t\t\t\tx = pInt(style.left) + chart.plotLeft,\n\t\t\t\t\ty = pInt(style.top) + chart.plotTop + 12;\n\n\t\t\t\t// delete to prevent rewriting in IE\n\t\t\t\tdelete style.left;\n\t\t\t\tdelete style.top;\n\n\t\t\t\trenderer.text(\n\t\t\t\t\tlabel.html,\n\t\t\t\t\tx,\n\t\t\t\t\ty\n\t\t\t\t)\n\t\t\t\t.attr({ zIndex: 2 })\n\t\t\t\t.css(style)\n\t\t\t\t.add();\n\n\t\t\t});\n\t\t}\n\n\t\t// Credits\n\t\tif (credits.enabled && !chart.credits) {\n\t\t\tcreditsHref = credits.href;\n\t\t\tchart.credits = renderer.text(\n\t\t\t\tcredits.text,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t)\n\t\t\t.on('click', function () {\n\t\t\t\tif (creditsHref) {\n\t\t\t\t\tlocation.href = creditsHref;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.attr({\n\t\t\t\talign: credits.position.align,\n\t\t\t\tzIndex: 8\n\t\t\t})\n\t\t\t.css(credits.style)\n\t\t\t.add()\n\t\t\t.align(credits.position);\n\t\t}\n\n\t\t// Set flag\n\t\tchart.hasRendered = true;\n\n\t},\n\n\t/**\n\t * Clean up memory usage\n\t */\n\tdestroy: function () {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\tseries = chart.series,\n\t\t\tcontainer = chart.container,\n\t\t\ti,\n\t\t\tparentNode = container && container.parentNode;\n\t\t\t\n\t\t// fire the chart.destoy event\n\t\tfireEvent(chart, 'destroy');\n\t\t\n\t\t// Delete the chart from charts lookup array\n\t\tcharts[chart.index] = UNDEFINED;\n\t\tchart.renderTo.removeAttribute('data-highcharts-chart');\n\n\t\t// remove events\n\t\tremoveEvent(chart);\n\n\t\t// ==== Destroy collections:\n\t\t// Destroy axes\n\t\ti = axes.length;\n\t\twhile (i--) {\n\t\t\taxes[i] = axes[i].destroy();\n\t\t}\n\n\t\t// Destroy each series\n\t\ti = series.length;\n\t\twhile (i--) {\n\t\t\tseries[i] = series[i].destroy();\n\t\t}\n\n\t\t// ==== Destroy chart properties:\n\t\teach(['title', 'subtitle', 'chartBackground', 'plotBackground', 'plotBGImage', \n\t\t\t\t'plotBorder', 'seriesGroup', 'clipRect', 'credits', 'pointer', 'scroller', \n\t\t\t\t'rangeSelector', 'legend', 'resetZoomButton', 'tooltip', 'renderer'], function (name) {\n\t\t\tvar prop = chart[name];\n\n\t\t\tif (prop && prop.destroy) {\n\t\t\t\tchart[name] = prop.destroy();\n\t\t\t}\n\t\t});\n\n\t\t// remove container and all SVG\n\t\tif (container) { // can break in IE when destroyed before finished loading\n\t\t\tcontainer.innerHTML = '';\n\t\t\tremoveEvent(container);\n\t\t\tif (parentNode) {\n\t\t\t\tdiscardElement(container);\n\t\t\t}\n\n\t\t}\n\n\t\t// clean it all up\n\t\tfor (i in chart) {\n\t\t\tdelete chart[i];\n\t\t}\n\n\t},\n\n\n\t/**\n\t * VML namespaces can't be added until after complete. Listening\n\t * for Perini's doScroll hack is not enough.\n\t */\n\tisReadyToRender: function () {\n\t\tvar chart = this;\n\n\t\t// Note: in spite of JSLint's complaints, win == win.top is required\n\t\t/*jslint eqeq: true*/\n\t\tif ((!hasSVG && (win == win.top && doc.readyState !== 'complete')) || (useCanVG && !win.canvg)) {\n\t\t/*jslint eqeq: false*/\n\t\t\tif (useCanVG) {\n\t\t\t\t// Delay rendering until canvg library is downloaded and ready\n\t\t\t\tCanVGController.push(function () { chart.firstRender(); }, chart.options.global.canvasToolsURL);\n\t\t\t} else {\n\t\t\t\tdoc.attachEvent('onreadystatechange', function () {\n\t\t\t\t\tdoc.detachEvent('onreadystatechange', chart.firstRender);\n\t\t\t\t\tif (doc.readyState === 'complete') {\n\t\t\t\t\t\tchart.firstRender();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t/**\n\t * Prepare for first rendering after all data are loaded\n\t */\n\tfirstRender: function () {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\tcallback = chart.callback;\n\n\t\t// Check whether the chart is ready to render\n\t\tif (!chart.isReadyToRender()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Create the container\n\t\tchart.getContainer();\n\n\t\t// Run an early event after the container and renderer are established\n\t\tfireEvent(chart, 'init');\n\n\t\t\n\t\tchart.resetMargins();\n\t\tchart.setChartSize();\n\n\t\t// Set the common chart properties (mainly invert) from the given series\n\t\tchart.propFromSeries();\n\n\t\t// get axes\n\t\tchart.getAxes();\n\n\t\t// Initialize the series\n\t\teach(options.series || [], function (serieOptions) {\n\t\t\tchart.initSeries(serieOptions);\n\t\t});\n\n\t\tchart.linkSeries();\n\n\t\t// Run an event after axes and series are initialized, but before render. At this stage,\n\t\t// the series data is indexed and cached in the xData and yData arrays, so we can access\n\t\t// those before rendering. Used in Highstock. \n\t\tfireEvent(chart, 'beforeRender'); \n\n\t\t// depends on inverted and on margins being set\n\t\tchart.pointer = new Pointer(chart, options);\n\n\t\tchart.render();\n\n\t\t// add canvas\n\t\tchart.renderer.draw();\n\t\t// run callbacks\n\t\tif (callback) {\n\t\t\tcallback.apply(chart, [chart]);\n\t\t}\n\t\teach(chart.callbacks, function (fn) {\n\t\t\tfn.apply(chart, [chart]);\n\t\t});\n\t\t\n\t\t\n\t\t// If the chart was rendered outside the top container, put it back in\n\t\tchart.cloneRenderTo(true);\n\n\t\tfireEvent(chart, 'load');\n\n\t},\n\n\t/**\n\t* Creates arrays for spacing and margin from given options.\n\t*/\n\tsplashArray: function (target, options) {\n\t\tvar oVar = options[target],\n\t\t\ttArray = isObject(oVar) ? oVar : [oVar, oVar, oVar, oVar];\n\n\t\treturn [pick(options[target + 'Top'], tArray[0]),\n\t\t\t\tpick(options[target + 'Right'], tArray[1]),\n\t\t\t\tpick(options[target + 'Bottom'], tArray[2]),\n\t\t\t\tpick(options[target + 'Left'], tArray[3])];\n\t}\n}; // end Chart\n\n// Hook for exporting module\nChart.prototype.callbacks = [];\n/**\n * The Point object and prototype. Inheritable and used as base for PiePoint\n */\nvar Point = function () {};\nPoint.prototype = {\n\n\t/**\n\t * Initialize the point\n\t * @param {Object} series The series object containing this point\n\t * @param {Object} options The data in either number, array or object format\n\t */\n\tinit: function (series, options, x) {\n\n\t\tvar point = this,\n\t\t\tcolors;\n\t\tpoint.series = series;\n\t\tpoint.applyOptions(options, x);\n\t\tpoint.pointAttr = {};\n\n\t\tif (series.options.colorByPoint) {\n\t\t\tcolors = series.options.colors || series.chart.options.colors;\n\t\t\tpoint.color = point.color || colors[series.colorCounter++];\n\t\t\t// loop back to zero\n\t\t\tif (series.colorCounter === colors.length) {\n\t\t\t\tseries.colorCounter = 0;\n\t\t\t}\n\t\t}\n\n\t\tseries.chart.pointCount++;\n\t\treturn point;\n\t},\n\t/**\n\t * Apply the options containing the x and y data and possible some extra properties.\n\t * This is called on point init or from point.update.\n\t *\n\t * @param {Object} options\n\t */\n\tapplyOptions: function (options, x) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tpointValKey = series.pointValKey;\n\n\t\toptions = Point.prototype.optionsToObject.call(this, options);\n\n\t\t// copy options directly to point\n\t\textend(point, options);\n\t\tpoint.options = point.options ? extend(point.options, options) : options;\n\t\t\t\n\t\t// For higher dimension series types. For instance, for ranges, point.y is mapped to point.low.\n\t\tif (pointValKey) {\n\t\t\tpoint.y = point[pointValKey];\n\t\t}\n\t\t\n\t\t// If no x is set by now, get auto incremented value. All points must have an\n\t\t// x value, however the y value can be null to create a gap in the series\n\t\tif (point.x === UNDEFINED && series) {\n\t\t\tpoint.x = x === UNDEFINED ? series.autoIncrement() : x;\n\t\t}\n\t\t\n\t\treturn point;\n\t},\n\n\t/**\n\t * Transform number or array configs into objects\n\t */\n\toptionsToObject: function (options) {\n\t\tvar ret,\n\t\t\tseries = this.series,\n\t\t\tpointArrayMap = series.pointArrayMap || ['y'],\n\t\t\tvalueCount = pointArrayMap.length,\n\t\t\tfirstItemType,\n\t\t\ti = 0,\n\t\t\tj = 0;\n\n\t\tif (typeof options === 'number' || options === null) {\n\t\t\tret = { y: options };\n\n\t\t} else if (isArray(options)) {\n\t\t\tret = {};\n\t\t\t// with leading x value\n\t\t\tif (options.length > valueCount) {\n\t\t\t\tfirstItemType = typeof options[0];\n\t\t\t\tif (firstItemType === 'string') {\n\t\t\t\t\tret.name = options[0];\n\t\t\t\t} else if (firstItemType === 'number') {\n\t\t\t\t\tret.x = options[0];\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t\twhile (j < valueCount) {\n\t\t\t\tret[pointArrayMap[j++]] = options[i++];\n\t\t\t}\t\t\t\n\t\t} else if (typeof options === 'object') {\n\t\t\tret = options;\n\n\t\t\t// This is the fastest way to detect if there are individual point dataLabels that need \n\t\t\t// to be considered in drawDataLabels. These can only occur in object configs.\n\t\t\tif (options.dataLabels) {\n\t\t\t\tseries._hasPointLabels = true;\n\t\t\t}\n\n\t\t\t// Same approach as above for markers\n\t\t\tif (options.marker) {\n\t\t\t\tseries._hasPointMarkers = true;\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Destroy a point to clear memory. Its reference still stays in series.data.\n\t */\n\tdestroy: function () {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\thoverPoints = chart.hoverPoints,\n\t\t\tprop;\n\n\t\tchart.pointCount--;\n\n\t\tif (hoverPoints) {\n\t\t\tpoint.setState();\n\t\t\terase(hoverPoints, point);\n\t\t\tif (!hoverPoints.length) {\n\t\t\t\tchart.hoverPoints = null;\n\t\t\t}\n\n\t\t}\n\t\tif (point === chart.hoverPoint) {\n\t\t\tpoint.onMouseOut();\n\t\t}\n\t\t\n\t\t// remove all events\n\t\tif (point.graphic || point.dataLabel) { // removeEvent and destroyElements are performance expensive\n\t\t\tremoveEvent(point);\n\t\t\tpoint.destroyElements();\n\t\t}\n\n\t\tif (point.legendItem) { // pies have legend items\n\t\t\tchart.legend.destroyItem(point);\n\t\t}\n\n\t\tfor (prop in point) {\n\t\t\tpoint[prop] = null;\n\t\t}\n\n\n\t},\n\n\t/**\n\t * Destroy SVG elements associated with the point\n\t */\n\tdestroyElements: function () {\n\t\tvar point = this,\n\t\t\tprops = ['graphic', 'dataLabel', 'dataLabelUpper', 'group', 'connector', 'shadowGroup'],\n\t\t\tprop,\n\t\t\ti = 6;\n\t\twhile (i--) {\n\t\t\tprop = props[i];\n\t\t\tif (point[prop]) {\n\t\t\t\tpoint[prop] = point[prop].destroy();\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Return the configuration hash needed for the data label and tooltip formatters\n\t */\n\tgetLabelConfig: function () {\n\t\tvar point = this;\n\t\treturn {\n\t\t\tx: point.category,\n\t\t\ty: point.y,\n\t\t\tkey: point.name || point.category,\n\t\t\tseries: point.series,\n\t\t\tpoint: point,\n\t\t\tpercentage: point.percentage,\n\t\t\ttotal: point.total || point.stackTotal\n\t\t};\n\t},\n\n\t/**\n\t * Toggle the selection status of a point\n\t * @param {Boolean} selected Whether to select or unselect the point.\n\t * @param {Boolean} accumulate Whether to add to the previous selection. By default,\n\t *     this happens if the control key (Cmd on Mac) was pressed during clicking.\n\t */\n\tselect: function (selected, accumulate) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart;\n\n\t\tselected = pick(selected, !point.selected);\n\n\t\t// fire the event with the defalut handler\n\t\tpoint.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () {\n\t\t\tpoint.selected = point.options.selected = selected;\n\t\t\tseries.options.data[inArray(point, series.data)] = point.options;\n\t\t\t\n\t\t\tpoint.setState(selected && SELECT_STATE);\n\n\t\t\t// unselect all other points unless Ctrl or Cmd + click\n\t\t\tif (!accumulate) {\n\t\t\t\teach(chart.getSelectedPoints(), function (loopPoint) {\n\t\t\t\t\tif (loopPoint.selected && loopPoint !== point) {\n\t\t\t\t\t\tloopPoint.selected = loopPoint.options.selected = false;\n\t\t\t\t\t\tseries.options.data[inArray(loopPoint, series.data)] = loopPoint.options;\n\t\t\t\t\t\tloopPoint.setState(NORMAL_STATE);\n\t\t\t\t\t\tloopPoint.firePointEvent('unselect');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Runs on mouse over the point\n\t */\n\tonMouseOver: function (e) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\ttooltip = chart.tooltip,\n\t\t\thoverPoint = chart.hoverPoint;\n\n\t\t// set normal state to previous series\n\t\tif (hoverPoint && hoverPoint !== point) {\n\t\t\thoverPoint.onMouseOut();\n\t\t}\n\n\t\t// trigger the event\n\t\tpoint.firePointEvent('mouseOver');\n\n\t\t// update the tooltip\n\t\tif (tooltip && (!tooltip.shared || series.noSharedTooltip)) {\n\t\t\ttooltip.refresh(point, e);\n\t\t}\n\n\t\t// hover this\n\t\tpoint.setState(HOVER_STATE);\n\t\tchart.hoverPoint = point;\n\t},\n\t\n\t/**\n\t * Runs on mouse out from the point\n\t */\n\tonMouseOut: function () {\n\t\tvar chart = this.series.chart,\n\t\t\thoverPoints = chart.hoverPoints;\n\t\t\n\t\tif (!hoverPoints || inArray(this, hoverPoints) === -1) { // #887\n\t\t\tthis.firePointEvent('mouseOut');\n\t\n\t\t\tthis.setState();\n\t\t\tchart.hoverPoint = null;\n\t\t}\n\t},\n\n\t/**\n\t * Extendable method for formatting each point's tooltip line\n\t *\n\t * @return {String} A string to be concatenated in to the common tooltip text\n\t */\n\ttooltipFormatter: function (pointFormat) {\n\t\t\n\t\t// Insert options for valueDecimals, valuePrefix, and valueSuffix\n\t\tvar series = this.series,\n\t\t\tseriesTooltipOptions = series.tooltipOptions,\n\t\t\tvalueDecimals = pick(seriesTooltipOptions.valueDecimals, ''),\n\t\t\tvaluePrefix = seriesTooltipOptions.valuePrefix || '',\n\t\t\tvalueSuffix = seriesTooltipOptions.valueSuffix || '';\n\t\t\t\n\t\t// Loop over the point array map and replace unformatted values with sprintf formatting markup\n\t\teach(series.pointArrayMap || ['y'], function (key) {\n\t\t\tkey = '{point.' + key; // without the closing bracket\n\t\t\tif (valuePrefix || valueSuffix) {\n\t\t\t\tpointFormat = pointFormat.replace(key + '}', valuePrefix + key + '}' + valueSuffix);\n\t\t\t}\n\t\t\tpointFormat = pointFormat.replace(key + '}', key + ':,.' + valueDecimals + 'f}');\n\t\t});\n\t\t\n\t\treturn format(pointFormat, {\n\t\t\tpoint: this,\n\t\t\tseries: this.series\n\t\t});\n\t},\n\n\t/**\n\t * Update the point with new options (typically x/y data) and optionally redraw the series.\n\t *\n\t * @param {Object} options Point options as defined in the series.data array\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t *\n\t */\n\tupdate: function (options, redraw, animation) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tgraphic = point.graphic,\n\t\t\ti,\n\t\t\tdata = series.data,\n\t\t\tchart = series.chart,\n\t\t\tseriesOptions = series.options;\n\n\t\tredraw = pick(redraw, true);\n\n\t\t// fire the event with a default handler of doing the update\n\t\tpoint.firePointEvent('update', { options: options }, function () {\n\n\t\t\tpoint.applyOptions(options);\n\n\t\t\t// update visuals\n\t\t\tif (isObject(options)) {\n\t\t\t\tseries.getAttribs();\n\t\t\t\tif (graphic) {\n\t\t\t\t\tif (options.marker && options.marker.symbol) {\n\t\t\t\t\t\tpoint.graphic = graphic.destroy();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgraphic.attr(point.pointAttr[point.state || '']);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// record changes in the parallel arrays\n\t\t\ti = inArray(point, data);\n\t\t\tseries.xData[i] = point.x;\n\t\t\tseries.yData[i] = series.toYData ? series.toYData(point) : point.y;\n\t\t\tseries.zData[i] = point.z;\n\t\t\tseriesOptions.data[i] = point.options;\n\n\t\t\t// redraw\n\t\t\tseries.isDirty = series.isDirtyData = true;\n\t\t\tif (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320\n\t\t\t\tchart.isDirtyBox = true;\n\t\t\t}\n\t\t\t\n\t\t\tif (seriesOptions.legendType === 'point') { // #1831, #1885\n\t\t\t\tchart.legend.destroyItem(point);\n\t\t\t}\n\t\t\tif (redraw) {\n\t\t\t\tchart.redraw(animation);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Remove a point and optionally redraw the series and if necessary the axes\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\tremove: function (redraw, animation) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tpoints = series.points,\n\t\t\tchart = series.chart,\n\t\t\ti,\n\t\t\tdata = series.data;\n\n\t\tsetAnimation(animation, chart);\n\t\tredraw = pick(redraw, true);\n\n\t\t// fire the event with a default handler of removing the point\n\t\tpoint.firePointEvent('remove', null, function () {\n\n\t\t\t// splice all the parallel arrays\n\t\t\ti = inArray(point, data);\n\t\t\tif (data.length === points.length) {\n\t\t\t\tpoints.splice(i, 1);\t\t\t\n\t\t\t}\n\t\t\tdata.splice(i, 1);\n\t\t\tseries.options.data.splice(i, 1);\n\t\t\tseries.xData.splice(i, 1);\n\t\t\tseries.yData.splice(i, 1);\n\t\t\tseries.zData.splice(i, 1);\n\n\t\t\tpoint.destroy();\n\n\n\t\t\t// redraw\n\t\t\tseries.isDirty = true;\n\t\t\tseries.isDirtyData = true;\n\t\t\tif (redraw) {\n\t\t\t\tchart.redraw();\n\t\t\t}\n\t\t});\n\n\n\t},\n\n\t/**\n\t * Fire an event on the Point object. Must not be renamed to fireEvent, as this\n\t * causes a name clash in MooTools\n\t * @param {String} eventType\n\t * @param {Object} eventArgs Additional event arguments\n\t * @param {Function} defaultFunction Default event handler\n\t */\n\tfirePointEvent: function (eventType, eventArgs, defaultFunction) {\n\t\tvar point = this,\n\t\t\tseries = this.series,\n\t\t\tseriesOptions = series.options;\n\n\t\t// load event handlers on demand to save time on mouseover/out\n\t\tif (seriesOptions.point.events[eventType] || (point.options && point.options.events && point.options.events[eventType])) {\n\t\t\tthis.importEvents();\n\t\t}\n\n\t\t// add default handler if in selection mode\n\t\tif (eventType === 'click' && seriesOptions.allowPointSelect) {\n\t\t\tdefaultFunction = function (event) {\n\t\t\t\t// Control key is for Windows, meta (= Cmd key) for Mac, Shift for Opera\n\t\t\t\tpoint.select(null, event.ctrlKey || event.metaKey || event.shiftKey);\n\t\t\t};\n\t\t}\n\n\t\tfireEvent(this, eventType, eventArgs, defaultFunction);\n\t},\n\t/**\n\t * Import events from the series' and point's options. Only do it on\n\t * demand, to save processing time on hovering.\n\t */\n\timportEvents: function () {\n\t\tif (!this.hasImportedEvents) {\n\t\t\tvar point = this,\n\t\t\t\toptions = merge(point.series.options.point, point.options),\n\t\t\t\tevents = options.events,\n\t\t\t\teventType;\n\n\t\t\tpoint.events = events;\n\n\t\t\tfor (eventType in events) {\n\t\t\t\taddEvent(point, eventType, events[eventType]);\n\t\t\t}\n\t\t\tthis.hasImportedEvents = true;\n\n\t\t}\n\t},\n\n\t/**\n\t * Set the point's state\n\t * @param {String} state\n\t */\n\tsetState: function (state) {\n\t\tvar point = this,\n\t\t\tplotX = point.plotX,\n\t\t\tplotY = point.plotY,\n\t\t\tseries = point.series,\n\t\t\tstateOptions = series.options.states,\n\t\t\tmarkerOptions = defaultPlotOptions[series.type].marker && series.options.marker,\n\t\t\tnormalDisabled = markerOptions && !markerOptions.enabled,\n\t\t\tmarkerStateOptions = markerOptions && markerOptions.states[state],\n\t\t\tstateDisabled = markerStateOptions && markerStateOptions.enabled === false,\n\t\t\tstateMarkerGraphic = series.stateMarkerGraphic,\n\t\t\tpointMarker = point.marker || {},\n\t\t\tchart = series.chart,\n\t\t\tradius,\n\t\t\tnewSymbol,\n\t\t\tpointAttr = point.pointAttr;\n\n\t\tstate = state || NORMAL_STATE; // empty string\n\n\t\tif (\n\t\t\t\t// already has this state\n\t\t\t\tstate === point.state ||\n\t\t\t\t// selected points don't respond to hover\n\t\t\t\t(point.selected && state !== SELECT_STATE) ||\n\t\t\t\t// series' state options is disabled\n\t\t\t\t(stateOptions[state] && stateOptions[state].enabled === false) ||\n\t\t\t\t// point marker's state options is disabled\n\t\t\t\t(state && (stateDisabled || (normalDisabled && !markerStateOptions.enabled)))\n\n\t\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// apply hover styles to the existing point\n\t\tif (point.graphic) {\n\t\t\tradius = markerOptions && point.graphic.symbolName && pointAttr[state].r;\n\t\t\tpoint.graphic.attr(merge(\n\t\t\t\tpointAttr[state],\n\t\t\t\tradius ? { // new symbol attributes (#507, #612)\n\t\t\t\t\tx: plotX - radius,\n\t\t\t\t\ty: plotY - radius,\n\t\t\t\t\twidth: 2 * radius,\n\t\t\t\t\theight: 2 * radius\n\t\t\t\t} : {}\n\t\t\t));\n\t\t} else {\n\t\t\t// if a graphic is not applied to each point in the normal state, create a shared\n\t\t\t// graphic for the hover state\n\t\t\tif (state && markerStateOptions) {\n\t\t\t\tradius = markerStateOptions.radius;\n\t\t\t\tnewSymbol = pointMarker.symbol || series.symbol;\n\n\t\t\t\t// If the point has another symbol than the previous one, throw away the \n\t\t\t\t// state marker graphic and force a new one (#1459)\n\t\t\t\tif (stateMarkerGraphic && stateMarkerGraphic.currentSymbol !== newSymbol) {\t\t\t\t\n\t\t\t\t\tstateMarkerGraphic = stateMarkerGraphic.destroy();\n\t\t\t\t}\n\n\t\t\t\t// Add a new state marker graphic\n\t\t\t\tif (!stateMarkerGraphic) {\n\t\t\t\t\tseries.stateMarkerGraphic = stateMarkerGraphic = chart.renderer.symbol(\n\t\t\t\t\t\tnewSymbol,\n\t\t\t\t\t\tplotX - radius,\n\t\t\t\t\t\tplotY - radius,\n\t\t\t\t\t\t2 * radius,\n\t\t\t\t\t\t2 * radius\n\t\t\t\t\t)\n\t\t\t\t\t.attr(pointAttr[state])\n\t\t\t\t\t.add(series.markerGroup);\n\t\t\t\t\tstateMarkerGraphic.currentSymbol = newSymbol;\n\t\t\t\t\n\t\t\t\t// Move the existing graphic\n\t\t\t\t} else {\n\t\t\t\t\tstateMarkerGraphic.attr({ // #1054\n\t\t\t\t\t\tx: plotX - radius,\n\t\t\t\t\t\ty: plotY - radius\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (stateMarkerGraphic) {\n\t\t\t\tstateMarkerGraphic[state && chart.isInsidePlot(plotX, plotY) ? 'show' : 'hide']();\n\t\t\t}\n\t\t}\n\n\t\tpoint.state = state;\n\t}\n};\n\n/**\n * @classDescription The base function which all other series types inherit from. The data in the series is stored\n * in various arrays.\n *\n * - First, series.options.data contains all the original config options for\n * each point whether added by options or methods like series.addPoint.\n * - Next, series.data contains those values converted to points, but in case the series data length\n * exceeds the cropThreshold, or if the data is grouped, series.data doesn't contain all the points. It\n * only contains the points that have been created on demand.\n * - Then there's series.points that contains all currently visible point objects. In case of cropping,\n * the cropped-away points are not part of this array. The series.points array starts at series.cropStart\n * compared to series.data and series.options.data. If however the series data is grouped, these can't\n * be correlated one to one.\n * - series.xData and series.processedXData contain clean x values, equivalent to series.data and series.points.\n * - series.yData and series.processedYData contain clean x values, equivalent to series.data and series.points.\n *\n * @param {Object} chart\n * @param {Object} options\n */\nvar Series = function () {};\n\nSeries.prototype = {\n\n\tisCartesian: true,\n\ttype: 'line',\n\tpointClass: Point,\n\tsorted: true, // requires the data to be sorted\n\trequireSorting: true,\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tstroke: 'lineColor',\n\t\t'stroke-width': 'lineWidth',\n\t\tfill: 'fillColor',\n\t\tr: 'radius'\n\t},\n\tcolorCounter: 0,\n\tinit: function (chart, options) {\n\t\tvar series = this,\n\t\t\teventType,\n\t\t\tevents,\n\t\t\tchartSeries = chart.series;\n\n\t\tseries.chart = chart;\n\t\tseries.options = options = series.setOptions(options); // merge with plotOptions\n\t\tseries.linkedSeries = [];\n\n\t\t// bind the axes\n\t\tseries.bindAxes();\n\n\t\t// set some variables\n\t\textend(series, {\n\t\t\tname: options.name,\n\t\t\tstate: NORMAL_STATE,\n\t\t\tpointAttr: {},\n\t\t\tvisible: options.visible !== false, // true by default\n\t\t\tselected: options.selected === true // false by default\n\t\t});\n\t\t\n\t\t// special\n\t\tif (useCanVG) {\n\t\t\toptions.animation = false;\n\t\t}\n\n\t\t// register event listeners\n\t\tevents = options.events;\n\t\tfor (eventType in events) {\n\t\t\taddEvent(series, eventType, events[eventType]);\n\t\t}\n\t\tif (\n\t\t\t(events && events.click) ||\n\t\t\t(options.point && options.point.events && options.point.events.click) ||\n\t\t\toptions.allowPointSelect\n\t\t) {\n\t\t\tchart.runTrackerClick = true;\n\t\t}\n\n\t\tseries.getColor();\n\t\tseries.getSymbol();\n\n\t\t// set the data\n\t\tseries.setData(options.data, false);\n\t\t\n\t\t// Mark cartesian\n\t\tif (series.isCartesian) {\n\t\t\tchart.hasCartesianSeries = true;\n\t\t}\n\n\t\t// Register it in the chart\n\t\tchartSeries.push(series);\n\t\tseries._i = chartSeries.length - 1;\n\t\t\n\t\t// Sort series according to index option (#248, #1123)\n\t\tstableSort(chartSeries, function (a, b) {\n\t\t\treturn pick(a.options.index, a._i) - pick(b.options.index, a._i);\n\t\t});\n\t\teach(chartSeries, function (series, i) {\n\t\t\tseries.index = i;\n\t\t\tseries.name = series.name || 'Series ' + (i + 1);\n\t\t});\n\n\t},\n\t\n\t/**\n\t * Set the xAxis and yAxis properties of cartesian series, and register the series\n\t * in the axis.series array\n\t */\n\tbindAxes: function () {\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\taxisOptions;\n\t\t\t\n\t\tif (series.isCartesian) {\n\t\t\t\n\t\t\teach(['xAxis', 'yAxis'], function (AXIS) { // repeat for xAxis and yAxis\n\t\t\t\t\n\t\t\t\teach(chart[AXIS], function (axis) { // loop through the chart's axis objects\n\t\t\t\t\t\n\t\t\t\t\taxisOptions = axis.options;\n\t\t\t\t\t\n\t\t\t\t\t// apply if the series xAxis or yAxis option mathches the number of the \n\t\t\t\t\t// axis, or if undefined, use the first axis\n\t\t\t\t\tif ((seriesOptions[AXIS] === axisOptions.index) ||\n\t\t\t\t\t\t\t(seriesOptions[AXIS] !== UNDEFINED && seriesOptions[AXIS] === axisOptions.id) ||\n\t\t\t\t\t\t\t(seriesOptions[AXIS] === UNDEFINED && axisOptions.index === 0)) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// register this series in the axis.series lookup\n\t\t\t\t\t\taxis.series.push(series);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// set this series.xAxis or series.yAxis reference\n\t\t\t\t\t\tseries[AXIS] = axis;\n\t\t\t\t\t\t\n\t\t\t\t\t\t// mark dirty for redraw\n\t\t\t\t\t\taxis.isDirty = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// The series needs an X and an Y axis\n\t\t\t\tif (!series[AXIS]) {\n\t\t\t\t\terror(18, true);\n\t\t\t\t}\n\n\t\t\t});\n\t\t}\n\t},\n\n\n\t/**\n\t * Return an auto incremented x value based on the pointStart and pointInterval options.\n\t * This is only used if an x value is not given for the point that calls autoIncrement.\n\t */\n\tautoIncrement: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\txIncrement = series.xIncrement;\n\n\t\txIncrement = pick(xIncrement, options.pointStart, 0);\n\n\t\tseries.pointInterval = pick(series.pointInterval, options.pointInterval, 1);\n\n\t\tseries.xIncrement = xIncrement + series.pointInterval;\n\t\treturn xIncrement;\n\t},\n\n\t/**\n\t * Divide the series data into segments divided by null values.\n\t */\n\tgetSegments: function () {\n\t\tvar series = this,\n\t\t\tlastNull = -1,\n\t\t\tsegments = [],\n\t\t\ti,\n\t\t\tpoints = series.points,\n\t\t\tpointsLength = points.length;\n\n\t\tif (pointsLength) { // no action required for []\n\t\t\t\n\t\t\t// if connect nulls, just remove null points\n\t\t\tif (series.options.connectNulls) {\n\t\t\t\ti = pointsLength;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tif (points[i].y === null) {\n\t\t\t\t\t\tpoints.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (points.length) {\n\t\t\t\t\tsegments = [points];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t// else, split on null points\n\t\t\t} else {\n\t\t\t\teach(points, function (point, i) {\n\t\t\t\t\tif (point.y === null) {\n\t\t\t\t\t\tif (i > lastNull + 1) {\n\t\t\t\t\t\t\tsegments.push(points.slice(lastNull + 1, i));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlastNull = i;\n\t\t\t\t\t} else if (i === pointsLength - 1) { // last value\n\t\t\t\t\t\tsegments.push(points.slice(lastNull + 1, i + 1));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t// register it\n\t\tseries.segments = segments;\n\t},\n\t\n\t/**\n\t * Set the series options by merging from the options tree\n\t * @param {Object} itemOptions\n\t */\n\tsetOptions: function (itemOptions) {\n\t\tvar chart = this.chart,\n\t\t\tchartOptions = chart.options,\n\t\t\tplotOptions = chartOptions.plotOptions,\n\t\t\ttypeOptions = plotOptions[this.type],\n\t\t\toptions;\n\n\t\tthis.userOptions = itemOptions;\n\n\t\toptions = merge(\n\t\t\ttypeOptions,\n\t\t\tplotOptions.series,\n\t\t\titemOptions\n\t\t);\n\t\t\n\t\t// the tooltip options are merged between global and series specific options\n\t\tthis.tooltipOptions = merge(chartOptions.tooltip, options.tooltip);\n\t\t\n\t\t// Delte marker object if not allowed (#1125)\n\t\tif (typeOptions.marker === null) {\n\t\t\tdelete options.marker;\n\t\t}\n\t\t\n\t\treturn options;\n\n\t},\n\t/**\n\t * Get the series' color\n\t */\n\tgetColor: function () {\n\t\tvar options = this.options,\n\t\t\tuserOptions = this.userOptions,\n\t\t\tdefaultColors = this.chart.options.colors,\n\t\t\tcounters = this.chart.counters,\n\t\t\tcolor,\n\t\t\tcolorIndex;\n\n\t\tcolor = options.color || defaultPlotOptions[this.type].color;\n\n\t\tif (!color && !options.colorByPoint) {\n\t\t\tif (defined(userOptions._colorIndex)) { // after Series.update()\n\t\t\t\tcolorIndex = userOptions._colorIndex;\n\t\t\t} else {\n\t\t\t\tuserOptions._colorIndex = counters.color;\n\t\t\t\tcolorIndex = counters.color++;\n\t\t\t}\n\t\t\tcolor = defaultColors[colorIndex];\n\t\t}\n\t\t\n\t\tthis.color = color;\n\t\tcounters.wrapColor(defaultColors.length);\n\t},\n\t/**\n\t * Get the series' symbol\n\t */\n\tgetSymbol: function () {\n\t\tvar series = this,\n\t\t\tuserOptions = series.userOptions,\n\t\t\tseriesMarkerOption = series.options.marker,\n\t\t\tchart = series.chart,\n\t\t\tdefaultSymbols = chart.options.symbols,\n\t\t\tcounters = chart.counters,\n\t\t\tsymbolIndex;\n\n\t\tseries.symbol = seriesMarkerOption.symbol;\n\t\tif (!series.symbol) {\n\t\t\tif (defined(userOptions._symbolIndex)) { // after Series.update()\n\t\t\t\tsymbolIndex = userOptions._symbolIndex;\n\t\t\t} else {\n\t\t\t\tuserOptions._symbolIndex = counters.symbol;\n\t\t\t\tsymbolIndex = counters.symbol++;\n\t\t\t}\n\t\t\tseries.symbol = defaultSymbols[symbolIndex];\n\t\t}\n\n\t\t// don't substract radius in image symbols (#604)\n\t\tif (/^url/.test(series.symbol)) {\n\t\t\tseriesMarkerOption.radius = 0;\n\t\t}\n\t\tcounters.wrapSymbol(defaultSymbols.length);\n\t},\n\n\t/**\n\t * Get the series' symbol in the legend. This method should be overridable to create custom \n\t * symbols through Highcharts.seriesTypes[type].prototype.drawLegendSymbols.\n\t * \n\t * @param {Object} legend The legend object\n\t */\n\tdrawLegendSymbol: function (legend) {\n\t\t\n\t\tvar options = this.options,\n\t\t\tmarkerOptions = options.marker,\n\t\t\tradius,\n\t\t\tlegendOptions = legend.options,\n\t\t\tlegendSymbol,\n\t\t\tsymbolWidth = legendOptions.symbolWidth,\n\t\t\trenderer = this.chart.renderer,\n\t\t\tlegendItemGroup = this.legendGroup,\n\t\t\tverticalCenter = legend.baseline - mathRound(renderer.fontMetrics(legendOptions.itemStyle.fontSize).b * 0.3),\n\t\t\tattr;\n\t\t\t\n\t\t// Draw the line\n\t\tif (options.lineWidth) {\n\t\t\tattr = {\n\t\t\t\t'stroke-width': options.lineWidth\n\t\t\t};\n\t\t\tif (options.dashStyle) {\n\t\t\t\tattr.dashstyle = options.dashStyle;\n\t\t\t}\n\t\t\tthis.legendLine = renderer.path([\n\t\t\t\tM,\n\t\t\t\t0,\n\t\t\t\tverticalCenter,\n\t\t\t\tL,\n\t\t\t\tsymbolWidth,\n\t\t\t\tverticalCenter\n\t\t\t])\n\t\t\t.attr(attr)\n\t\t\t.add(legendItemGroup);\n\t\t}\n\t\t\n\t\t// Draw the marker\n\t\tif (markerOptions && markerOptions.enabled) {\n\t\t\tradius = markerOptions.radius;\n\t\t\tthis.legendSymbol = legendSymbol = renderer.symbol(\n\t\t\t\tthis.symbol,\n\t\t\t\t(symbolWidth / 2) - radius,\n\t\t\t\tverticalCenter - radius,\n\t\t\t\t2 * radius,\n\t\t\t\t2 * radius\n\t\t\t)\n\t\t\t.add(legendItemGroup);\n\t\t\tlegendSymbol.isMarker = true;\n\t\t}\n\t},\n\n\t/**\n\t * Add a point dynamically after chart load time\n\t * @param {Object} options Point options as given in series.data\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean} shift If shift is true, a point is shifted off the start\n\t *    of the series as one is appended to the end.\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\taddPoint: function (options, redraw, shift, animation) {\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\tdata = series.data,\n\t\t\tgraph = series.graph,\n\t\t\tarea = series.area,\n\t\t\tchart = series.chart,\n\t\t\txData = series.xData,\n\t\t\tyData = series.yData,\n\t\t\tzData = series.zData,\n\t\t\tnames = series.names,\n\t\t\tcurrentShift = (graph && graph.shift) || 0,\n\t\t\tdataOptions = seriesOptions.data,\n\t\t\tpoint,\n\t\t\tisInTheMiddle,\n\t\t\tx,\n\t\t\ti;\n\n\t\tsetAnimation(animation, chart);\n\n\t\t// Make graph animate sideways\n\t\tif (shift) {\n\t\t\teach([graph, area, series.graphNeg, series.areaNeg], function (shape) {\n\t\t\t\tif (shape) {\n\t\t\t\t\tshape.shift = currentShift + 1;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (area) {\n\t\t\tarea.isArea = true; // needed in animation, both with and without shift\n\t\t}\n\t\t\n\t\t// Optional redraw, defaults to true\n\t\tredraw = pick(redraw, true);\n\n\t\t// Get options and push the point to xData, yData and series.options. In series.generatePoints\n\t\t// the Point instance will be created on demand and pushed to the series.data array.\n\t\tpoint = { series: series };\n\t\tseries.pointClass.prototype.applyOptions.apply(point, [options]);\n\t\tx = point.x;\n\n\t\t// Get the insertion point\n\t\ti = xData.length;\n\t\tif (series.requireSorting && x < xData[i - 1]) {\n\t\t\tisInTheMiddle = true;\n\t\t\twhile (i && xData[i - 1] > x) {\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t\t\n\t\txData.splice(i, 0, x);\n\t\tyData.splice(i, 0, series.toYData ? series.toYData(point) : point.y);\n\t\tzData.splice(i, 0, point.z);\n\t\tif (names) {\n\t\t\tnames[x] = point.name;\n\t\t}\n\t\tdataOptions.splice(i, 0, options);\n\n\t\tif (isInTheMiddle) {\n\t\t\tseries.data.splice(i, 0, null);\n\t\t\tseries.processData();\n\t\t}\n\t\t\n\t\t// Generate points to be added to the legend (#1329) \n\t\tif (seriesOptions.legendType === 'point') {\n\t\t\tseries.generatePoints();\n\t\t}\n\n\t\t// Shift the first point off the parallel arrays\n\t\t// todo: consider series.removePoint(i) method\n\t\tif (shift) {\n\t\t\tif (data[0] && data[0].remove) {\n\t\t\t\tdata[0].remove(false);\n\t\t\t} else {\n\t\t\t\tdata.shift();\n\t\t\t\txData.shift();\n\t\t\t\tyData.shift();\n\t\t\t\tzData.shift();\n\t\t\t\tdataOptions.shift();\n\t\t\t}\n\t\t}\n\n\t\t// redraw\n\t\tseries.isDirty = true;\n\t\tseries.isDirtyData = true;\n\t\tif (redraw) {\n\t\t\tseries.getAttribs(); // #1937\n\t\t\tchart.redraw();\n\t\t}\n\t},\n\n\t/**\n\t * Replace the series data with a new set of data\n\t * @param {Object} data\n\t * @param {Object} redraw\n\t */\n\tsetData: function (data, redraw) {\n\t\tvar series = this,\n\t\t\toldData = series.points,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\tfirstPoint = null,\n\t\t\txAxis = series.xAxis,\n\t\t\tnames = xAxis && xAxis.categories && !xAxis.categories.length ? [] : null,\n\t\t\ti;\n\n\t\t// reset properties\n\t\tseries.xIncrement = null;\n\t\tseries.pointRange = xAxis && xAxis.categories ? 1 : options.pointRange;\n\n\t\tseries.colorCounter = 0; // for series with colorByPoint (#1547)\n\t\t\n\t\t// parallel arrays\n\t\tvar xData = [],\n\t\t\tyData = [],\n\t\t\tzData = [],\n\t\t\tdataLength = data ? data.length : [],\n\t\t\tturboThreshold = pick(options.turboThreshold, 1000),\n\t\t\tpt,\n\t\t\tpointArrayMap = series.pointArrayMap,\n\t\t\tvalueCount = pointArrayMap && pointArrayMap.length,\n\t\t\thasToYData = !!series.toYData;\n\n\t\t// In turbo mode, only one- or twodimensional arrays of numbers are allowed. The\n\t\t// first value is tested, and we assume that all the rest are defined the same\n\t\t// way. Although the 'for' loops are similar, they are repeated inside each\n\t\t// if-else conditional for max performance.\n\t\tif (turboThreshold && dataLength > turboThreshold) { \n\t\t\t\n\t\t\t// find the first non-null point\n\t\t\ti = 0;\n\t\t\twhile (firstPoint === null && i < dataLength) {\n\t\t\t\tfirstPoint = data[i];\n\t\t\t\ti++;\n\t\t\t}\n\t\t\n\t\t\n\t\t\tif (isNumber(firstPoint)) { // assume all points are numbers\n\t\t\t\tvar x = pick(options.pointStart, 0),\n\t\t\t\t\tpointInterval = pick(options.pointInterval, 1);\n\n\t\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\t\txData[i] = x;\n\t\t\t\t\tyData[i] = data[i];\n\t\t\t\t\tx += pointInterval;\n\t\t\t\t}\n\t\t\t\tseries.xIncrement = x;\n\t\t\t} else if (isArray(firstPoint)) { // assume all points are arrays\n\t\t\t\tif (valueCount) { // [x, low, high] or [x, o, h, l, c]\n\t\t\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\t\t\tpt = data[i];\n\t\t\t\t\t\txData[i] = pt[0];\n\t\t\t\t\t\tyData[i] = pt.slice(1, valueCount + 1);\n\t\t\t\t\t}\n\t\t\t\t} else { // [x, y]\n\t\t\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\t\t\tpt = data[i];\n\t\t\t\t\t\txData[i] = pt[0];\n\t\t\t\t\t\tyData[i] = pt[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terror(12); // Highcharts expects configs to be numbers or arrays in turbo mode\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\tif (data[i] !== UNDEFINED) { // stray commas in oldIE\n\t\t\t\t\tpt = { series: series };\n\t\t\t\t\tseries.pointClass.prototype.applyOptions.apply(pt, [data[i]]);\n\t\t\t\t\txData[i] = pt.x;\n\t\t\t\t\tyData[i] = hasToYData ? series.toYData(pt) : pt.y;\n\t\t\t\t\tzData[i] = pt.z;\n\t\t\t\t\tif (names && pt.name) {\n\t\t\t\t\t\tnames[pt.x] = pt.name; // #2046\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Forgetting to cast strings to numbers is a common caveat when handling CSV or JSON\t\t\n\t\tif (isString(yData[0])) {\n\t\t\terror(14, true);\n\t\t} \n\n\t\tseries.data = [];\n\t\tseries.options.data = data;\n\t\tseries.xData = xData;\n\t\tseries.yData = yData;\n\t\tseries.zData = zData;\n\t\tseries.names = names;\n\n\t\t// destroy old points\n\t\ti = (oldData && oldData.length) || 0;\n\t\twhile (i--) {\n\t\t\tif (oldData[i] && oldData[i].destroy) {\n\t\t\t\toldData[i].destroy();\n\t\t\t}\n\t\t}\n\n\t\t// reset minRange (#878)\n\t\tif (xAxis) {\n\t\t\txAxis.minRange = xAxis.userMinRange;\n\t\t}\n\n\t\t// redraw\n\t\tseries.isDirty = series.isDirtyData = chart.isDirtyBox = true;\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw(false);\n\t\t}\n\t},\n\n\t/**\n\t * Remove a series and optionally redraw the chart\n\t *\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\n\tremove: function (redraw, animation) {\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\t\tredraw = pick(redraw, true);\n\n\t\tif (!series.isRemoving) {  /* prevent triggering native event in jQuery\n\t\t\t\t(calling the remove function from the remove event) */\n\t\t\tseries.isRemoving = true;\n\n\t\t\t// fire the event with a default handler of removing the point\n\t\t\tfireEvent(series, 'remove', null, function () {\n\n\n\t\t\t\t// destroy elements\n\t\t\t\tseries.destroy();\n\n\n\t\t\t\t// redraw\n\t\t\t\tchart.isDirtyLegend = chart.isDirtyBox = true;\n\t\t\t\tchart.linkSeries();\n\t\t\t\t\n\t\t\t\tif (redraw) {\n\t\t\t\t\tchart.redraw(animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\t\tseries.isRemoving = false;\n\t},\n\n\t/**\n\t * Process the data by cropping away unused data points if the series is longer\n\t * than the crop threshold. This saves computing time for lage series.\n\t */\n\tprocessData: function (force) {\n\t\tvar series = this,\n\t\t\tprocessedXData = series.xData, // copied during slice operation below\n\t\t\tprocessedYData = series.yData,\n\t\t\tdataLength = processedXData.length,\n\t\t\tcroppedData,\n\t\t\tcropStart = 0,\n\t\t\tcropped,\n\t\t\tdistance,\n\t\t\tclosestPointRange,\n\t\t\txAxis = series.xAxis,\n\t\t\ti, // loop variable\n\t\t\toptions = series.options,\n\t\t\tcropThreshold = options.cropThreshold,\n\t\t\tisCartesian = series.isCartesian;\n\n\t\t// If the series data or axes haven't changed, don't go through this. Return false to pass\n\t\t// the message on to override methods like in data grouping. \n\t\tif (isCartesian && !series.isDirty && !xAxis.isDirty && !series.yAxis.isDirty && !force) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\n\t\t// optionally filter out points outside the plot area\n\t\tif (isCartesian && series.sorted && (!cropThreshold || dataLength > cropThreshold || series.forceCrop)) {\n\t\t\tvar min = xAxis.min,\n\t\t\t\tmax = xAxis.max;\n\n\t\t\t// it's outside current extremes\n\t\t\tif (processedXData[dataLength - 1] < min || processedXData[0] > max) {\n\t\t\t\tprocessedXData = [];\n\t\t\t\tprocessedYData = [];\n\t\t\t\n\t\t\t// only crop if it's actually spilling out\n\t\t\t} else if (processedXData[0] < min || processedXData[dataLength - 1] > max) {\n\t\t\t\tcroppedData = this.cropData(series.xData, series.yData, min, max);\n\t\t\t\tprocessedXData = croppedData.xData;\n\t\t\t\tprocessedYData = croppedData.yData;\n\t\t\t\tcropStart = croppedData.start;\n\t\t\t\tcropped = true;\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\t\t// Find the closest distance between processed points\n\t\tfor (i = processedXData.length - 1; i >= 0; i--) {\n\t\t\tdistance = processedXData[i] - processedXData[i - 1];\n\t\t\tif (distance > 0 && (closestPointRange === UNDEFINED || distance < closestPointRange)) {\n\t\t\t\tclosestPointRange = distance;\n\n\t\t\t// Unsorted data is not supported by the line tooltip, as well as data grouping and \n\t\t\t// navigation in Stock charts (#725) and width calculation of columns (#1900)\n\t\t\t} else if (distance < 0 && series.requireSorting) {\n\t\t\t\terror(15);\n\t\t\t}\n\t\t}\n\n\t\t// Record the properties\n\t\tseries.cropped = cropped; // undefined or true\n\t\tseries.cropStart = cropStart;\n\t\tseries.processedXData = processedXData;\n\t\tseries.processedYData = processedYData;\n\n\t\tif (options.pointRange === null) { // null means auto, as for columns, candlesticks and OHLC\n\t\t\tseries.pointRange = closestPointRange || 1;\n\t\t}\n\t\tseries.closestPointRange = closestPointRange;\n\t\t\n\t},\n\n\t/**\n\t * Iterate over xData and crop values between min and max. Returns object containing crop start/end\n\t * cropped xData with corresponding part of yData, dataMin and dataMax within the cropped range\n\t */\n\tcropData: function (xData, yData, min, max) {\n\t\tvar dataLength = xData.length,\n\t\t\tcropStart = 0,\n\t\t\tcropEnd = dataLength,\n\t\t\tcropShoulder = pick(this.cropShoulder, 1), // line-type series need one point outside\n\t\t\ti;\n\n\t\t// iterate up to find slice start\n\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\tif (xData[i] >= min) {\n\t\t\t\tcropStart = mathMax(0, i - cropShoulder);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// proceed to find slice end\n\t\tfor (; i < dataLength; i++) {\n\t\t\tif (xData[i] > max) {\n\t\t\t\tcropEnd = i + cropShoulder;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\txData: xData.slice(cropStart, cropEnd),\n\t\t\tyData: yData.slice(cropStart, cropEnd),\n\t\t\tstart: cropStart,\n\t\t\tend: cropEnd\n\t\t};\n\t},\n\n\n\t/**\n\t * Generate the data point after the data has been processed by cropping away\n\t * unused points and optionally grouped in Highcharts Stock.\n\t */\n\tgeneratePoints: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tdataOptions = options.data,\n\t\t\tdata = series.data,\n\t\t\tdataLength,\n\t\t\tprocessedXData = series.processedXData,\n\t\t\tprocessedYData = series.processedYData,\n\t\t\tpointClass = series.pointClass,\n\t\t\tprocessedDataLength = processedXData.length,\n\t\t\tcropStart = series.cropStart || 0,\n\t\t\tcursor,\n\t\t\thasGroupedData = series.hasGroupedData,\n\t\t\tpoint,\n\t\t\tpoints = [],\n\t\t\ti;\n\n\t\tif (!data && !hasGroupedData) {\n\t\t\tvar arr = [];\n\t\t\tarr.length = dataOptions.length;\n\t\t\tdata = series.data = arr;\n\t\t}\n\n\t\tfor (i = 0; i < processedDataLength; i++) {\n\t\t\tcursor = cropStart + i;\n\t\t\tif (!hasGroupedData) {\n\t\t\t\tif (data[cursor]) {\n\t\t\t\t\tpoint = data[cursor];\n\t\t\t\t} else if (dataOptions[cursor] !== UNDEFINED) { // #970\n\t\t\t\t\tdata[cursor] = point = (new pointClass()).init(series, dataOptions[cursor], processedXData[i]);\n\t\t\t\t}\n\t\t\t\tpoints[i] = point;\n\t\t\t} else {\n\t\t\t\t// splat the y data in case of ohlc data array\n\t\t\t\tpoints[i] = (new pointClass()).init(series, [processedXData[i]].concat(splat(processedYData[i])));\n\t\t\t}\n\t\t}\n\n\t\t// Hide cropped-away points - this only runs when the number of points is above cropThreshold, or when\n\t\t// swithching view from non-grouped data to grouped data (#637)\t\n\t\tif (data && (processedDataLength !== (dataLength = data.length) || hasGroupedData)) {\n\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\tif (i === cropStart && !hasGroupedData) { // when has grouped data, clear all points\n\t\t\t\t\ti += processedDataLength;\n\t\t\t\t}\n\t\t\t\tif (data[i]) {\n\t\t\t\t\tdata[i].destroyElements();\n\t\t\t\t\tdata[i].plotX = UNDEFINED; // #1003\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tseries.data = data;\n\t\tseries.points = points;\n\t},\n\n\t/**\n\t * Adds series' points value to corresponding stack\n\t */\n\tsetStackedPoints: function () {\n\t\tif (!this.options.stacking || (this.visible !== true && this.chart.options.chart.ignoreHiddenSeries !== false)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar series = this,\n\t\t\txData = series.processedXData,\n\t\t\tyData = series.processedYData,\n\t\t\tstackedYData = [],\n\t\t\tyDataLength = yData.length,\n\t\t\tseriesOptions = series.options,\n\t\t\tthreshold = seriesOptions.threshold,\n\t\t\tstackOption = seriesOptions.stack,\n\t\t\tstacking = seriesOptions.stacking,\n\t\t\tstackKey = series.stackKey,\n\t\t\tnegKey = '-' + stackKey,\n\t\t\tnegStacks = series.negStacks,\n\t\t\tyAxis = series.yAxis,\n\t\t\tstacks = yAxis.stacks,\n\t\t\toldStacks = yAxis.oldStacks,\n\t\t\tisNegative,\n\t\t\tstack,\n\t\t\tother,\n\t\t\tkey,\n\t\t\ti,\n\t\t\tx,\n\t\t\ty;\n\n\t\t// loop over the non-null y values and read them into a local array\n\t\tfor (i = 0; i < yDataLength; i++) {\n\t\t\tx = xData[i];\n\t\t\ty = yData[i];\n\n\t\t\t// Read stacked values into a stack based on the x value,\n\t\t\t// the sign of y and the stack key. Stacking is also handled for null values (#739)\n\t\t\tisNegative = negStacks && y < threshold;\n\t\t\tkey = isNegative ? negKey : stackKey;\n\n\t\t\t// Create empty object for this stack if it doesn't exist yet\n\t\t\tif (!stacks[key]) {\n\t\t\t\tstacks[key] = {};\n\t\t\t}\n\n\t\t\t// Initialize StackItem for this x\n\t\t\tif (!stacks[key][x]) {\n\t\t\t\tif (oldStacks[key] && oldStacks[key][x]) {\n\t\t\t\t\tstacks[key][x] = oldStacks[key][x];\n\t\t\t\t\tstacks[key][x].total = null;\n\t\t\t\t} else {\n\t\t\t\t\tstacks[key][x] = new StackItem(yAxis, yAxis.options.stackLabels, isNegative, x, stackOption, stacking);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the StackItem doesn't exist, create it first\n\t\t\tstack = stacks[key][x];\n\t\t\tstack.points[series.index] = [stack.cum || 0];\n\n\t\t\t// Add value to the stack total\n\t\t\tif (stacking === 'percent') {\n\t\t\t\t\n\t\t\t\t// Percent stacked column, totals are the same for the positive and negative stacks\n\t\t\t\tother = isNegative ? stackKey : negKey;\n\t\t\t\tif (negStacks && stacks[other] && stacks[other][x]) {\n\t\t\t\t\tother = stacks[other][x];\n\t\t\t\t\tstack.total = other.total = mathMax(other.total, stack.total) + mathAbs(y) || 0;\n\n\t\t\t\t// Percent stacked areas\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tstack.total += mathAbs(y) || 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstack.total += y || 0;\n\t\t\t}\n\n\t\t\tstack.cum = (stack.cum || 0) + (y || 0);\n\n\t\t\tstack.points[series.index].push(stack.cum);\n\t\t\tstackedYData[i] = stack.cum;\n\n\t\t}\n\n\t\tif (stacking === 'percent') {\n\t\t\tyAxis.usePercentage = true;\n\t\t}\n\n\t\tthis.stackedYData = stackedYData; // To be used in getExtremes\n\t\t\n\t\t// Reset old stacks\n\t\tyAxis.oldStacks = {};\n\t},\n\n\t/**\n\t * Iterate over all stacks and compute the absolute values to percent\n\t */\n\tsetPercentStacks: function () {\n\t\tvar series = this,\n\t\t\tstackKey = series.stackKey,\n\t\t\tstacks = series.yAxis.stacks;\n\t\t\n\t\teach([stackKey, '-' + stackKey], function (key) {\n\t\t\tvar i = series.xData.length,\n\t\t\t\tx,\n\t\t\t\tstack,\n\t\t\t\tpointExtremes,\n\t\t\t\ttotalFactor;\n\n\t\t\twhile (i--) {\n\t\t\t\tx = series.xData[i];\n\t\t\t\tstack = stacks[key] && stacks[key][x];\n\t\t\t\tpointExtremes = stack && stack.points[series.index];\n\t\t\t\tif (pointExtremes) {\n\t\t\t\t\ttotalFactor = stack.total ? 100 / stack.total : 0;\n\t\t\t\t\tpointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor); // Y bottom value\n\t\t\t\t\tpointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor); // Y value\n\t\t\t\t\tseries.stackedYData[i] = pointExtremes[1];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Calculate Y extremes for visible data\n\t */\n\tgetExtremes: function () {\n\t\tvar xAxis = this.xAxis,\n\t\t\tyAxis = this.yAxis,\n\t\t\txData = this.processedXData,\n\t\t\tyData = this.stackedYData || this.processedYData,\n\t\t\tyDataLength = yData.length,\n\t\t\tactiveYData = [],\n\t\t\tactiveCounter = 0,\n\t\t\txExtremes = xAxis.getExtremes(), // #2117, need to compensate for log X axis\n\t\t\txMin = xExtremes.min,\n\t\t\txMax = xExtremes.max,\n\t\t\tvalidValue,\n\t\t\twithinRange,\n\t\t\tdataMin,\n\t\t\tdataMax,\n\t\t\tx,\n\t\t\ty,\n\t\t\ti,\n\t\t\tj;\n\n\t\tfor (i = 0; i < yDataLength; i++) {\n\t\t\t\n\t\t\tx = xData[i];\n\t\t\ty = yData[i];\n\n\t\t\t// For points within the visible range, including the first point outside the\n\t\t\t// visible range, consider y extremes\n\t\t\tvalidValue = y !== null && y !== UNDEFINED && (!yAxis.isLog || (y.length || y > 0));\n\t\t\twithinRange = this.getExtremesFromAll || this.cropped || ((xData[i + 1] || x) >= xMin && \n\t\t\t\t(xData[i - 1] || x) <= xMax);\n\n\t\t\tif (validValue && withinRange) {\n\n\t\t\t\tj = y.length;\n\t\t\t\tif (j) { // array, like ohlc or range data\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\tif (y[j] !== null) {\n\t\t\t\t\t\t\tactiveYData[activeCounter++] = y[j];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tactiveYData[activeCounter++] = y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.dataMin = pick(dataMin, arrayMin(activeYData));\n\t\tthis.dataMax = pick(dataMax, arrayMax(activeYData));\n\t},\n\n\t/**\n\t * Translate data points from raw data values to chart specific positioning data\n\t * needed later in drawPoints, drawGraph and drawTracker.\n\t */\n\ttranslate: function () {\n\t\tif (!this.processedXData) { // hidden series\n\t\t\tthis.processData();\n\t\t}\n\t\tthis.generatePoints();\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tstacking = options.stacking,\n\t\t\txAxis = series.xAxis,\n\t\t\tcategories = xAxis.categories,\n\t\t\tyAxis = series.yAxis,\n\t\t\tpoints = series.points,\n\t\t\tdataLength = points.length,\n\t\t\thasModifyValue = !!series.modifyValue,\n\t\t\ti,\n\t\t\tpointPlacement = options.pointPlacement,\n\t\t\tdynamicallyPlaced = pointPlacement === 'between' || isNumber(pointPlacement),\n\t\t\tthreshold = options.threshold;\n\n\t\t\n\t\t// Translate each point\n\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\tvar point = points[i],\n\t\t\t\txValue = point.x,\n\t\t\t\tyValue = point.y,\n\t\t\t\tyBottom = point.low,\n\t\t\t\tstack = yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey],\n\t\t\t\tpointStack,\n\t\t\t\tstackValues;\n\n\t\t\t// Discard disallowed y values for log axes\n\t\t\tif (yAxis.isLog && yValue <= 0) {\n\t\t\t\tpoint.y = yValue = null;\n\t\t\t}\n\t\t\t\n\t\t\t// Get the plotX translation\n\t\t\tpoint.plotX = xAxis.translate(xValue, 0, 0, 0, 1, pointPlacement, this.type === 'flags'); // Math.round fixes #591\n\t\t\t\n\n\t\t\t// Calculate the bottom y value for stacked series\n\t\t\tif (stacking && series.visible && stack && stack[xValue]) {\n\n\t\t\t\tpointStack = stack[xValue];\n\t\t\t\tstackValues = pointStack.points[series.index];\n\t\t\t\tyBottom = stackValues[0];\n\t\t\t\tyValue = stackValues[1];\n\n\t\t\t\tif (yBottom === 0) {\n\t\t\t\t\tyBottom = pick(threshold, yAxis.min);\n\t\t\t\t}\n\t\t\t\tif (yAxis.isLog && yBottom <= 0) { // #1200, #1232\n\t\t\t\t\tyBottom = null;\n\t\t\t\t}\n\n\t\t\t\tpoint.percentage = stacking === 'percent' && yValue;\n\t\t\t\tpoint.total = point.stackTotal = pointStack.total;\n\t\t\t\tpoint.stackY = yValue;\n\n\t\t\t\t// Place the stack label\n\t\t\t\tpointStack.setOffset(series.pointXOffset || 0, series.barW || 0);\n\t\t\t\t\n\t\t\t}\n\n\t\t\t// Set translated yBottom or remove it\n\t\t\tpoint.yBottom = defined(yBottom) ? \n\t\t\t\tyAxis.translate(yBottom, 0, 1, 0, 1) :\n\t\t\t\tnull;\n\t\t\t\t\n\t\t\t// general hook, used for Highstock compare mode\n\t\t\tif (hasModifyValue) {\n\t\t\t\tyValue = series.modifyValue(yValue, point);\n\t\t\t}\n\n\t\t\t// Set the the plotY value, reset it for redraws\n\t\t\tpoint.plotY = (typeof yValue === 'number' && yValue !== Infinity) ? \n\t\t\t\t//mathRound(yAxis.translate(yValue, 0, 1, 0, 1) * 10) / 10 : // Math.round fixes #591\n\t\t\t\tyAxis.translate(yValue, 0, 1, 0, 1) : \n\t\t\t\tUNDEFINED;\n\t\t\t\n\t\t\t// Set client related positions for mouse tracking\n\t\t\tpoint.clientX = dynamicallyPlaced ? xAxis.translate(xValue, 0, 0, 0, 1) : point.plotX; // #1514\n\t\t\t\t\n\t\t\tpoint.negative = point.y < (threshold || 0);\n\n\t\t\t// some API data\n\t\t\tpoint.category = categories && categories[point.x] !== UNDEFINED ?\n\t\t\t\tcategories[point.x] : point.x;\n\n\n\t\t}\n\n\t\t// now that we have the cropped data, build the segments\n\t\tseries.getSegments();\n\t},\n\t/**\n\t * Memoize tooltip texts and positions\n\t */\n\tsetTooltipPoints: function (renew) {\n\t\tvar series = this,\n\t\t\tpoints = [],\n\t\t\tpointsLength,\n\t\t\tlow,\n\t\t\thigh,\n\t\t\txAxis = series.xAxis,\n\t\t\txExtremes = xAxis && xAxis.getExtremes(),\n\t\t\taxisLength = xAxis ? (xAxis.tooltipLen || xAxis.len) : series.chart.plotSizeX, // tooltipLen and tooltipPosName used in polar\n\t\t\tpoint,\n\t\t\tpointX,\n\t\t\tnextPoint,\n\t\t\ti,\n\t\t\ttooltipPoints = []; // a lookup array for each pixel in the x dimension\n\n\t\t// don't waste resources if tracker is disabled\n\t\tif (series.options.enableMouseTracking === false) {\n\t\t\treturn;\n\t\t}\n\n\t\t// renew\n\t\tif (renew) {\n\t\t\tseries.tooltipPoints = null;\n\t\t}\n\n\t\t// concat segments to overcome null values\n\t\teach(series.segments || series.points, function (segment) {\n\t\t\tpoints = points.concat(segment);\n\t\t});\n\n\t\t// Reverse the points in case the X axis is reversed\n\t\tif (xAxis && xAxis.reversed) {\n\t\t\tpoints = points.reverse();\n\t\t}\n\n\t\t// Polar needs additional shaping\n\t\tif (series.orderTooltipPoints) {\n\t\t\tseries.orderTooltipPoints(points);\n\t\t}\n\n\t\t// Assign each pixel position to the nearest point\n\t\tpointsLength = points.length;\n\t\tfor (i = 0; i < pointsLength; i++) {\n\t\t\tpoint = points[i];\n\t\t\tpointX = point.x;\n\t\t\tif (pointX >= xExtremes.min && pointX <= xExtremes.max) { // #1149\n\t\t\t\tnextPoint = points[i + 1];\n\t\t\t\t\n\t\t\t\t// Set this range's low to the last range's high plus one\n\t\t\t\tlow = high === UNDEFINED ? 0 : high + 1;\n\t\t\t\t// Now find the new high\n\t\t\t\thigh = points[i + 1] ?\n\t\t\t\t\tmathMin(mathMax(0, mathFloor( // #2070\n\t\t\t\t\t\t(point.clientX + (nextPoint ? (nextPoint.wrappedClientX || nextPoint.clientX) : axisLength)) / 2\n\t\t\t\t\t)), axisLength) :\n\t\t\t\t\taxisLength;\n\n\t\t\t\twhile (low >= 0 && low <= high) {\n\t\t\t\t\ttooltipPoints[low++] = point;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tseries.tooltipPoints = tooltipPoints;\n\t},\n\n\t/**\n\t * Format the header of the tooltip\n\t */\n\ttooltipHeaderFormatter: function (point) {\n\t\tvar series = this,\n\t\t\ttooltipOptions = series.tooltipOptions,\n\t\t\txDateFormat = tooltipOptions.xDateFormat,\n\t\t\tdateTimeLabelFormats = tooltipOptions.dateTimeLabelFormats,\n\t\t\txAxis = series.xAxis,\n\t\t\tisDateTime = xAxis && xAxis.options.type === 'datetime',\n\t\t\theaderFormat = tooltipOptions.headerFormat,\n\t\t\tclosestPointRange = xAxis && xAxis.closestPointRange,\n\t\t\tn;\n\t\t\t\n\t\t// Guess the best date format based on the closest point distance (#568)\n\t\tif (isDateTime && !xDateFormat) {\n\t\t\tif (closestPointRange) {\n\t\t\t\tfor (n in timeUnits) {\n\t\t\t\t\tif (timeUnits[n] >= closestPointRange) {\n\t\t\t\t\t\txDateFormat = dateTimeLabelFormats[n];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\txDateFormat = dateTimeLabelFormats.day;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Insert the header date format if any\n\t\tif (isDateTime && xDateFormat && isNumber(point.key)) {\n\t\t\theaderFormat = headerFormat.replace('{point.key}', '{point.key:' + xDateFormat + '}');\n\t\t}\n\t\t\n\t\treturn format(headerFormat, {\n\t\t\tpoint: point,\n\t\t\tseries: series\n\t\t});\n\t},\n\n\t/**\n\t * Series mouse over handler\n\t */\n\tonMouseOver: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\thoverSeries = chart.hoverSeries;\n\n\t\t// set normal state to previous series\n\t\tif (hoverSeries && hoverSeries !== series) {\n\t\t\thoverSeries.onMouseOut();\n\t\t}\n\n\t\t// trigger the event, but to save processing time,\n\t\t// only if defined\n\t\tif (series.options.events.mouseOver) {\n\t\t\tfireEvent(series, 'mouseOver');\n\t\t}\n\n\t\t// hover this\n\t\tseries.setState(HOVER_STATE);\n\t\tchart.hoverSeries = series;\n\t},\n\n\t/**\n\t * Series mouse out handler\n\t */\n\tonMouseOut: function () {\n\t\t// trigger the event only if listeners exist\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\ttooltip = chart.tooltip,\n\t\t\thoverPoint = chart.hoverPoint;\n\n\t\t// trigger mouse out on the point, which must be in this series\n\t\tif (hoverPoint) {\n\t\t\thoverPoint.onMouseOut();\n\t\t}\n\n\t\t// fire the mouse out event\n\t\tif (series && options.events.mouseOut) {\n\t\t\tfireEvent(series, 'mouseOut');\n\t\t}\n\n\n\t\t// hide the tooltip\n\t\tif (tooltip && !options.stickyTracking && (!tooltip.shared || series.noSharedTooltip)) {\n\t\t\ttooltip.hide();\n\t\t}\n\n\t\t// set normal state\n\t\tseries.setState();\n\t\tchart.hoverSeries = null;\n\t},\n\n\t/**\n\t * Animate in the series\n\t */\n\tanimate: function (init) {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tclipRect,\n\t\t\tmarkerClipRect,\n\t\t\tanimation = series.options.animation,\n\t\t\tclipBox = chart.clipBox,\n\t\t\tinverted = chart.inverted,\n\t\t\tsharedClipKey;\n\n\t\t// Animation option is set to true\n\t\tif (animation && !isObject(animation)) {\n\t\t\tanimation = defaultPlotOptions[series.type].animation;\n\t\t}\n\t\tsharedClipKey = '_sharedClip' + animation.duration + animation.easing;\n\n\t\t// Initialize the animation. Set up the clipping rectangle.\n\t\tif (init) { \n\t\t\t\n\t\t\t// If a clipping rectangle with the same properties is currently present in the chart, use that. \n\t\t\tclipRect = chart[sharedClipKey];\n\t\t\tmarkerClipRect = chart[sharedClipKey + 'm'];\n\t\t\tif (!clipRect) {\n\t\t\t\tchart[sharedClipKey] = clipRect = renderer.clipRect(\n\t\t\t\t\textend(clipBox, { width: 0 })\n\t\t\t\t);\n\t\t\t\t\n\t\t\t\tchart[sharedClipKey + 'm'] = markerClipRect = renderer.clipRect(\n\t\t\t\t\t-99, // include the width of the first marker\n\t\t\t\t\tinverted ? -chart.plotLeft : -chart.plotTop, \n\t\t\t\t\t99,\n\t\t\t\t\tinverted ? chart.chartWidth : chart.chartHeight\n\t\t\t\t);\n\t\t\t}\n\t\t\tseries.group.clip(clipRect);\n\t\t\tseries.markerGroup.clip(markerClipRect);\n\t\t\tseries.sharedClipKey = sharedClipKey;\n\n\t\t// Run the animation\n\t\t} else { \n\t\t\tclipRect = chart[sharedClipKey];\n\t\t\tif (clipRect) {\n\t\t\t\tclipRect.animate({\n\t\t\t\t\twidth: chart.plotSizeX\n\t\t\t\t}, animation);\n\t\t\t\tchart[sharedClipKey + 'm'].animate({\n\t\t\t\t\twidth: chart.plotSizeX + 99\n\t\t\t\t}, animation);\n\t\t\t}\n\n\t\t\t// Delete this function to allow it only once\n\t\t\tseries.animate = null;\n\t\t\t\n\t\t\t// Call the afterAnimate function on animation complete (but don't overwrite the animation.complete option\n\t\t\t// which should be available to the user).\n\t\t\tseries.animationTimeout = setTimeout(function () {\n\t\t\t\tseries.afterAnimate();\n\t\t\t}, animation.duration);\n\t\t}\n\t},\n\t\n\t/**\n\t * This runs after animation to land on the final plot clipping\n\t */\n\tafterAnimate: function () {\n\t\tvar chart = this.chart,\n\t\t\tsharedClipKey = this.sharedClipKey,\n\t\t\tgroup = this.group;\n\t\t\t\n\t\tif (group && this.options.clip !== false) {\n\t\t\tgroup.clip(chart.clipRect);\n\t\t\tthis.markerGroup.clip(); // no clip\n\t\t}\n\t\t\n\t\t// Remove the shared clipping rectancgle when all series are shown\t\t\n\t\tsetTimeout(function () {\n\t\t\tif (sharedClipKey && chart[sharedClipKey]) {\n\t\t\t\tchart[sharedClipKey] = chart[sharedClipKey].destroy();\n\t\t\t\tchart[sharedClipKey + 'm'] = chart[sharedClipKey + 'm'].destroy();\n\t\t\t}\n\t\t}, 100);\n\t},\n\n\t/**\n\t * Draw the markers\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\tpointAttr,\n\t\t\tpoints = series.points,\n\t\t\tchart = series.chart,\n\t\t\tplotX,\n\t\t\tplotY,\n\t\t\ti,\n\t\t\tpoint,\n\t\t\tradius,\n\t\t\tsymbol,\n\t\t\tisImage,\n\t\t\tgraphic,\n\t\t\toptions = series.options,\n\t\t\tseriesMarkerOptions = options.marker,\n\t\t\tpointMarkerOptions,\n\t\t\tenabled,\n\t\t\tisInside,\n\t\t\tmarkerGroup = series.markerGroup;\n\n\t\tif (seriesMarkerOptions.enabled || series._hasPointMarkers) {\n\t\t\t\n\t\t\ti = points.length;\n\t\t\twhile (i--) {\n\t\t\t\tpoint = points[i];\n\t\t\t\tplotX = mathFloor(point.plotX); // #1843\n\t\t\t\tplotY = point.plotY;\n\t\t\t\tgraphic = point.graphic;\n\t\t\t\tpointMarkerOptions = point.marker || {};\n\t\t\t\tenabled = (seriesMarkerOptions.enabled && pointMarkerOptions.enabled === UNDEFINED) || pointMarkerOptions.enabled;\n\t\t\t\tisInside = chart.isInsidePlot(mathRound(plotX), plotY, chart.inverted); // #1858\n\t\t\t\t\n\t\t\t\t// only draw the point if y is defined\n\t\t\t\tif (enabled && plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) {\n\n\t\t\t\t\t// shortcuts\n\t\t\t\t\tpointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE];\n\t\t\t\t\tradius = pointAttr.r;\n\t\t\t\t\tsymbol = pick(pointMarkerOptions.symbol, series.symbol);\n\t\t\t\t\tisImage = symbol.indexOf('url') === 0;\n\n\t\t\t\t\tif (graphic) { // update\n\t\t\t\t\t\tgraphic\n\t\t\t\t\t\t\t.attr({ // Since the marker group isn't clipped, each individual marker must be toggled\n\t\t\t\t\t\t\t\tvisibility: isInside ? (hasSVG ? 'inherit' : VISIBLE) : HIDDEN\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.animate(extend({\n\t\t\t\t\t\t\t\tx: plotX - radius,\n\t\t\t\t\t\t\t\ty: plotY - radius\n\t\t\t\t\t\t\t}, graphic.symbolName ? { // don't apply to image symbols #507\n\t\t\t\t\t\t\t\twidth: 2 * radius,\n\t\t\t\t\t\t\t\theight: 2 * radius\n\t\t\t\t\t\t\t} : {}));\n\t\t\t\t\t} else if (isInside && (radius > 0 || isImage)) {\n\t\t\t\t\t\tpoint.graphic = graphic = chart.renderer.symbol(\n\t\t\t\t\t\t\tsymbol,\n\t\t\t\t\t\t\tplotX - radius,\n\t\t\t\t\t\t\tplotY - radius,\n\t\t\t\t\t\t\t2 * radius,\n\t\t\t\t\t\t\t2 * radius\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(pointAttr)\n\t\t\t\t\t\t.add(markerGroup);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else if (graphic) {\n\t\t\t\t\tpoint.graphic = graphic.destroy(); // #1269\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t},\n\n\t/**\n\t * Convert state properties from API naming conventions to SVG attributes\n\t *\n\t * @param {Object} options API options object\n\t * @param {Object} base1 SVG attribute object to inherit from\n\t * @param {Object} base2 Second level SVG attribute object to inherit from\n\t */\n\tconvertAttribs: function (options, base1, base2, base3) {\n\t\tvar conversion = this.pointAttrToOptions,\n\t\t\tattr,\n\t\t\toption,\n\t\t\tobj = {};\n\n\t\toptions = options || {};\n\t\tbase1 = base1 || {};\n\t\tbase2 = base2 || {};\n\t\tbase3 = base3 || {};\n\n\t\tfor (attr in conversion) {\n\t\t\toption = conversion[attr];\n\t\t\tobj[attr] = pick(options[option], base1[attr], base2[attr], base3[attr]);\n\t\t}\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Get the state attributes. Each series type has its own set of attributes\n\t * that are allowed to change on a point's state change. Series wide attributes are stored for\n\t * all series, and additionally point specific attributes are stored for all\n\t * points with individual marker options. If such options are not defined for the point,\n\t * a reference to the series wide attributes is stored in point.pointAttr.\n\t */\n\tgetAttribs: function () {\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\tnormalOptions = defaultPlotOptions[series.type].marker ? seriesOptions.marker : seriesOptions,\n\t\t\tstateOptions = normalOptions.states,\n\t\t\tstateOptionsHover = stateOptions[HOVER_STATE],\n\t\t\tpointStateOptionsHover,\n\t\t\tseriesColor = series.color,\n\t\t\tnormalDefaults = {\n\t\t\t\tstroke: seriesColor,\n\t\t\t\tfill: seriesColor\n\t\t\t},\n\t\t\tpoints = series.points || [], // #927\n\t\t\ti,\n\t\t\tpoint,\n\t\t\tseriesPointAttr = [],\n\t\t\tpointAttr,\n\t\t\tpointAttrToOptions = series.pointAttrToOptions,\n\t\t\thasPointSpecificOptions,\n\t\t\tnegativeColor = seriesOptions.negativeColor,\n\t\t\tdefaultLineColor = normalOptions.lineColor,\n\t\t\tkey;\n\n\t\t// series type specific modifications\n\t\tif (seriesOptions.marker) { // line, spline, area, areaspline, scatter\n\n\t\t\t// if no hover radius is given, default to normal radius + 2\n\t\t\tstateOptionsHover.radius = stateOptionsHover.radius || normalOptions.radius + 2;\n\t\t\tstateOptionsHover.lineWidth = stateOptionsHover.lineWidth || normalOptions.lineWidth + 1;\n\t\t\t\n\t\t} else { // column, bar, pie\n\n\t\t\t// if no hover color is given, brighten the normal color\n\t\t\tstateOptionsHover.color = stateOptionsHover.color ||\n\t\t\t\tColor(stateOptionsHover.color || seriesColor)\n\t\t\t\t\t.brighten(stateOptionsHover.brightness).get();\n\t\t}\n\n\t\t// general point attributes for the series normal state\n\t\tseriesPointAttr[NORMAL_STATE] = series.convertAttribs(normalOptions, normalDefaults);\n\n\t\t// HOVER_STATE and SELECT_STATE states inherit from normal state except the default radius\n\t\teach([HOVER_STATE, SELECT_STATE], function (state) {\n\t\t\tseriesPointAttr[state] =\n\t\t\t\t\tseries.convertAttribs(stateOptions[state], seriesPointAttr[NORMAL_STATE]);\n\t\t});\n\n\t\t// set it\n\t\tseries.pointAttr = seriesPointAttr;\n\n\n\t\t// Generate the point-specific attribute collections if specific point\n\t\t// options are given. If not, create a referance to the series wide point\n\t\t// attributes\n\t\ti = points.length;\n\t\twhile (i--) {\n\t\t\tpoint = points[i];\n\t\t\tnormalOptions = (point.options && point.options.marker) || point.options;\n\t\t\tif (normalOptions && normalOptions.enabled === false) {\n\t\t\t\tnormalOptions.radius = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif (point.negative && negativeColor) {\n\t\t\t\tpoint.color = point.fillColor = negativeColor;\n\t\t\t}\n\t\t\t\n\t\t\thasPointSpecificOptions = seriesOptions.colorByPoint || point.color; // #868\n\n\t\t\t// check if the point has specific visual options\n\t\t\tif (point.options) {\n\t\t\t\tfor (key in pointAttrToOptions) {\n\t\t\t\t\tif (defined(normalOptions[pointAttrToOptions[key]])) {\n\t\t\t\t\t\thasPointSpecificOptions = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// a specific marker config object is defined for the individual point:\n\t\t\t// create it's own attribute collection\n\t\t\tif (hasPointSpecificOptions) {\n\t\t\t\tnormalOptions = normalOptions || {};\n\t\t\t\tpointAttr = [];\n\t\t\t\tstateOptions = normalOptions.states || {}; // reassign for individual point\n\t\t\t\tpointStateOptionsHover = stateOptions[HOVER_STATE] = stateOptions[HOVER_STATE] || {};\n\n\t\t\t\t// Handle colors for column and pies\n\t\t\t\tif (!seriesOptions.marker) { // column, bar, point\n\t\t\t\t\t// if no hover color is given, brighten the normal color\n\t\t\t\t\tpointStateOptionsHover.color =\n\t\t\t\t\t\tColor(pointStateOptionsHover.color || point.color)\n\t\t\t\t\t\t\t.brighten(pointStateOptionsHover.brightness ||\n\t\t\t\t\t\t\t\tstateOptionsHover.brightness).get();\n\n\t\t\t\t}\n\n\t\t\t\t// normal point state inherits series wide normal state\n\t\t\t\tpointAttr[NORMAL_STATE] = series.convertAttribs(extend({\n\t\t\t\t\tcolor: point.color, // #868\n\t\t\t\t\tfillColor: point.color, // Individual point color or negative color markers (#2219)\n\t\t\t\t\tlineColor: defaultLineColor === null ? point.color : UNDEFINED // Bubbles take point color, line markers use white\n\t\t\t\t}, normalOptions), seriesPointAttr[NORMAL_STATE]);\n\n\t\t\t\t// inherit from point normal and series hover\n\t\t\t\tpointAttr[HOVER_STATE] = series.convertAttribs(\n\t\t\t\t\tstateOptions[HOVER_STATE],\n\t\t\t\t\tseriesPointAttr[HOVER_STATE],\n\t\t\t\t\tpointAttr[NORMAL_STATE]\n\t\t\t\t);\n\t\t\t\t\n\t\t\t\t// inherit from point normal and series hover\n\t\t\t\tpointAttr[SELECT_STATE] = series.convertAttribs(\n\t\t\t\t\tstateOptions[SELECT_STATE],\n\t\t\t\t\tseriesPointAttr[SELECT_STATE],\n\t\t\t\t\tpointAttr[NORMAL_STATE]\n\t\t\t\t);\n\n\n\t\t\t// no marker config object is created: copy a reference to the series-wide\n\t\t\t// attribute collection\n\t\t\t} else {\n\t\t\t\tpointAttr = seriesPointAttr;\n\t\t\t}\n\n\t\t\tpoint.pointAttr = pointAttr;\n\n\t\t}\n\n\t},\n\t/**\n\t * Update the series with a new set of options\n\t */\n\tupdate: function (newOptions, redraw) {\n\t\tvar chart = this.chart,\n\t\t\t// must use user options when changing type because this.options is merged\n\t\t\t// in with type specific plotOptions\n\t\t\toldOptions = this.userOptions,\n\t\t\toldType = this.type,\n\t\t\tproto = seriesTypes[oldType].prototype,\n\t\t\tn;\n\n\t\t// Do the merge, with some forced options\n\t\tnewOptions = merge(oldOptions, {\n\t\t\tanimation: false,\n\t\t\tindex: this.index,\n\t\t\tpointStart: this.xData[0] // when updating after addPoint\n\t\t}, { data: this.options.data }, newOptions);\n\n\t\t// Destroy the series and reinsert methods from the type prototype\n\t\tthis.remove(false);\n\t\tfor (n in proto) { // Overwrite series-type specific methods (#2270)\n\t\t\tif (proto.hasOwnProperty(n)) {\n\t\t\t\tthis[n] = UNDEFINED;\n\t\t\t}\n\t\t}\n\t\textend(this, seriesTypes[newOptions.type || oldType].prototype);\n\t\t\n\n\t\tthis.init(chart, newOptions);\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw(false);\n\t\t}\n\t},\n\n\t/**\n\t * Clear DOM objects and free up memory\n\t */\n\tdestroy: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tissue134 = /AppleWebKit\\/533/.test(userAgent),\n\t\t\tdestroy,\n\t\t\ti,\n\t\t\tdata = series.data || [],\n\t\t\tpoint,\n\t\t\tprop,\n\t\t\taxis;\n\n\t\t// add event hook\n\t\tfireEvent(series, 'destroy');\n\n\t\t// remove all events\n\t\tremoveEvent(series);\n\t\t\n\t\t// erase from axes\n\t\teach(['xAxis', 'yAxis'], function (AXIS) {\n\t\t\taxis = series[AXIS];\n\t\t\tif (axis) {\n\t\t\t\terase(axis.series, series);\n\t\t\t\taxis.isDirty = axis.forceRedraw = true;\n\t\t\t\taxis.stacks = {}; // Rebuild stacks when updating (#2229)\n\t\t\t}\n\t\t});\n\n\t\t// remove legend items\n\t\tif (series.legendItem) {\n\t\t\tseries.chart.legend.destroyItem(series);\n\t\t}\n\n\t\t// destroy all points with their elements\n\t\ti = data.length;\n\t\twhile (i--) {\n\t\t\tpoint = data[i];\n\t\t\tif (point && point.destroy) {\n\t\t\t\tpoint.destroy();\n\t\t\t}\n\t\t}\n\t\tseries.points = null;\n\n\t\t// Clear the animation timeout if we are destroying the series during initial animation\n\t\tclearTimeout(series.animationTimeout);\n\n\t\t// destroy all SVGElements associated to the series\n\t\teach(['area', 'graph', 'dataLabelsGroup', 'group', 'markerGroup', 'tracker',\n\t\t\t\t'graphNeg', 'areaNeg', 'posClip', 'negClip'], function (prop) {\n\t\t\tif (series[prop]) {\n\n\t\t\t\t// issue 134 workaround\n\t\t\t\tdestroy = issue134 && prop === 'group' ?\n\t\t\t\t\t'hide' :\n\t\t\t\t\t'destroy';\n\n\t\t\t\tseries[prop][destroy]();\n\t\t\t}\n\t\t});\n\n\t\t// remove from hoverSeries\n\t\tif (chart.hoverSeries === series) {\n\t\t\tchart.hoverSeries = null;\n\t\t}\n\t\terase(chart.series, series);\n\n\t\t// clear all members\n\t\tfor (prop in series) {\n\t\t\tdelete series[prop];\n\t\t}\n\t},\n\n\t/**\n\t * Draw the data labels\n\t */\n\tdrawDataLabels: function () {\n\t\t\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\toptions = seriesOptions.dataLabels,\n\t\t\tpoints = series.points,\n\t\t\tpointOptions,\n\t\t\tgeneralOptions,\n\t\t\tstr,\n\t\t\tdataLabelsGroup;\n\t\t\n\t\tif (options.enabled || series._hasPointLabels) {\n\t\t\t\t\t\t\n\t\t\t// Process default alignment of data labels for columns\n\t\t\tif (series.dlProcessOptions) {\n\t\t\t\tseries.dlProcessOptions(options);\n\t\t\t}\n\n\t\t\t// Create a separate group for the data labels to avoid rotation\n\t\t\tdataLabelsGroup = series.plotGroup(\n\t\t\t\t'dataLabelsGroup', \n\t\t\t\t'data-labels', \n\t\t\t\tseries.visible ? VISIBLE : HIDDEN, \n\t\t\t\toptions.zIndex || 6\n\t\t\t);\n\t\t\t\n\t\t\t// Make the labels for each point\n\t\t\tgeneralOptions = options;\n\t\t\teach(points, function (point) {\n\t\t\t\t\n\t\t\t\tvar enabled,\n\t\t\t\t\tdataLabel = point.dataLabel,\n\t\t\t\t\tlabelConfig,\n\t\t\t\t\tattr,\n\t\t\t\t\tname,\n\t\t\t\t\trotation,\n\t\t\t\t\tconnector = point.connector,\n\t\t\t\t\tisNew = true;\n\t\t\t\t\n\t\t\t\t// Determine if each data label is enabled\n\t\t\t\tpointOptions = point.options && point.options.dataLabels;\n\t\t\t\tenabled = pick(pointOptions && pointOptions.enabled, generalOptions.enabled); // #2282\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// If the point is outside the plot area, destroy it. #678, #820\n\t\t\t\tif (dataLabel && !enabled) {\n\t\t\t\t\tpoint.dataLabel = dataLabel.destroy();\n\t\t\t\t\n\t\t\t\t// Individual labels are disabled if the are explicitly disabled \n\t\t\t\t// in the point options, or if they fall outside the plot area.\n\t\t\t\t} else if (enabled) {\n\t\t\t\t\t\n\t\t\t\t\t// Create individual options structure that can be extended without \n\t\t\t\t\t// affecting others\n\t\t\t\t\toptions = merge(generalOptions, pointOptions);\n\n\t\t\t\t\trotation = options.rotation;\n\t\t\t\t\t\n\t\t\t\t\t// Get the string\n\t\t\t\t\tlabelConfig = point.getLabelConfig();\n\t\t\t\t\tstr = options.format ?\n\t\t\t\t\t\tformat(options.format, labelConfig) : \n\t\t\t\t\t\toptions.formatter.call(labelConfig, options);\n\t\t\t\t\t\n\t\t\t\t\t// Determine the color\n\t\t\t\t\toptions.style.color = pick(options.color, options.style.color, series.color, 'black');\n\t\n\t\t\t\t\t\n\t\t\t\t\t// update existing label\n\t\t\t\t\tif (dataLabel) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (defined(str)) {\n\t\t\t\t\t\t\tdataLabel\n\t\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\t\ttext: str\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tisNew = false;\n\t\t\t\t\t\t\n\t\t\t\t\t\t} else { // #1437 - the label is shown conditionally\n\t\t\t\t\t\t\tpoint.dataLabel = dataLabel = dataLabel.destroy();\n\t\t\t\t\t\t\tif (connector) {\n\t\t\t\t\t\t\t\tpoint.connector = connector.destroy();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t// create new label\n\t\t\t\t\t} else if (defined(str)) {\n\t\t\t\t\t\tattr = {\n\t\t\t\t\t\t\t//align: align,\n\t\t\t\t\t\t\tfill: options.backgroundColor,\n\t\t\t\t\t\t\tstroke: options.borderColor,\n\t\t\t\t\t\t\t'stroke-width': options.borderWidth,\n\t\t\t\t\t\t\tr: options.borderRadius || 0,\n\t\t\t\t\t\t\trotation: rotation,\n\t\t\t\t\t\t\tpadding: options.padding,\n\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t};\n\t\t\t\t\t\t// Remove unused attributes (#947)\n\t\t\t\t\t\tfor (name in attr) {\n\t\t\t\t\t\t\tif (attr[name] === UNDEFINED) {\n\t\t\t\t\t\t\t\tdelete attr[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tdataLabel = point.dataLabel = series.chart.renderer[rotation ? 'text' : 'label']( // labels don't support rotation\n\t\t\t\t\t\t\tstr,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t-999,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\toptions.useHTML\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(attr)\n\t\t\t\t\t\t.css(options.style)\n\t\t\t\t\t\t.add(dataLabelsGroup)\n\t\t\t\t\t\t.shadow(options.shadow);\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (dataLabel) {\n\t\t\t\t\t\t// Now the data label is created and placed at 0,0, so we need to align it\n\t\t\t\t\t\tseries.alignDataLabel(point, dataLabel, options, null, isNew);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Align each individual data label\n\t */\n\talignDataLabel: function (point, dataLabel, options, alignTo, isNew) {\n\t\tvar chart = this.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tplotX = pick(point.plotX, -999),\n\t\t\tplotY = pick(point.plotY, -999),\n\t\t\tbBox = dataLabel.getBBox(),\n\t\t\tvisible = this.visible && chart.isInsidePlot(point.plotX, point.plotY, inverted),\n\t\t\talignAttr; // the final position;\n\t\t\t\t\n\t\tif (visible) {\n\n\t\t\t// The alignment box is a singular point\n\t\t\talignTo = extend({\n\t\t\t\tx: inverted ? chart.plotWidth - plotY : plotX,\n\t\t\t\ty: mathRound(inverted ? chart.plotHeight - plotX : plotY),\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t}, alignTo);\n\t\t\t\n\t\t\t// Add the text size for alignment calculation\n\t\t\textend(options, {\n\t\t\t\twidth: bBox.width,\n\t\t\t\theight: bBox.height\n\t\t\t});\n\n\t\t\t// Allow a hook for changing alignment in the last moment, then do the alignment\n\t\t\tif (options.rotation) { // Fancy box alignment isn't supported for rotated text\n\t\t\t\talignAttr = {\n\t\t\t\t\talign: options.align,\n\t\t\t\t\tx: alignTo.x + options.x + alignTo.width / 2,\n\t\t\t\t\ty: alignTo.y + options.y + alignTo.height / 2\n\t\t\t\t};\n\t\t\t\tdataLabel[isNew ? 'attr' : 'animate'](alignAttr);\n\t\t\t} else {\n\t\t\t\tdataLabel.align(options, null, alignTo);\n\t\t\t\talignAttr = dataLabel.alignAttr;\n\n\t\t\t\t// Handle justify or crop\n\t\t\t\tif (pick(options.overflow, 'justify') === 'justify') { // docs: overflow: justify, also crop only applies when not justify\n\t\t\t\t\tthis.justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew);\n\t\t\t\t\n\t\t\t\t} else if (pick(options.crop, true)) {\n\t\t\t\t\t// Now check that the data label is within the plot area\n\t\t\t\t\tvisible = chart.isInsidePlot(alignAttr.x, alignAttr.y) && chart.isInsidePlot(alignAttr.x + bBox.width, alignAttr.y + bBox.height);\n\t\t\t\t\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t}\n\n\t\t// Show or hide based on the final aligned position\n\t\tif (!visible) {\n\t\t\tdataLabel.attr({ y: -999 });\n\t\t}\n\t\t\t\t\n\t},\n\t\n\t/**\n\t * If data labels fall partly outside the plot area, align them back in, in a way that\n\t * doesn't hide the point.\n\t */\n\tjustifyDataLabel: function (dataLabel, options, alignAttr, bBox, alignTo, isNew) {\n\t\tvar chart = this.chart,\n\t\t\talign = options.align,\n\t\t\tverticalAlign = options.verticalAlign,\n\t\t\toff,\n\t\t\tjustified;\n\n\t\t// Off left\n\t\toff = alignAttr.x;\n\t\tif (off < 0) {\n\t\t\tif (align === 'right') {\n\t\t\t\toptions.align = 'left';\n\t\t\t} else {\n\t\t\t\toptions.x = -off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\n\t\t// Off right\n\t\toff = alignAttr.x + bBox.width;\n\t\tif (off > chart.plotWidth) {\n\t\t\tif (align === 'left') {\n\t\t\t\toptions.align = 'right';\n\t\t\t} else {\n\t\t\t\toptions.x = chart.plotWidth - off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\n\t\t// Off top\n\t\toff = alignAttr.y;\n\t\tif (off < 0) {\n\t\t\tif (verticalAlign === 'bottom') {\n\t\t\t\toptions.verticalAlign = 'top';\n\t\t\t} else {\n\t\t\t\toptions.y = -off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\n\t\t// Off bottom\n\t\toff = alignAttr.y + bBox.height;\n\t\tif (off > chart.plotHeight) {\n\t\t\tif (verticalAlign === 'top') {\n\t\t\t\toptions.verticalAlign = 'bottom';\n\t\t\t} else {\n\t\t\t\toptions.y = chart.plotHeight - off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\t\t\n\t\tif (justified) {\n\t\t\tdataLabel.placed = !isNew;\n\t\t\tdataLabel.align(options, null, alignTo);\n\t\t}\n\t},\n\t\n\t/**\n\t * Return the graph path of a segment\n\t */\n\tgetSegmentPath: function (segment) {\t\t\n\t\tvar series = this,\n\t\t\tsegmentPath = [],\n\t\t\tstep = series.options.step;\n\t\t\t\n\t\t// build the segment line\n\t\teach(segment, function (point, i) {\n\t\t\t\n\t\t\tvar plotX = point.plotX,\n\t\t\t\tplotY = point.plotY,\n\t\t\t\tlastPoint;\n\n\t\t\tif (series.getPointSpline) { // generate the spline as defined in the SplineSeries object\n\t\t\t\tsegmentPath.push.apply(segmentPath, series.getPointSpline(segment, point, i));\n\n\t\t\t} else {\n\n\t\t\t\t// moveTo or lineTo\n\t\t\t\tsegmentPath.push(i ? L : M);\n\n\t\t\t\t// step line?\n\t\t\t\tif (step && i) {\n\t\t\t\t\tlastPoint = segment[i - 1];\n\t\t\t\t\tif (step === 'right') {\n\t\t\t\t\t\tsegmentPath.push(\n\t\t\t\t\t\t\tlastPoint.plotX,\n\t\t\t\t\t\t\tplotY\n\t\t\t\t\t\t);\n\t\t\t\t\t\t\n\t\t\t\t\t} else if (step === 'center') {\n\t\t\t\t\t\tsegmentPath.push(\n\t\t\t\t\t\t\t(lastPoint.plotX + plotX) / 2,\n\t\t\t\t\t\t\tlastPoint.plotY,\n\t\t\t\t\t\t\t(lastPoint.plotX + plotX) / 2,\n\t\t\t\t\t\t\tplotY\n\t\t\t\t\t\t);\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsegmentPath.push(\n\t\t\t\t\t\t\tplotX,\n\t\t\t\t\t\t\tlastPoint.plotY\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// normal line to next point\n\t\t\t\tsegmentPath.push(\n\t\t\t\t\tpoint.plotX,\n\t\t\t\t\tpoint.plotY\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn segmentPath;\n\t},\n\n\t/**\n\t * Get the graph path\n\t */\n\tgetGraphPath: function () {\n\t\tvar series = this,\n\t\t\tgraphPath = [],\n\t\t\tsegmentPath,\n\t\t\tsinglePoints = []; // used in drawTracker\n\n\t\t// Divide into segments and build graph and area paths\n\t\teach(series.segments, function (segment) {\n\t\t\t\n\t\t\tsegmentPath = series.getSegmentPath(segment);\n\t\t\t\n\t\t\t// add the segment to the graph, or a single point for tracking\n\t\t\tif (segment.length > 1) {\n\t\t\t\tgraphPath = graphPath.concat(segmentPath);\n\t\t\t} else {\n\t\t\t\tsinglePoints.push(segment[0]);\n\t\t\t}\n\t\t});\n\n\t\t// Record it for use in drawGraph and drawTracker, and return graphPath\n\t\tseries.singlePoints = singlePoints;\n\t\tseries.graphPath = graphPath;\n\t\t\n\t\treturn graphPath;\n\t\t\n\t},\n\t\n\t/**\n\t * Draw the actual graph\n\t */\n\tdrawGraph: function () {\n\t\tvar series = this,\n\t\t\toptions = this.options,\n\t\t\tprops = [['graph', options.lineColor || this.color]],\n\t\t\tlineWidth = options.lineWidth,\n\t\t\tdashStyle =  options.dashStyle,\n\t\t\tgraphPath = this.getGraphPath(),\n\t\t\tnegativeColor = options.negativeColor;\n\t\t\t\n\t\tif (negativeColor) {\n\t\t\tprops.push(['graphNeg', negativeColor]);\n\t\t}\n\t\t\n\t\t// draw the graph\n\t\teach(props, function (prop, i) {\n\t\t\tvar graphKey = prop[0],\n\t\t\t\tgraph = series[graphKey],\n\t\t\t\tattribs;\n\t\t\t\n\t\t\tif (graph) {\n\t\t\t\tstop(graph); // cancel running animations, #459\n\t\t\t\tgraph.animate({ d: graphPath });\n\t\n\t\t\t} else if (lineWidth && graphPath.length) { // #1487\n\t\t\t\tattribs = {\n\t\t\t\t\tstroke: prop[1],\n\t\t\t\t\t'stroke-width': lineWidth,\n\t\t\t\t\tzIndex: 1 // #1069\n\t\t\t\t};\n\t\t\t\tif (dashStyle) {\n\t\t\t\t\tattribs.dashstyle = dashStyle;\n\t\t\t\t} else {\n\t\t\t\t\tattribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round';\n\t\t\t\t}\n\n\t\t\t\tseries[graphKey] = series.chart.renderer.path(graphPath)\n\t\t\t\t\t.attr(attribs)\n\t\t\t\t\t.add(series.group)\n\t\t\t\t\t.shadow(!i && options.shadow);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Clip the graphs into the positive and negative coloured graphs\n\t */\n\tclipNeg: function () {\n\t\tvar options = this.options,\n\t\t\tchart = this.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tnegativeColor = options.negativeColor || options.negativeFillColor,\n\t\t\ttranslatedThreshold,\n\t\t\tposAttr,\n\t\t\tnegAttr,\n\t\t\tgraph = this.graph,\n\t\t\tarea = this.area,\n\t\t\tposClip = this.posClip,\n\t\t\tnegClip = this.negClip,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\tchartSizeMax = mathMax(chartWidth, chartHeight),\n\t\t\tyAxis = this.yAxis,\n\t\t\tabove,\n\t\t\tbelow;\n\t\t\n\t\tif (negativeColor && (graph || area)) {\n\t\t\ttranslatedThreshold = mathRound(yAxis.toPixels(options.threshold || 0, true));\n\t\t\tabove = {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: chartSizeMax,\n\t\t\t\theight: translatedThreshold\n\t\t\t};\n\t\t\tbelow = {\n\t\t\t\tx: 0,\n\t\t\t\ty: translatedThreshold,\n\t\t\t\twidth: chartSizeMax,\n\t\t\t\theight: chartSizeMax\n\t\t\t};\n\t\t\t\n\t\t\tif (chart.inverted) {\n\n\t\t\t\tabove.height = below.y = chart.plotWidth - translatedThreshold;\n\t\t\t\tif (renderer.isVML) {\n\t\t\t\t\tabove = {\n\t\t\t\t\t\tx: chart.plotWidth - translatedThreshold - chart.plotLeft,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: chartWidth,\n\t\t\t\t\t\theight: chartHeight\n\t\t\t\t\t};\n\t\t\t\t\tbelow = {\n\t\t\t\t\t\tx: translatedThreshold + chart.plotLeft - chartWidth,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: chart.plotLeft + translatedThreshold,\n\t\t\t\t\t\theight: chartWidth\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (yAxis.reversed) {\n\t\t\t\tposAttr = below;\n\t\t\t\tnegAttr = above;\n\t\t\t} else {\n\t\t\t\tposAttr = above;\n\t\t\t\tnegAttr = below;\n\t\t\t}\n\t\t\n\t\t\tif (posClip) { // update\n\t\t\t\tposClip.animate(posAttr);\n\t\t\t\tnegClip.animate(negAttr);\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tthis.posClip = posClip = renderer.clipRect(posAttr);\n\t\t\t\tthis.negClip = negClip = renderer.clipRect(negAttr);\n\t\t\t\t\n\t\t\t\tif (graph && this.graphNeg) {\n\t\t\t\t\tgraph.clip(posClip);\n\t\t\t\t\tthis.graphNeg.clip(negClip);\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (area) {\n\t\t\t\t\tarea.clip(posClip);\n\t\t\t\t\tthis.areaNeg.clip(negClip);\n\t\t\t\t} \n\t\t\t} \n\t\t}\t\n\t},\n\n\t/**\n\t * Initialize and perform group inversion on series.group and series.markerGroup\n\t */\n\tinvertGroups: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\n\t\t// Pie, go away (#1736)\n\t\tif (!series.xAxis) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// A fixed size is needed for inversion to work\n\t\tfunction setInvert() {\t\t\t\n\t\t\tvar size = {\n\t\t\t\twidth: series.yAxis.len,\n\t\t\t\theight: series.xAxis.len\n\t\t\t};\n\t\t\t\n\t\t\teach(['group', 'markerGroup'], function (groupName) {\n\t\t\t\tif (series[groupName]) {\n\t\t\t\t\tseries[groupName].attr(size).invert();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\taddEvent(chart, 'resize', setInvert); // do it on resize\n\t\taddEvent(series, 'destroy', function () {\n\t\t\tremoveEvent(chart, 'resize', setInvert);\n\t\t});\n\n\t\t// Do it now\n\t\tsetInvert(); // do it now\n\t\t\n\t\t// On subsequent render and redraw, just do setInvert without setting up events again\n\t\tseries.invertGroups = setInvert;\n\t},\n\t\n\t/**\n\t * General abstraction for creating plot groups like series.group, series.dataLabelsGroup and \n\t * series.markerGroup. On subsequent calls, the group will only be adjusted to the updated plot size.\n\t */\n\tplotGroup: function (prop, name, visibility, zIndex, parent) {\n\t\tvar group = this[prop],\n\t\t\tisNew = !group;\n\t\t\n\t\t// Generate it on first call\n\t\tif (isNew) {\t\n\t\t\tthis[prop] = group = this.chart.renderer.g(name)\n\t\t\t\t.attr({\n\t\t\t\t\tvisibility: visibility,\n\t\t\t\t\tzIndex: zIndex || 0.1 // IE8 needs this\n\t\t\t\t})\n\t\t\t\t.add(parent);\n\t\t}\n\t\t// Place it on first and subsequent (redraw) calls\n\t\tgroup[isNew ? 'attr' : 'animate'](this.getPlotBox());\n\t\treturn group;\t\t\n\t},\n\n\t/**\n\t * Get the translation and scale for the plot area of this series\n\t */\n\tgetPlotBox: function () {\n\t\treturn {\n\t\t\ttranslateX: this.xAxis ? this.xAxis.left : this.chart.plotLeft, \n\t\t\ttranslateY: this.yAxis ? this.yAxis.top : this.chart.plotTop,\n\t\t\tscaleX: 1, // #1623\n\t\t\tscaleY: 1\n\t\t};\n\t},\n\t\n\t/**\n\t * Render the graph and markers\n\t */\n\trender: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tgroup,\n\t\t\toptions = series.options,\n\t\t\tanimation = options.animation,\n\t\t\tdoAnimation = animation && !!series.animate && \n\t\t\t\tchart.renderer.isSVG, // this animation doesn't work in IE8 quirks when the group div is hidden,\n\t\t\t\t// and looks bad in other oldIE\n\t\t\tvisibility = series.visible ? VISIBLE : HIDDEN,\n\t\t\tzIndex = options.zIndex,\n\t\t\thasRendered = series.hasRendered,\n\t\t\tchartSeriesGroup = chart.seriesGroup;\n\t\t\n\t\t// the group\n\t\tgroup = series.plotGroup(\n\t\t\t'group', \n\t\t\t'series', \n\t\t\tvisibility, \n\t\t\tzIndex, \n\t\t\tchartSeriesGroup\n\t\t);\n\t\t\n\t\tseries.markerGroup = series.plotGroup(\n\t\t\t'markerGroup', \n\t\t\t'markers', \n\t\t\tvisibility, \n\t\t\tzIndex, \n\t\t\tchartSeriesGroup\n\t\t);\n\t\t\n\t\t// initiate the animation\n\t\tif (doAnimation) {\n\t\t\tseries.animate(true);\n\t\t}\n\n\t\t// cache attributes for shapes\n\t\tseries.getAttribs();\n\n\t\t// SVGRenderer needs to know this before drawing elements (#1089, #1795)\n\t\tgroup.inverted = series.isCartesian ? chart.inverted : false;\n\t\t\n\t\t// draw the graph if any\n\t\tif (series.drawGraph) {\n\t\t\tseries.drawGraph();\n\t\t\tseries.clipNeg();\n\t\t}\n\n\t\t// draw the data labels (inn pies they go before the points)\n\t\tseries.drawDataLabels();\n\t\t\n\t\t// draw the points\n\t\tseries.drawPoints();\n\n\n\t\t// draw the mouse tracking area\n\t\tif (series.options.enableMouseTracking !== false) {\n\t\t\tseries.drawTracker();\n\t\t}\n\t\t\n\t\t// Handle inverted series and tracker groups\n\t\tif (chart.inverted) {\n\t\t\tseries.invertGroups();\n\t\t}\n\t\t\n\t\t// Initial clipping, must be defined after inverting groups for VML\n\t\tif (options.clip !== false && !series.sharedClipKey && !hasRendered) {\n\t\t\tgroup.clip(chart.clipRect);\n\t\t}\n\n\t\t// Run the animation\n\t\tif (doAnimation) {\n\t\t\tseries.animate();\n\t\t} else if (!hasRendered) {\n\t\t\tseries.afterAnimate();\n\t\t}\n\n\t\tseries.isDirty = series.isDirtyData = false; // means data is in accordance with what you see\n\t\t// (See #322) series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see\n\t\tseries.hasRendered = true;\n\t},\n\t\n\t/**\n\t * Redraw the series after an update in the axes.\n\t */\n\tredraw: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\twasDirtyData = series.isDirtyData, // cache it here as it is set to false in render, but used after\n\t\t\tgroup = series.group,\n\t\t\txAxis = series.xAxis,\n\t\t\tyAxis = series.yAxis;\n\n\t\t// reposition on resize\n\t\tif (group) {\n\t\t\tif (chart.inverted) {\n\t\t\t\tgroup.attr({\n\t\t\t\t\twidth: chart.plotWidth,\n\t\t\t\t\theight: chart.plotHeight\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tgroup.animate({\n\t\t\t\ttranslateX: pick(xAxis && xAxis.left, chart.plotLeft),\n\t\t\t\ttranslateY: pick(yAxis && yAxis.top, chart.plotTop)\n\t\t\t});\n\t\t}\n\n\t\tseries.translate();\n\t\tseries.setTooltipPoints(true);\n\n\t\tseries.render();\n\t\tif (wasDirtyData) {\n\t\t\tfireEvent(series, 'updatedData');\n\t\t}\n\t},\n\n\t/**\n\t * Set the state of the graph\n\t */\n\tsetState: function (state) {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tgraph = series.graph,\n\t\t\tgraphNeg = series.graphNeg,\n\t\t\tstateOptions = options.states,\n\t\t\tlineWidth = options.lineWidth,\n\t\t\tattribs;\n\n\t\tstate = state || NORMAL_STATE;\n\n\t\tif (series.state !== state) {\n\t\t\tseries.state = state;\n\n\t\t\tif (stateOptions[state] && stateOptions[state].enabled === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (state) {\n\t\t\t\tlineWidth = stateOptions[state].lineWidth || lineWidth + 1;\n\t\t\t}\n\n\t\t\tif (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML\n\t\t\t\tattribs = {\n\t\t\t\t\t'stroke-width': lineWidth\n\t\t\t\t};\n\t\t\t\t// use attr because animate will cause any other animation on the graph to stop\n\t\t\t\tgraph.attr(attribs);\n\t\t\t\tif (graphNeg) {\n\t\t\t\t\tgraphNeg.attr(attribs);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Set the visibility of the graph\n\t *\n\t * @param vis {Boolean} True to show the series, false to hide. If UNDEFINED,\n\t *        the visibility is toggled.\n\t */\n\tsetVisible: function (vis, redraw) {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tlegendItem = series.legendItem,\n\t\t\tshowOrHide,\n\t\t\tignoreHiddenSeries = chart.options.chart.ignoreHiddenSeries,\n\t\t\toldVisibility = series.visible;\n\n\t\t// if called without an argument, toggle visibility\n\t\tseries.visible = vis = series.userOptions.visible = vis === UNDEFINED ? !oldVisibility : vis;\n\t\tshowOrHide = vis ? 'show' : 'hide';\n\n\t\t// show or hide elements\n\t\teach(['group', 'dataLabelsGroup', 'markerGroup', 'tracker'], function (key) {\n\t\t\tif (series[key]) {\n\t\t\t\tseries[key][showOrHide]();\n\t\t\t}\n\t\t});\n\n\t\t\n\t\t// hide tooltip (#1361)\n\t\tif (chart.hoverSeries === series) {\n\t\t\tseries.onMouseOut();\n\t\t}\n\n\n\t\tif (legendItem) {\n\t\t\tchart.legend.colorizeItem(series, vis);\n\t\t}\n\n\n\t\t// rescale or adapt to resized chart\n\t\tseries.isDirty = true;\n\t\t// in a stack, all other series are affected\n\t\tif (series.options.stacking) {\n\t\t\teach(chart.series, function (otherSeries) {\n\t\t\t\tif (otherSeries.options.stacking && otherSeries.visible) {\n\t\t\t\t\totherSeries.isDirty = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// show or hide linked series\n\t\teach(series.linkedSeries, function (otherSeries) {\n\t\t\totherSeries.setVisible(vis, false);\n\t\t});\n\n\t\tif (ignoreHiddenSeries) {\n\t\t\tchart.isDirtyBox = true;\n\t\t}\n\t\tif (redraw !== false) {\n\t\t\tchart.redraw();\n\t\t}\n\n\t\tfireEvent(series, showOrHide);\n\t},\n\n\t/**\n\t * Show the graph\n\t */\n\tshow: function () {\n\t\tthis.setVisible(true);\n\t},\n\n\t/**\n\t * Hide the graph\n\t */\n\thide: function () {\n\t\tthis.setVisible(false);\n\t},\n\n\n\t/**\n\t * Set the selected state of the graph\n\t *\n\t * @param selected {Boolean} True to select the series, false to unselect. If\n\t *        UNDEFINED, the selection state is toggled.\n\t */\n\tselect: function (selected) {\n\t\tvar series = this;\n\t\t// if called without an argument, toggle\n\t\tseries.selected = selected = (selected === UNDEFINED) ? !series.selected : selected;\n\n\t\tif (series.checkbox) {\n\t\t\tseries.checkbox.checked = selected;\n\t\t}\n\n\t\tfireEvent(series, selected ? 'select' : 'unselect');\n\t},\n\n\t/**\n\t * Draw the tracker object that sits above all data labels and markers to\n\t * track mouse events on the graph or points. For the line type charts\n\t * the tracker uses the same graphPath, but with a greater stroke width\n\t * for better control.\n\t */\n\tdrawTracker: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\ttrackByArea = options.trackByArea,\n\t\t\ttrackerPath = [].concat(trackByArea ? series.areaPath : series.graphPath),\n\t\t\ttrackerPathLength = trackerPath.length,\n\t\t\tchart = series.chart,\n\t\t\tpointer = chart.pointer,\n\t\t\trenderer = chart.renderer,\n\t\t\tsnap = chart.options.tooltip.snap,\n\t\t\ttracker = series.tracker,\n\t\t\tcursor = options.cursor,\n\t\t\tcss = cursor && { cursor: cursor },\n\t\t\tsinglePoints = series.singlePoints,\n\t\t\tsinglePoint,\n\t\t\ti,\n\t\t\tonMouseOver = function () {\n\t\t\t\tif (chart.hoverSeries !== series) {\n\t\t\t\t\tseries.onMouseOver();\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Extend end points. A better way would be to use round linecaps,\n\t\t// but those are not clickable in VML.\n\t\tif (trackerPathLength && !trackByArea) {\n\t\t\ti = trackerPathLength + 1;\n\t\t\twhile (i--) {\n\t\t\t\tif (trackerPath[i] === M) { // extend left side\n\t\t\t\t\ttrackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], L);\n\t\t\t\t}\n\t\t\t\tif ((i && trackerPath[i] === M) || i === trackerPathLength) { // extend right side\n\t\t\t\t\ttrackerPath.splice(i, 0, L, trackerPath[i - 2] + snap, trackerPath[i - 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// handle single points\n\t\tfor (i = 0; i < singlePoints.length; i++) {\n\t\t\tsinglePoint = singlePoints[i];\n\t\t\ttrackerPath.push(M, singlePoint.plotX - snap, singlePoint.plotY,\n\t\t\t\tL, singlePoint.plotX + snap, singlePoint.plotY);\n\t\t}\n\t\t\n\t\t\n\n\t\t// draw the tracker\n\t\tif (tracker) {\n\t\t\ttracker.attr({ d: trackerPath });\n\n\t\t} else { // create\n\t\t\t\t\n\t\t\tseries.tracker = renderer.path(trackerPath)\n\t\t\t\t.attr({\n\t\t\t\t\t'stroke-linejoin': 'round', // #1225\n\t\t\t\t\tvisibility: series.visible ? VISIBLE : HIDDEN,\n\t\t\t\t\tstroke: TRACKER_FILL,\n\t\t\t\t\tfill: trackByArea ? TRACKER_FILL : NONE,\n\t\t\t\t\t'stroke-width' : options.lineWidth + (trackByArea ? 0 : 2 * snap),\n\t\t\t\t\tzIndex: 2\n\t\t\t\t})\n\t\t\t\t.add(series.group);\n\t\t\t\t\n\t\t\t// The tracker is added to the series group, which is clipped, but is covered \n\t\t\t// by the marker group. So the marker group also needs to capture events.\n\t\t\teach([series.tracker, series.markerGroup], function (tracker) {\n\t\t\t\ttracker.addClass(PREFIX + 'tracker')\n\t\t\t\t\t.on('mouseover', onMouseOver)\n\t\t\t\t\t.on('mouseout', function (e) { pointer.onTrackerMouseOut(e); })\n\t\t\t\t\t.css(css);\n\n\t\t\t\tif (hasTouch) {\n\t\t\t\t\ttracker.on('touchstart', onMouseOver);\n\t\t\t\t} \n\t\t\t});\n\t\t}\n\n\t}\n\n}; // end Series prototype\n\n\n/**\n * LineSeries object\n */\nvar LineSeries = extendClass(Series);\nseriesTypes.line = LineSeries;\n\n/**\n * Set the default options for area\n */\ndefaultPlotOptions.area = merge(defaultSeriesOptions, {\n\tthreshold: 0\n\t// trackByArea: false,\n\t// lineColor: null, // overrides color, but lets fillColor be unaltered\n\t// fillOpacity: 0.75,\n\t// fillColor: null\n});\n\n/**\n * AreaSeries object\n */\nvar AreaSeries = extendClass(Series, {\n\ttype: 'area',\n\t\n\t/**\n\t * For stacks, don't split segments on null values. Instead, draw null values with \n\t * no marker. Also insert dummy points for any X position that exists in other series\n\t * in the stack.\n\t */ \n\tgetSegments: function () {\n\t\tvar segments = [],\n\t\t\tsegment = [],\n\t\t\tkeys = [],\n\t\t\txAxis = this.xAxis,\n\t\t\tyAxis = this.yAxis,\n\t\t\tstack = yAxis.stacks[this.stackKey],\n\t\t\tpointMap = {},\n\t\t\tplotX,\n\t\t\tplotY,\n\t\t\tpoints = this.points,\n\t\t\tconnectNulls = this.options.connectNulls,\n\t\t\tval,\n\t\t\ti,\n\t\t\tx;\n\n\t\tif (this.options.stacking && !this.cropped) { // cropped causes artefacts in Stock, and perf issue\n\t\t\t// Create a map where we can quickly look up the points by their X value.\n\t\t\tfor (i = 0; i < points.length; i++) {\n\t\t\t\tpointMap[points[i].x] = points[i];\n\t\t\t}\n\n\t\t\t// Sort the keys (#1651)\n\t\t\tfor (x in stack) {\n\t\t\t\tkeys.push(+x);\n\t\t\t}\n\t\t\tkeys.sort(function (a, b) {\n\t\t\t\treturn a - b;\n\t\t\t});\n\n\t\t\teach(keys, function (x) {\n\t\t\t\tif (connectNulls && (!pointMap[x] || pointMap[x].y === null)) { // #1836\n\t\t\t\t\treturn;\n\n\t\t\t\t// The point exists, push it to the segment\n\t\t\t\t} else if (pointMap[x]) {\n\t\t\t\t\tsegment.push(pointMap[x]);\n\n\t\t\t\t// There is no point for this X value in this series, so we \n\t\t\t\t// insert a dummy point in order for the areas to be drawn\n\t\t\t\t// correctly.\n\t\t\t\t} else {\n\t\t\t\t\tplotX = xAxis.translate(x);\n\t\t\t\t\tval = stack[x].percent ? (stack[x].total ? stack[x].cum * 100 / stack[x].total : 0) : stack[x].cum; // #1991\n\t\t\t\t\tplotY = yAxis.toPixels(val, true);\n\t\t\t\t\tsegment.push({ \n\t\t\t\t\t\ty: null, \n\t\t\t\t\t\tplotX: plotX,\n\t\t\t\t\t\tclientX: plotX, \n\t\t\t\t\t\tplotY: plotY, \n\t\t\t\t\t\tyBottom: plotY,\n\t\t\t\t\t\tonMouseOver: noop\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (segment.length) {\n\t\t\t\tsegments.push(segment);\n\t\t\t}\n\n\t\t} else {\n\t\t\tSeries.prototype.getSegments.call(this);\n\t\t\tsegments = this.segments;\n\t\t}\n\n\t\tthis.segments = segments;\n\t},\n\t\n\t/**\n\t * Extend the base Series getSegmentPath method by adding the path for the area.\n\t * This path is pushed to the series.areaPath property.\n\t */\n\tgetSegmentPath: function (segment) {\n\t\t\n\t\tvar segmentPath = Series.prototype.getSegmentPath.call(this, segment), // call base method\n\t\t\tareaSegmentPath = [].concat(segmentPath), // work on a copy for the area path\n\t\t\ti,\n\t\t\toptions = this.options,\n\t\t\tsegLength = segmentPath.length,\n\t\t\ttranslatedThreshold = this.yAxis.getThreshold(options.threshold), // #2181\n\t\t\tyBottom;\n\t\t\n\t\tif (segLength === 3) { // for animation from 1 to two points\n\t\t\tareaSegmentPath.push(L, segmentPath[1], segmentPath[2]);\n\t\t}\n\t\tif (options.stacking && !this.closedStacks) {\n\t\t\t\n\t\t\t// Follow stack back. Todo: implement areaspline. A general solution could be to \n\t\t\t// reverse the entire graphPath of the previous series, though may be hard with\n\t\t\t// splines and with series with different extremes\n\t\t\tfor (i = segment.length - 1; i >= 0; i--) {\n\n\t\t\t\tyBottom = pick(segment[i].yBottom, translatedThreshold);\n\t\t\t\n\t\t\t\t// step line?\n\t\t\t\tif (i < segment.length - 1 && options.step) {\n\t\t\t\t\tareaSegmentPath.push(segment[i + 1].plotX, yBottom);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tareaSegmentPath.push(segment[i].plotX, yBottom);\n\t\t\t}\n\n\t\t} else { // follow zero line back\n\t\t\tthis.closeSegment(areaSegmentPath, segment, translatedThreshold);\n\t\t}\n\t\tthis.areaPath = this.areaPath.concat(areaSegmentPath);\n\t\treturn segmentPath;\n\t},\n\t\n\t/**\n\t * Extendable method to close the segment path of an area. This is overridden in polar \n\t * charts.\n\t */\n\tcloseSegment: function (path, segment, translatedThreshold) {\n\t\tpath.push(\n\t\t\tL,\n\t\t\tsegment[segment.length - 1].plotX,\n\t\t\ttranslatedThreshold,\n\t\t\tL,\n\t\t\tsegment[0].plotX,\n\t\t\ttranslatedThreshold\n\t\t);\n\t},\n\t\n\t/**\n\t * Draw the graph and the underlying area. This method calls the Series base\n\t * function and adds the area. The areaPath is calculated in the getSegmentPath\n\t * method called from Series.prototype.drawGraph.\n\t */\n\tdrawGraph: function () {\n\t\t\n\t\t// Define or reset areaPath\n\t\tthis.areaPath = [];\n\t\t\n\t\t// Call the base method\n\t\tSeries.prototype.drawGraph.apply(this);\n\t\t\n\t\t// Define local variables\n\t\tvar series = this,\n\t\t\tareaPath = this.areaPath,\n\t\t\toptions = this.options,\n\t\t\tnegativeColor = options.negativeColor,\n\t\t\tnegativeFillColor = options.negativeFillColor,\n\t\t\tprops = [['area', this.color, options.fillColor]]; // area name, main color, fill color\n\t\t\n\t\tif (negativeColor || negativeFillColor) {\n\t\t\tprops.push(['areaNeg', negativeColor, negativeFillColor]);\n\t\t}\n\t\t\n\t\teach(props, function (prop) {\n\t\t\tvar areaKey = prop[0],\n\t\t\t\tarea = series[areaKey];\n\t\t\t\t\n\t\t\t// Create or update the area\n\t\t\tif (area) { // update\n\t\t\t\tarea.animate({ d: areaPath });\n\t\n\t\t\t} else { // create\n\t\t\t\tseries[areaKey] = series.chart.renderer.path(areaPath)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tfill: pick(\n\t\t\t\t\t\t\tprop[2],\n\t\t\t\t\t\t\tColor(prop[1]).setOpacity(pick(options.fillOpacity, 0.75)).get()\n\t\t\t\t\t\t),\n\t\t\t\t\t\tzIndex: 0 // #1069\n\t\t\t\t\t}).add(series.group);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Get the series' symbol in the legend\n\t * \n\t * @param {Object} legend The legend object\n\t * @param {Object} item The series (this) or point\n\t */\n\tdrawLegendSymbol: function (legend, item) {\n\t\t\n\t\titem.legendSymbol = this.chart.renderer.rect(\n\t\t\t0,\n\t\t\tlegend.baseline - 11,\n\t\t\tlegend.options.symbolWidth,\n\t\t\t12,\n\t\t\t2\n\t\t).attr({\n\t\t\tzIndex: 3\n\t\t}).add(item.legendGroup);\t\t\n\t\t\n\t}\n});\n\nseriesTypes.area = AreaSeries;/**\n * Set the default options for spline\n */\ndefaultPlotOptions.spline = merge(defaultSeriesOptions);\n\n/**\n * SplineSeries object\n */\nvar SplineSeries = extendClass(Series, {\n\ttype: 'spline',\n\n\t/**\n\t * Get the spline segment from a given point's previous neighbour to the given point\n\t */\n\tgetPointSpline: function (segment, point, i) {\n\t\tvar smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc\n\t\t\tdenom = smoothing + 1,\n\t\t\tplotX = point.plotX,\n\t\t\tplotY = point.plotY,\n\t\t\tlastPoint = segment[i - 1],\n\t\t\tnextPoint = segment[i + 1],\n\t\t\tleftContX,\n\t\t\tleftContY,\n\t\t\trightContX,\n\t\t\trightContY,\n\t\t\tret;\n\n\t\t// find control points\n\t\tif (lastPoint && nextPoint) {\n\t\t\n\t\t\tvar lastX = lastPoint.plotX,\n\t\t\t\tlastY = lastPoint.plotY,\n\t\t\t\tnextX = nextPoint.plotX,\n\t\t\t\tnextY = nextPoint.plotY,\n\t\t\t\tcorrection;\n\n\t\t\tleftContX = (smoothing * plotX + lastX) / denom;\n\t\t\tleftContY = (smoothing * plotY + lastY) / denom;\n\t\t\trightContX = (smoothing * plotX + nextX) / denom;\n\t\t\trightContY = (smoothing * plotY + nextY) / denom;\n\n\t\t\t// have the two control points make a straight line through main point\n\t\t\tcorrection = ((rightContY - leftContY) * (rightContX - plotX)) /\n\t\t\t\t(rightContX - leftContX) + plotY - rightContY;\n\n\t\t\tleftContY += correction;\n\t\t\trightContY += correction;\n\n\t\t\t// to prevent false extremes, check that control points are between\n\t\t\t// neighbouring points' y values\n\t\t\tif (leftContY > lastY && leftContY > plotY) {\n\t\t\t\tleftContY = mathMax(lastY, plotY);\n\t\t\t\trightContY = 2 * plotY - leftContY; // mirror of left control point\n\t\t\t} else if (leftContY < lastY && leftContY < plotY) {\n\t\t\t\tleftContY = mathMin(lastY, plotY);\n\t\t\t\trightContY = 2 * plotY - leftContY;\n\t\t\t}\n\t\t\tif (rightContY > nextY && rightContY > plotY) {\n\t\t\t\trightContY = mathMax(nextY, plotY);\n\t\t\t\tleftContY = 2 * plotY - rightContY;\n\t\t\t} else if (rightContY < nextY && rightContY < plotY) {\n\t\t\t\trightContY = mathMin(nextY, plotY);\n\t\t\t\tleftContY = 2 * plotY - rightContY;\n\t\t\t}\n\n\t\t\t// record for drawing in next point\n\t\t\tpoint.rightContX = rightContX;\n\t\t\tpoint.rightContY = rightContY;\n\n\t\t}\n\t\t\n\t\t// Visualize control points for debugging\n\t\t/*\n\t\tif (leftContX) {\n\t\t\tthis.chart.renderer.circle(leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, 2)\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'red',\n\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\tfill: 'none'\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t\tthis.chart.renderer.path(['M', leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop,\n\t\t\t\t'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop])\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'red',\n\t\t\t\t\t'stroke-width': 1\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t\tthis.chart.renderer.circle(rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, 2)\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'green',\n\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\tfill: 'none'\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t\tthis.chart.renderer.path(['M', rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop,\n\t\t\t\t'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop])\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'green',\n\t\t\t\t\t'stroke-width': 1\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t}\n\t\t*/\n\n\t\t// moveTo or lineTo\n\t\tif (!i) {\n\t\t\tret = [M, plotX, plotY];\n\t\t} else { // curve from last point to this\n\t\t\tret = [\n\t\t\t\t'C',\n\t\t\t\tlastPoint.rightContX || lastPoint.plotX,\n\t\t\t\tlastPoint.rightContY || lastPoint.plotY,\n\t\t\t\tleftContX || plotX,\n\t\t\t\tleftContY || plotY,\n\t\t\t\tplotX,\n\t\t\t\tplotY\n\t\t\t];\n\t\t\tlastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later\n\t\t}\n\t\treturn ret;\n\t}\n});\nseriesTypes.spline = SplineSeries;\n\n/**\n * Set the default options for areaspline\n */\ndefaultPlotOptions.areaspline = merge(defaultPlotOptions.area);\n\n/**\n * AreaSplineSeries object\n */\nvar areaProto = AreaSeries.prototype,\n\tAreaSplineSeries = extendClass(SplineSeries, {\n\t\ttype: 'areaspline',\n\t\tclosedStacks: true, // instead of following the previous graph back, follow the threshold back\n\t\t\n\t\t// Mix in methods from the area series\n\t\tgetSegmentPath: areaProto.getSegmentPath,\n\t\tcloseSegment: areaProto.closeSegment,\n\t\tdrawGraph: areaProto.drawGraph,\n\t\tdrawLegendSymbol: areaProto.drawLegendSymbol\n\t});\nseriesTypes.areaspline = AreaSplineSeries;\n\n/**\n * Set the default options for column\n */\ndefaultPlotOptions.column = merge(defaultSeriesOptions, {\n\tborderColor: '#FFFFFF',\n\tborderWidth: 1,\n\tborderRadius: 0,\n\t//colorByPoint: undefined,\n\tgroupPadding: 0.2,\n\t//grouping: true,\n\tmarker: null, // point options are specified in the base options\n\tpointPadding: 0.1,\n\t//pointWidth: null,\n\tminPointLength: 0,\n\tcropThreshold: 50, // when there are more points, they will not animate out of the chart on xAxis.setExtremes\n\tpointRange: null, // null means auto, meaning 1 in a categorized axis and least distance between points if not categories\n\tstates: {\n\t\thover: {\n\t\t\tbrightness: 0.1,\n\t\t\tshadow: false\n\t\t},\n\t\tselect: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tborderColor: '#000000',\n\t\t\tshadow: false\n\t\t}\n\t},\n\tdataLabels: {\n\t\talign: null, // auto\n\t\tverticalAlign: null, // auto\n\t\ty: null\n\t},\n\tstickyTracking: false,\n\tthreshold: 0\n});\n\n/**\n * ColumnSeries object\n */\nvar ColumnSeries = extendClass(Series, {\n\ttype: 'column',\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tstroke: 'borderColor',\n\t\t'stroke-width': 'borderWidth',\n\t\tfill: 'color',\n\t\tr: 'borderRadius'\n\t},\n\tcropShoulder: 0,\n\ttrackerGroups: ['group', 'dataLabelsGroup'],\n\tnegStacks: true, // use separate negative stacks, unlike area stacks where a negative \n\t\t// point is substracted from previous (#1910)\n\t\n\t/**\n\t * Initialize the series\n\t */\n\tinit: function () {\n\t\tSeries.prototype.init.apply(this, arguments);\n\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\n\t\t// if the series is added dynamically, force redraw of other\n\t\t// series affected by a new column\n\t\tif (chart.hasRendered) {\n\t\t\teach(chart.series, function (otherSeries) {\n\t\t\t\tif (otherSeries.type === series.type) {\n\t\t\t\t\totherSeries.isDirty = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Return the width and x offset of the columns adjusted for grouping, groupPadding, pointPadding,\n\t * pointWidth etc. \n\t */\n\tgetColumnMetrics: function () {\n\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\txAxis = series.xAxis,\n\t\t\tyAxis = series.yAxis,\n\t\t\treversedXAxis = xAxis.reversed,\n\t\t\tstackKey,\n\t\t\tstackGroups = {},\n\t\t\tcolumnIndex,\n\t\t\tcolumnCount = 0;\n\n\t\t// Get the total number of column type series.\n\t\t// This is called on every series. Consider moving this logic to a\n\t\t// chart.orderStacks() function and call it on init, addSeries and removeSeries\n\t\tif (options.grouping === false) {\n\t\t\tcolumnCount = 1;\n\t\t} else {\n\t\t\teach(series.chart.series, function (otherSeries) {\n\t\t\t\tvar otherOptions = otherSeries.options,\n\t\t\t\t\totherYAxis = otherSeries.yAxis;\n\t\t\t\tif (otherSeries.type === series.type && otherSeries.visible &&\n\t\t\t\t\t\tyAxis.len === otherYAxis.len && yAxis.pos === otherYAxis.pos) {  // #642, #2086\n\t\t\t\t\tif (otherOptions.stacking) {\n\t\t\t\t\t\tstackKey = otherSeries.stackKey;\n\t\t\t\t\t\tif (stackGroups[stackKey] === UNDEFINED) {\n\t\t\t\t\t\t\tstackGroups[stackKey] = columnCount++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolumnIndex = stackGroups[stackKey];\n\t\t\t\t\t} else if (otherOptions.grouping !== false) { // #1162\n\t\t\t\t\t\tcolumnIndex = columnCount++;\n\t\t\t\t\t}\n\t\t\t\t\totherSeries.columnIndex = columnIndex;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar categoryWidth = mathMin(\n\t\t\t\tmathAbs(xAxis.transA) * (xAxis.ordinalSlope || options.pointRange || xAxis.closestPointRange || 1), \n\t\t\t\txAxis.len // #1535\n\t\t\t),\n\t\t\tgroupPadding = categoryWidth * options.groupPadding,\n\t\t\tgroupWidth = categoryWidth - 2 * groupPadding,\n\t\t\tpointOffsetWidth = groupWidth / columnCount,\n\t\t\toptionPointWidth = options.pointWidth,\n\t\t\tpointPadding = defined(optionPointWidth) ? (pointOffsetWidth - optionPointWidth) / 2 :\n\t\t\t\tpointOffsetWidth * options.pointPadding,\n\t\t\tpointWidth = pick(optionPointWidth, pointOffsetWidth - 2 * pointPadding), // exact point width, used in polar charts\n\t\t\tcolIndex = (reversedXAxis ? \n\t\t\t\tcolumnCount - (series.columnIndex || 0) : // #1251\n\t\t\t\tseries.columnIndex) || 0,\n\t\t\tpointXOffset = pointPadding + (groupPadding + colIndex *\n\t\t\t\tpointOffsetWidth - (categoryWidth / 2)) *\n\t\t\t\t(reversedXAxis ? -1 : 1);\n\n\t\t// Save it for reading in linked series (Error bars particularly)\n\t\treturn (series.columnMetrics = { \n\t\t\twidth: pointWidth, \n\t\t\toffset: pointXOffset \n\t\t});\n\t\t\t\n\t},\n\n\t/**\n\t * Translate each point to the plot area coordinate system and find shape positions\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\toptions = series.options,\n\t\t\tborderWidth = options.borderWidth,\n\t\t\tyAxis = series.yAxis,\n\t\t\tthreshold = options.threshold,\n\t\t\ttranslatedThreshold = series.translatedThreshold = yAxis.getThreshold(threshold),\n\t\t\tminPointLength = pick(options.minPointLength, 5),\n\t\t\tmetrics = series.getColumnMetrics(),\n\t\t\tpointWidth = metrics.width,\n\t\t\tseriesBarW = series.barW = mathCeil(mathMax(pointWidth, 1 + 2 * borderWidth)), // rounded and postprocessed for border width\n\t\t\tpointXOffset = series.pointXOffset = metrics.offset,\n\t\t\txCrisp = -(borderWidth % 2 ? 0.5 : 0),\n\t\t\tyCrisp = borderWidth % 2 ? 0.5 : 1;\n\n\t\tif (chart.renderer.isVML && chart.inverted) {\n\t\t\tyCrisp += 1;\n\t\t}\n\n\t\tSeries.prototype.translate.apply(series);\n\n\t\t// record the new values\n\t\teach(series.points, function (point) {\n\t\t\tvar yBottom = pick(point.yBottom, translatedThreshold),\n\t\t\t\tplotY = mathMin(mathMax(-999 - yBottom, point.plotY), yAxis.len + 999 + yBottom), // Don't draw too far outside plot area (#1303, #2241)\n\t\t\t\tbarX = point.plotX + pointXOffset,\n\t\t\t\tbarW = seriesBarW,\n\t\t\t\tbarY = mathMin(plotY, yBottom),\n\t\t\t\tright,\n\t\t\t\tbottom,\n\t\t\t\tfromTop,\n\t\t\t\tfromLeft,\n\t\t\t\tbarH = mathMax(plotY, yBottom) - barY;\n\n\t\t\t// Handle options.minPointLength\n\t\t\tif (mathAbs(barH) < minPointLength) {\n\t\t\t\tif (minPointLength) {\n\t\t\t\t\tbarH = minPointLength;\n\t\t\t\t\tbarY =\n\t\t\t\t\t\tmathRound(mathAbs(barY - translatedThreshold) > minPointLength ? // stacked\n\t\t\t\t\t\t\tyBottom - minPointLength : // keep position\n\t\t\t\t\t\t\ttranslatedThreshold - (yAxis.translate(point.y, 0, 1, 0, 1) <= translatedThreshold ? minPointLength : 0)); // use exact yAxis.translation (#1485)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Cache for access in polar\n\t\t\tpoint.barX = barX;\n\t\t\tpoint.pointWidth = pointWidth;\n\n\n\t\t\t// Round off to obtain crisp edges\n\t\t\tfromLeft = mathAbs(barX) < 0.5;\n\t\t\tright = mathRound(barX + barW) + xCrisp;\n\t\t\tbarX = mathRound(barX) + xCrisp;\n\t\t\tbarW = right - barX;\n\n\t\t\tfromTop = mathAbs(barY) < 0.5;\n\t\t\tbottom = mathRound(barY + barH) + yCrisp;\n\t\t\tbarY = mathRound(barY) + yCrisp;\n\t\t\tbarH = bottom - barY;\n\n\t\t\t// Top and left edges are exceptions\n\t\t\tif (fromLeft) {\n\t\t\t\tbarX += 1;\n\t\t\t\tbarW -= 1;\n\t\t\t}\n\t\t\tif (fromTop) {\n\t\t\t\tbarY -= 1;\n\t\t\t\tbarH += 1;\n\t\t\t}\n\n\t\t\t// Register shape type and arguments to be used in drawPoints\n\t\t\tpoint.shapeType = 'rect';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\tx: barX,\n\t\t\t\ty: barY,\n\t\t\t\twidth: barW,\n\t\t\t\theight: barH\n\t\t\t};\n\t\t});\n\n\t},\n\n\tgetSymbol: noop,\n\t\n\t/**\n\t * Use a solid rectangle like the area series types\n\t */\n\tdrawLegendSymbol: AreaSeries.prototype.drawLegendSymbol,\n\t\n\t\n\t/**\n\t * Columns have no graph\n\t */\n\tdrawGraph: noop,\n\n\t/**\n\t * Draw the columns. For bars, the series.group is rotated, so the same coordinates\n\t * apply for columns and bars. This method is inherited by scatter series.\n\t *\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\trenderer = series.chart.renderer,\n\t\t\tshapeArgs;\n\n\n\t\t// draw the columns\n\t\teach(series.points, function (point) {\n\t\t\tvar plotY = point.plotY,\n\t\t\t\tgraphic = point.graphic;\n\n\t\t\tif (plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) {\n\t\t\t\tshapeArgs = point.shapeArgs;\n\t\t\t\t\n\t\t\t\tif (graphic) { // update\n\t\t\t\t\tstop(graphic);\n\t\t\t\t\tgraphic.animate(merge(shapeArgs));\n\n\t\t\t\t} else {\n\t\t\t\t\tpoint.graphic = graphic = renderer[point.shapeType](shapeArgs)\n\t\t\t\t\t\t.attr(point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE])\n\t\t\t\t\t\t.add(series.group)\n\t\t\t\t\t\t.shadow(options.shadow, null, options.stacking && !options.borderRadius);\n\t\t\t\t}\n\n\t\t\t} else if (graphic) {\n\t\t\t\tpoint.graphic = graphic.destroy(); // #1269\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Add tracking event listener to the series group, so the point graphics\n\t * themselves act as trackers\n\t */\n\tdrawTracker: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tpointer = chart.pointer,\n\t\t\tcursor = series.options.cursor,\n\t\t\tcss = cursor && { cursor: cursor },\n\t\t\tonMouseOver = function (e) {\n\t\t\t\tvar target = e.target,\n\t\t\t\t\tpoint;\n\n\t\t\t\tif (chart.hoverSeries !== series) {\n\t\t\t\t\tseries.onMouseOver();\n\t\t\t\t}\n\t\t\t\twhile (target && !point) {\n\t\t\t\t\tpoint = target.point;\n\t\t\t\t\ttarget = target.parentNode;\n\t\t\t\t}\n\t\t\t\tif (point !== UNDEFINED && point !== chart.hoverPoint) { // undefined on graph in scatterchart\n\t\t\t\t\tpoint.onMouseOver(e);\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Add reference to the point\n\t\teach(series.points, function (point) {\n\t\t\tif (point.graphic) {\n\t\t\t\tpoint.graphic.element.point = point;\n\t\t\t}\n\t\t\tif (point.dataLabel) {\n\t\t\t\tpoint.dataLabel.element.point = point;\n\t\t\t}\n\t\t});\n\n\t\t// Add the event listeners, we need to do this only once\n\t\tif (!series._hasTracking) {\n\t\t\teach(series.trackerGroups, function (key) {\n\t\t\t\tif (series[key]) { // we don't always have dataLabelsGroup\n\t\t\t\t\tseries[key]\n\t\t\t\t\t\t.addClass(PREFIX + 'tracker')\n\t\t\t\t\t\t.on('mouseover', onMouseOver)\n\t\t\t\t\t\t.on('mouseout', function (e) { pointer.onTrackerMouseOut(e); })\n\t\t\t\t\t\t.css(css);\n\t\t\t\t\tif (hasTouch) {\n\t\t\t\t\t\tseries[key].on('touchstart', onMouseOver);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tseries._hasTracking = true;\n\t\t}\n\t},\n\t\n\t/** \n\t * Override the basic data label alignment by adjusting for the position of the column\n\t */\n\talignDataLabel: function (point, dataLabel, options,  alignTo, isNew) {\n\t\tvar chart = this.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tdlBox = point.dlBox || point.shapeArgs, // data label box for alignment\n\t\t\tbelow = point.below || (point.plotY > pick(this.translatedThreshold, chart.plotSizeY)),\n\t\t\tinside = pick(options.inside, !!this.options.stacking); // draw it inside the box?\n\t\t\n\t\t// Align to the column itself, or the top of it\n\t\tif (dlBox) { // Area range uses this method but not alignTo\n\t\t\talignTo = merge(dlBox);\n\t\t\tif (inverted) {\n\t\t\t\talignTo = {\n\t\t\t\t\tx: chart.plotWidth - alignTo.y - alignTo.height,\n\t\t\t\t\ty: chart.plotHeight - alignTo.x - alignTo.width,\n\t\t\t\t\twidth: alignTo.height,\n\t\t\t\t\theight: alignTo.width\n\t\t\t\t};\n\t\t\t}\n\t\t\t\t\n\t\t\t// Compute the alignment box\n\t\t\tif (!inside) {\n\t\t\t\tif (inverted) {\n\t\t\t\t\talignTo.x += below ? 0 : alignTo.width;\n\t\t\t\t\talignTo.width = 0;\n\t\t\t\t} else {\n\t\t\t\t\talignTo.y += below ? alignTo.height : 0;\n\t\t\t\t\talignTo.height = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// When alignment is undefined (typically columns and bars), display the individual \n\t\t// point below or above the point depending on the threshold\n\t\toptions.align = pick(\n\t\t\toptions.align, \n\t\t\t!inverted || inside ? 'center' : below ? 'right' : 'left'\n\t\t);\n\t\toptions.verticalAlign = pick(\n\t\t\toptions.verticalAlign, \n\t\t\tinverted || inside ? 'middle' : below ? 'top' : 'bottom'\n\t\t);\n\t\t\n\t\t// Call the parent method\n\t\tSeries.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);\n\t},\n\n\n\t/**\n\t * Animate the column heights one by one from zero\n\t * @param {Boolean} init Whether to initialize the animation or run it\n\t */\n\tanimate: function (init) {\n\t\tvar series = this,\n\t\t\tyAxis = this.yAxis,\n\t\t\toptions = series.options,\n\t\t\tinverted = this.chart.inverted,\n\t\t\tattr = {},\n\t\t\ttranslatedThreshold;\n\n\t\tif (hasSVG) { // VML is too slow anyway\n\t\t\tif (init) {\n\t\t\t\tattr.scaleY = 0.001;\n\t\t\t\ttranslatedThreshold = mathMin(yAxis.pos + yAxis.len, mathMax(yAxis.pos, yAxis.toPixels(options.threshold)));\n\t\t\t\tif (inverted) {\n\t\t\t\t\tattr.translateX = translatedThreshold - yAxis.len;\n\t\t\t\t} else {\n\t\t\t\t\tattr.translateY = translatedThreshold;\n\t\t\t\t}\n\t\t\t\tseries.group.attr(attr);\n\n\t\t\t} else { // run the animation\n\t\t\t\t\n\t\t\t\tattr.scaleY = 1;\n\t\t\t\tattr[inverted ? 'translateX' : 'translateY'] = yAxis.pos;\n\t\t\t\tseries.group.animate(attr, series.options.animation);\n\n\t\t\t\t// delete this function to allow it only once\n\t\t\t\tseries.animate = null;\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Remove this series from the chart\n\t */\n\tremove: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\n\t\t// column and bar series affects other series of the same type\n\t\t// as they are either stacked or grouped\n\t\tif (chart.hasRendered) {\n\t\t\teach(chart.series, function (otherSeries) {\n\t\t\t\tif (otherSeries.type === series.type) {\n\t\t\t\t\totherSeries.isDirty = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tSeries.prototype.remove.apply(series, arguments);\n\t}\n});\nseriesTypes.column = ColumnSeries;\n/**\n * Set the default options for bar\n */\ndefaultPlotOptions.bar = merge(defaultPlotOptions.column);\n/**\n * The Bar series class\n */\nvar BarSeries = extendClass(ColumnSeries, {\n\ttype: 'bar',\n\tinverted: true\n});\nseriesTypes.bar = BarSeries;\n\n/**\n * Set the default options for scatter\n */\ndefaultPlotOptions.scatter = merge(defaultSeriesOptions, {\n\tlineWidth: 0,\n\ttooltip: {\n\t\theaderFormat: '<span style=\"font-size: 10px; color:{series.color}\">{series.name}</span><br/>',\n\t\tpointFormat: 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>',\n\t\tfollowPointer: true\n\t},\n\tstickyTracking: false\n});\n\n/**\n * The scatter series class\n */\nvar ScatterSeries = extendClass(Series, {\n\ttype: 'scatter',\n\tsorted: false,\n\trequireSorting: false,\n\tnoSharedTooltip: true,\n\ttrackerGroups: ['markerGroup'],\n\n\tdrawTracker: ColumnSeries.prototype.drawTracker,\n\t\n\tsetTooltipPoints: noop\n});\nseriesTypes.scatter = ScatterSeries;\n\n/**\n * Set the default options for pie\n */\ndefaultPlotOptions.pie = merge(defaultSeriesOptions, {\n\tborderColor: '#FFFFFF',\n\tborderWidth: 1,\n\tcenter: [null, null],\n\tclip: false,\n\tcolorByPoint: true, // always true for pies\n\tdataLabels: {\n\t\t// align: null,\n\t\t// connectorWidth: 1,\n\t\t// connectorColor: point.color,\n\t\t// connectorPadding: 5,\n\t\tdistance: 30,\n\t\tenabled: true,\n\t\tformatter: function () {\n\t\t\treturn this.point.name;\n\t\t}\n\t\t// softConnector: true,\n\t\t//y: 0\n\t},\n\tignoreHiddenPoint: true,\n\t//innerSize: 0,\n\tlegendType: 'point',\n\tmarker: null, // point options are specified in the base options\n\tsize: null,\n\tshowInLegend: false,\n\tslicedOffset: 10,\n\tstates: {\n\t\thover: {\n\t\t\tbrightness: 0.1,\n\t\t\tshadow: false\n\t\t}\n\t},\n\tstickyTracking: false,\n\ttooltip: {\n\t\tfollowPointer: true\n\t}\n});\n\n/**\n * Extended point object for pies\n */\nvar PiePoint = extendClass(Point, {\n\t/**\n\t * Initiate the pie slice\n\t */\n\tinit: function () {\n\n\t\tPoint.prototype.init.apply(this, arguments);\n\n\t\tvar point = this,\n\t\t\ttoggleSlice;\n\n\t\t// Disallow negative values (#1530)\n\t\tif (point.y < 0) {\n\t\t\tpoint.y = null;\n\t\t}\n\n\t\t//visible: options.visible !== false,\n\t\textend(point, {\n\t\t\tvisible: point.visible !== false,\n\t\t\tname: pick(point.name, 'Slice')\n\t\t});\n\n\t\t// add event listener for select\n\t\ttoggleSlice = function (e) {\n\t\t\tpoint.slice(e.type === 'select');\n\t\t};\n\t\taddEvent(point, 'select', toggleSlice);\n\t\taddEvent(point, 'unselect', toggleSlice);\n\n\t\treturn point;\n\t},\n\n\t/**\n\t * Toggle the visibility of the pie slice\n\t * @param {Boolean} vis Whether to show the slice or not. If undefined, the\n\t *    visibility is toggled\n\t */\n\tsetVisible: function (vis) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\tmethod;\n\n\t\t// if called without an argument, toggle visibility\n\t\tpoint.visible = point.options.visible = vis = vis === UNDEFINED ? !point.visible : vis;\n\t\tseries.options.data[inArray(point, series.data)] = point.options; // update userOptions.data\n\t\t\n\t\tmethod = vis ? 'show' : 'hide';\n\n\t\t// Show and hide associated elements\n\t\teach(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function (key) {\n\t\t\tif (point[key]) {\n\t\t\t\tpoint[key][method]();\n\t\t\t}\n\t\t});\n\n\t\tif (point.legendItem) {\n\t\t\tchart.legend.colorizeItem(point, vis);\n\t\t}\n\t\t\n\t\t// Handle ignore hidden slices\n\t\tif (!series.isDirty && series.options.ignoreHiddenPoint) {\n\t\t\tseries.isDirty = true;\n\t\t\tchart.redraw();\n\t\t}\n\t},\n\n\t/**\n\t * Set or toggle whether the slice is cut out from the pie\n\t * @param {Boolean} sliced When undefined, the slice state is toggled\n\t * @param {Boolean} redraw Whether to redraw the chart. True by default.\n\t */\n\tslice: function (sliced, redraw, animation) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\ttranslation;\n\n\t\tsetAnimation(animation, chart);\n\n\t\t// redraw is true by default\n\t\tredraw = pick(redraw, true);\n\n\t\t// if called without an argument, toggle\n\t\tpoint.sliced = point.options.sliced = sliced = defined(sliced) ? sliced : !point.sliced;\n\t\tseries.options.data[inArray(point, series.data)] = point.options; // update userOptions.data\n\n\t\ttranslation = sliced ? point.slicedTranslation : {\n\t\t\ttranslateX: 0,\n\t\t\ttranslateY: 0\n\t\t};\n\n\t\tpoint.graphic.animate(translation);\n\t\t\n\t\tif (point.shadowGroup) {\n\t\t\tpoint.shadowGroup.animate(translation);\n\t\t}\n\n\t}\n});\n\n/**\n * The Pie series class\n */\nvar PieSeries = {\n\ttype: 'pie',\n\tisCartesian: false,\n\tpointClass: PiePoint,\n\trequireSorting: false,\n\tnoSharedTooltip: true,\n\ttrackerGroups: ['group', 'dataLabelsGroup'],\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tstroke: 'borderColor',\n\t\t'stroke-width': 'borderWidth',\n\t\tfill: 'color'\n\t},\n\n\t/**\n\t * Pies have one color each point\n\t */\n\tgetColor: noop,\n\n\t/**\n\t * Animate the pies in\n\t */\n\tanimate: function (init) {\n\t\tvar series = this,\n\t\t\tpoints = series.points,\n\t\t\tstartAngleRad = series.startAngleRad;\n\n\t\tif (!init) {\n\t\t\teach(points, function (point) {\n\t\t\t\tvar graphic = point.graphic,\n\t\t\t\t\targs = point.shapeArgs;\n\n\t\t\t\tif (graphic) {\n\t\t\t\t\t// start values\n\t\t\t\t\tgraphic.attr({\n\t\t\t\t\t\tr: series.center[3] / 2, // animate from inner radius (#779)\n\t\t\t\t\t\tstart: startAngleRad,\n\t\t\t\t\t\tend: startAngleRad\n\t\t\t\t\t});\n\n\t\t\t\t\t// animate\n\t\t\t\t\tgraphic.animate({\n\t\t\t\t\t\tr: args.r,\n\t\t\t\t\t\tstart: args.start,\n\t\t\t\t\t\tend: args.end\n\t\t\t\t\t}, series.options.animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// delete this function to allow it only once\n\t\t\tseries.animate = null;\n\t\t}\n\t},\n\n\t/**\n\t * Extend the basic setData method by running processData and generatePoints immediately,\n\t * in order to access the points from the legend.\n\t */\n\tsetData: function (data, redraw) {\n\t\tSeries.prototype.setData.call(this, data, false);\n\t\tthis.processData();\n\t\tthis.generatePoints();\n\t\tif (pick(redraw, true)) {\n\t\t\tthis.chart.redraw();\n\t\t} \n\t},\n\n\t/**\n\t * Extend the generatePoints method by adding total and percentage properties to each point\n\t */\n\tgeneratePoints: function () {\n\t\tvar i,\n\t\t\ttotal = 0,\n\t\t\tpoints,\n\t\t\tlen,\n\t\t\tpoint,\n\t\t\tignoreHiddenPoint = this.options.ignoreHiddenPoint;\n\n\t\tSeries.prototype.generatePoints.call(this);\n\n\t\t// Populate local vars\n\t\tpoints = this.points;\n\t\tlen = points.length;\n\t\t\n\t\t// Get the total sum\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tpoint = points[i];\n\t\t\ttotal += (ignoreHiddenPoint && !point.visible) ? 0 : point.y;\n\t\t}\n\t\tthis.total = total;\n\n\t\t// Set each point's properties\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tpoint = points[i];\n\t\t\tpoint.percentage = total > 0 ? (point.y / total) * 100 : 0;\n\t\t\tpoint.total = total;\n\t\t}\n\t\t\n\t},\n\t\n\t/**\n\t * Get the center of the pie based on the size and center options relative to the  \n\t * plot area. Borrowed by the polar and gauge series types.\n\t */\n\tgetCenter: function () {\n\t\t\n\t\tvar options = this.options,\n\t\t\tchart = this.chart,\n\t\t\tslicingRoom = 2 * (options.slicedOffset || 0),\n\t\t\thandleSlicingRoom,\n\t\t\tplotWidth = chart.plotWidth - 2 * slicingRoom,\n\t\t\tplotHeight = chart.plotHeight - 2 * slicingRoom,\n\t\t\tcenterOption = options.center,\n\t\t\tpositions = [pick(centerOption[0], '50%'), pick(centerOption[1], '50%'), options.size || '100%', options.innerSize || 0],\n\t\t\tsmallestSize = mathMin(plotWidth, plotHeight),\n\t\t\tisPercent;\n\t\t\n\t\treturn map(positions, function (length, i) {\n\t\t\tisPercent = /%$/.test(length);\n\t\t\thandleSlicingRoom = i < 2 || (i === 2 && isPercent);\n\t\t\treturn (isPercent ?\n\t\t\t\t// i == 0: centerX, relative to width\n\t\t\t\t// i == 1: centerY, relative to height\n\t\t\t\t// i == 2: size, relative to smallestSize\n\t\t\t\t// i == 4: innerSize, relative to smallestSize\n\t\t\t\t[plotWidth, plotHeight, smallestSize, smallestSize][i] *\n\t\t\t\t\tpInt(length) / 100 :\n\t\t\t\tlength) + (handleSlicingRoom ? slicingRoom : 0);\n\t\t});\n\t},\n\t\n\t/**\n\t * Do translation for pie slices\n\t */\n\ttranslate: function (positions) {\n\t\tthis.generatePoints();\n\t\t\n\t\tvar series = this,\n\t\t\tcumulative = 0,\n\t\t\tprecision = 1000, // issue #172\n\t\t\toptions = series.options,\n\t\t\tslicedOffset = options.slicedOffset,\n\t\t\tconnectorOffset = slicedOffset + options.borderWidth,\n\t\t\tstart,\n\t\t\tend,\n\t\t\tangle,\n\t\t\tstartAngle = options.startAngle || 0,\n\t\t\tstartAngleRad = series.startAngleRad = mathPI / 180 * (startAngle - 90),\n\t\t\tendAngleRad = series.endAngleRad = mathPI / 180 * ((options.endAngle || (startAngle + 360)) - 90), // docs\n\t\t\tcirc = endAngleRad - startAngleRad, //2 * mathPI,\n\t\t\tpoints = series.points,\n\t\t\tradiusX, // the x component of the radius vector for a given point\n\t\t\tradiusY,\n\t\t\tlabelDistance = options.dataLabels.distance,\n\t\t\tignoreHiddenPoint = options.ignoreHiddenPoint,\n\t\t\ti,\n\t\t\tlen = points.length,\n\t\t\tpoint;\n\n\t\t// Get positions - either an integer or a percentage string must be given.\n\t\t// If positions are passed as a parameter, we're in a recursive loop for adjusting\n\t\t// space for data labels.\n\t\tif (!positions) {\n\t\t\tseries.center = positions = series.getCenter();\n\t\t}\n\n\t\t// utility for getting the x value from a given y, used for anticollision logic in data labels\n\t\tseries.getX = function (y, left) {\n\n\t\t\tangle = math.asin((y - positions[1]) / (positions[2] / 2 + labelDistance));\n\n\t\t\treturn positions[0] +\n\t\t\t\t(left ? -1 : 1) *\n\t\t\t\t(mathCos(angle) * (positions[2] / 2 + labelDistance));\n\t\t};\n\n\t\t// Calculate the geometry for each point\n\t\tfor (i = 0; i < len; i++) {\n\t\t\t\n\t\t\tpoint = points[i];\n\t\t\t\n\t\t\t// set start and end angle\n\t\t\tstart = startAngleRad + (cumulative * circ);\n\t\t\tif (!ignoreHiddenPoint || point.visible) {\n\t\t\t\tcumulative += point.percentage / 100;\n\t\t\t}\n\t\t\tend = startAngleRad + (cumulative * circ);\n\n\t\t\t// set the shape\n\t\t\tpoint.shapeType = 'arc';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\tx: positions[0],\n\t\t\t\ty: positions[1],\n\t\t\t\tr: positions[2] / 2,\n\t\t\t\tinnerR: positions[3] / 2,\n\t\t\t\tstart: mathRound(start * precision) / precision,\n\t\t\t\tend: mathRound(end * precision) / precision\n\t\t\t};\n\n\t\t\t// center for the sliced out slice\n\t\t\tangle = (end + start) / 2;\n\t\t\tif (angle > 0.75 * circ) {\n\t\t\t\tangle -= 2 * mathPI;\n\t\t\t}\n\t\t\tpoint.slicedTranslation = {\n\t\t\t\ttranslateX: mathRound(mathCos(angle) * slicedOffset),\n\t\t\t\ttranslateY: mathRound(mathSin(angle) * slicedOffset)\n\t\t\t};\n\n\t\t\t// set the anchor point for tooltips\n\t\t\tradiusX = mathCos(angle) * positions[2] / 2;\n\t\t\tradiusY = mathSin(angle) * positions[2] / 2;\n\t\t\tpoint.tooltipPos = [\n\t\t\t\tpositions[0] + radiusX * 0.7,\n\t\t\t\tpositions[1] + radiusY * 0.7\n\t\t\t];\n\t\t\t\n\t\t\tpoint.half = angle < -mathPI / 2 || angle > mathPI / 2 ? 1 : 0;\n\t\t\tpoint.angle = angle;\n\n\t\t\t// set the anchor point for data labels\n\t\t\tconnectorOffset = mathMin(connectorOffset, labelDistance / 2); // #1678\n\t\t\tpoint.labelPos = [\n\t\t\t\tpositions[0] + radiusX + mathCos(angle) * labelDistance, // first break of connector\n\t\t\t\tpositions[1] + radiusY + mathSin(angle) * labelDistance, // a/a\n\t\t\t\tpositions[0] + radiusX + mathCos(angle) * connectorOffset, // second break, right outside pie\n\t\t\t\tpositions[1] + radiusY + mathSin(angle) * connectorOffset, // a/a\n\t\t\t\tpositions[0] + radiusX, // landing point for connector\n\t\t\t\tpositions[1] + radiusY, // a/a\n\t\t\t\tlabelDistance < 0 ? // alignment\n\t\t\t\t\t'center' :\n\t\t\t\t\tpoint.half ? 'right' : 'left', // alignment\n\t\t\t\tangle // center angle\n\t\t\t];\n\n\t\t}\n\t},\n\n\tsetTooltipPoints: noop,\n\tdrawGraph: null,\n\n\t/**\n\t * Draw the data points\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tgroupTranslation,\n\t\t\t//center,\n\t\t\tgraphic,\n\t\t\t//group,\n\t\t\tshadow = series.options.shadow,\n\t\t\tshadowGroup,\n\t\t\tshapeArgs;\n\n\t\tif (shadow && !series.shadowGroup) {\n\t\t\tseries.shadowGroup = renderer.g('shadow')\n\t\t\t\t.add(series.group);\n\t\t}\n\n\t\t// draw the slices\n\t\teach(series.points, function (point) {\n\t\t\tgraphic = point.graphic;\n\t\t\tshapeArgs = point.shapeArgs;\n\t\t\tshadowGroup = point.shadowGroup;\n\n\t\t\t// put the shadow behind all points\n\t\t\tif (shadow && !shadowGroup) {\n\t\t\t\tshadowGroup = point.shadowGroup = renderer.g('shadow')\n\t\t\t\t\t.add(series.shadowGroup);\n\t\t\t}\n\n\t\t\t// if the point is sliced, use special translation, else use plot area traslation\n\t\t\tgroupTranslation = point.sliced ? point.slicedTranslation : {\n\t\t\t\ttranslateX: 0,\n\t\t\t\ttranslateY: 0\n\t\t\t};\n\n\t\t\t//group.translate(groupTranslation[0], groupTranslation[1]);\n\t\t\tif (shadowGroup) {\n\t\t\t\tshadowGroup.attr(groupTranslation);\n\t\t\t}\n\n\t\t\t// draw the slice\n\t\t\tif (graphic) {\n\t\t\t\tgraphic.animate(extend(shapeArgs, groupTranslation));\n\t\t\t} else {\n\t\t\t\tpoint.graphic = graphic = renderer.arc(shapeArgs)\n\t\t\t\t\t.setRadialReference(series.center)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\tpoint.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE]\n\t\t\t\t\t)\n\t\t\t\t\t.attr({ 'stroke-linejoin': 'round' })\n\t\t\t\t\t.attr(groupTranslation)\n\t\t\t\t\t.add(series.group)\n\t\t\t\t\t.shadow(shadow, shadowGroup);\t\n\t\t\t}\n\n\t\t\t// detect point specific visibility\n\t\t\tif (point.visible === false) {\n\t\t\t\tpoint.setVisible(false);\n\t\t\t}\n\n\t\t});\n\n\t},\n\n\t/**\n\t * Utility for sorting data labels\n\t */\n\tsortByAngle: function (points, sign) {\n\t\tpoints.sort(function (a, b) {\n\t\t\treturn a.angle !== undefined && (b.angle - a.angle) * sign;\n\t\t});\n\t},\n\n\t/**\n\t * Override the base drawDataLabels method by pie specific functionality\n\t */\n\tdrawDataLabels: function () {\n\t\tvar series = this,\n\t\t\tdata = series.data,\n\t\t\tpoint,\n\t\t\tchart = series.chart,\n\t\t\toptions = series.options.dataLabels,\n\t\t\tconnectorPadding = pick(options.connectorPadding, 10),\n\t\t\tconnectorWidth = pick(options.connectorWidth, 1),\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tconnector,\n\t\t\tconnectorPath,\n\t\t\tsoftConnector = pick(options.softConnector, true),\n\t\t\tdistanceOption = options.distance,\n\t\t\tseriesCenter = series.center,\n\t\t\tradius = seriesCenter[2] / 2,\n\t\t\tcenterY = seriesCenter[1],\n\t\t\toutside = distanceOption > 0,\n\t\t\tdataLabel,\n\t\t\tdataLabelWidth,\n\t\t\tlabelPos,\n\t\t\tlabelHeight,\n\t\t\thalves = [// divide the points into right and left halves for anti collision\n\t\t\t\t[], // right\n\t\t\t\t[]  // left\n\t\t\t],\n\t\t\tx,\n\t\t\ty,\n\t\t\tvisibility,\n\t\t\trankArr,\n\t\t\ti,\n\t\t\tj,\n\t\t\toverflow = [0, 0, 0, 0], // top, right, bottom, left\n\t\t\tsort = function (a, b) {\n\t\t\t\treturn b.y - a.y;\n\t\t\t};\n\n\t\t// get out if not enabled\n\t\tif (!series.visible || (!options.enabled && !series._hasPointLabels)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// run parent method\n\t\tSeries.prototype.drawDataLabels.apply(series);\n\n\t\t// arrange points for detection collision\n\t\teach(data, function (point) {\n\t\t\tif (point.dataLabel) { // it may have been cancelled in the base method (#407)\n\t\t\t\thalves[point.half].push(point);\n\t\t\t}\n\t\t});\n\n\t\t// assume equal label heights\n\t\ti = 0;\n\t\twhile (!labelHeight && data[i]) { // #1569\n\t\t\tlabelHeight = data[i] && data[i].dataLabel && (data[i].dataLabel.getBBox().height || 21); // 21 is for #968\n\t\t\ti++;\n\t\t}\n\n\t\t/* Loop over the points in each half, starting from the top and bottom\n\t\t * of the pie to detect overlapping labels.\n\t\t */\n\t\ti = 2;\n\t\twhile (i--) {\n\n\t\t\tvar slots = [],\n\t\t\t\tslotsLength,\n\t\t\t\tusedSlots = [],\n\t\t\t\tpoints = halves[i],\n\t\t\t\tpos,\n\t\t\t\tlength = points.length,\n\t\t\t\tslotIndex;\n\t\t\t\t\n\t\t\t// Sort by angle\n\t\t\tseries.sortByAngle(points, i - 0.5);\n\n\t\t\t// Only do anti-collision when we are outside the pie and have connectors (#856)\n\t\t\tif (distanceOption > 0) {\n\t\t\t\t\n\t\t\t\t// build the slots\n\t\t\t\tfor (pos = centerY - radius - distanceOption; pos <= centerY + radius + distanceOption; pos += labelHeight) {\n\t\t\t\t\tslots.push(pos);\n\t\t\t\t\t\n\t\t\t\t\t// visualize the slot\n\t\t\t\t\t/*\n\t\t\t\t\tvar slotX = series.getX(pos, i) + chart.plotLeft - (i ? 100 : 0),\n\t\t\t\t\t\tslotY = pos + chart.plotTop;\n\t\t\t\t\tif (!isNaN(slotX)) {\n\t\t\t\t\t\tchart.renderer.rect(slotX, slotY - 7, 100, labelHeight, 1)\n\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\t\t\t\tstroke: 'silver'\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.add();\n\t\t\t\t\t\tchart.renderer.text('Slot '+ (slots.length - 1), slotX, slotY + 4)\n\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\tfill: 'silver'\n\t\t\t\t\t\t\t}).add();\n\t\t\t\t\t}\n\t\t\t\t\t*/\n\t\t\t\t}\n\t\t\t\tslotsLength = slots.length;\n\t\n\t\t\t\t// if there are more values than available slots, remove lowest values\n\t\t\t\tif (length > slotsLength) {\n\t\t\t\t\t// create an array for sorting and ranking the points within each quarter\n\t\t\t\t\trankArr = [].concat(points);\n\t\t\t\t\trankArr.sort(sort);\n\t\t\t\t\tj = length;\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\trankArr[j].rank = j;\n\t\t\t\t\t}\n\t\t\t\t\tj = length;\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\tif (points[j].rank >= slotsLength) {\n\t\t\t\t\t\t\tpoints.splice(j, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlength = points.length;\n\t\t\t\t}\n\t\n\t\t\t\t// The label goes to the nearest open slot, but not closer to the edge than\n\t\t\t\t// the label's index.\n\t\t\t\tfor (j = 0; j < length; j++) {\n\t\n\t\t\t\t\tpoint = points[j];\n\t\t\t\t\tlabelPos = point.labelPos;\n\t\n\t\t\t\t\tvar closest = 9999,\n\t\t\t\t\t\tdistance,\n\t\t\t\t\t\tslotI;\n\t\n\t\t\t\t\t// find the closest slot index\n\t\t\t\t\tfor (slotI = 0; slotI < slotsLength; slotI++) {\n\t\t\t\t\t\tdistance = mathAbs(slots[slotI] - labelPos[1]);\n\t\t\t\t\t\tif (distance < closest) {\n\t\t\t\t\t\t\tclosest = distance;\n\t\t\t\t\t\t\tslotIndex = slotI;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// if that slot index is closer to the edges of the slots, move it\n\t\t\t\t\t// to the closest appropriate slot\n\t\t\t\t\tif (slotIndex < j && slots[j] !== null) { // cluster at the top\n\t\t\t\t\t\tslotIndex = j;\n\t\t\t\t\t} else if (slotsLength  < length - j + slotIndex && slots[j] !== null) { // cluster at the bottom\n\t\t\t\t\t\tslotIndex = slotsLength - length + j;\n\t\t\t\t\t\twhile (slots[slotIndex] === null) { // make sure it is not taken\n\t\t\t\t\t\t\tslotIndex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Slot is taken, find next free slot below. In the next run, the next slice will find the\n\t\t\t\t\t\t// slot above these, because it is the closest one\n\t\t\t\t\t\twhile (slots[slotIndex] === null) { // make sure it is not taken\n\t\t\t\t\t\t\tslotIndex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tusedSlots.push({ i: slotIndex, y: slots[slotIndex] });\n\t\t\t\t\tslots[slotIndex] = null; // mark as taken\n\t\t\t\t}\n\t\t\t\t// sort them in order to fill in from the top\n\t\t\t\tusedSlots.sort(sort);\n\t\t\t}\n\n\t\t\t// now the used slots are sorted, fill them up sequentially\n\t\t\tfor (j = 0; j < length; j++) {\n\t\t\t\t\n\t\t\t\tvar slot, naturalY;\n\n\t\t\t\tpoint = points[j];\n\t\t\t\tlabelPos = point.labelPos;\n\t\t\t\tdataLabel = point.dataLabel;\n\t\t\t\tvisibility = point.visible === false ? HIDDEN : VISIBLE;\n\t\t\t\tnaturalY = labelPos[1];\n\t\t\t\t\n\t\t\t\tif (distanceOption > 0) {\n\t\t\t\t\tslot = usedSlots.pop();\n\t\t\t\t\tslotIndex = slot.i;\n\n\t\t\t\t\t// if the slot next to currrent slot is free, the y value is allowed\n\t\t\t\t\t// to fall back to the natural position\n\t\t\t\t\ty = slot.y;\n\t\t\t\t\tif ((naturalY > y && slots[slotIndex + 1] !== null) ||\n\t\t\t\t\t\t\t(naturalY < y &&  slots[slotIndex - 1] !== null)) {\n\t\t\t\t\t\ty = naturalY;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\ty = naturalY;\n\t\t\t\t}\n\n\t\t\t\t// get the x - use the natural x position for first and last slot, to prevent the top\n\t\t\t\t// and botton slice connectors from touching each other on either side\n\t\t\t\tx = options.justify ? \n\t\t\t\t\tseriesCenter[0] + (i ? -1 : 1) * (radius + distanceOption) :\n\t\t\t\t\tseries.getX(slotIndex === 0 || slotIndex === slots.length - 1 ? naturalY : y, i);\n\t\t\t\t\n\t\t\t\n\t\t\t\t// Record the placement and visibility\n\t\t\t\tdataLabel._attr = {\n\t\t\t\t\tvisibility: visibility,\n\t\t\t\t\talign: labelPos[6]\n\t\t\t\t};\n\t\t\t\tdataLabel._pos = {\n\t\t\t\t\tx: x + options.x +\n\t\t\t\t\t\t({ left: connectorPadding, right: -connectorPadding }[labelPos[6]] || 0),\n\t\t\t\t\ty: y + options.y - 10 // 10 is for the baseline (label vs text)\n\t\t\t\t};\n\t\t\t\tdataLabel.connX = x;\n\t\t\t\tdataLabel.connY = y;\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t// Detect overflowing data labels\n\t\t\t\tif (this.options.size === null) {\n\t\t\t\t\tdataLabelWidth = dataLabel.width;\n\t\t\t\t\t// Overflow left\n\t\t\t\t\tif (x - dataLabelWidth < connectorPadding) {\n\t\t\t\t\t\toverflow[3] = mathMax(mathRound(dataLabelWidth - x + connectorPadding), overflow[3]);\n\t\t\t\t\t\t\n\t\t\t\t\t// Overflow right\n\t\t\t\t\t} else if (x + dataLabelWidth > plotWidth - connectorPadding) {\n\t\t\t\t\t\toverflow[1] = mathMax(mathRound(x + dataLabelWidth - plotWidth + connectorPadding), overflow[1]);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Overflow top\n\t\t\t\t\tif (y - labelHeight / 2 < 0) {\n\t\t\t\t\t\toverflow[0] = mathMax(mathRound(-y + labelHeight / 2), overflow[0]);\n\t\t\t\t\t\t\n\t\t\t\t\t// Overflow left\n\t\t\t\t\t} else if (y + labelHeight / 2 > plotHeight) {\n\t\t\t\t\t\toverflow[2] = mathMax(mathRound(y + labelHeight / 2 - plotHeight), overflow[2]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} // for each point\n\t\t} // for each half\n\t\t\n\t\t// Do not apply the final placement and draw the connectors until we have verified\n\t\t// that labels are not spilling over. \n\t\tif (arrayMax(overflow) === 0 || this.verifyDataLabelOverflow(overflow)) {\n\t\t\t\n\t\t\t// Place the labels in the final position\n\t\t\tthis.placeDataLabels();\n\t\t\t\n\t\t\t// Draw the connectors\n\t\t\tif (outside && connectorWidth) {\n\t\t\t\teach(this.points, function (point) {\n\t\t\t\t\tconnector = point.connector;\n\t\t\t\t\tlabelPos = point.labelPos;\n\t\t\t\t\tdataLabel = point.dataLabel;\n\t\t\t\t\t\n\t\t\t\t\tif (dataLabel && dataLabel._pos) {\n\t\t\t\t\t\tvisibility = dataLabel._attr.visibility;\n\t\t\t\t\t\tx = dataLabel.connX;\n\t\t\t\t\t\ty = dataLabel.connY;\n\t\t\t\t\t\tconnectorPath = softConnector ? [\n\t\t\t\t\t\t\tM,\n\t\t\t\t\t\t\tx + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label\n\t\t\t\t\t\t\t'C',\n\t\t\t\t\t\t\tx, y, // first break, next to the label\n\t\t\t\t\t\t\t2 * labelPos[2] - labelPos[4], 2 * labelPos[3] - labelPos[5],\n\t\t\t\t\t\t\tlabelPos[2], labelPos[3], // second break\n\t\t\t\t\t\t\tL,\n\t\t\t\t\t\t\tlabelPos[4], labelPos[5] // base\n\t\t\t\t\t\t] : [\n\t\t\t\t\t\t\tM,\n\t\t\t\t\t\t\tx + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label\n\t\t\t\t\t\t\tL,\n\t\t\t\t\t\t\tlabelPos[2], labelPos[3], // second break\n\t\t\t\t\t\t\tL,\n\t\t\t\t\t\t\tlabelPos[4], labelPos[5] // base\n\t\t\t\t\t\t];\n\t\t\n\t\t\t\t\t\tif (connector) {\n\t\t\t\t\t\t\tconnector.animate({ d: connectorPath });\n\t\t\t\t\t\t\tconnector.attr('visibility', visibility);\n\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpoint.connector = connector = series.chart.renderer.path(connectorPath).attr({\n\t\t\t\t\t\t\t\t'stroke-width': connectorWidth,\n\t\t\t\t\t\t\t\tstroke: options.connectorColor || point.color || '#606060',\n\t\t\t\t\t\t\t\tvisibility: visibility\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.add(series.group);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (connector) {\n\t\t\t\t\t\tpoint.connector = connector.destroy();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\t\t\t\n\t\t}\n\t},\n\t\n\t/**\n\t * Verify whether the data labels are allowed to draw, or we should run more translation and data\n\t * label positioning to keep them inside the plot area. Returns true when data labels are ready \n\t * to draw.\n\t */\n\tverifyDataLabelOverflow: function (overflow) {\n\t\t\n\t\tvar center = this.center,\n\t\t\toptions = this.options,\n\t\t\tcenterOption = options.center,\n\t\t\tminSize = options.minSize || 80,\n\t\t\tnewSize = minSize,\n\t\t\tret;\n\t\t\t\n\t\t// Handle horizontal size and center\n\t\tif (centerOption[0] !== null) { // Fixed center\n\t\t\tnewSize = mathMax(center[2] - mathMax(overflow[1], overflow[3]), minSize);\n\t\t\t\n\t\t} else { // Auto center\n\t\t\tnewSize = mathMax(\n\t\t\t\tcenter[2] - overflow[1] - overflow[3], // horizontal overflow\t\t\t\t\t\n\t\t\t\tminSize\n\t\t\t);\n\t\t\tcenter[0] += (overflow[3] - overflow[1]) / 2; // horizontal center\n\t\t}\n\t\t\n\t\t// Handle vertical size and center\n\t\tif (centerOption[1] !== null) { // Fixed center\n\t\t\tnewSize = mathMax(mathMin(newSize, center[2] - mathMax(overflow[0], overflow[2])), minSize);\n\t\t\t\n\t\t} else { // Auto center\n\t\t\tnewSize = mathMax(\n\t\t\t\tmathMin(\n\t\t\t\t\tnewSize,\t\t\n\t\t\t\t\tcenter[2] - overflow[0] - overflow[2] // vertical overflow\n\t\t\t\t),\n\t\t\t\tminSize\n\t\t\t);\n\t\t\tcenter[1] += (overflow[0] - overflow[2]) / 2; // vertical center\n\t\t}\n\t\t\n\t\t// If the size must be decreased, we need to run translate and drawDataLabels again\n\t\tif (newSize < center[2]) {\n\t\t\tcenter[2] = newSize;\n\t\t\tthis.translate(center);\n\t\t\teach(this.points, function (point) {\n\t\t\t\tif (point.dataLabel) {\n\t\t\t\t\tpoint.dataLabel._pos = null; // reset\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.drawDataLabels();\n\t\t\t\n\t\t// Else, return true to indicate that the pie and its labels is within the plot area\n\t\t} else {\n\t\t\tret = true;\n\t\t}\n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Perform the final placement of the data labels after we have verified that they\n\t * fall within the plot area.\n\t */\n\tplaceDataLabels: function () {\n\t\teach(this.points, function (point) {\n\t\t\tvar dataLabel = point.dataLabel,\n\t\t\t\t_pos;\n\t\t\t\n\t\t\tif (dataLabel) {\n\t\t\t\t_pos = dataLabel._pos;\n\t\t\t\tif (_pos) {\n\t\t\t\t\tdataLabel.attr(dataLabel._attr);\t\t\t\n\t\t\t\t\tdataLabel[dataLabel.moved ? 'animate' : 'attr'](_pos);\n\t\t\t\t\tdataLabel.moved = true;\n\t\t\t\t} else if (dataLabel) {\n\t\t\t\t\tdataLabel.attr({ y: -999 });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\t\n\talignDataLabel: noop,\n\n\t/**\n\t * Draw point specific tracker objects. Inherit directly from column series.\n\t */\n\tdrawTracker: ColumnSeries.prototype.drawTracker,\n\n\t/**\n\t * Use a simple symbol from column prototype\n\t */\n\tdrawLegendSymbol: AreaSeries.prototype.drawLegendSymbol,\n\n\t/**\n\t * Pies don't have point marker symbols\n\t */\n\tgetSymbol: noop\n\n};\nPieSeries = extendClass(Series, PieSeries);\nseriesTypes.pie = PieSeries;\n\n\n// global variables\nextend(Highcharts, {\n\t\n\t// Constructors\n\tAxis: Axis,\n\tChart: Chart,\n\tColor: Color,\n\tLegend: Legend,\n\tPointer: Pointer,\n\tPoint: Point,\n\tTick: Tick,\n\tTooltip: Tooltip,\n\tRenderer: Renderer,\n\tSeries: Series,\n\tSVGElement: SVGElement,\n\tSVGRenderer: SVGRenderer,\n\t\n\t// Various\n\tarrayMin: arrayMin,\n\tarrayMax: arrayMax,\n\tcharts: charts,\n\tdateFormat: dateFormat,\n\tformat: format,\n\tpathAnim: pathAnim,\n\tgetOptions: getOptions,\n\thasBidiBug: hasBidiBug,\n\tisTouchDevice: isTouchDevice,\n\tnumberFormat: numberFormat,\n\tseriesTypes: seriesTypes,\n\tsetOptions: setOptions,\n\taddEvent: addEvent,\n\tremoveEvent: removeEvent,\n\tcreateElement: createElement,\n\tdiscardElement: discardElement,\n\tcss: css,\n\teach: each,\n\textend: extend,\n\tmap: map,\n\tmerge: merge,\n\tpick: pick,\n\tsplat: splat,\n\textendClass: extendClass,\n\tpInt: pInt,\n\twrap: wrap,\n\tsvg: hasSVG,\n\tcanvas: useCanVG,\n\tvml: !hasSVG && !useCanVG,\n\tproduct: PRODUCT,\n\tversion: VERSION\n});\n}());\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/annotations.js",
    "content": "(function(i,C){function m(a){return typeof a===\"number\"}function n(a){return a!==D&&a!==null}var D,p,r,s=i.Chart,t=i.extend,z=i.each;r=[\"path\",\"rect\",\"circle\"];p={top:0,left:0,center:0.5,middle:0.5,bottom:1,right:1};var u=C.inArray,A=i.merge,B=function(){this.init.apply(this,arguments)};B.prototype={init:function(a,d){var c=d.shape&&d.shape.type;this.chart=a;var b,f;f={xAxis:0,yAxis:0,title:{style:{},text:\"\",x:0,y:0},shape:{params:{stroke:\"#000000\",fill:\"transparent\",strokeWidth:2}}};b={circle:{params:{x:0,\ny:0}}};if(b[c])f.shape=A(f.shape,b[c]);this.options=A({},f,d)},render:function(a){var d=this.chart,c=this.chart.renderer,b=this.group,f=this.title,e=this.shape,h=this.options,i=h.title,l=h.shape;if(!b)b=this.group=c.g();if(!e&&l&&u(l.type,r)!==-1)e=this.shape=c[h.shape.type](l.params),e.add(b);if(!f&&i)f=this.title=c.label(i),f.add(b);b.add(d.annotations.group);this.linkObjects();a!==!1&&this.redraw()},redraw:function(){var a=this.options,d=this.chart,c=this.group,b=this.title,f=this.shape,e=this.linkedObject,\nh=d.xAxis[a.xAxis],v=d.yAxis[a.yAxis],l=a.width,w=a.height,x=p[a.anchorY],y=p[a.anchorX],j,o,g,q;if(e)j=e instanceof i.Point?\"point\":e instanceof i.Series?\"series\":null,j===\"point\"?(a.xValue=e.x,a.yValue=e.y,o=e.series):j===\"series\"&&(o=e),c.visibility!==o.group.visibility&&c.attr({visibility:o.group.visibility});e=n(a.xValue)?h.toPixels(a.xValue+h.minPointOffset)-h.minPixelPadding:a.x;j=n(a.yValue)?v.toPixels(a.yValue):a.y;if(!isNaN(e)&&!isNaN(j)&&m(e)&&m(j)){b&&(b.attr(a.title),b.css(a.title.style));\nif(f){b=t({},a.shape.params);if(a.units===\"values\"){for(g in b)u(g,[\"width\",\"x\"])>-1?b[g]=h.translate(b[g]):u(g,[\"height\",\"y\"])>-1&&(b[g]=v.translate(b[g]));b.width&&(b.width-=h.toPixels(0)-h.left);b.x&&(b.x+=h.minPixelPadding);if(a.shape.type===\"path\"){g=b.d;o=e;for(var r=j,s=g.length,k=0;k<s;)typeof g[k]===\"number\"&&typeof g[k+1]===\"number\"?(g[k]=h.toPixels(g[k])-o,g[k+1]=v.toPixels(g[k+1])-r,k+=2):k+=1}}a.shape.type===\"circle\"&&(b.x+=b.r,b.y+=b.r);f.attr(b)}c.bBox=null;if(!m(l))q=c.getBBox(),l=\nq.width;if(!m(w))q||(q=c.getBBox()),w=q.height;if(!m(y))y=p.center;if(!m(x))x=p.center;e-=l*y;j-=w*x;d.animation&&n(c.translateX)&&n(c.translateY)?c.animate({translateX:e,translateY:j}):c.translate(e,j)}},destroy:function(){var a=this,d=this.chart.annotations.allItems,c=d.indexOf(a);c>-1&&d.splice(c,1);z([\"title\",\"shape\",\"group\"],function(b){a[b]&&(a[b].destroy(),a[b]=null)});a.group=a.title=a.shape=a.chart=a.options=null},update:function(a,d){t(this.options,a);this.linkObjects();this.render(d)},\nlinkObjects:function(){var a=this.chart,d=this.linkedObject,c=d&&(d.id||d.options.id),b=this.options.linkedTo;if(n(b)){if(!n(d)||b!==c)this.linkedObject=a.get(b)}else this.linkedObject=null}};t(s.prototype,{annotations:{add:function(a,d){var c=this.allItems,b=this.chart,f,e;Object.prototype.toString.call(a)===\"[object Array]\"||(a=[a]);for(e=a.length;e--;)f=new B(b,a[e]),c.push(f),f.render(d)},redraw:function(){z(this.allItems,function(a){a.redraw()})}}});s.prototype.callbacks.push(function(a){var d=\na.options.annotations,c;c=a.renderer.g(\"annotations\");c.attr({zIndex:7});c.add();a.annotations.allItems=[];a.annotations.chart=a;a.annotations.group=c;Object.prototype.toString.call(d)===\"[object Array]\"&&d.length>0&&a.annotations.add(a.options.annotations);i.addEvent(a,\"redraw\",function(){a.annotations.redraw()})})})(Highcharts,HighchartsAdapter);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/annotations.src.js",
    "content": "(function (Highcharts, HighchartsAdapter) {\n\nvar UNDEFINED,\n\tALIGN_FACTOR,\n\tALLOWED_SHAPES,\n\tChart = Highcharts.Chart,\n\textend = Highcharts.extend,\n\teach = Highcharts.each;\n\nALLOWED_SHAPES = [\"path\", \"rect\", \"circle\"];\n\nALIGN_FACTOR = {\n\ttop: 0,\n\tleft: 0,\n\tcenter: 0.5,\n\tmiddle: 0.5,\n\tbottom: 1,\n\tright: 1\n};\n\n\n// Highcharts helper methods\nvar inArray = HighchartsAdapter.inArray,\n\tmerge = Highcharts.merge;\n\nfunction defaultOptions(shapeType) {\n\tvar shapeOptions,\n\t\toptions;\n\n\toptions = {\n\t\txAxis: 0,\n\t\tyAxis: 0,\n\t\ttitle: {\n\t\t\tstyle: {},\n\t\t\ttext: \"\",\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\tshape: {\n\t\t\tparams: {\n\t\t\t\tstroke: \"#000000\",\n\t\t\t\tfill: \"transparent\",\n\t\t\t\tstrokeWidth: 2\n\t\t\t}\n\t\t}\n\t};\n\n\tshapeOptions = {\n\t\tcircle: {\n\t\t\tparams: {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0\n\t\t\t}\n\t\t}\n\t};\n\n\tif (shapeOptions[shapeType]) {\n\t\toptions.shape = merge(options.shape, shapeOptions[shapeType]);\n\t}\n\n\treturn options;\n}\n\nfunction isArray(obj) {\n\treturn Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction isNumber(n) {\n\treturn typeof n === 'number';\n}\n\nfunction defined(obj) {\n\treturn obj !== UNDEFINED && obj !== null;\n}\n\nfunction translatePath(d, xAxis, yAxis, xOffset, yOffset) {\n\tvar len = d.length,\n\t\ti = 0;\n\n\twhile (i < len) {\n\t\tif (typeof d[i] === 'number' && typeof d[i + 1] === 'number') {\n\t\t\td[i] = xAxis.toPixels(d[i]) - xOffset;\n\t\t\td[i + 1] = yAxis.toPixels(d[i + 1]) - yOffset;\n\t\t\ti += 2;\n\t\t} else {\n\t\t\ti += 1;\n\t\t}\n\t}\n\n\treturn d;\n}\n\n\n// Define annotation prototype\nvar Annotation = function () {\n\tthis.init.apply(this, arguments);\n};\nAnnotation.prototype = {\n\t/* \n\t * Initialize the annotation\n\t */\n\tinit: function (chart, options) {\n\t\tvar shapeType = options.shape && options.shape.type;\n\n\t\tthis.chart = chart;\n\t\tthis.options = merge({}, defaultOptions(shapeType), options);\n\t},\n\n\t/*\n\t * Render the annotation\n\t */\n\trender: function (redraw) {\n\t\tvar annotation = this,\n\t\t\tchart = this.chart,\n\t\t\trenderer = annotation.chart.renderer,\n\t\t\tgroup = annotation.group,\n\t\t\ttitle = annotation.title,\n\t\t\tshape = annotation.shape,\n\t\t\toptions = annotation.options,\n\t\t\ttitleOptions = options.title,\n\t\t\tshapeOptions = options.shape;\n\n\t\tif (!group) {\n\t\t\tgroup = annotation.group = renderer.g();\n\t\t}\n\n\n\t\tif (!shape && shapeOptions && inArray(shapeOptions.type, ALLOWED_SHAPES) !== -1) {\n\t\t\tshape = annotation.shape = renderer[options.shape.type](shapeOptions.params);\n\t\t\tshape.add(group);\n\t\t}\n\n\t\tif (!title && titleOptions) {\n\t\t\ttitle = annotation.title = renderer.label(titleOptions);\n\t\t\ttitle.add(group);\n\t\t}\n\n\t\tgroup.add(chart.annotations.group);\n\n\t\t// link annotations to point or series\n\t\tannotation.linkObjects();\n\n\t\tif (redraw !== false) {\n\t\t\tannotation.redraw();\n\t\t}\n\t},\n\n\t/*\n\t * Redraw the annotation title or shape after options update\n\t */\n\tredraw: function () {\n\t\tvar options = this.options,\n\t\t\tchart = this.chart,\n\t\t\tgroup = this.group,\n\t\t\ttitle = this.title,\n\t\t\tshape = this.shape,\n\t\t\tlinkedTo = this.linkedObject,\n\t\t\txAxis = chart.xAxis[options.xAxis],\n\t\t\tyAxis = chart.yAxis[options.yAxis],\n\t\t\twidth = options.width,\n\t\t\theight = options.height,\n\t\t\tanchorY = ALIGN_FACTOR[options.anchorY],\n\t\t\tanchorX = ALIGN_FACTOR[options.anchorX],\n\t\t\tresetBBox = false,\n\t\t\tshapeParams,\n\t\t\tlinkType,\n\t\t\tseries,\n\t\t\tparam,\n\t\t\tbbox,\n\t\t\tx,\n\t\t\ty;\n\n\t\tif (linkedTo) {\n\t\t\tlinkType = (linkedTo instanceof Highcharts.Point) ? 'point' :\n\t\t\t\t\t\t(linkedTo instanceof Highcharts.Series) ? 'series' : null;\n\n\t\t\tif (linkType === 'point') {\n\t\t\t\toptions.xValue = linkedTo.x;\n\t\t\t\toptions.yValue = linkedTo.y;\n\t\t\t\tseries = linkedTo.series;\n\t\t\t} else if (linkType === 'series') {\n\t\t\t\tseries = linkedTo;\n\t\t\t}\n\n\t\t\tif (group.visibility !== series.group.visibility) {\n\t\t\t\tgroup.attr({\n\t\t\t\t\tvisibility: series.group.visibility\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\n\t\t// Based on given options find annotation pixel position\n\t\tx = (defined(options.xValue) ? xAxis.toPixels(options.xValue + xAxis.minPointOffset) - xAxis.minPixelPadding : options.x);\n\t\ty = defined(options.yValue) ? yAxis.toPixels(options.yValue) : options.y;\n\n\t\tif (isNaN(x) || isNaN(y) || !isNumber(x) || !isNumber(y)) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tif (title) {\n\t\t\ttitle.attr(options.title);\n\t\t\ttitle.css(options.title.style);\n\t\t\tresetBBox = true;\n\t\t}\n\n\t\tif (shape) {\n\t\t\tshapeParams = extend({}, options.shape.params);\n\n\t\t\tif (options.units === 'values') {\n\t\t\t\tfor (param in shapeParams) {\n\t\t\t\t\tif (inArray(param, ['width', 'x']) > -1) {\n\t\t\t\t\t\tshapeParams[param] = xAxis.translate(shapeParams[param]);\n\t\t\t\t\t} else if (inArray(param, ['height', 'y']) > -1) {\n\t\t\t\t\t\tshapeParams[param] = yAxis.translate(shapeParams[param]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (shapeParams.width) {\n\t\t\t\t\tshapeParams.width -= xAxis.toPixels(0) - xAxis.left;\n\t\t\t\t}\n\n\t\t\t\tif (shapeParams.x) {\n\t\t\t\t\tshapeParams.x += xAxis.minPixelPadding;\n\t\t\t\t}\n\n\t\t\t\tif (options.shape.type === 'path') {\n\t\t\t\t\ttranslatePath(shapeParams.d, xAxis, yAxis, x, y);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// move the center of the circle to shape x/y\n\t\t\tif (options.shape.type === 'circle') {\n\t\t\t\tshapeParams.x += shapeParams.r;\n\t\t\t\tshapeParams.y += shapeParams.r;\n\t\t\t}\n\n\t\t\tresetBBox = true;\n\t\t\tshape.attr(shapeParams);\n\t\t}\n\n\t\tgroup.bBox = null;\n\n\t\t// If annotation width or height is not defined in options use bounding box size\n\t\tif (!isNumber(width)) {\n\t\t\tbbox = group.getBBox();\n\t\t\twidth = bbox.width;\n\t\t}\n\n\t\tif (!isNumber(height)) {\n\t\t\t// get bbox only if it wasn't set before\n\t\t\tif (!bbox) {\n\t\t\t\tbbox = group.getBBox();\n\t\t\t}\n\n\t\t\theight = bbox.height;\n\t\t}\n\n\t\t// Calculate anchor point\n\t\tif (!isNumber(anchorX)) {\n\t\t\tanchorX = ALIGN_FACTOR.center;\n\t\t}\n\n\t\tif (!isNumber(anchorY)) {\n\t\t\tanchorY = ALIGN_FACTOR.center;\n\t\t}\n\n\t\t// Translate group according to its dimension and anchor point\n\t\tx = x - width * anchorX;\n\t\ty = y - height * anchorY;\n\n\t\tif (chart.animation && defined(group.translateX) && defined(group.translateY)) {\n\t\t\tgroup.animate({\n\t\t\t\ttranslateX: x,\n\t\t\t\ttranslateY: y\n\t\t\t});\n\t\t} else {\n\t\t\tgroup.translate(x, y);\n\t\t}\n\t},\n\n\t/*\n\t * Destroy the annotation\n\t */\n\tdestroy: function () {\n\t\tvar annotation = this,\n\t\t\tchart = this.chart,\n\t\t\tallItems = chart.annotations.allItems,\n\t\t\tindex = allItems.indexOf(annotation);\n\n\t\tif (index > -1) {\n\t\t\tallItems.splice(index, 1);\n\t\t}\n\n\t\teach(['title', 'shape', 'group'], function (element) {\n\t\t\tif (annotation[element]) {\n\t\t\t\tannotation[element].destroy();\n\t\t\t\tannotation[element] = null;\n\t\t\t}\n\t\t});\n\n\t\tannotation.group = annotation.title = annotation.shape = annotation.chart = annotation.options = null;\n\t},\n\n\t/*\n\t * Update the annotation with a given options\n\t */\n\tupdate: function (options, redraw) {\n\t\textend(this.options, options);\n\n\t\t// update link to point or series\n\t\tthis.linkObjects();\n\n\t\tthis.render(redraw);\n\t},\n\n\tlinkObjects: function () {\n\t\tvar annotation = this,\n\t\t\tchart = annotation.chart,\n\t\t\tlinkedTo = annotation.linkedObject,\n\t\t\tlinkedId = linkedTo && (linkedTo.id || linkedTo.options.id),\n\t\t\toptions = annotation.options,\n\t\t\tid = options.linkedTo;\n\n\t\tif (!defined(id)) {\n\t\t\tannotation.linkedObject = null;\n\t\t} else if (!defined(linkedTo) || id !== linkedId) {\n\t\t\tannotation.linkedObject = chart.get(id);\n\t\t}\n\t}\n};\n\n\n// Add annotations methods to chart prototype\nextend(Chart.prototype, {\n\tannotations: {\n\t\t/*\n\t\t * Unified method for adding annotations to the chart\n\t\t */\n\t\tadd: function (options, redraw) {\n\t\t\tvar annotations = this.allItems,\n\t\t\t\tchart = this.chart,\n\t\t\t\titem,\n\t\t\t\tlen;\n\n\t\t\tif (!isArray(options)) {\n\t\t\t\toptions = [options];\n\t\t\t}\n\n\t\t\tlen = options.length;\n\n\t\t\twhile (len--) {\n\t\t\t\titem = new Annotation(chart, options[len]);\n\t\t\t\tannotations.push(item);\n\t\t\t\titem.render(redraw);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Redraw all annotations, method used in chart events\n\t\t */\n\t\tredraw: function () {\n\t\t\teach(this.allItems, function (annotation) {\n\t\t\t\tannotation.redraw();\n\t\t\t});\n\t\t}\n\t}\n});\n\n\n// Initialize on chart load\nChart.prototype.callbacks.push(function (chart) {\n\tvar options = chart.options.annotations,\n\t\tgroup;\n\n\tgroup = chart.renderer.g(\"annotations\");\n\tgroup.attr({\n\t\tzIndex: 7\n\t});\n\tgroup.add();\n\n\t// initialize empty array for annotations\n\tchart.annotations.allItems = [];\n\n\t// link chart object to annotations\n\tchart.annotations.chart = chart;\n\n\t// link annotations group element to the chart\n\tchart.annotations.group = group;\n\n\tif (isArray(options) && options.length > 0) {\n\t\tchart.annotations.add(chart.options.annotations);\n\t}\n\n\t// update annotations after chart redraw\n\tHighcharts.addEvent(chart, 'redraw', function () {\n\t\tchart.annotations.redraw();\n\t});\n});\n}(Highcharts, HighchartsAdapter));\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/canvas-tools.js",
    "content": "/*\n A class to parse color values\n @author Stoyan Stefanov <sstoo@gmail.com>\n @link   http://www.phpied.com/rgb-color-parser-in-javascript/\n Use it if you like it\n\n canvg.js - Javascript SVG parser and renderer on Canvas\n MIT Licensed \n Gabe Lerner (gabelerner@gmail.com)\n http://code.google.com/p/canvg/\n\n Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/\n\n Highcharts JS v3.0.6 (2013-10-04)\n CanVGRenderer Extension module\n\n (c) 2011-2012 Torstein Hønsi, Erik Olsson\n\n License: www.highcharts.com/license\n*/\nfunction RGBColor(m){this.ok=!1;m.charAt(0)==\"#\"&&(m=m.substr(1,6));var m=m.replace(/ /g,\"\"),m=m.toLowerCase(),a={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",\ndarkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",\ngainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",\nlightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",\noldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",\nslategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"},c;for(c in a)m==c&&(m=a[c]);var d=[{re:/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(b){return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]}},{re:/^(\\w{2})(\\w{2})(\\w{2})$/,\nexample:[\"#00ff00\",\"336699\"],process:function(b){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}},{re:/^(\\w{1})(\\w{1})(\\w{1})$/,example:[\"#fb0\",\"f0f\"],process:function(b){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}}];for(c=0;c<d.length;c++){var b=d[c].process,k=d[c].re.exec(m);if(k)channels=b(k),this.r=channels[0],this.g=channels[1],this.b=channels[2],this.ok=!0}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r;this.g=this.g<0||isNaN(this.g)?0:\nthis.g>255?255:this.g;this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b;this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"};this.toHex=function(){var b=this.r.toString(16),a=this.g.toString(16),d=this.b.toString(16);b.length==1&&(b=\"0\"+b);a.length==1&&(a=\"0\"+a);d.length==1&&(d=\"0\"+d);return\"#\"+b+a+d};this.getHelpXML=function(){for(var b=[],k=0;k<d.length;k++)for(var c=d[k].example,j=0;j<c.length;j++)b[b.length]=c[j];for(var h in a)b[b.length]=h;c=document.createElement(\"ul\");\nc.setAttribute(\"id\",\"rgbcolor-examples\");for(k=0;k<b.length;k++)try{var l=document.createElement(\"li\"),o=new RGBColor(b[k]),n=document.createElement(\"div\");n.style.cssText=\"margin: 3px; border: 1px solid black; background:\"+o.toHex()+\"; color:\"+o.toHex();n.appendChild(document.createTextNode(\"test\"));var q=document.createTextNode(\" \"+b[k]+\" -> \"+o.toRGB()+\" -> \"+o.toHex());l.appendChild(n);l.appendChild(q);c.appendChild(l)}catch(p){}return c}}\nif(!window.console)window.console={},window.console.log=function(){},window.console.dir=function(){};if(!Array.prototype.indexOf)Array.prototype.indexOf=function(m){for(var a=0;a<this.length;a++)if(this[a]==m)return a;return-1};\n(function(){function m(){var a={FRAMERATE:30,MAX_VIRTUAL_PIXELS:3E4};a.init=function(c){a.Definitions={};a.Styles={};a.Animations=[];a.Images=[];a.ctx=c;a.ViewPort=new function(){this.viewPorts=[];this.Clear=function(){this.viewPorts=[]};this.SetCurrent=function(a,b){this.viewPorts.push({width:a,height:b})};this.RemoveCurrent=function(){this.viewPorts.pop()};this.Current=function(){return this.viewPorts[this.viewPorts.length-1]};this.width=function(){return this.Current().width};this.height=function(){return this.Current().height};\nthis.ComputeSize=function(a){return a!=null&&typeof a==\"number\"?a:a==\"x\"?this.width():a==\"y\"?this.height():Math.sqrt(Math.pow(this.width(),2)+Math.pow(this.height(),2))/Math.sqrt(2)}}};a.init();a.ImagesLoaded=function(){for(var c=0;c<a.Images.length;c++)if(!a.Images[c].loaded)return!1;return!0};a.trim=function(a){return a.replace(/^\\s+|\\s+$/g,\"\")};a.compressSpaces=function(a){return a.replace(/[\\s\\r\\t\\n]+/gm,\" \")};a.ajax=function(a){var d;return(d=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject(\"Microsoft.XMLHTTP\"))?\n(d.open(\"GET\",a,!1),d.send(null),d.responseText):null};a.parseXml=function(a){if(window.DOMParser)return(new DOMParser).parseFromString(a,\"text/xml\");else{var a=a.replace(/<!DOCTYPE svg[^>]*>/,\"\"),d=new ActiveXObject(\"Microsoft.XMLDOM\");d.async=\"false\";d.loadXML(a);return d}};a.Property=function(c,d){this.name=c;this.value=d;this.hasValue=function(){return this.value!=null&&this.value!==\"\"};this.numValue=function(){if(!this.hasValue())return 0;var b=parseFloat(this.value);(this.value+\"\").match(/%$/)&&\n(b/=100);return b};this.valueOrDefault=function(b){return this.hasValue()?this.value:b};this.numValueOrDefault=function(b){return this.hasValue()?this.numValue():b};var b=this;this.Color={addOpacity:function(d){var c=b.value;if(d!=null&&d!=\"\"){var f=new RGBColor(b.value);f.ok&&(c=\"rgba(\"+f.r+\", \"+f.g+\", \"+f.b+\", \"+d+\")\")}return new a.Property(b.name,c)}};this.Definition={getDefinition:function(){var d=b.value.replace(/^(url\\()?#([^\\)]+)\\)?$/,\"$2\");return a.Definitions[d]},isUrl:function(){return b.value.indexOf(\"url(\")==\n0},getFillStyle:function(b){var d=this.getDefinition();return d!=null&&d.createGradient?d.createGradient(a.ctx,b):d!=null&&d.createPattern?d.createPattern(a.ctx,b):null}};this.Length={DPI:function(){return 96},EM:function(b){var d=12,c=new a.Property(\"fontSize\",a.Font.Parse(a.ctx.font).fontSize);c.hasValue()&&(d=c.Length.toPixels(b));return d},toPixels:function(d){if(!b.hasValue())return 0;var c=b.value+\"\";return c.match(/em$/)?b.numValue()*this.EM(d):c.match(/ex$/)?b.numValue()*this.EM(d)/2:c.match(/px$/)?\nb.numValue():c.match(/pt$/)?b.numValue()*1.25:c.match(/pc$/)?b.numValue()*15:c.match(/cm$/)?b.numValue()*this.DPI(d)/2.54:c.match(/mm$/)?b.numValue()*this.DPI(d)/25.4:c.match(/in$/)?b.numValue()*this.DPI(d):c.match(/%$/)?b.numValue()*a.ViewPort.ComputeSize(d):b.numValue()}};this.Time={toMilliseconds:function(){if(!b.hasValue())return 0;var a=b.value+\"\";if(a.match(/s$/))return b.numValue()*1E3;a.match(/ms$/);return b.numValue()}};this.Angle={toRadians:function(){if(!b.hasValue())return 0;var a=b.value+\n\"\";return a.match(/deg$/)?b.numValue()*(Math.PI/180):a.match(/grad$/)?b.numValue()*(Math.PI/200):a.match(/rad$/)?b.numValue():b.numValue()*(Math.PI/180)}}};a.Font=new function(){this.Styles=[\"normal\",\"italic\",\"oblique\",\"inherit\"];this.Variants=[\"normal\",\"small-caps\",\"inherit\"];this.Weights=\"normal,bold,bolder,lighter,100,200,300,400,500,600,700,800,900,inherit\".split(\",\");this.CreateFont=function(d,b,c,e,f,g){g=g!=null?this.Parse(g):this.CreateFont(\"\",\"\",\"\",\"\",\"\",a.ctx.font);return{fontFamily:f||\ng.fontFamily,fontSize:e||g.fontSize,fontStyle:d||g.fontStyle,fontWeight:c||g.fontWeight,fontVariant:b||g.fontVariant,toString:function(){return[this.fontStyle,this.fontVariant,this.fontWeight,this.fontSize,this.fontFamily].join(\" \")}}};var c=this;this.Parse=function(d){for(var b={},d=a.trim(a.compressSpaces(d||\"\")).split(\" \"),k=!1,e=!1,f=!1,g=!1,j=\"\",h=0;h<d.length;h++)if(!e&&c.Styles.indexOf(d[h])!=-1){if(d[h]!=\"inherit\")b.fontStyle=d[h];e=!0}else if(!g&&c.Variants.indexOf(d[h])!=-1){if(d[h]!=\"inherit\")b.fontVariant=\nd[h];e=g=!0}else if(!f&&c.Weights.indexOf(d[h])!=-1){if(d[h]!=\"inherit\")b.fontWeight=d[h];e=g=f=!0}else if(k)d[h]!=\"inherit\"&&(j+=d[h]);else{if(d[h]!=\"inherit\")b.fontSize=d[h].split(\"/\")[0];e=g=f=k=!0}if(j!=\"\")b.fontFamily=j;return b}};a.ToNumberArray=function(c){for(var c=a.trim(a.compressSpaces((c||\"\").replace(/,/g,\" \"))).split(\" \"),d=0;d<c.length;d++)c[d]=parseFloat(c[d]);return c};a.Point=function(a,d){this.x=a;this.y=d;this.angleTo=function(b){return Math.atan2(b.y-this.y,b.x-this.x)};this.applyTransform=\nfunction(b){var a=this.x*b[1]+this.y*b[3]+b[5];this.x=this.x*b[0]+this.y*b[2]+b[4];this.y=a}};a.CreatePoint=function(c){c=a.ToNumberArray(c);return new a.Point(c[0],c[1])};a.CreatePath=function(c){for(var c=a.ToNumberArray(c),d=[],b=0;b<c.length;b+=2)d.push(new a.Point(c[b],c[b+1]));return d};a.BoundingBox=function(a,d,b,k){this.y2=this.x2=this.y1=this.x1=Number.NaN;this.x=function(){return this.x1};this.y=function(){return this.y1};this.width=function(){return this.x2-this.x1};this.height=function(){return this.y2-\nthis.y1};this.addPoint=function(b,a){if(b!=null){if(isNaN(this.x1)||isNaN(this.x2))this.x2=this.x1=b;if(b<this.x1)this.x1=b;if(b>this.x2)this.x2=b}if(a!=null){if(isNaN(this.y1)||isNaN(this.y2))this.y2=this.y1=a;if(a<this.y1)this.y1=a;if(a>this.y2)this.y2=a}};this.addX=function(b){this.addPoint(b,null)};this.addY=function(b){this.addPoint(null,b)};this.addBoundingBox=function(b){this.addPoint(b.x1,b.y1);this.addPoint(b.x2,b.y2)};this.addQuadraticCurve=function(b,a,d,c,k,l){d=b+2/3*(d-b);c=a+2/3*(c-\na);this.addBezierCurve(b,a,d,d+1/3*(k-b),c,c+1/3*(l-a),k,l)};this.addBezierCurve=function(b,a,d,c,k,l,o,n){var q=[b,a],p=[d,c],t=[k,l],m=[o,n];this.addPoint(q[0],q[1]);this.addPoint(m[0],m[1]);for(i=0;i<=1;i++)b=function(b){return Math.pow(1-b,3)*q[i]+3*Math.pow(1-b,2)*b*p[i]+3*(1-b)*Math.pow(b,2)*t[i]+Math.pow(b,3)*m[i]},a=6*q[i]-12*p[i]+6*t[i],d=-3*q[i]+9*p[i]-9*t[i]+3*m[i],c=3*p[i]-3*q[i],d==0?a!=0&&(a=-c/a,0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))):(c=Math.pow(a,2)-4*c*d,c<0||(k=\n(-a+Math.sqrt(c))/(2*d),0<k&&k<1&&(i==0&&this.addX(b(k)),i==1&&this.addY(b(k))),a=(-a-Math.sqrt(c))/(2*d),0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))))};this.isPointInBox=function(b,a){return this.x1<=b&&b<=this.x2&&this.y1<=a&&a<=this.y2};this.addPoint(a,d);this.addPoint(b,k)};a.Transform=function(c){var d=this;this.Type={};this.Type.translate=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.translate(this.p.x||0,this.p.y||0)};this.applyToPoint=function(b){b.applyTransform([1,\n0,0,1,this.p.x||0,this.p.y||0])}};this.Type.rotate=function(b){b=a.ToNumberArray(b);this.angle=new a.Property(\"angle\",b[0]);this.cx=b[1]||0;this.cy=b[2]||0;this.apply=function(b){b.translate(this.cx,this.cy);b.rotate(this.angle.Angle.toRadians());b.translate(-this.cx,-this.cy)};this.applyToPoint=function(b){var a=this.angle.Angle.toRadians();b.applyTransform([1,0,0,1,this.p.x||0,this.p.y||0]);b.applyTransform([Math.cos(a),Math.sin(a),-Math.sin(a),Math.cos(a),0,0]);b.applyTransform([1,0,0,1,-this.p.x||\n0,-this.p.y||0])}};this.Type.scale=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.scale(this.p.x||1,this.p.y||this.p.x||1)};this.applyToPoint=function(b){b.applyTransform([this.p.x||0,0,0,this.p.y||0,0,0])}};this.Type.matrix=function(b){this.m=a.ToNumberArray(b);this.apply=function(b){b.transform(this.m[0],this.m[1],this.m[2],this.m[3],this.m[4],this.m[5])};this.applyToPoint=function(b){b.applyTransform(this.m)}};this.Type.SkewBase=function(b){this.base=d.Type.matrix;this.base(b);this.angle=\nnew a.Property(\"angle\",b)};this.Type.SkewBase.prototype=new this.Type.matrix;this.Type.skewX=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,0,Math.tan(this.angle.Angle.toRadians()),1,0,0]};this.Type.skewX.prototype=new this.Type.SkewBase;this.Type.skewY=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,Math.tan(this.angle.Angle.toRadians()),0,1,0,0]};this.Type.skewY.prototype=new this.Type.SkewBase;this.transforms=[];this.apply=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].apply(b)};\nthis.applyToPoint=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].applyToPoint(b)};for(var c=a.trim(a.compressSpaces(c)).split(/\\s(?=[a-z])/),b=0;b<c.length;b++){var k=c[b].split(\"(\")[0],e=c[b].split(\"(\")[1].replace(\")\",\"\");this.transforms.push(new this.Type[k](e))}};a.AspectRatio=function(c,d,b,k,e,f,g,j,h,l){var d=a.compressSpaces(d),d=d.replace(/^defer\\s/,\"\"),o=d.split(\" \")[0]||\"xMidYMid\",d=d.split(\" \")[1]||\"meet\",n=b/k,q=e/f,p=Math.min(n,q),m=Math.max(n,q);d==\"meet\"&&(k*=\np,f*=p);d==\"slice\"&&(k*=m,f*=m);h=new a.Property(\"refX\",h);l=new a.Property(\"refY\",l);h.hasValue()&&l.hasValue()?c.translate(-p*h.Length.toPixels(\"x\"),-p*l.Length.toPixels(\"y\")):(o.match(/^xMid/)&&(d==\"meet\"&&p==q||d==\"slice\"&&m==q)&&c.translate(b/2-k/2,0),o.match(/YMid$/)&&(d==\"meet\"&&p==n||d==\"slice\"&&m==n)&&c.translate(0,e/2-f/2),o.match(/^xMax/)&&(d==\"meet\"&&p==q||d==\"slice\"&&m==q)&&c.translate(b-k,0),o.match(/YMax$/)&&(d==\"meet\"&&p==n||d==\"slice\"&&m==n)&&c.translate(0,e-f));o==\"none\"?c.scale(n,\nq):d==\"meet\"?c.scale(p,p):d==\"slice\"&&c.scale(m,m);c.translate(g==null?0:-g,j==null?0:-j)};a.Element={};a.Element.ElementBase=function(c){this.attributes={};this.styles={};this.children=[];this.attribute=function(b,d){var c=this.attributes[b];if(c!=null)return c;c=new a.Property(b,\"\");d==!0&&(this.attributes[b]=c);return c};this.style=function(b,d){var c=this.styles[b];if(c!=null)return c;c=this.attribute(b);if(c!=null&&c.hasValue())return c;c=this.parent;if(c!=null&&(c=c.style(b),c!=null&&c.hasValue()))return c;\nc=new a.Property(b,\"\");d==!0&&(this.styles[b]=c);return c};this.render=function(b){if(this.style(\"display\").value!=\"none\"&&this.attribute(\"visibility\").value!=\"hidden\"){b.save();this.setContext(b);if(this.attribute(\"mask\").hasValue()){var a=this.attribute(\"mask\").Definition.getDefinition();a!=null&&a.apply(b,this)}else this.style(\"filter\").hasValue()?(a=this.style(\"filter\").Definition.getDefinition(),a!=null&&a.apply(b,this)):this.renderChildren(b);this.clearContext(b);b.restore()}};this.setContext=\nfunction(){};this.clearContext=function(){};this.renderChildren=function(b){for(var a=0;a<this.children.length;a++)this.children[a].render(b)};this.addChild=function(b,d){var c=b;d&&(c=a.CreateElement(b));c.parent=this;this.children.push(c)};if(c!=null&&c.nodeType==1){for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1&&this.addChild(b,!0)}for(d=0;d<c.attributes.length;d++)b=c.attributes[d],this.attributes[b.nodeName]=new a.Property(b.nodeName,b.nodeValue);b=a.Styles[c.nodeName];\nif(b!=null)for(var k in b)this.styles[k]=b[k];if(this.attribute(\"class\").hasValue())for(var d=a.compressSpaces(this.attribute(\"class\").value).split(\" \"),e=0;e<d.length;e++){b=a.Styles[\".\"+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k];b=a.Styles[c.nodeName+\".\"+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k]}if(this.attribute(\"style\").hasValue()){b=this.attribute(\"style\").value.split(\";\");for(d=0;d<b.length;d++)a.trim(b[d])!=\"\"&&(c=b[d].split(\":\"),k=a.trim(c[0]),c=a.trim(c[1]),this.styles[k]=new a.Property(k,\nc))}this.attribute(\"id\").hasValue()&&a.Definitions[this.attribute(\"id\").value]==null&&(a.Definitions[this.attribute(\"id\").value]=this)}};a.Element.RenderedElementBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.setContext=function(d){if(this.style(\"fill\").Definition.isUrl()){var b=this.style(\"fill\").Definition.getFillStyle(this);if(b!=null)d.fillStyle=b}else if(this.style(\"fill\").hasValue())b=this.style(\"fill\"),this.style(\"fill-opacity\").hasValue()&&(b=b.Color.addOpacity(this.style(\"fill-opacity\").value)),\nd.fillStyle=b.value==\"none\"?\"rgba(0,0,0,0)\":b.value;if(this.style(\"stroke\").Definition.isUrl()){if(b=this.style(\"stroke\").Definition.getFillStyle(this),b!=null)d.strokeStyle=b}else if(this.style(\"stroke\").hasValue())b=this.style(\"stroke\"),this.style(\"stroke-opacity\").hasValue()&&(b=b.Color.addOpacity(this.style(\"stroke-opacity\").value)),d.strokeStyle=b.value==\"none\"?\"rgba(0,0,0,0)\":b.value;if(this.style(\"stroke-width\").hasValue())d.lineWidth=this.style(\"stroke-width\").Length.toPixels();if(this.style(\"stroke-linecap\").hasValue())d.lineCap=\nthis.style(\"stroke-linecap\").value;if(this.style(\"stroke-linejoin\").hasValue())d.lineJoin=this.style(\"stroke-linejoin\").value;if(this.style(\"stroke-miterlimit\").hasValue())d.miterLimit=this.style(\"stroke-miterlimit\").value;if(typeof d.font!=\"undefined\")d.font=a.Font.CreateFont(this.style(\"font-style\").value,this.style(\"font-variant\").value,this.style(\"font-weight\").value,this.style(\"font-size\").hasValue()?this.style(\"font-size\").Length.toPixels()+\"px\":\"\",this.style(\"font-family\").value).toString();\nthis.attribute(\"transform\").hasValue()&&(new a.Transform(this.attribute(\"transform\").value)).apply(d);this.attribute(\"clip-path\").hasValue()&&(b=this.attribute(\"clip-path\").Definition.getDefinition(),b!=null&&b.apply(d));if(this.style(\"opacity\").hasValue())d.globalAlpha=this.style(\"opacity\").numValue()}};a.Element.RenderedElementBase.prototype=new a.Element.ElementBase;a.Element.PathElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.path=function(d){d!=null&&d.beginPath();\nreturn new a.BoundingBox};this.renderChildren=function(d){this.path(d);a.Mouse.checkPath(this,d);d.fillStyle!=\"\"&&d.fill();d.strokeStyle!=\"\"&&d.stroke();var b=this.getMarkers();if(b!=null){if(this.style(\"marker-start\").Definition.isUrl()){var c=this.style(\"marker-start\").Definition.getDefinition();c.render(d,b[0][0],b[0][1])}if(this.style(\"marker-mid\").Definition.isUrl())for(var c=this.style(\"marker-mid\").Definition.getDefinition(),e=1;e<b.length-1;e++)c.render(d,b[e][0],b[e][1]);this.style(\"marker-end\").Definition.isUrl()&&\n(c=this.style(\"marker-end\").Definition.getDefinition(),c.render(d,b[b.length-1][0],b[b.length-1][1]))}};this.getBoundingBox=function(){return this.path()};this.getMarkers=function(){return null}};a.Element.PathElementBase.prototype=new a.Element.RenderedElementBase;a.Element.svg=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseClearContext=this.clearContext;this.clearContext=function(d){this.baseClearContext(d);a.ViewPort.RemoveCurrent()};this.baseSetContext=this.setContext;\nthis.setContext=function(d){d.strokeStyle=\"rgba(0,0,0,0)\";d.lineCap=\"butt\";d.lineJoin=\"miter\";d.miterLimit=4;this.baseSetContext(d);this.attribute(\"x\").hasValue()&&this.attribute(\"y\").hasValue()&&d.translate(this.attribute(\"x\").Length.toPixels(\"x\"),this.attribute(\"y\").Length.toPixels(\"y\"));var b=a.ViewPort.width(),c=a.ViewPort.height();if(typeof this.root==\"undefined\"&&this.attribute(\"width\").hasValue()&&this.attribute(\"height\").hasValue()){var b=this.attribute(\"width\").Length.toPixels(\"x\"),c=this.attribute(\"height\").Length.toPixels(\"y\"),\ne=0,f=0;this.attribute(\"refX\").hasValue()&&this.attribute(\"refY\").hasValue()&&(e=-this.attribute(\"refX\").Length.toPixels(\"x\"),f=-this.attribute(\"refY\").Length.toPixels(\"y\"));d.beginPath();d.moveTo(e,f);d.lineTo(b,f);d.lineTo(b,c);d.lineTo(e,c);d.closePath();d.clip()}a.ViewPort.SetCurrent(b,c);if(this.attribute(\"viewBox\").hasValue()){var e=a.ToNumberArray(this.attribute(\"viewBox\").value),f=e[0],g=e[1],b=e[2],c=e[3];a.AspectRatio(d,this.attribute(\"preserveAspectRatio\").value,a.ViewPort.width(),b,a.ViewPort.height(),\nc,f,g,this.attribute(\"refX\").value,this.attribute(\"refY\").value);a.ViewPort.RemoveCurrent();a.ViewPort.SetCurrent(e[2],e[3])}}};a.Element.svg.prototype=new a.Element.RenderedElementBase;a.Element.rect=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute(\"x\").Length.toPixels(\"x\"),c=this.attribute(\"y\").Length.toPixels(\"y\"),e=this.attribute(\"width\").Length.toPixels(\"x\"),f=this.attribute(\"height\").Length.toPixels(\"y\"),g=this.attribute(\"rx\").Length.toPixels(\"x\"),\nj=this.attribute(\"ry\").Length.toPixels(\"y\");this.attribute(\"rx\").hasValue()&&!this.attribute(\"ry\").hasValue()&&(j=g);this.attribute(\"ry\").hasValue()&&!this.attribute(\"rx\").hasValue()&&(g=j);d!=null&&(d.beginPath(),d.moveTo(b+g,c),d.lineTo(b+e-g,c),d.quadraticCurveTo(b+e,c,b+e,c+j),d.lineTo(b+e,c+f-j),d.quadraticCurveTo(b+e,c+f,b+e-g,c+f),d.lineTo(b+g,c+f),d.quadraticCurveTo(b,c+f,b,c+f-j),d.lineTo(b,c+j),d.quadraticCurveTo(b,c,b+g,c),d.closePath());return new a.BoundingBox(b,c,b+e,c+f)}};a.Element.rect.prototype=\nnew a.Element.PathElementBase;a.Element.circle=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute(\"cx\").Length.toPixels(\"x\"),c=this.attribute(\"cy\").Length.toPixels(\"y\"),e=this.attribute(\"r\").Length.toPixels();d!=null&&(d.beginPath(),d.arc(b,c,e,0,Math.PI*2,!0),d.closePath());return new a.BoundingBox(b-e,c-e,b+e,c+e)}};a.Element.circle.prototype=new a.Element.PathElementBase;a.Element.ellipse=function(c){this.base=a.Element.PathElementBase;this.base(c);\nthis.path=function(d){var b=4*((Math.sqrt(2)-1)/3),c=this.attribute(\"rx\").Length.toPixels(\"x\"),e=this.attribute(\"ry\").Length.toPixels(\"y\"),f=this.attribute(\"cx\").Length.toPixels(\"x\"),g=this.attribute(\"cy\").Length.toPixels(\"y\");d!=null&&(d.beginPath(),d.moveTo(f,g-e),d.bezierCurveTo(f+b*c,g-e,f+c,g-b*e,f+c,g),d.bezierCurveTo(f+c,g+b*e,f+b*c,g+e,f,g+e),d.bezierCurveTo(f-b*c,g+e,f-c,g+b*e,f-c,g),d.bezierCurveTo(f-c,g-b*e,f-b*c,g-e,f,g-e),d.closePath());return new a.BoundingBox(f-c,g-e,f+c,g+e)}};a.Element.ellipse.prototype=\nnew a.Element.PathElementBase;a.Element.line=function(c){this.base=a.Element.PathElementBase;this.base(c);this.getPoints=function(){return[new a.Point(this.attribute(\"x1\").Length.toPixels(\"x\"),this.attribute(\"y1\").Length.toPixels(\"y\")),new a.Point(this.attribute(\"x2\").Length.toPixels(\"x\"),this.attribute(\"y2\").Length.toPixels(\"y\"))]};this.path=function(d){var b=this.getPoints();d!=null&&(d.beginPath(),d.moveTo(b[0].x,b[0].y),d.lineTo(b[1].x,b[1].y));return new a.BoundingBox(b[0].x,b[0].y,b[1].x,b[1].y)};\nthis.getMarkers=function(){var a=this.getPoints(),b=a[0].angleTo(a[1]);return[[a[0],b],[a[1],b]]}};a.Element.line.prototype=new a.Element.PathElementBase;a.Element.polyline=function(c){this.base=a.Element.PathElementBase;this.base(c);this.points=a.CreatePath(this.attribute(\"points\").value);this.path=function(d){var b=new a.BoundingBox(this.points[0].x,this.points[0].y);d!=null&&(d.beginPath(),d.moveTo(this.points[0].x,this.points[0].y));for(var c=1;c<this.points.length;c++)b.addPoint(this.points[c].x,\nthis.points[c].y),d!=null&&d.lineTo(this.points[c].x,this.points[c].y);return b};this.getMarkers=function(){for(var a=[],b=0;b<this.points.length-1;b++)a.push([this.points[b],this.points[b].angleTo(this.points[b+1])]);a.push([this.points[this.points.length-1],a[a.length-1][1]]);return a}};a.Element.polyline.prototype=new a.Element.PathElementBase;a.Element.polygon=function(c){this.base=a.Element.polyline;this.base(c);this.basePath=this.path;this.path=function(a){var b=this.basePath(a);a!=null&&(a.lineTo(this.points[0].x,\nthis.points[0].y),a.closePath());return b}};a.Element.polygon.prototype=new a.Element.polyline;a.Element.path=function(c){this.base=a.Element.PathElementBase;this.base(c);c=this.attribute(\"d\").value;c=c.replace(/,/gm,\" \");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,\"$1 $2\");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,\"$1 $2\");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\\s])/gm,\"$1 $2\");c=c.replace(/([^\\s])([MmZzLlHhVvCcSsQqTtAa])/gm,\"$1 $2\");c=c.replace(/([0-9])([+\\-])/gm,\n\"$1 $2\");c=c.replace(/(\\.[0-9]*)(\\.)/gm,\"$1 $2\");c=c.replace(/([Aa](\\s+[0-9]+){3})\\s+([01])\\s*([01])/gm,\"$1 $3 $4 \");c=a.compressSpaces(c);c=a.trim(c);this.PathParser=new function(d){this.tokens=d.split(\" \");this.reset=function(){this.i=-1;this.previousCommand=this.command=\"\";this.start=new a.Point(0,0);this.control=new a.Point(0,0);this.current=new a.Point(0,0);this.points=[];this.angles=[]};this.isEnd=function(){return this.i>=this.tokens.length-1};this.isCommandOrEnd=function(){return this.isEnd()?\n!0:this.tokens[this.i+1].match(/^[A-Za-z]$/)!=null};this.isRelativeCommand=function(){return this.command==this.command.toLowerCase()};this.getToken=function(){this.i+=1;return this.tokens[this.i]};this.getScalar=function(){return parseFloat(this.getToken())};this.nextCommand=function(){this.previousCommand=this.command;this.command=this.getToken()};this.getPoint=function(){return this.makeAbsolute(new a.Point(this.getScalar(),this.getScalar()))};this.getAsControlPoint=function(){var b=this.getPoint();\nreturn this.control=b};this.getAsCurrentPoint=function(){var b=this.getPoint();return this.current=b};this.getReflectedControlPoint=function(){return this.previousCommand.toLowerCase()!=\"c\"&&this.previousCommand.toLowerCase()!=\"s\"?this.current:new a.Point(2*this.current.x-this.control.x,2*this.current.y-this.control.y)};this.makeAbsolute=function(b){if(this.isRelativeCommand())b.x=this.current.x+b.x,b.y=this.current.y+b.y;return b};this.addMarker=function(b,a,d){d!=null&&this.angles.length>0&&this.angles[this.angles.length-\n1]==null&&(this.angles[this.angles.length-1]=this.points[this.points.length-1].angleTo(d));this.addMarkerAngle(b,a==null?null:a.angleTo(b))};this.addMarkerAngle=function(b,a){this.points.push(b);this.angles.push(a)};this.getMarkerPoints=function(){return this.points};this.getMarkerAngles=function(){for(var b=0;b<this.angles.length;b++)if(this.angles[b]==null)for(var a=b+1;a<this.angles.length;a++)if(this.angles[a]!=null){this.angles[b]=this.angles[a];break}return this.angles}}(c);this.path=function(d){var b=\nthis.PathParser;b.reset();var c=new a.BoundingBox;for(d!=null&&d.beginPath();!b.isEnd();)switch(b.nextCommand(),b.command.toUpperCase()){case \"M\":var e=b.getAsCurrentPoint();b.addMarker(e);c.addPoint(e.x,e.y);d!=null&&d.moveTo(e.x,e.y);for(b.start=b.current;!b.isCommandOrEnd();)e=b.getAsCurrentPoint(),b.addMarker(e,b.start),c.addPoint(e.x,e.y),d!=null&&d.lineTo(e.x,e.y);break;case \"L\":for(;!b.isCommandOrEnd();){var f=b.current,e=b.getAsCurrentPoint();b.addMarker(e,f);c.addPoint(e.x,e.y);d!=null&&\nd.lineTo(e.x,e.y)}break;case \"H\":for(;!b.isCommandOrEnd();)e=new a.Point((b.isRelativeCommand()?b.current.x:0)+b.getScalar(),b.current.y),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case \"V\":for(;!b.isCommandOrEnd();)e=new a.Point(b.current.x,(b.isRelativeCommand()?b.current.y:0)+b.getScalar()),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case \"C\":for(;!b.isCommandOrEnd();){var g=\nb.current,f=b.getPoint(),j=b.getAsControlPoint(),e=b.getAsCurrentPoint();b.addMarker(e,j,f);c.addBezierCurve(g.x,g.y,f.x,f.y,j.x,j.y,e.x,e.y);d!=null&&d.bezierCurveTo(f.x,f.y,j.x,j.y,e.x,e.y)}break;case \"S\":for(;!b.isCommandOrEnd();)g=b.current,f=b.getReflectedControlPoint(),j=b.getAsControlPoint(),e=b.getAsCurrentPoint(),b.addMarker(e,j,f),c.addBezierCurve(g.x,g.y,f.x,f.y,j.x,j.y,e.x,e.y),d!=null&&d.bezierCurveTo(f.x,f.y,j.x,j.y,e.x,e.y);break;case \"Q\":for(;!b.isCommandOrEnd();)g=b.current,j=b.getAsControlPoint(),\ne=b.getAsCurrentPoint(),b.addMarker(e,j,j),c.addQuadraticCurve(g.x,g.y,j.x,j.y,e.x,e.y),d!=null&&d.quadraticCurveTo(j.x,j.y,e.x,e.y);break;case \"T\":for(;!b.isCommandOrEnd();)g=b.current,j=b.getReflectedControlPoint(),b.control=j,e=b.getAsCurrentPoint(),b.addMarker(e,j,j),c.addQuadraticCurve(g.x,g.y,j.x,j.y,e.x,e.y),d!=null&&d.quadraticCurveTo(j.x,j.y,e.x,e.y);break;case \"A\":for(;!b.isCommandOrEnd();){var g=b.current,h=b.getScalar(),l=b.getScalar(),f=b.getScalar()*(Math.PI/180),o=b.getScalar(),j=b.getScalar(),\ne=b.getAsCurrentPoint(),n=new a.Point(Math.cos(f)*(g.x-e.x)/2+Math.sin(f)*(g.y-e.y)/2,-Math.sin(f)*(g.x-e.x)/2+Math.cos(f)*(g.y-e.y)/2),q=Math.pow(n.x,2)/Math.pow(h,2)+Math.pow(n.y,2)/Math.pow(l,2);q>1&&(h*=Math.sqrt(q),l*=Math.sqrt(q));o=(o==j?-1:1)*Math.sqrt((Math.pow(h,2)*Math.pow(l,2)-Math.pow(h,2)*Math.pow(n.y,2)-Math.pow(l,2)*Math.pow(n.x,2))/(Math.pow(h,2)*Math.pow(n.y,2)+Math.pow(l,2)*Math.pow(n.x,2)));isNaN(o)&&(o=0);var p=new a.Point(o*h*n.y/l,o*-l*n.x/h),g=new a.Point((g.x+e.x)/2+Math.cos(f)*\np.x-Math.sin(f)*p.y,(g.y+e.y)/2+Math.sin(f)*p.x+Math.cos(f)*p.y),m=function(b,a){return(b[0]*a[0]+b[1]*a[1])/(Math.sqrt(Math.pow(b[0],2)+Math.pow(b[1],2))*Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)))},s=function(b,a){return(b[0]*a[1]<b[1]*a[0]?-1:1)*Math.acos(m(b,a))},o=s([1,0],[(n.x-p.x)/h,(n.y-p.y)/l]),q=[(n.x-p.x)/h,(n.y-p.y)/l],p=[(-n.x-p.x)/h,(-n.y-p.y)/l],n=s(q,p);if(m(q,p)<=-1)n=Math.PI;m(q,p)>=1&&(n=0);j==0&&n>0&&(n-=2*Math.PI);j==1&&n<0&&(n+=2*Math.PI);q=new a.Point(g.x-h*Math.cos((o+n)/\n2),g.y-l*Math.sin((o+n)/2));b.addMarkerAngle(q,(o+n)/2+(j==0?1:-1)*Math.PI/2);b.addMarkerAngle(e,n+(j==0?1:-1)*Math.PI/2);c.addPoint(e.x,e.y);d!=null&&(m=h>l?h:l,e=h>l?1:h/l,h=h>l?l/h:1,d.translate(g.x,g.y),d.rotate(f),d.scale(e,h),d.arc(0,0,m,o,o+n,1-j),d.scale(1/e,1/h),d.rotate(-f),d.translate(-g.x,-g.y))}break;case \"Z\":d!=null&&d.closePath(),b.current=b.start}return c};this.getMarkers=function(){for(var a=this.PathParser.getMarkerPoints(),b=this.PathParser.getMarkerAngles(),c=[],e=0;e<a.length;e++)c.push([a[e],\nb[e]]);return c}};a.Element.path.prototype=new a.Element.PathElementBase;a.Element.pattern=function(c){this.base=a.Element.ElementBase;this.base(c);this.createPattern=function(d){var b=new a.Element.svg;b.attributes.viewBox=new a.Property(\"viewBox\",this.attribute(\"viewBox\").value);b.attributes.x=new a.Property(\"x\",this.attribute(\"x\").value);b.attributes.y=new a.Property(\"y\",this.attribute(\"y\").value);b.attributes.width=new a.Property(\"width\",this.attribute(\"width\").value);b.attributes.height=new a.Property(\"height\",\nthis.attribute(\"height\").value);b.children=this.children;var c=document.createElement(\"canvas\");c.width=this.attribute(\"width\").Length.toPixels(\"x\");c.height=this.attribute(\"height\").Length.toPixels(\"y\");b.render(c.getContext(\"2d\"));return d.createPattern(c,\"repeat\")}};a.Element.pattern.prototype=new a.Element.ElementBase;a.Element.marker=function(c){this.base=a.Element.ElementBase;this.base(c);this.baseRender=this.render;this.render=function(d,b,c){d.translate(b.x,b.y);this.attribute(\"orient\").valueOrDefault(\"auto\")==\n\"auto\"&&d.rotate(c);this.attribute(\"markerUnits\").valueOrDefault(\"strokeWidth\")==\"strokeWidth\"&&d.scale(d.lineWidth,d.lineWidth);d.save();var e=new a.Element.svg;e.attributes.viewBox=new a.Property(\"viewBox\",this.attribute(\"viewBox\").value);e.attributes.refX=new a.Property(\"refX\",this.attribute(\"refX\").value);e.attributes.refY=new a.Property(\"refY\",this.attribute(\"refY\").value);e.attributes.width=new a.Property(\"width\",this.attribute(\"markerWidth\").value);e.attributes.height=new a.Property(\"height\",\nthis.attribute(\"markerHeight\").value);e.attributes.fill=new a.Property(\"fill\",this.attribute(\"fill\").valueOrDefault(\"black\"));e.attributes.stroke=new a.Property(\"stroke\",this.attribute(\"stroke\").valueOrDefault(\"none\"));e.children=this.children;e.render(d);d.restore();this.attribute(\"markerUnits\").valueOrDefault(\"strokeWidth\")==\"strokeWidth\"&&d.scale(1/d.lineWidth,1/d.lineWidth);this.attribute(\"orient\").valueOrDefault(\"auto\")==\"auto\"&&d.rotate(-c);d.translate(-b.x,-b.y)}};a.Element.marker.prototype=\nnew a.Element.ElementBase;a.Element.defs=function(c){this.base=a.Element.ElementBase;this.base(c);this.render=function(){}};a.Element.defs.prototype=new a.Element.ElementBase;a.Element.GradientBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.gradientUnits=this.attribute(\"gradientUnits\").valueOrDefault(\"objectBoundingBox\");this.stops=[];for(c=0;c<this.children.length;c++)this.stops.push(this.children[c]);this.getGradient=function(){};this.createGradient=function(d,b){var c=this;this.attribute(\"xlink:href\").hasValue()&&\n(c=this.attribute(\"xlink:href\").Definition.getDefinition());for(var e=this.getGradient(d,b),f=0;f<c.stops.length;f++)e.addColorStop(c.stops[f].offset,c.stops[f].color);if(this.attribute(\"gradientTransform\").hasValue()){c=a.ViewPort.viewPorts[0];f=new a.Element.rect;f.attributes.x=new a.Property(\"x\",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.y=new a.Property(\"y\",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.width=new a.Property(\"width\",a.MAX_VIRTUAL_PIXELS);f.attributes.height=new a.Property(\"height\",a.MAX_VIRTUAL_PIXELS);\nvar g=new a.Element.g;g.attributes.transform=new a.Property(\"transform\",this.attribute(\"gradientTransform\").value);g.children=[f];f=new a.Element.svg;f.attributes.x=new a.Property(\"x\",0);f.attributes.y=new a.Property(\"y\",0);f.attributes.width=new a.Property(\"width\",c.width);f.attributes.height=new a.Property(\"height\",c.height);f.children=[g];g=document.createElement(\"canvas\");g.width=c.width;g.height=c.height;c=g.getContext(\"2d\");c.fillStyle=e;f.render(c);return c.createPattern(g,\"no-repeat\")}return e}};\na.Element.GradientBase.prototype=new a.Element.ElementBase;a.Element.linearGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits==\"objectBoundingBox\"?c.x()+c.width()*this.attribute(\"x1\").numValue():this.attribute(\"x1\").Length.toPixels(\"x\"),f=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"y1\").numValue():this.attribute(\"y1\").Length.toPixels(\"y\"),g=this.gradientUnits==\"objectBoundingBox\"?\nc.x()+c.width()*this.attribute(\"x2\").numValue():this.attribute(\"x2\").Length.toPixels(\"x\"),c=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"y2\").numValue():this.attribute(\"y2\").Length.toPixels(\"y\");return a.createLinearGradient(e,f,g,c)}};a.Element.linearGradient.prototype=new a.Element.GradientBase;a.Element.radialGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits==\"objectBoundingBox\"?\nc.x()+c.width()*this.attribute(\"cx\").numValue():this.attribute(\"cx\").Length.toPixels(\"x\"),f=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"cy\").numValue():this.attribute(\"cy\").Length.toPixels(\"y\"),g=e,j=f;this.attribute(\"fx\").hasValue()&&(g=this.gradientUnits==\"objectBoundingBox\"?c.x()+c.width()*this.attribute(\"fx\").numValue():this.attribute(\"fx\").Length.toPixels(\"x\"));this.attribute(\"fy\").hasValue()&&(j=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"fy\").numValue():\nthis.attribute(\"fy\").Length.toPixels(\"y\"));c=this.gradientUnits==\"objectBoundingBox\"?(c.width()+c.height())/2*this.attribute(\"r\").numValue():this.attribute(\"r\").Length.toPixels();return a.createRadialGradient(g,j,0,e,f,c)}};a.Element.radialGradient.prototype=new a.Element.GradientBase;a.Element.stop=function(c){this.base=a.Element.ElementBase;this.base(c);this.offset=this.attribute(\"offset\").numValue();c=this.style(\"stop-color\");this.style(\"stop-opacity\").hasValue()&&(c=c.Color.addOpacity(this.style(\"stop-opacity\").value));\nthis.color=c.value};a.Element.stop.prototype=new a.Element.ElementBase;a.Element.AnimateBase=function(c){this.base=a.Element.ElementBase;this.base(c);a.Animations.push(this);this.duration=0;this.begin=this.attribute(\"begin\").Time.toMilliseconds();this.maxDuration=this.begin+this.attribute(\"dur\").Time.toMilliseconds();this.getProperty=function(){var a=this.attribute(\"attributeType\").value,b=this.attribute(\"attributeName\").value;return a==\"CSS\"?this.parent.style(b,!0):this.parent.attribute(b,!0)};this.initialValue=\nnull;this.removed=!1;this.calcValue=function(){return\"\"};this.update=function(a){if(this.initialValue==null)this.initialValue=this.getProperty().value;if(this.duration>this.maxDuration)if(this.attribute(\"repeatCount\").value==\"indefinite\")this.duration=0;else return this.attribute(\"fill\").valueOrDefault(\"remove\")==\"remove\"&&!this.removed?(this.removed=!0,this.getProperty().value=this.initialValue,!0):!1;this.duration+=a;a=!1;if(this.begin<this.duration)a=this.calcValue(),this.attribute(\"type\").hasValue()&&\n(a=this.attribute(\"type\").value+\"(\"+a+\")\"),this.getProperty().value=a,a=!0;return a};this.progress=function(){return(this.duration-this.begin)/(this.maxDuration-this.begin)}};a.Element.AnimateBase.prototype=new a.Element.ElementBase;a.Element.animate=function(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=this.attribute(\"from\").numValue(),b=this.attribute(\"to\").numValue();return a+(b-a)*this.progress()}};a.Element.animate.prototype=new a.Element.AnimateBase;a.Element.animateColor=\nfunction(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=new RGBColor(this.attribute(\"from\").value),b=new RGBColor(this.attribute(\"to\").value);if(a.ok&&b.ok){var c=a.r+(b.r-a.r)*this.progress(),e=a.g+(b.g-a.g)*this.progress(),a=a.b+(b.b-a.b)*this.progress();return\"rgb(\"+parseInt(c,10)+\",\"+parseInt(e,10)+\",\"+parseInt(a,10)+\")\"}return this.attribute(\"from\").value}};a.Element.animateColor.prototype=new a.Element.AnimateBase;a.Element.animateTransform=function(c){this.base=\na.Element.animate;this.base(c)};a.Element.animateTransform.prototype=new a.Element.animate;a.Element.font=function(c){this.base=a.Element.ElementBase;this.base(c);this.horizAdvX=this.attribute(\"horiz-adv-x\").numValue();this.isArabic=this.isRTL=!1;this.missingGlyph=this.fontFace=null;this.glyphs=[];for(c=0;c<this.children.length;c++){var d=this.children[c];if(d.type==\"font-face\")this.fontFace=d,d.style(\"font-family\").hasValue()&&(a.Definitions[d.style(\"font-family\").value]=this);else if(d.type==\"missing-glyph\")this.missingGlyph=\nd;else if(d.type==\"glyph\")d.arabicForm!=\"\"?(this.isArabic=this.isRTL=!0,typeof this.glyphs[d.unicode]==\"undefined\"&&(this.glyphs[d.unicode]=[]),this.glyphs[d.unicode][d.arabicForm]=d):this.glyphs[d.unicode]=d}};a.Element.font.prototype=new a.Element.ElementBase;a.Element.fontface=function(c){this.base=a.Element.ElementBase;this.base(c);this.ascent=this.attribute(\"ascent\").value;this.descent=this.attribute(\"descent\").value;this.unitsPerEm=this.attribute(\"units-per-em\").numValue()};a.Element.fontface.prototype=\nnew a.Element.ElementBase;a.Element.missingglyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=0};a.Element.missingglyph.prototype=new a.Element.path;a.Element.glyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=this.attribute(\"horiz-adv-x\").numValue();this.unicode=this.attribute(\"unicode\").value;this.arabicForm=this.attribute(\"arabic-form\").value};a.Element.glyph.prototype=new a.Element.path;a.Element.text=function(c){this.base=a.Element.RenderedElementBase;\nthis.base(c);if(c!=null){this.children=[];for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1?this.addChild(b,!0):b.nodeType==3&&this.addChild(new a.Element.tspan(b),!1)}}this.baseSetContext=this.setContext;this.setContext=function(b){this.baseSetContext(b);if(this.style(\"dominant-baseline\").hasValue())b.textBaseline=this.style(\"dominant-baseline\").value;if(this.style(\"alignment-baseline\").hasValue())b.textBaseline=this.style(\"alignment-baseline\").value};this.renderChildren=\nfunction(b){for(var a=this.style(\"text-anchor\").valueOrDefault(\"start\"),c=this.attribute(\"x\").Length.toPixels(\"x\"),d=this.attribute(\"y\").Length.toPixels(\"y\"),j=0;j<this.children.length;j++){var h=this.children[j];h.attribute(\"x\").hasValue()?h.x=h.attribute(\"x\").Length.toPixels(\"x\"):(h.attribute(\"dx\").hasValue()&&(c+=h.attribute(\"dx\").Length.toPixels(\"x\")),h.x=c);c=h.measureText(b);if(a!=\"start\"&&(j==0||h.attribute(\"x\").hasValue())){for(var l=c,o=j+1;o<this.children.length;o++){var n=this.children[o];\nif(n.attribute(\"x\").hasValue())break;l+=n.measureText(b)}h.x-=a==\"end\"?l:l/2}c=h.x+c;h.attribute(\"y\").hasValue()?h.y=h.attribute(\"y\").Length.toPixels(\"y\"):(h.attribute(\"dy\").hasValue()&&(d+=h.attribute(\"dy\").Length.toPixels(\"y\")),h.y=d);d=h.y;h.render(b)}}};a.Element.text.prototype=new a.Element.RenderedElementBase;a.Element.TextElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getGlyph=function(a,b,c){var e=b[c],f=null;if(a.isArabic){var g=\"isolated\";if((c==0||b[c-\n1]==\" \")&&c<b.length-2&&b[c+1]!=\" \")g=\"terminal\";c>0&&b[c-1]!=\" \"&&c<b.length-2&&b[c+1]!=\" \"&&(g=\"medial\");if(c>0&&b[c-1]!=\" \"&&(c==b.length-1||b[c+1]==\" \"))g=\"initial\";typeof a.glyphs[e]!=\"undefined\"&&(f=a.glyphs[e][g],f==null&&a.glyphs[e].type==\"glyph\"&&(f=a.glyphs[e]))}else f=a.glyphs[e];if(f==null)f=a.missingGlyph;return f};this.renderChildren=function(c){var b=this.parent.style(\"font-family\").Definition.getDefinition();if(b!=null){var k=this.parent.style(\"font-size\").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize),\ne=this.parent.style(\"font-style\").valueOrDefault(a.Font.Parse(a.ctx.font).fontStyle),f=this.getText();b.isRTL&&(f=f.split(\"\").reverse().join(\"\"));for(var g=a.ToNumberArray(this.parent.attribute(\"dx\").value),j=0;j<f.length;j++){var h=this.getGlyph(b,f,j),l=k/b.fontFace.unitsPerEm;c.translate(this.x,this.y);c.scale(l,-l);var o=c.lineWidth;c.lineWidth=c.lineWidth*b.fontFace.unitsPerEm/k;e==\"italic\"&&c.transform(1,0,0.4,1,0,0);h.render(c);e==\"italic\"&&c.transform(1,0,-0.4,1,0,0);c.lineWidth=o;c.scale(1/\nl,-1/l);c.translate(-this.x,-this.y);this.x+=k*(h.horizAdvX||b.horizAdvX)/b.fontFace.unitsPerEm;typeof g[j]!=\"undefined\"&&!isNaN(g[j])&&(this.x+=g[j])}}else c.strokeStyle!=\"\"&&c.strokeText(a.compressSpaces(this.getText()),this.x,this.y),c.fillStyle!=\"\"&&c.fillText(a.compressSpaces(this.getText()),this.x,this.y)};this.getText=function(){};this.measureText=function(c){var b=this.parent.style(\"font-family\").Definition.getDefinition();if(b!=null){var c=this.parent.style(\"font-size\").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize),\nk=0,e=this.getText();b.isRTL&&(e=e.split(\"\").reverse().join(\"\"));for(var f=a.ToNumberArray(this.parent.attribute(\"dx\").value),g=0;g<e.length;g++){var j=this.getGlyph(b,e,g);k+=(j.horizAdvX||b.horizAdvX)*c/b.fontFace.unitsPerEm;typeof f[g]!=\"undefined\"&&!isNaN(f[g])&&(k+=f[g])}return k}b=a.compressSpaces(this.getText());if(!c.measureText)return b.length*10;c.save();this.setContext(c);b=c.measureText(b).width;c.restore();return b}};a.Element.TextElementBase.prototype=new a.Element.RenderedElementBase;\na.Element.tspan=function(c){this.base=a.Element.TextElementBase;this.base(c);this.text=c.nodeType==3?c.nodeValue:c.childNodes.length>0?c.childNodes[0].nodeValue:c.text;this.getText=function(){return this.text}};a.Element.tspan.prototype=new a.Element.TextElementBase;a.Element.tref=function(c){this.base=a.Element.TextElementBase;this.base(c);this.getText=function(){var a=this.attribute(\"xlink:href\").Definition.getDefinition();if(a!=null)return a.children[0].getText()}};a.Element.tref.prototype=new a.Element.TextElementBase;\na.Element.a=function(c){this.base=a.Element.TextElementBase;this.base(c);this.hasText=!0;for(var d=0;d<c.childNodes.length;d++)if(c.childNodes[d].nodeType!=3)this.hasText=!1;this.text=this.hasText?c.childNodes[0].nodeValue:\"\";this.getText=function(){return this.text};this.baseRenderChildren=this.renderChildren;this.renderChildren=function(b){if(this.hasText){this.baseRenderChildren(b);var c=new a.Property(\"fontSize\",a.Font.Parse(a.ctx.font).fontSize);a.Mouse.checkBoundingBox(this,new a.BoundingBox(this.x,\nthis.y-c.Length.toPixels(\"y\"),this.x+this.measureText(b),this.y))}else c=new a.Element.g,c.children=this.children,c.parent=this,c.render(b)};this.onclick=function(){window.open(this.attribute(\"xlink:href\").value)};this.onmousemove=function(){a.ctx.canvas.style.cursor=\"pointer\"}};a.Element.a.prototype=new a.Element.TextElementBase;a.Element.image=function(c){this.base=a.Element.RenderedElementBase;this.base(c);a.Images.push(this);this.img=document.createElement(\"img\");this.loaded=!1;var d=this;this.img.onload=\nfunction(){d.loaded=!0};this.img.src=this.attribute(\"xlink:href\").value;this.renderChildren=function(b){var c=this.attribute(\"x\").Length.toPixels(\"x\"),d=this.attribute(\"y\").Length.toPixels(\"y\"),f=this.attribute(\"width\").Length.toPixels(\"x\"),g=this.attribute(\"height\").Length.toPixels(\"y\");f==0||g==0||(b.save(),b.translate(c,d),a.AspectRatio(b,this.attribute(\"preserveAspectRatio\").value,f,this.img.width,g,this.img.height,0,0),b.drawImage(this.img,0,0),b.restore())}};a.Element.image.prototype=new a.Element.RenderedElementBase;\na.Element.g=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getBoundingBox=function(){for(var c=new a.BoundingBox,b=0;b<this.children.length;b++)c.addBoundingBox(this.children[b].getBoundingBox());return c}};a.Element.g.prototype=new a.Element.RenderedElementBase;a.Element.symbol=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(c){this.baseSetContext(c);if(this.attribute(\"viewBox\").hasValue()){var b=\na.ToNumberArray(this.attribute(\"viewBox\").value),k=b[0],e=b[1];width=b[2];height=b[3];a.AspectRatio(c,this.attribute(\"preserveAspectRatio\").value,this.attribute(\"width\").Length.toPixels(\"x\"),width,this.attribute(\"height\").Length.toPixels(\"y\"),height,k,e);a.ViewPort.SetCurrent(b[2],b[3])}}};a.Element.symbol.prototype=new a.Element.RenderedElementBase;a.Element.style=function(c){this.base=a.Element.ElementBase;this.base(c);for(var c=c.childNodes[0].nodeValue+(c.childNodes.length>1?c.childNodes[1].nodeValue:\n\"\"),c=c.replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*\\/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm,\"\"),c=a.compressSpaces(c),c=c.split(\"}\"),d=0;d<c.length;d++)if(a.trim(c[d])!=\"\")for(var b=c[d].split(\"{\"),k=b[0].split(\",\"),b=b[1].split(\";\"),e=0;e<k.length;e++){var f=a.trim(k[e]);if(f!=\"\"){for(var g={},j=0;j<b.length;j++){var h=b[j].indexOf(\":\"),l=b[j].substr(0,h),h=b[j].substr(h+1,b[j].length-h);l!=null&&h!=null&&(g[a.trim(l)]=new a.Property(a.trim(l),a.trim(h)))}a.Styles[f]=g;if(f==\"@font-face\"){f=g[\"font-family\"].value.replace(/\"/g,\n\"\");g=g.src.value.split(\",\");for(j=0;j<g.length;j++)if(g[j].indexOf('format(\"svg\")')>0){l=g[j].indexOf(\"url\");h=g[j].indexOf(\")\",l);l=g[j].substr(l+5,h-l-6);l=a.parseXml(a.ajax(l)).getElementsByTagName(\"font\");for(h=0;h<l.length;h++){var o=a.CreateElement(l[h]);a.Definitions[f]=o}}}}}};a.Element.style.prototype=new a.Element.ElementBase;a.Element.use=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(a){this.baseSetContext(a);\nthis.attribute(\"x\").hasValue()&&a.translate(this.attribute(\"x\").Length.toPixels(\"x\"),0);this.attribute(\"y\").hasValue()&&a.translate(0,this.attribute(\"y\").Length.toPixels(\"y\"))};this.getDefinition=function(){var a=this.attribute(\"xlink:href\").Definition.getDefinition();if(this.attribute(\"width\").hasValue())a.attribute(\"width\",!0).value=this.attribute(\"width\").value;if(this.attribute(\"height\").hasValue())a.attribute(\"height\",!0).value=this.attribute(\"height\").value;return a};this.path=function(a){var b=\nthis.getDefinition();b!=null&&b.path(a)};this.renderChildren=function(a){var b=this.getDefinition();b!=null&&b.render(a)}};a.Element.use.prototype=new a.Element.RenderedElementBase;a.Element.mask=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=this.attribute(\"x\").Length.toPixels(\"x\"),e=this.attribute(\"y\").Length.toPixels(\"y\"),f=this.attribute(\"width\").Length.toPixels(\"x\"),g=this.attribute(\"height\").Length.toPixels(\"y\"),j=b.attribute(\"mask\").value;b.attribute(\"mask\").value=\n\"\";var h=document.createElement(\"canvas\");h.width=c+f;h.height=e+g;var l=h.getContext(\"2d\");this.renderChildren(l);var o=document.createElement(\"canvas\");o.width=c+f;o.height=e+g;var n=o.getContext(\"2d\");b.render(n);n.globalCompositeOperation=\"destination-in\";n.fillStyle=l.createPattern(h,\"no-repeat\");n.fillRect(0,0,c+f,e+g);a.fillStyle=n.createPattern(o,\"no-repeat\");a.fillRect(0,0,c+f,e+g);b.attribute(\"mask\").value=j};this.render=function(){}};a.Element.mask.prototype=new a.Element.ElementBase;a.Element.clipPath=\nfunction(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a){for(var b=0;b<this.children.length;b++)this.children[b].path&&(this.children[b].path(a),a.clip())};this.render=function(){}};a.Element.clipPath.prototype=new a.Element.ElementBase;a.Element.filter=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=b.getBoundingBox(),e=this.attribute(\"x\").Length.toPixels(\"x\"),f=this.attribute(\"y\").Length.toPixels(\"y\");if(e==0||f==0)e=c.x1,f=c.y1;var g=\nthis.attribute(\"width\").Length.toPixels(\"x\"),j=this.attribute(\"height\").Length.toPixels(\"y\");if(g==0||j==0)g=c.width(),j=c.height();c=b.style(\"filter\").value;b.style(\"filter\").value=\"\";var h=0.2*g,l=0.2*j,o=document.createElement(\"canvas\");o.width=g+2*h;o.height=j+2*l;var n=o.getContext(\"2d\");n.translate(-e+h,-f+l);b.render(n);for(var q=0;q<this.children.length;q++)this.children[q].apply(n,0,0,g+2*h,j+2*l);a.drawImage(o,0,0,g+2*h,j+2*l,e-h,f-l,g+2*h,j+2*l);b.style(\"filter\",!0).value=c};this.render=\nfunction(){}};a.Element.filter.prototype=new a.Element.ElementBase;a.Element.feGaussianBlur=function(c){function d(a,c,d,f,g){for(var j=0;j<g;j++)for(var h=0;h<f;h++)for(var l=a[j*f*4+h*4+3]/255,o=0;o<4;o++){for(var n=d[0]*(l==0?255:a[j*f*4+h*4+o])*(l==0||o==3?1:l),q=1;q<d.length;q++){var p=Math.max(h-q,0),m=a[j*f*4+p*4+3]/255,p=Math.min(h+q,f-1),p=a[j*f*4+p*4+3]/255,s=d[q],r;m==0?r=255:(r=Math.max(h-q,0),r=a[j*f*4+r*4+o]);m=r*(m==0||o==3?1:m);p==0?r=255:(r=Math.min(h+q,f-1),r=a[j*f*4+r*4+o]);n+=\ns*(m+r*(p==0||o==3?1:p))}c[h*g*4+j*4+o]=n}}this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,c,e,f,g){var e=this.attribute(\"stdDeviation\").numValue(),c=a.getImageData(0,0,f,g),e=Math.max(e,0.01),j=Math.ceil(e*4)+1;mask=[];for(var h=0;h<j;h++)mask[h]=Math.exp(-0.5*(h/e)*(h/e));e=mask;j=0;for(h=1;h<e.length;h++)j+=Math.abs(e[h]);j=2*j+Math.abs(e[0]);for(h=0;h<e.length;h++)e[h]/=j;tmp=[];d(c.data,tmp,e,f,g);d(tmp,c.data,e,g,f);a.clearRect(0,0,f,g);a.putImageData(c,0,0)}};a.Element.filter.prototype=\nnew a.Element.feGaussianBlur;a.Element.title=function(){};a.Element.title.prototype=new a.Element.ElementBase;a.Element.desc=function(){};a.Element.desc.prototype=new a.Element.ElementBase;a.Element.MISSING=function(a){console.log(\"ERROR: Element '\"+a.nodeName+\"' not yet implemented.\")};a.Element.MISSING.prototype=new a.Element.ElementBase;a.CreateElement=function(c){var d=c.nodeName.replace(/^[^:]+:/,\"\"),d=d.replace(/\\-/g,\"\"),b=null,b=typeof a.Element[d]!=\"undefined\"?new a.Element[d](c):new a.Element.MISSING(c);\nb.type=c.nodeName;return b};a.load=function(c,d){a.loadXml(c,a.ajax(d))};a.loadXml=function(c,d){a.loadXmlDoc(c,a.parseXml(d))};a.loadXmlDoc=function(c,d){a.init(c);var b=function(a){for(var b=c.canvas;b;)a.x-=b.offsetLeft,a.y-=b.offsetTop,b=b.offsetParent;window.scrollX&&(a.x+=window.scrollX);window.scrollY&&(a.y+=window.scrollY);return a};if(a.opts.ignoreMouse!=!0)c.canvas.onclick=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onclick(c.x,c.y)},\nc.canvas.onmousemove=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onmousemove(c.x,c.y)};var k=a.CreateElement(d.documentElement),e=k.root=!0,f=function(){a.ViewPort.Clear();c.canvas.parentNode&&a.ViewPort.SetCurrent(c.canvas.parentNode.clientWidth,c.canvas.parentNode.clientHeight);if(a.opts.ignoreDimensions!=!0){if(k.style(\"width\").hasValue())c.canvas.width=k.style(\"width\").Length.toPixels(\"x\"),c.canvas.style.width=c.canvas.width+\"px\";if(k.style(\"height\").hasValue())c.canvas.height=\nk.style(\"height\").Length.toPixels(\"y\"),c.canvas.style.height=c.canvas.height+\"px\"}var b=c.canvas.clientWidth||c.canvas.width,d=c.canvas.clientHeight||c.canvas.height;a.ViewPort.SetCurrent(b,d);if(a.opts!=null&&a.opts.offsetX!=null)k.attribute(\"x\",!0).value=a.opts.offsetX;if(a.opts!=null&&a.opts.offsetY!=null)k.attribute(\"y\",!0).value=a.opts.offsetY;if(a.opts!=null&&a.opts.scaleWidth!=null&&a.opts.scaleHeight!=null){var f=1,g=1;k.attribute(\"width\").hasValue()&&(f=k.attribute(\"width\").Length.toPixels(\"x\")/\na.opts.scaleWidth);k.attribute(\"height\").hasValue()&&(g=k.attribute(\"height\").Length.toPixels(\"y\")/a.opts.scaleHeight);k.attribute(\"width\",!0).value=a.opts.scaleWidth;k.attribute(\"height\",!0).value=a.opts.scaleHeight;k.attribute(\"viewBox\",!0).value=\"0 0 \"+b*f+\" \"+d*g;k.attribute(\"preserveAspectRatio\",!0).value=\"none\"}a.opts.ignoreClear!=!0&&c.clearRect(0,0,b,d);k.render(c);e&&(e=!1,a.opts!=null&&typeof a.opts.renderCallback==\"function\"&&a.opts.renderCallback())},g=!0;a.ImagesLoaded()&&(g=!1,f());\na.intervalID=setInterval(function(){var b=!1;g&&a.ImagesLoaded()&&(g=!1,b=!0);a.opts.ignoreMouse!=!0&&(b|=a.Mouse.hasEvents());if(a.opts.ignoreAnimation!=!0)for(var c=0;c<a.Animations.length;c++)b|=a.Animations[c].update(1E3/a.FRAMERATE);a.opts!=null&&typeof a.opts.forceRedraw==\"function\"&&a.opts.forceRedraw()==!0&&(b=!0);b&&(f(),a.Mouse.runEvents())},1E3/a.FRAMERATE)};a.stop=function(){a.intervalID&&clearInterval(a.intervalID)};a.Mouse=new function(){this.events=[];this.hasEvents=function(){return this.events.length!=\n0};this.onclick=function(a,d){this.events.push({type:\"onclick\",x:a,y:d,run:function(a){if(a.onclick)a.onclick()}})};this.onmousemove=function(a,d){this.events.push({type:\"onmousemove\",x:a,y:d,run:function(a){if(a.onmousemove)a.onmousemove()}})};this.eventElements=[];this.checkPath=function(a,d){for(var b=0;b<this.events.length;b++){var k=this.events[b];d.isPointInPath&&d.isPointInPath(k.x,k.y)&&(this.eventElements[b]=a)}};this.checkBoundingBox=function(a,d){for(var b=0;b<this.events.length;b++){var k=\nthis.events[b];d.isPointInBox(k.x,k.y)&&(this.eventElements[b]=a)}};this.runEvents=function(){a.ctx.canvas.style.cursor=\"\";for(var c=0;c<this.events.length;c++)for(var d=this.events[c],b=this.eventElements[c];b;)d.run(b),b=b.parent;this.events=[];this.eventElements=[]}};return a}this.canvg=function(a,c,d){if(a==null&&c==null&&d==null)for(var c=document.getElementsByTagName(\"svg\"),b=0;b<c.length;b++){a=c[b];d=document.createElement(\"canvas\");d.width=a.clientWidth;d.height=a.clientHeight;a.parentNode.insertBefore(d,\na);a.parentNode.removeChild(a);var k=document.createElement(\"div\");k.appendChild(a);canvg(d,k.innerHTML)}else d=d||{},typeof a==\"string\"&&(a=document.getElementById(a)),a.svg==null?(b=m(),a.svg=b):(b=a.svg,b.stop()),b.opts=d,a=a.getContext(\"2d\"),typeof c.documentElement!=\"undefined\"?b.loadXmlDoc(a,c):c.substr(0,1)==\"<\"?b.loadXml(a,c):b.load(a,c)}})();\nif(CanvasRenderingContext2D)CanvasRenderingContext2D.prototype.drawSvg=function(m,a,c,d,b){canvg(this.canvas,m,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:a,offsetY:c,scaleWidth:d,scaleHeight:b})};\n(function(m){var a=m.css,c=m.CanVGRenderer,d=m.SVGRenderer,b=m.extend,k=m.merge,e=m.addEvent,f=m.createElement,g=m.discardElement;b(c.prototype,d.prototype);b(c.prototype,{create:function(a,b,c,d){this.setContainer(b,c,d);this.configure(a)},setContainer:function(a,b,c){var d=a.style,e=a.parentNode,g=d.left,d=d.top,k=a.offsetWidth,m=a.offsetHeight,s={visibility:\"hidden\",position:\"absolute\"};this.init.apply(this,[a,b,c]);this.canvas=f(\"canvas\",{width:k,height:m},{position:\"relative\",left:g,top:d},a);\nthis.ttLine=f(\"div\",null,s,e);this.ttDiv=f(\"div\",null,s,e);this.ttTimer=void 0;this.hiddenSvg=a=f(\"div\",{width:k,height:m},{visibility:\"hidden\",left:g,top:d},e);a.appendChild(this.box)},configure:function(b){var c=this,d=b.options.tooltip,f=d.borderWidth,g=c.ttDiv,m=d.style,p=c.ttLine,t=parseInt(m.padding,10),m=k(m,{padding:t+\"px\",\"background-color\":d.backgroundColor,\"border-style\":\"solid\",\"border-width\":f+\"px\",\"border-radius\":d.borderRadius+\"px\"});d.shadow&&(m=k(m,{\"box-shadow\":\"1px 1px 3px gray\",\n\"-webkit-box-shadow\":\"1px 1px 3px gray\"}));a(g,m);a(p,{\"border-left\":\"1px solid darkgray\"});e(b,\"tooltipRefresh\",function(d){var e=b.container,f=e.offsetLeft,e=e.offsetTop,k;g.innerHTML=d.text;k=b.tooltip.getPosition(g.offsetWidth,g.offsetHeight,{plotX:d.x,plotY:d.y});a(g,{visibility:\"visible\",left:k.x+\"px\",top:k.y+\"px\",\"border-color\":d.borderColor});a(p,{visibility:\"visible\",left:f+d.x+\"px\",top:e+b.plotTop+\"px\",height:b.plotHeight+\"px\"});c.ttTimer!==void 0&&clearTimeout(c.ttTimer);c.ttTimer=setTimeout(function(){a(g,\n{visibility:\"hidden\"});a(p,{visibility:\"hidden\"})},3E3)})},destroy:function(){g(this.canvas);this.ttTimer!==void 0&&clearTimeout(this.ttTimer);g(this.ttLine);g(this.ttDiv);g(this.hiddenSvg);return d.prototype.destroy.apply(this)},color:function(a,b,c){a&&a.linearGradient&&(a=a.stops[a.stops.length-1][1]);return d.prototype.color.call(this,a,b,c)},draw:function(){window.canvg(this.canvas,this.hiddenSvg.innerHTML)}})})(Highcharts);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/canvas-tools.src.js",
    "content": "/**\n * @license A class to parse color values\n * @author Stoyan Stefanov <sstoo@gmail.com>\n * @link   http://www.phpied.com/rgb-color-parser-in-javascript/\n * Use it if you like it\n *\n */\nfunction RGBColor(color_string)\n{\n    this.ok = false;\n\n    // strip any leading #\n    if (color_string.charAt(0) == '#') { // remove # if any\n        color_string = color_string.substr(1,6);\n    }\n\n    color_string = color_string.replace(/ /g,'');\n    color_string = color_string.toLowerCase();\n\n    // before getting into regexps, try simple matches\n    // and overwrite the input\n    var simple_colors = {\n        aliceblue: 'f0f8ff',\n        antiquewhite: 'faebd7',\n        aqua: '00ffff',\n        aquamarine: '7fffd4',\n        azure: 'f0ffff',\n        beige: 'f5f5dc',\n        bisque: 'ffe4c4',\n        black: '000000',\n        blanchedalmond: 'ffebcd',\n        blue: '0000ff',\n        blueviolet: '8a2be2',\n        brown: 'a52a2a',\n        burlywood: 'deb887',\n        cadetblue: '5f9ea0',\n        chartreuse: '7fff00',\n        chocolate: 'd2691e',\n        coral: 'ff7f50',\n        cornflowerblue: '6495ed',\n        cornsilk: 'fff8dc',\n        crimson: 'dc143c',\n        cyan: '00ffff',\n        darkblue: '00008b',\n        darkcyan: '008b8b',\n        darkgoldenrod: 'b8860b',\n        darkgray: 'a9a9a9',\n        darkgreen: '006400',\n        darkkhaki: 'bdb76b',\n        darkmagenta: '8b008b',\n        darkolivegreen: '556b2f',\n        darkorange: 'ff8c00',\n        darkorchid: '9932cc',\n        darkred: '8b0000',\n        darksalmon: 'e9967a',\n        darkseagreen: '8fbc8f',\n        darkslateblue: '483d8b',\n        darkslategray: '2f4f4f',\n        darkturquoise: '00ced1',\n        darkviolet: '9400d3',\n        deeppink: 'ff1493',\n        deepskyblue: '00bfff',\n        dimgray: '696969',\n        dodgerblue: '1e90ff',\n        feldspar: 'd19275',\n        firebrick: 'b22222',\n        floralwhite: 'fffaf0',\n        forestgreen: '228b22',\n        fuchsia: 'ff00ff',\n        gainsboro: 'dcdcdc',\n        ghostwhite: 'f8f8ff',\n        gold: 'ffd700',\n        goldenrod: 'daa520',\n        gray: '808080',\n        green: '008000',\n        greenyellow: 'adff2f',\n        honeydew: 'f0fff0',\n        hotpink: 'ff69b4',\n        indianred : 'cd5c5c',\n        indigo : '4b0082',\n        ivory: 'fffff0',\n        khaki: 'f0e68c',\n        lavender: 'e6e6fa',\n        lavenderblush: 'fff0f5',\n        lawngreen: '7cfc00',\n        lemonchiffon: 'fffacd',\n        lightblue: 'add8e6',\n        lightcoral: 'f08080',\n        lightcyan: 'e0ffff',\n        lightgoldenrodyellow: 'fafad2',\n        lightgrey: 'd3d3d3',\n        lightgreen: '90ee90',\n        lightpink: 'ffb6c1',\n        lightsalmon: 'ffa07a',\n        lightseagreen: '20b2aa',\n        lightskyblue: '87cefa',\n        lightslateblue: '8470ff',\n        lightslategray: '778899',\n        lightsteelblue: 'b0c4de',\n        lightyellow: 'ffffe0',\n        lime: '00ff00',\n        limegreen: '32cd32',\n        linen: 'faf0e6',\n        magenta: 'ff00ff',\n        maroon: '800000',\n        mediumaquamarine: '66cdaa',\n        mediumblue: '0000cd',\n        mediumorchid: 'ba55d3',\n        mediumpurple: '9370d8',\n        mediumseagreen: '3cb371',\n        mediumslateblue: '7b68ee',\n        mediumspringgreen: '00fa9a',\n        mediumturquoise: '48d1cc',\n        mediumvioletred: 'c71585',\n        midnightblue: '191970',\n        mintcream: 'f5fffa',\n        mistyrose: 'ffe4e1',\n        moccasin: 'ffe4b5',\n        navajowhite: 'ffdead',\n        navy: '000080',\n        oldlace: 'fdf5e6',\n        olive: '808000',\n        olivedrab: '6b8e23',\n        orange: 'ffa500',\n        orangered: 'ff4500',\n        orchid: 'da70d6',\n        palegoldenrod: 'eee8aa',\n        palegreen: '98fb98',\n        paleturquoise: 'afeeee',\n        palevioletred: 'd87093',\n        papayawhip: 'ffefd5',\n        peachpuff: 'ffdab9',\n        peru: 'cd853f',\n        pink: 'ffc0cb',\n        plum: 'dda0dd',\n        powderblue: 'b0e0e6',\n        purple: '800080',\n        red: 'ff0000',\n        rosybrown: 'bc8f8f',\n        royalblue: '4169e1',\n        saddlebrown: '8b4513',\n        salmon: 'fa8072',\n        sandybrown: 'f4a460',\n        seagreen: '2e8b57',\n        seashell: 'fff5ee',\n        sienna: 'a0522d',\n        silver: 'c0c0c0',\n        skyblue: '87ceeb',\n        slateblue: '6a5acd',\n        slategray: '708090',\n        snow: 'fffafa',\n        springgreen: '00ff7f',\n        steelblue: '4682b4',\n        tan: 'd2b48c',\n        teal: '008080',\n        thistle: 'd8bfd8',\n        tomato: 'ff6347',\n        turquoise: '40e0d0',\n        violet: 'ee82ee',\n        violetred: 'd02090',\n        wheat: 'f5deb3',\n        white: 'ffffff',\n        whitesmoke: 'f5f5f5',\n        yellow: 'ffff00',\n        yellowgreen: '9acd32'\n    };\n    for (var key in simple_colors) {\n        if (color_string == key) {\n            color_string = simple_colors[key];\n        }\n    }\n    // emd of simple type-in colors\n\n    // array of color definition objects\n    var color_defs = [\n        {\n            re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n            example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1]),\n                    parseInt(bits[2]),\n                    parseInt(bits[3])\n                ];\n            }\n        },\n        {\n            re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n            example: ['#00ff00', '336699'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1], 16),\n                    parseInt(bits[2], 16),\n                    parseInt(bits[3], 16)\n                ];\n            }\n        },\n        {\n            re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n            example: ['#fb0', 'f0f'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1] + bits[1], 16),\n                    parseInt(bits[2] + bits[2], 16),\n                    parseInt(bits[3] + bits[3], 16)\n                ];\n            }\n        }\n    ];\n\n    // search through the definitions to find a match\n    for (var i = 0; i < color_defs.length; i++) {\n        var re = color_defs[i].re;\n        var processor = color_defs[i].process;\n        var bits = re.exec(color_string);\n        if (bits) {\n            channels = processor(bits);\n            this.r = channels[0];\n            this.g = channels[1];\n            this.b = channels[2];\n            this.ok = true;\n        }\n\n    }\n\n    // validate/cleanup values\n    this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);\n    this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);\n    this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);\n\n    // some getters\n    this.toRGB = function () {\n        return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';\n    }\n    this.toHex = function () {\n        var r = this.r.toString(16);\n        var g = this.g.toString(16);\n        var b = this.b.toString(16);\n        if (r.length == 1) r = '0' + r;\n        if (g.length == 1) g = '0' + g;\n        if (b.length == 1) b = '0' + b;\n        return '#' + r + g + b;\n    }\n\n    // help\n    this.getHelpXML = function () {\n\n        var examples = new Array();\n        // add regexps\n        for (var i = 0; i < color_defs.length; i++) {\n            var example = color_defs[i].example;\n            for (var j = 0; j < example.length; j++) {\n                examples[examples.length] = example[j];\n            }\n        }\n        // add type-in colors\n        for (var sc in simple_colors) {\n            examples[examples.length] = sc;\n        }\n\n        var xml = document.createElement('ul');\n        xml.setAttribute('id', 'rgbcolor-examples');\n        for (var i = 0; i < examples.length; i++) {\n            try {\n                var list_item = document.createElement('li');\n                var list_color = new RGBColor(examples[i]);\n                var example_div = document.createElement('div');\n                example_div.style.cssText =\n                        'margin: 3px; '\n                        + 'border: 1px solid black; '\n                        + 'background:' + list_color.toHex() + '; '\n                        + 'color:' + list_color.toHex()\n                ;\n                example_div.appendChild(document.createTextNode('test'));\n                var list_item_value = document.createTextNode(\n                    ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()\n                );\n                list_item.appendChild(example_div);\n                list_item.appendChild(list_item_value);\n                xml.appendChild(list_item);\n\n            } catch(e){}\n        }\n        return xml;\n\n    }\n\n}\n\n/**\n * @license canvg.js - Javascript SVG parser and renderer on Canvas\n * MIT Licensed \n * Gabe Lerner (gabelerner@gmail.com)\n * http://code.google.com/p/canvg/\n *\n * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/\n *\n */\nif(!window.console) {\n\twindow.console = {};\n\twindow.console.log = function(str) {};\n\twindow.console.dir = function(str) {};\n}\n\nif(!Array.prototype.indexOf){\n\tArray.prototype.indexOf = function(obj){\n\t\tfor(var i=0; i<this.length; i++){\n\t\t\tif(this[i]==obj){\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n}\n\n(function(){\n\t// canvg(target, s)\n\t// empty parameters: replace all 'svg' elements on page with 'canvas' elements\n\t// target: canvas element or the id of a canvas element\n\t// s: svg string, url to svg file, or xml document\n\t// opts: optional hash of options\n\t//\t\t ignoreMouse: true => ignore mouse events\n\t//\t\t ignoreAnimation: true => ignore animations\n\t//\t\t ignoreDimensions: true => does not try to resize canvas\n\t//\t\t ignoreClear: true => does not clear canvas\n\t//\t\t offsetX: int => draws at a x offset\n\t//\t\t offsetY: int => draws at a y offset\n\t//\t\t scaleWidth: int => scales horizontally to width\n\t//\t\t scaleHeight: int => scales vertically to height\n\t//\t\t renderCallback: function => will call the function after the first render is completed\n\t//\t\t forceRedraw: function => will call the function on every frame, if it returns true, will redraw\n\tthis.canvg = function (target, s, opts) {\n\t\t// no parameters\n\t\tif (target == null && s == null && opts == null) {\n\t\t\tvar svgTags = document.getElementsByTagName('svg');\n\t\t\tfor (var i=0; i<svgTags.length; i++) {\n\t\t\t\tvar svgTag = svgTags[i];\n\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\tc.width = svgTag.clientWidth;\n\t\t\t\tc.height = svgTag.clientHeight;\n\t\t\t\tsvgTag.parentNode.insertBefore(c, svgTag);\n\t\t\t\tsvgTag.parentNode.removeChild(svgTag);\n\t\t\t\tvar div = document.createElement('div');\n\t\t\t\tdiv.appendChild(svgTag);\n\t\t\t\tcanvg(c, div.innerHTML);\n\t\t\t}\n\t\t\treturn;\n\t\t}\t\n\t\topts = opts || {};\n\t\n\t\tif (typeof target == 'string') {\n\t\t\ttarget = document.getElementById(target);\n\t\t}\n\t\t\n\t\t// reuse class per canvas\n\t\tvar svg;\n\t\tif (target.svg == null) {\n\t\t\tsvg = build();\n\t\t\ttarget.svg = svg;\n\t\t}\n\t\telse {\n\t\t\tsvg = target.svg;\n\t\t\tsvg.stop();\n\t\t}\n\t\tsvg.opts = opts;\n\t\t\n\t\tvar ctx = target.getContext('2d');\n\t\tif (typeof(s.documentElement) != 'undefined') {\n\t\t\t// load from xml doc\n\t\t\tsvg.loadXmlDoc(ctx, s);\n\t\t}\n\t\telse if (s.substr(0,1) == '<') {\n\t\t\t// load from xml string\n\t\t\tsvg.loadXml(ctx, s);\n\t\t}\n\t\telse {\n\t\t\t// load from url\n\t\t\tsvg.load(ctx, s);\n\t\t}\n\t}\n\n\tfunction build() {\n\t\tvar svg = { };\n\t\t\n\t\tsvg.FRAMERATE = 30;\n\t\tsvg.MAX_VIRTUAL_PIXELS = 30000;\n\t\t\n\t\t// globals\n\t\tsvg.init = function(ctx) {\n\t\t\tsvg.Definitions = {};\n\t\t\tsvg.Styles = {};\n\t\t\tsvg.Animations = [];\n\t\t\tsvg.Images = [];\n\t\t\tsvg.ctx = ctx;\n\t\t\tsvg.ViewPort = new (function () {\n\t\t\t\tthis.viewPorts = [];\n\t\t\t\tthis.Clear = function() { this.viewPorts = []; }\n\t\t\t\tthis.SetCurrent = function(width, height) { this.viewPorts.push({ width: width, height: height }); }\n\t\t\t\tthis.RemoveCurrent = function() { this.viewPorts.pop(); }\n\t\t\t\tthis.Current = function() { return this.viewPorts[this.viewPorts.length - 1]; }\n\t\t\t\tthis.width = function() { return this.Current().width; }\n\t\t\t\tthis.height = function() { return this.Current().height; }\n\t\t\t\tthis.ComputeSize = function(d) {\n\t\t\t\t\tif (d != null && typeof(d) == 'number') return d;\n\t\t\t\t\tif (d == 'x') return this.width();\n\t\t\t\t\tif (d == 'y') return this.height();\n\t\t\t\t\treturn Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2);\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tsvg.init();\n\t\t\n\t\t// images loaded\n\t\tsvg.ImagesLoaded = function() { \n\t\t\tfor (var i=0; i<svg.Images.length; i++) {\n\t\t\t\tif (!svg.Images[i].loaded) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t// trim\n\t\tsvg.trim = function(s) { return s.replace(/^\\s+|\\s+$/g, ''); }\n\t\t\n\t\t// compress spaces\n\t\tsvg.compressSpaces = function(s) { return s.replace(/[\\s\\r\\t\\n]+/gm,' '); }\n\t\t\n\t\t// ajax\n\t\tsvg.ajax = function(url) {\n\t\t\tvar AJAX;\n\t\t\tif(window.XMLHttpRequest){AJAX=new XMLHttpRequest();}\n\t\t\telse{AJAX=new ActiveXObject('Microsoft.XMLHTTP');}\n\t\t\tif(AJAX){\n\t\t\t   AJAX.open('GET',url,false);\n\t\t\t   AJAX.send(null);\n\t\t\t   return AJAX.responseText;\n\t\t\t}\n\t\t\treturn null;\n\t\t} \n\t\t\n\t\t// parse xml\n\t\tsvg.parseXml = function(xml) {\n\t\t\tif (window.DOMParser)\n\t\t\t{\n\t\t\t\tvar parser = new DOMParser();\n\t\t\t\treturn parser.parseFromString(xml, 'text/xml');\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\txml = xml.replace(/<!DOCTYPE svg[^>]*>/, '');\n\t\t\t\tvar xmlDoc = new ActiveXObject('Microsoft.XMLDOM');\n\t\t\t\txmlDoc.async = 'false';\n\t\t\t\txmlDoc.loadXML(xml); \n\t\t\t\treturn xmlDoc;\n\t\t\t}\t\t\n\t\t}\n\t\t\n\t\tsvg.Property = function(name, value) {\n\t\t\tthis.name = name;\n\t\t\tthis.value = value;\n\t\t\t\n\t\t\tthis.hasValue = function() {\n\t\t\t\treturn (this.value != null && this.value !== '');\n\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t// return the numerical value of the property\n\t\t\tthis.numValue = function() {\n\t\t\t\tif (!this.hasValue()) return 0;\n\t\t\t\t\n\t\t\t\tvar n = parseFloat(this.value);\n\t\t\t\tif ((this.value + '').match(/%$/)) {\n\t\t\t\t\tn = n / 100.0;\n\t\t\t\t}\n\t\t\t\treturn n;\n\t\t\t}\n\t\t\t\n\t\t\tthis.valueOrDefault = function(def) {\n\t\t\t\tif (this.hasValue()) return this.value;\n\t\t\t\treturn def;\n\t\t\t}\n\t\t\t\n\t\t\tthis.numValueOrDefault = function(def) {\n\t\t\t\tif (this.hasValue()) return this.numValue();\n\t\t\t\treturn def;\n\t\t\t}\n\t\t\t\n\t\t\t/* EXTENSIONS */\n\t\t\tvar that = this;\n\t\t\t\n\t\t\t// color extensions\n\t\t\tthis.Color = {\n\t\t\t\t// augment the current color value with the opacity\n\t\t\t\taddOpacity: function(opacity) {\n\t\t\t\t\tvar newValue = that.value;\n\t\t\t\t\tif (opacity != null && opacity != '') {\n\t\t\t\t\t\tvar color = new RGBColor(that.value);\n\t\t\t\t\t\tif (color.ok) {\n\t\t\t\t\t\t\tnewValue = 'rgba(' + color.r + ', ' + color.g + ', ' + color.b + ', ' + opacity + ')';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn new svg.Property(that.name, newValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// definition extensions\n\t\t\tthis.Definition = {\n\t\t\t\t// get the definition from the definitions table\n\t\t\t\tgetDefinition: function() {\n\t\t\t\t\tvar name = that.value.replace(/^(url\\()?#([^\\)]+)\\)?$/, '$2');\n\t\t\t\t\treturn svg.Definitions[name];\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tisUrl: function() {\n\t\t\t\t\treturn that.value.indexOf('url(') == 0\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tgetFillStyle: function(e) {\n\t\t\t\t\tvar def = this.getDefinition();\n\t\t\t\t\t\n\t\t\t\t\t// gradient\n\t\t\t\t\tif (def != null && def.createGradient) {\n\t\t\t\t\t\treturn def.createGradient(svg.ctx, e);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// pattern\n\t\t\t\t\tif (def != null && def.createPattern) {\n\t\t\t\t\t\treturn def.createPattern(svg.ctx, e);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// length extensions\n\t\t\tthis.Length = {\n\t\t\t\tDPI: function(viewPort) {\n\t\t\t\t\treturn 96.0; // TODO: compute?\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tEM: function(viewPort) {\n\t\t\t\t\tvar em = 12;\n\t\t\t\t\t\n\t\t\t\t\tvar fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tif (fontSize.hasValue()) em = fontSize.Length.toPixels(viewPort);\n\t\t\t\t\t\n\t\t\t\t\treturn em;\n\t\t\t\t},\n\t\t\t\n\t\t\t\t// get the length as pixels\n\t\t\t\ttoPixels: function(viewPort) {\n\t\t\t\t\tif (!that.hasValue()) return 0;\n\t\t\t\t\tvar s = that.value+'';\n\t\t\t\t\tif (s.match(/em$/)) return that.numValue() * this.EM(viewPort);\n\t\t\t\t\tif (s.match(/ex$/)) return that.numValue() * this.EM(viewPort) / 2.0;\n\t\t\t\t\tif (s.match(/px$/)) return that.numValue();\n\t\t\t\t\tif (s.match(/pt$/)) return that.numValue() * 1.25;\n\t\t\t\t\tif (s.match(/pc$/)) return that.numValue() * 15;\n\t\t\t\t\tif (s.match(/cm$/)) return that.numValue() * this.DPI(viewPort) / 2.54;\n\t\t\t\t\tif (s.match(/mm$/)) return that.numValue() * this.DPI(viewPort) / 25.4;\n\t\t\t\t\tif (s.match(/in$/)) return that.numValue() * this.DPI(viewPort);\n\t\t\t\t\tif (s.match(/%$/)) return that.numValue() * svg.ViewPort.ComputeSize(viewPort);\n\t\t\t\t\treturn that.numValue();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// time extensions\n\t\t\tthis.Time = {\n\t\t\t\t// get the time as milliseconds\n\t\t\t\ttoMilliseconds: function() {\n\t\t\t\t\tif (!that.hasValue()) return 0;\n\t\t\t\t\tvar s = that.value+'';\n\t\t\t\t\tif (s.match(/s$/)) return that.numValue() * 1000;\n\t\t\t\t\tif (s.match(/ms$/)) return that.numValue();\n\t\t\t\t\treturn that.numValue();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// angle extensions\n\t\t\tthis.Angle = {\n\t\t\t\t// get the angle as radians\n\t\t\t\ttoRadians: function() {\n\t\t\t\t\tif (!that.hasValue()) return 0;\n\t\t\t\t\tvar s = that.value+'';\n\t\t\t\t\tif (s.match(/deg$/)) return that.numValue() * (Math.PI / 180.0);\n\t\t\t\t\tif (s.match(/grad$/)) return that.numValue() * (Math.PI / 200.0);\n\t\t\t\t\tif (s.match(/rad$/)) return that.numValue();\n\t\t\t\t\treturn that.numValue() * (Math.PI / 180.0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// fonts\n\t\tsvg.Font = new (function() {\n\t\t\tthis.Styles = ['normal','italic','oblique','inherit'];\n\t\t\tthis.Variants = ['normal','small-caps','inherit'];\n\t\t\tthis.Weights = ['normal','bold','bolder','lighter','100','200','300','400','500','600','700','800','900','inherit'];\n\t\t\t\n\t\t\tthis.CreateFont = function(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) { \n\t\t\t\tvar f = inherit != null ? this.Parse(inherit) : this.CreateFont('', '', '', '', '', svg.ctx.font);\n\t\t\t\treturn { \n\t\t\t\t\tfontFamily: fontFamily || f.fontFamily, \n\t\t\t\t\tfontSize: fontSize || f.fontSize, \n\t\t\t\t\tfontStyle: fontStyle || f.fontStyle, \n\t\t\t\t\tfontWeight: fontWeight || f.fontWeight, \n\t\t\t\t\tfontVariant: fontVariant || f.fontVariant,\n\t\t\t\t\ttoString: function () { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(' ') } \n\t\t\t\t} \n\t\t\t}\n\t\t\t\n\t\t\tvar that = this;\n\t\t\tthis.Parse = function(s) {\n\t\t\t\tvar f = {};\n\t\t\t\tvar d = svg.trim(svg.compressSpaces(s || '')).split(' ');\n\t\t\t\tvar set = { fontSize: false, fontStyle: false, fontWeight: false, fontVariant: false }\n\t\t\t\tvar ff = '';\n\t\t\t\tfor (var i=0; i<d.length; i++) {\n\t\t\t\t\tif (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontStyle = d[i]; set.fontStyle = true; }\n\t\t\t\t\telse if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontVariant = d[i]; set.fontStyle = set.fontVariant = true;\t}\n\t\t\t\t\telse if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) {\tif (d[i] != 'inherit') f.fontWeight = d[i]; set.fontStyle = set.fontVariant = set.fontWeight = true; }\n\t\t\t\t\telse if (!set.fontSize) { if (d[i] != 'inherit') f.fontSize = d[i].split('/')[0]; set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; }\n\t\t\t\t\telse { if (d[i] != 'inherit') ff += d[i]; }\n\t\t\t\t} if (ff != '') f.fontFamily = ff;\n\t\t\t\treturn f;\n\t\t\t}\n\t\t});\n\t\t\n\t\t// points and paths\n\t\tsvg.ToNumberArray = function(s) {\n\t\t\tvar a = svg.trim(svg.compressSpaces((s || '').replace(/,/g, ' '))).split(' ');\n\t\t\tfor (var i=0; i<a.length; i++) {\n\t\t\t\ta[i] = parseFloat(a[i]);\n\t\t\t}\n\t\t\treturn a;\n\t\t}\t\t\n\t\tsvg.Point = function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\t\n\t\t\tthis.angleTo = function(p) {\n\t\t\t\treturn Math.atan2(p.y - this.y, p.x - this.x);\n\t\t\t}\n\t\t\t\n\t\t\tthis.applyTransform = function(v) {\n\t\t\t\tvar xp = this.x * v[0] + this.y * v[2] + v[4];\n\t\t\t\tvar yp = this.x * v[1] + this.y * v[3] + v[5];\n\t\t\t\tthis.x = xp;\n\t\t\t\tthis.y = yp;\n\t\t\t}\n\t\t}\n\t\tsvg.CreatePoint = function(s) {\n\t\t\tvar a = svg.ToNumberArray(s);\n\t\t\treturn new svg.Point(a[0], a[1]);\n\t\t}\n\t\tsvg.CreatePath = function(s) {\n\t\t\tvar a = svg.ToNumberArray(s);\n\t\t\tvar path = [];\n\t\t\tfor (var i=0; i<a.length; i+=2) {\n\t\t\t\tpath.push(new svg.Point(a[i], a[i+1]));\n\t\t\t}\n\t\t\treturn path;\n\t\t}\n\t\t\n\t\t// bounding box\n\t\tsvg.BoundingBox = function(x1, y1, x2, y2) { // pass in initial points if you want\n\t\t\tthis.x1 = Number.NaN;\n\t\t\tthis.y1 = Number.NaN;\n\t\t\tthis.x2 = Number.NaN;\n\t\t\tthis.y2 = Number.NaN;\n\t\t\t\n\t\t\tthis.x = function() { return this.x1; }\n\t\t\tthis.y = function() { return this.y1; }\n\t\t\tthis.width = function() { return this.x2 - this.x1; }\n\t\t\tthis.height = function() { return this.y2 - this.y1; }\n\t\t\t\n\t\t\tthis.addPoint = function(x, y) {\t\n\t\t\t\tif (x != null) {\n\t\t\t\t\tif (isNaN(this.x1) || isNaN(this.x2)) {\n\t\t\t\t\t\tthis.x1 = x;\n\t\t\t\t\t\tthis.x2 = x;\n\t\t\t\t\t}\n\t\t\t\t\tif (x < this.x1) this.x1 = x;\n\t\t\t\t\tif (x > this.x2) this.x2 = x;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif (y != null) {\n\t\t\t\t\tif (isNaN(this.y1) || isNaN(this.y2)) {\n\t\t\t\t\t\tthis.y1 = y;\n\t\t\t\t\t\tthis.y2 = y;\n\t\t\t\t\t}\n\t\t\t\t\tif (y < this.y1) this.y1 = y;\n\t\t\t\t\tif (y > this.y2) this.y2 = y;\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t\tthis.addX = function(x) { this.addPoint(x, null); }\n\t\t\tthis.addY = function(y) { this.addPoint(null, y); }\n\t\t\t\n\t\t\tthis.addBoundingBox = function(bb) {\n\t\t\t\tthis.addPoint(bb.x1, bb.y1);\n\t\t\t\tthis.addPoint(bb.x2, bb.y2);\n\t\t\t}\n\t\t\t\n\t\t\tthis.addQuadraticCurve = function(p0x, p0y, p1x, p1y, p2x, p2y) {\n\t\t\t\tvar cp1x = p0x + 2/3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0)\n\t\t\t\tvar cp1y = p0y + 2/3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0)\n\t\t\t\tvar cp2x = cp1x + 1/3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0)\n\t\t\t\tvar cp2y = cp1y + 1/3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0)\n\t\t\t\tthis.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y,\tcp2y, p2x, p2y);\n\t\t\t}\n\t\t\t\n\t\t\tthis.addBezierCurve = function(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n\t\t\t\t// from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n\t\t\t\tvar p0 = [p0x, p0y], p1 = [p1x, p1y], p2 = [p2x, p2y], p3 = [p3x, p3y];\n\t\t\t\tthis.addPoint(p0[0], p0[1]);\n\t\t\t\tthis.addPoint(p3[0], p3[1]);\n\t\t\t\t\n\t\t\t\tfor (i=0; i<=1; i++) {\n\t\t\t\t\tvar f = function(t) { \n\t\t\t\t\t\treturn Math.pow(1-t, 3) * p0[i]\n\t\t\t\t\t\t+ 3 * Math.pow(1-t, 2) * t * p1[i]\n\t\t\t\t\t\t+ 3 * (1-t) * Math.pow(t, 2) * p2[i]\n\t\t\t\t\t\t+ Math.pow(t, 3) * p3[i];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n\t\t\t\t\tvar a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n\t\t\t\t\tvar c = 3 * p1[i] - 3 * p0[i];\n\t\t\t\t\t\n\t\t\t\t\tif (a == 0) {\n\t\t\t\t\t\tif (b == 0) continue;\n\t\t\t\t\t\tvar t = -c / b;\n\t\t\t\t\t\tif (0 < t && t < 1) {\n\t\t\t\t\t\t\tif (i == 0) this.addX(f(t));\n\t\t\t\t\t\t\tif (i == 1) this.addY(f(t));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar b2ac = Math.pow(b, 2) - 4 * c * a;\n\t\t\t\t\tif (b2ac < 0) continue;\n\t\t\t\t\tvar t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n\t\t\t\t\tif (0 < t1 && t1 < 1) {\n\t\t\t\t\t\tif (i == 0) this.addX(f(t1));\n\t\t\t\t\t\tif (i == 1) this.addY(f(t1));\n\t\t\t\t\t}\n\t\t\t\t\tvar t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n\t\t\t\t\tif (0 < t2 && t2 < 1) {\n\t\t\t\t\t\tif (i == 0) this.addX(f(t2));\n\t\t\t\t\t\tif (i == 1) this.addY(f(t2));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.isPointInBox = function(x, y) {\n\t\t\t\treturn (this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2);\n\t\t\t}\n\t\t\t\n\t\t\tthis.addPoint(x1, y1);\n\t\t\tthis.addPoint(x2, y2);\n\t\t}\n\t\t\n\t\t// transforms\n\t\tsvg.Transform = function(v) {\t\n\t\t\tvar that = this;\n\t\t\tthis.Type = {}\n\t\t\n\t\t\t// translate\n\t\t\tthis.Type.translate = function(s) {\n\t\t\t\tthis.p = svg.CreatePoint(s);\t\t\t\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.translate(this.p.x || 0.0, this.p.y || 0.0);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tp.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// rotate\n\t\t\tthis.Type.rotate = function(s) {\n\t\t\t\tvar a = svg.ToNumberArray(s);\n\t\t\t\tthis.angle = new svg.Property('angle', a[0]);\n\t\t\t\tthis.cx = a[1] || 0;\n\t\t\t\tthis.cy = a[2] || 0;\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.translate(this.cx, this.cy);\n\t\t\t\t\tctx.rotate(this.angle.Angle.toRadians());\n\t\t\t\t\tctx.translate(-this.cx, -this.cy);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tvar a = this.angle.Angle.toRadians();\n\t\t\t\t\tp.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]);\n\t\t\t\t\tp.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]);\n\t\t\t\t\tp.applyTransform([1, 0, 0, 1, -this.p.x || 0.0, -this.p.y || 0.0]);\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.Type.scale = function(s) {\n\t\t\t\tthis.p = svg.CreatePoint(s);\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.scale(this.p.x || 1.0, this.p.y || this.p.x || 1.0);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tp.applyTransform([this.p.x || 0.0, 0, 0, this.p.y || 0.0, 0, 0]);\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.Type.matrix = function(s) {\n\t\t\t\tthis.m = svg.ToNumberArray(s);\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tp.applyTransform(this.m);\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.Type.SkewBase = function(s) {\n\t\t\t\tthis.base = that.Type.matrix;\n\t\t\t\tthis.base(s);\n\t\t\t\tthis.angle = new svg.Property('angle', s);\n\t\t\t}\n\t\t\tthis.Type.SkewBase.prototype = new this.Type.matrix;\n\t\t\t\n\t\t\tthis.Type.skewX = function(s) {\n\t\t\t\tthis.base = that.Type.SkewBase;\n\t\t\t\tthis.base(s);\n\t\t\t\tthis.m = [1, 0, Math.tan(this.angle.Angle.toRadians()), 1, 0, 0];\n\t\t\t}\n\t\t\tthis.Type.skewX.prototype = new this.Type.SkewBase;\n\t\t\t\n\t\t\tthis.Type.skewY = function(s) {\n\t\t\t\tthis.base = that.Type.SkewBase;\n\t\t\t\tthis.base(s);\n\t\t\t\tthis.m = [1, Math.tan(this.angle.Angle.toRadians()), 0, 1, 0, 0];\n\t\t\t}\n\t\t\tthis.Type.skewY.prototype = new this.Type.SkewBase;\n\t\t\n\t\t\tthis.transforms = [];\n\t\t\t\n\t\t\tthis.apply = function(ctx) {\n\t\t\t\tfor (var i=0; i<this.transforms.length; i++) {\n\t\t\t\t\tthis.transforms[i].apply(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\tfor (var i=0; i<this.transforms.length; i++) {\n\t\t\t\t\tthis.transforms[i].applyToPoint(p);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar data = svg.trim(svg.compressSpaces(v)).split(/\\s(?=[a-z])/);\n\t\t\tfor (var i=0; i<data.length; i++) {\n\t\t\t\tvar type = data[i].split('(')[0];\n\t\t\t\tvar s = data[i].split('(')[1].replace(')','');\n\t\t\t\tvar transform = new this.Type[type](s);\n\t\t\t\tthis.transforms.push(transform);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// aspect ratio\n\t\tsvg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) {\n\t\t\t// aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute\n\t\t\taspectRatio = svg.compressSpaces(aspectRatio);\n\t\t\taspectRatio = aspectRatio.replace(/^defer\\s/,''); // ignore defer\n\t\t\tvar align = aspectRatio.split(' ')[0] || 'xMidYMid';\n\t\t\tvar meetOrSlice = aspectRatio.split(' ')[1] || 'meet';\t\t\t\t\t\n\t\n\t\t\t// calculate scale\n\t\t\tvar scaleX = width / desiredWidth;\n\t\t\tvar scaleY = height / desiredHeight;\n\t\t\tvar scaleMin = Math.min(scaleX, scaleY);\n\t\t\tvar scaleMax = Math.max(scaleX, scaleY);\n\t\t\tif (meetOrSlice == 'meet') { desiredWidth *= scaleMin; desiredHeight *= scaleMin; }\n\t\t\tif (meetOrSlice == 'slice') { desiredWidth *= scaleMax; desiredHeight *= scaleMax; }\t\n\t\t\t\n\t\t\trefX = new svg.Property('refX', refX);\n\t\t\trefY = new svg.Property('refY', refY);\n\t\t\tif (refX.hasValue() && refY.hasValue()) {\t\t\t\t\n\t\t\t\tctx.translate(-scaleMin * refX.Length.toPixels('x'), -scaleMin * refY.Length.toPixels('y'));\n\t\t\t} \n\t\t\telse {\t\t\t\t\t\n\t\t\t\t// align\n\t\t\t\tif (align.match(/^xMid/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width / 2.0 - desiredWidth / 2.0, 0); \n\t\t\t\tif (align.match(/YMid$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height / 2.0 - desiredHeight / 2.0); \n\t\t\t\tif (align.match(/^xMax/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width - desiredWidth, 0); \n\t\t\t\tif (align.match(/YMax$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height - desiredHeight); \n\t\t\t}\n\t\t\t\n\t\t\t// scale\n\t\t\tif (align == 'none') ctx.scale(scaleX, scaleY);\n\t\t\telse if (meetOrSlice == 'meet') ctx.scale(scaleMin, scaleMin); \n\t\t\telse if (meetOrSlice == 'slice') ctx.scale(scaleMax, scaleMax); \t\n\t\t\t\n\t\t\t// translate\n\t\t\tctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY);\t\t\t\n\t\t}\n\t\t\n\t\t// elements\n\t\tsvg.Element = {}\n\t\t\n\t\tsvg.Element.ElementBase = function(node) {\t\n\t\t\tthis.attributes = {};\n\t\t\tthis.styles = {};\n\t\t\tthis.children = [];\n\t\t\t\n\t\t\t// get or create attribute\n\t\t\tthis.attribute = function(name, createIfNotExists) {\n\t\t\t\tvar a = this.attributes[name];\n\t\t\t\tif (a != null) return a;\n\t\t\t\t\t\t\t\n\t\t\t\ta = new svg.Property(name, '');\n\t\t\t\tif (createIfNotExists == true) this.attributes[name] = a;\n\t\t\t\treturn a;\n\t\t\t}\n\t\t\t\n\t\t\t// get or create style, crawls up node tree\n\t\t\tthis.style = function(name, createIfNotExists) {\n\t\t\t\tvar s = this.styles[name];\n\t\t\t\tif (s != null) return s;\n\t\t\t\t\n\t\t\t\tvar a = this.attribute(name);\n\t\t\t\tif (a != null && a.hasValue()) {\n\t\t\t\t\treturn a;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar p = this.parent;\n\t\t\t\tif (p != null) {\n\t\t\t\t\tvar ps = p.style(name);\n\t\t\t\t\tif (ps != null && ps.hasValue()) {\n\t\t\t\t\t\treturn ps;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\ts = new svg.Property(name, '');\n\t\t\t\tif (createIfNotExists == true) this.styles[name] = s;\n\t\t\t\treturn s;\n\t\t\t}\n\t\t\t\n\t\t\t// base render\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// don't render display=none\n\t\t\t\tif (this.style('display').value == 'none') return;\n\t\t\t\t\n\t\t\t\t// don't render visibility=hidden\n\t\t\t\tif (this.attribute('visibility').value == 'hidden') return;\n\t\t\t\n\t\t\t\tctx.save();\n\t\t\t\t\tthis.setContext(ctx);\n\t\t\t\t\t\t// mask\n\t\t\t\t\t\tif (this.attribute('mask').hasValue()) {\n\t\t\t\t\t\t\tvar mask = this.attribute('mask').Definition.getDefinition();\n\t\t\t\t\t\t\tif (mask != null) mask.apply(ctx, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (this.style('filter').hasValue()) {\n\t\t\t\t\t\t\tvar filter = this.style('filter').Definition.getDefinition();\n\t\t\t\t\t\t\tif (filter != null) filter.apply(ctx, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse this.renderChildren(ctx);\t\t\t\t\n\t\t\t\t\tthis.clearContext(ctx);\n\t\t\t\tctx.restore();\n\t\t\t}\n\t\t\t\n\t\t\t// base set context\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t}\n\t\t\t\n\t\t\t// base clear context\n\t\t\tthis.clearContext = function(ctx) {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\t// base render children\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tthis.children[i].render(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.addChild = function(childNode, create) {\n\t\t\t\tvar child = childNode;\n\t\t\t\tif (create) child = svg.CreateElement(childNode);\n\t\t\t\tchild.parent = this;\n\t\t\t\tthis.children.push(child);\t\t\t\n\t\t\t}\n\t\t\t\t\n\t\t\tif (node != null && node.nodeType == 1) { //ELEMENT_NODE\n\t\t\t\t// add children\n\t\t\t\tfor (var i=0; i<node.childNodes.length; i++) {\n\t\t\t\t\tvar childNode = node.childNodes[i];\n\t\t\t\t\tif (childNode.nodeType == 1) this.addChild(childNode, true); //ELEMENT_NODE\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// add attributes\n\t\t\t\tfor (var i=0; i<node.attributes.length; i++) {\n\t\t\t\t\tvar attribute = node.attributes[i];\n\t\t\t\t\tthis.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.nodeValue);\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t// add tag styles\n\t\t\t\tvar styles = svg.Styles[node.nodeName];\n\t\t\t\tif (styles != null) {\n\t\t\t\t\tfor (var name in styles) {\n\t\t\t\t\t\tthis.styles[name] = styles[name];\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t// add class styles\n\t\t\t\tif (this.attribute('class').hasValue()) {\n\t\t\t\t\tvar classes = svg.compressSpaces(this.attribute('class').value).split(' ');\n\t\t\t\t\tfor (var j=0; j<classes.length; j++) {\n\t\t\t\t\t\tstyles = svg.Styles['.'+classes[j]];\n\t\t\t\t\t\tif (styles != null) {\n\t\t\t\t\t\t\tfor (var name in styles) {\n\t\t\t\t\t\t\t\tthis.styles[name] = styles[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyles = svg.Styles[node.nodeName+'.'+classes[j]];\n\t\t\t\t\t\tif (styles != null) {\n\t\t\t\t\t\t\tfor (var name in styles) {\n\t\t\t\t\t\t\t\tthis.styles[name] = styles[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// add inline styles\n\t\t\t\tif (this.attribute('style').hasValue()) {\n\t\t\t\t\tvar styles = this.attribute('style').value.split(';');\n\t\t\t\t\tfor (var i=0; i<styles.length; i++) {\n\t\t\t\t\t\tif (svg.trim(styles[i]) != '') {\n\t\t\t\t\t\t\tvar style = styles[i].split(':');\n\t\t\t\t\t\t\tvar name = svg.trim(style[0]);\n\t\t\t\t\t\t\tvar value = svg.trim(style[1]);\n\t\t\t\t\t\t\tthis.styles[name] = new svg.Property(name, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\t\n\n\t\t\t\t// add id\n\t\t\t\tif (this.attribute('id').hasValue()) {\n\t\t\t\t\tif (svg.Definitions[this.attribute('id').value] == null) {\n\t\t\t\t\t\tsvg.Definitions[this.attribute('id').value] = this;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tsvg.Element.RenderedElementBase = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\t// fill\n\t\t\t\tif (this.style('fill').Definition.isUrl()) {\n\t\t\t\t\tvar fs = this.style('fill').Definition.getFillStyle(this);\n\t\t\t\t\tif (fs != null) ctx.fillStyle = fs;\n\t\t\t\t}\n\t\t\t\telse if (this.style('fill').hasValue()) {\n\t\t\t\t\tvar fillStyle = this.style('fill');\n\t\t\t\t\tif (this.style('fill-opacity').hasValue()) fillStyle = fillStyle.Color.addOpacity(this.style('fill-opacity').value);\n\t\t\t\t\tctx.fillStyle = (fillStyle.value == 'none' ? 'rgba(0,0,0,0)' : fillStyle.value);\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t// stroke\n\t\t\t\tif (this.style('stroke').Definition.isUrl()) {\n\t\t\t\t\tvar fs = this.style('stroke').Definition.getFillStyle(this);\n\t\t\t\t\tif (fs != null) ctx.strokeStyle = fs;\n\t\t\t\t}\n\t\t\t\telse if (this.style('stroke').hasValue()) {\n\t\t\t\t\tvar strokeStyle = this.style('stroke');\n\t\t\t\t\tif (this.style('stroke-opacity').hasValue()) strokeStyle = strokeStyle.Color.addOpacity(this.style('stroke-opacity').value);\n\t\t\t\t\tctx.strokeStyle = (strokeStyle.value == 'none' ? 'rgba(0,0,0,0)' : strokeStyle.value);\n\t\t\t\t}\n\t\t\t\tif (this.style('stroke-width').hasValue()) ctx.lineWidth = this.style('stroke-width').Length.toPixels();\n\t\t\t\tif (this.style('stroke-linecap').hasValue()) ctx.lineCap = this.style('stroke-linecap').value;\n\t\t\t\tif (this.style('stroke-linejoin').hasValue()) ctx.lineJoin = this.style('stroke-linejoin').value;\n\t\t\t\tif (this.style('stroke-miterlimit').hasValue()) ctx.miterLimit = this.style('stroke-miterlimit').value;\n\n\t\t\t\t// font\n\t\t\t\tif (typeof(ctx.font) != 'undefined') {\n\t\t\t\t\tctx.font = svg.Font.CreateFont( \n\t\t\t\t\t\tthis.style('font-style').value, \n\t\t\t\t\t\tthis.style('font-variant').value, \n\t\t\t\t\t\tthis.style('font-weight').value, \n\t\t\t\t\t\tthis.style('font-size').hasValue() ? this.style('font-size').Length.toPixels() + 'px' : '', \n\t\t\t\t\t\tthis.style('font-family').value).toString();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// transform\n\t\t\t\tif (this.attribute('transform').hasValue()) { \n\t\t\t\t\tvar transform = new svg.Transform(this.attribute('transform').value);\n\t\t\t\t\ttransform.apply(ctx);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// clip\n\t\t\t\tif (this.attribute('clip-path').hasValue()) {\n\t\t\t\t\tvar clip = this.attribute('clip-path').Definition.getDefinition();\n\t\t\t\t\tif (clip != null) clip.apply(ctx);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// opacity\n\t\t\t\tif (this.style('opacity').hasValue()) {\n\t\t\t\t\tctx.globalAlpha = this.style('opacity').numValue();\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t}\n\t\tsvg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase;\n\t\t\n\t\tsvg.Element.PathElementBase = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tif (ctx != null) ctx.beginPath();\n\t\t\t\treturn new svg.BoundingBox();\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tthis.path(ctx);\n\t\t\t\tsvg.Mouse.checkPath(this, ctx);\n\t\t\t\tif (ctx.fillStyle != '') ctx.fill();\n\t\t\t\tif (ctx.strokeStyle != '') ctx.stroke();\n\t\t\t\t\n\t\t\t\tvar markers = this.getMarkers();\n\t\t\t\tif (markers != null) {\n\t\t\t\t\tif (this.style('marker-start').Definition.isUrl()) {\n\t\t\t\t\t\tvar marker = this.style('marker-start').Definition.getDefinition();\n\t\t\t\t\t\tmarker.render(ctx, markers[0][0], markers[0][1]);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.style('marker-mid').Definition.isUrl()) {\n\t\t\t\t\t\tvar marker = this.style('marker-mid').Definition.getDefinition();\n\t\t\t\t\t\tfor (var i=1;i<markers.length-1;i++) {\n\t\t\t\t\t\t\tmarker.render(ctx, markers[i][0], markers[i][1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.style('marker-end').Definition.isUrl()) {\n\t\t\t\t\t\tvar marker = this.style('marker-end').Definition.getDefinition();\n\t\t\t\t\t\tmarker.render(ctx, markers[markers.length-1][0], markers[markers.length-1][1]);\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.getBoundingBox = function() {\n\t\t\t\treturn this.path();\n\t\t\t}\n\t\t\t\n\t\t\tthis.getMarkers = function() {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// svg element\n\t\tsvg.Element.svg = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseClearContext = this.clearContext;\n\t\t\tthis.clearContext = function(ctx) {\n\t\t\t\tthis.baseClearContext(ctx);\n\t\t\t\tsvg.ViewPort.RemoveCurrent();\n\t\t\t}\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\t// initial values\n\t\t\t\tctx.strokeStyle = 'rgba(0,0,0,0)';\n\t\t\t\tctx.lineCap = 'butt';\n\t\t\t\tctx.lineJoin = 'miter';\n\t\t\t\tctx.miterLimit = 4;\t\t\t\n\t\t\t\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\t\n\t\t\t\t// create new view port\n\t\t\t\tif (this.attribute('x').hasValue() && this.attribute('y').hasValue()) {\n\t\t\t\t\tctx.translate(this.attribute('x').Length.toPixels('x'), this.attribute('y').Length.toPixels('y'));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar width = svg.ViewPort.width();\n\t\t\t\tvar height = svg.ViewPort.height();\n\t\t\t\tif (typeof(this.root) == 'undefined' && this.attribute('width').hasValue() && this.attribute('height').hasValue()) {\n\t\t\t\t\twidth = this.attribute('width').Length.toPixels('x');\n\t\t\t\t\theight = this.attribute('height').Length.toPixels('y');\n\t\t\t\t\t\n\t\t\t\t\tvar x = 0;\n\t\t\t\t\tvar y = 0;\n\t\t\t\t\tif (this.attribute('refX').hasValue() && this.attribute('refY').hasValue()) {\n\t\t\t\t\t\tx = -this.attribute('refX').Length.toPixels('x');\n\t\t\t\t\t\ty = -this.attribute('refY').Length.toPixels('y');\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(x, y);\n\t\t\t\t\tctx.lineTo(width, y);\n\t\t\t\t\tctx.lineTo(width, height);\n\t\t\t\t\tctx.lineTo(x, height);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.clip();\n\t\t\t\t}\n\t\t\t\tsvg.ViewPort.SetCurrent(width, height);\t\n\t\t\t\t\t\t\n\t\t\t\t// viewbox\n\t\t\t\tif (this.attribute('viewBox').hasValue()) {\t\t\t\t\n\t\t\t\t\tvar viewBox = svg.ToNumberArray(this.attribute('viewBox').value);\n\t\t\t\t\tvar minX = viewBox[0];\n\t\t\t\t\tvar minY = viewBox[1];\n\t\t\t\t\twidth = viewBox[2];\n\t\t\t\t\theight = viewBox[3];\n\t\t\t\t\t\n\t\t\t\t\tsvg.AspectRatio(ctx,\n\t\t\t\t\t\t\t\t\tthis.attribute('preserveAspectRatio').value, \n\t\t\t\t\t\t\t\t\tsvg.ViewPort.width(), \n\t\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\t\tsvg.ViewPort.height(),\n\t\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\t\tminX,\n\t\t\t\t\t\t\t\t\tminY,\n\t\t\t\t\t\t\t\t\tthis.attribute('refX').value,\n\t\t\t\t\t\t\t\t\tthis.attribute('refY').value);\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\tsvg.ViewPort.RemoveCurrent();\t\n\t\t\t\t\tsvg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);\t\t\t\t\t\t\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t}\n\t\tsvg.Element.svg.prototype = new svg.Element.RenderedElementBase;\n\n\t\t// rect element\n\t\tsvg.Element.rect = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\n\t\t\t\tvar rx = this.attribute('rx').Length.toPixels('x');\n\t\t\t\tvar ry = this.attribute('ry').Length.toPixels('y');\n\t\t\t\tif (this.attribute('rx').hasValue() && !this.attribute('ry').hasValue()) ry = rx;\n\t\t\t\tif (this.attribute('ry').hasValue() && !this.attribute('rx').hasValue()) rx = ry;\n\t\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(x + rx, y);\n\t\t\t\t\tctx.lineTo(x + width - rx, y);\n\t\t\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + ry)\n\t\t\t\t\tctx.lineTo(x + width, y + height - ry);\n\t\t\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height)\n\t\t\t\t\tctx.lineTo(x + rx, y + height);\n\t\t\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - ry)\n\t\t\t\t\tctx.lineTo(x, y + ry);\n\t\t\t\t\tctx.quadraticCurveTo(x, y, x + rx, y)\n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(x, y, x + width, y + height);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.rect.prototype = new svg.Element.PathElementBase;\n\t\t\n\t\t// circle element\n\t\tsvg.Element.circle = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar cx = this.attribute('cx').Length.toPixels('x');\n\t\t\t\tvar cy = this.attribute('cy').Length.toPixels('y');\n\t\t\t\tvar r = this.attribute('r').Length.toPixels();\n\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.arc(cx, cy, r, 0, Math.PI * 2, true); \n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.circle.prototype = new svg.Element.PathElementBase;\t\n\n\t\t// ellipse element\n\t\tsvg.Element.ellipse = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);\n\t\t\t\tvar rx = this.attribute('rx').Length.toPixels('x');\n\t\t\t\tvar ry = this.attribute('ry').Length.toPixels('y');\n\t\t\t\tvar cx = this.attribute('cx').Length.toPixels('x');\n\t\t\t\tvar cy = this.attribute('cy').Length.toPixels('y');\n\t\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(cx, cy - ry);\n\t\t\t\t\tctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry,  cx + rx, cy - (KAPPA * ry), cx + rx, cy);\n\t\t\t\t\tctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry);\n\t\t\t\t\tctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy);\n\t\t\t\t\tctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.ellipse.prototype = new svg.Element.PathElementBase;\t\t\t\n\t\t\n\t\t// line element\n\t\tsvg.Element.line = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getPoints = function() {\n\t\t\t\treturn [\n\t\t\t\t\tnew svg.Point(this.attribute('x1').Length.toPixels('x'), this.attribute('y1').Length.toPixels('y')),\n\t\t\t\t\tnew svg.Point(this.attribute('x2').Length.toPixels('x'), this.attribute('y2').Length.toPixels('y'))];\n\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar points = this.getPoints();\n\t\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(points[0].x, points[0].y);\n\t\t\t\t\tctx.lineTo(points[1].x, points[1].y);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y);\n\t\t\t}\n\t\t\t\n\t\t\tthis.getMarkers = function() {\n\t\t\t\tvar points = this.getPoints();\t\n\t\t\t\tvar a = points[0].angleTo(points[1]);\n\t\t\t\treturn [[points[0], a], [points[1], a]];\n\t\t\t}\n\t\t}\n\t\tsvg.Element.line.prototype = new svg.Element.PathElementBase;\t\t\n\t\t\t\t\n\t\t// polyline element\n\t\tsvg.Element.polyline = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.points = svg.CreatePath(this.attribute('points').value);\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar bb = new svg.BoundingBox(this.points[0].x, this.points[0].y);\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(this.points[0].x, this.points[0].y);\n\t\t\t\t}\n\t\t\t\tfor (var i=1; i<this.points.length; i++) {\n\t\t\t\t\tbb.addPoint(this.points[i].x, this.points[i].y);\n\t\t\t\t\tif (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y);\n\t\t\t\t}\n\t\t\t\treturn bb;\n\t\t\t}\n\t\t\t\n\t\t\tthis.getMarkers = function() {\n\t\t\t\tvar markers = [];\n\t\t\t\tfor (var i=0; i<this.points.length - 1; i++) {\n\t\t\t\t\tmarkers.push([this.points[i], this.points[i].angleTo(this.points[i+1])]);\n\t\t\t\t}\n\t\t\t\tmarkers.push([this.points[this.points.length-1], markers[markers.length-1][1]]);\n\t\t\t\treturn markers;\n\t\t\t}\t\t\t\n\t\t}\n\t\tsvg.Element.polyline.prototype = new svg.Element.PathElementBase;\t\t\t\t\n\t\t\t\t\n\t\t// polygon element\n\t\tsvg.Element.polygon = function(node) {\n\t\t\tthis.base = svg.Element.polyline;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.basePath = this.path;\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar bb = this.basePath(ctx);\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.lineTo(this.points[0].x, this.points[0].y);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\treturn bb;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.polygon.prototype = new svg.Element.polyline;\n\n\t\t// path element\n\t\tsvg.Element.path = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\t\t\n\t\t\tvar d = this.attribute('d').value;\n\t\t\t// TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF\n\t\t\td = d.replace(/,/gm,' '); // get rid of all commas\n\t\t\td = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands\n\t\t\td = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands\n\t\t\td = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\\s])/gm,'$1 $2'); // separate commands from points\n\t\t\td = d.replace(/([^\\s])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from points\n\t\t\td = d.replace(/([0-9])([+\\-])/gm,'$1 $2'); // separate digits when no comma\n\t\t\td = d.replace(/(\\.[0-9]*)(\\.)/gm,'$1 $2'); // separate digits when no comma\n\t\t\td = d.replace(/([Aa](\\s+[0-9]+){3})\\s+([01])\\s*([01])/gm,'$1 $3 $4 '); // shorthand elliptical arc path syntax\n\t\t\td = svg.compressSpaces(d); // compress multiple spaces\n\t\t\td = svg.trim(d);\n\t\t\tthis.PathParser = new (function(d) {\n\t\t\t\tthis.tokens = d.split(' ');\n\t\t\t\t\n\t\t\t\tthis.reset = function() {\n\t\t\t\t\tthis.i = -1;\n\t\t\t\t\tthis.command = '';\n\t\t\t\t\tthis.previousCommand = '';\n\t\t\t\t\tthis.start = new svg.Point(0, 0);\n\t\t\t\t\tthis.control = new svg.Point(0, 0);\n\t\t\t\t\tthis.current = new svg.Point(0, 0);\n\t\t\t\t\tthis.points = [];\n\t\t\t\t\tthis.angles = [];\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\tthis.isEnd = function() {\n\t\t\t\t\treturn this.i >= this.tokens.length - 1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.isCommandOrEnd = function() {\n\t\t\t\t\tif (this.isEnd()) return true;\n\t\t\t\t\treturn this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.isRelativeCommand = function() {\n\t\t\t\t\treturn this.command == this.command.toLowerCase();\n\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\tthis.getToken = function() {\n\t\t\t\t\tthis.i = this.i + 1;\n\t\t\t\t\treturn this.tokens[this.i];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getScalar = function() {\n\t\t\t\t\treturn parseFloat(this.getToken());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.nextCommand = function() {\n\t\t\t\t\tthis.previousCommand = this.command;\n\t\t\t\t\tthis.command = this.getToken();\n\t\t\t\t}\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.getPoint = function() {\n\t\t\t\t\tvar p = new svg.Point(this.getScalar(), this.getScalar());\n\t\t\t\t\treturn this.makeAbsolute(p);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getAsControlPoint = function() {\n\t\t\t\t\tvar p = this.getPoint();\n\t\t\t\t\tthis.control = p;\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getAsCurrentPoint = function() {\n\t\t\t\t\tvar p = this.getPoint();\n\t\t\t\t\tthis.current = p;\n\t\t\t\t\treturn p;\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getReflectedControlPoint = function() {\n\t\t\t\t\tif (this.previousCommand.toLowerCase() != 'c' && this.previousCommand.toLowerCase() != 's') {\n\t\t\t\t\t\treturn this.current;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// reflect point\n\t\t\t\t\tvar p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y);\t\t\t\t\t\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.makeAbsolute = function(p) {\n\t\t\t\t\tif (this.isRelativeCommand()) {\n\t\t\t\t\t\tp.x = this.current.x + p.x;\n\t\t\t\t\t\tp.y = this.current.y + p.y;\n\t\t\t\t\t}\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.addMarker = function(p, from, priorTo) {\n\t\t\t\t\t// if the last angle isn't filled in because we didn't have this point yet ...\n\t\t\t\t\tif (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length-1] == null) {\n\t\t\t\t\t\tthis.angles[this.angles.length-1] = this.points[this.points.length-1].angleTo(priorTo);\n\t\t\t\t\t}\n\t\t\t\t\tthis.addMarkerAngle(p, from == null ? null : from.angleTo(p));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.addMarkerAngle = function(p, a) {\n\t\t\t\t\tthis.points.push(p);\n\t\t\t\t\tthis.angles.push(a);\n\t\t\t\t}\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.getMarkerPoints = function() { return this.points; }\n\t\t\t\tthis.getMarkerAngles = function() {\n\t\t\t\t\tfor (var i=0; i<this.angles.length; i++) {\n\t\t\t\t\t\tif (this.angles[i] == null) {\n\t\t\t\t\t\t\tfor (var j=i+1; j<this.angles.length; j++) {\n\t\t\t\t\t\t\t\tif (this.angles[j] != null) {\n\t\t\t\t\t\t\t\t\tthis.angles[i] = this.angles[j];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this.angles;\n\t\t\t\t}\n\t\t\t})(d);\n\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar pp = this.PathParser;\n\t\t\t\tpp.reset();\n\n\t\t\t\tvar bb = new svg.BoundingBox();\n\t\t\t\tif (ctx != null) ctx.beginPath();\n\t\t\t\twhile (!pp.isEnd()) {\n\t\t\t\t\tpp.nextCommand();\n\t\t\t\t\tswitch (pp.command.toUpperCase()) {\n\t\t\t\t\tcase 'M':\n\t\t\t\t\t\tvar p = pp.getAsCurrentPoint();\n\t\t\t\t\t\tpp.addMarker(p);\n\t\t\t\t\t\tbb.addPoint(p.x, p.y);\n\t\t\t\t\t\tif (ctx != null) ctx.moveTo(p.x, p.y);\n\t\t\t\t\t\tpp.start = pp.current;\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar p = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(p, pp.start);\n\t\t\t\t\t\t\tbb.addPoint(p.x, p.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(p.x, p.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'L':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar c = pp.current;\n\t\t\t\t\t\t\tvar p = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(p, c);\n\t\t\t\t\t\t\tbb.addPoint(p.x, p.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(p.x, p.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'H':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y);\n\t\t\t\t\t\t\tpp.addMarker(newP, pp.current);\n\t\t\t\t\t\t\tpp.current = newP;\n\t\t\t\t\t\t\tbb.addPoint(pp.current.x, pp.current.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'V':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar());\n\t\t\t\t\t\t\tpp.addMarker(newP, pp.current);\n\t\t\t\t\t\t\tpp.current = newP;\n\t\t\t\t\t\t\tbb.addPoint(pp.current.x, pp.current.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'C':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar p1 = pp.getPoint();\n\t\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, p1);\n\t\t\t\t\t\t\tbb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'S':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar p1 = pp.getReflectedControlPoint();\n\t\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, p1);\n\t\t\t\t\t\t\tbb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Q':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, cntrl);\n\t\t\t\t\t\t\tbb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'T':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar cntrl = pp.getReflectedControlPoint();\n\t\t\t\t\t\t\tpp.control = cntrl;\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, cntrl);\n\t\t\t\t\t\t\tbb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'A':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t    var curr = pp.current;\n\t\t\t\t\t\t\tvar rx = pp.getScalar();\n\t\t\t\t\t\t\tvar ry = pp.getScalar();\n\t\t\t\t\t\t\tvar xAxisRotation = pp.getScalar() * (Math.PI / 180.0);\n\t\t\t\t\t\t\tvar largeArcFlag = pp.getScalar();\n\t\t\t\t\t\t\tvar sweepFlag = pp.getScalar();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\n\t\t\t\t\t\t\t// Conversion from endpoint to center parameterization\n\t\t\t\t\t\t\t// http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n\t\t\t\t\t\t\t// x1', y1'\n\t\t\t\t\t\t\tvar currp = new svg.Point(\n\t\t\t\t\t\t\t\tMath.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0,\n\t\t\t\t\t\t\t\t-Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// adjust radii\n\t\t\t\t\t\t\tvar l = Math.pow(currp.x,2)/Math.pow(rx,2)+Math.pow(currp.y,2)/Math.pow(ry,2);\n\t\t\t\t\t\t\tif (l > 1) {\n\t\t\t\t\t\t\t\trx *= Math.sqrt(l);\n\t\t\t\t\t\t\t\try *= Math.sqrt(l);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// cx', cy'\n\t\t\t\t\t\t\tvar s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt(\n\t\t\t\t\t\t\t\t((Math.pow(rx,2)*Math.pow(ry,2))-(Math.pow(rx,2)*Math.pow(currp.y,2))-(Math.pow(ry,2)*Math.pow(currp.x,2))) /\n\t\t\t\t\t\t\t\t(Math.pow(rx,2)*Math.pow(currp.y,2)+Math.pow(ry,2)*Math.pow(currp.x,2))\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (isNaN(s)) s = 0;\n\t\t\t\t\t\t\tvar cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx);\n\t\t\t\t\t\t\t// cx, cy\n\t\t\t\t\t\t\tvar centp = new svg.Point(\n\t\t\t\t\t\t\t\t(curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y,\n\t\t\t\t\t\t\t\t(curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// vector magnitude\n\t\t\t\t\t\t\tvar m = function(v) { return Math.sqrt(Math.pow(v[0],2) + Math.pow(v[1],2)); }\n\t\t\t\t\t\t\t// ratio between two vectors\n\t\t\t\t\t\t\tvar r = function(u, v) { return (u[0]*v[0]+u[1]*v[1]) / (m(u)*m(v)) }\n\t\t\t\t\t\t\t// angle between two vectors\n\t\t\t\t\t\t\tvar a = function(u, v) { return (u[0]*v[1] < u[1]*v[0] ? -1 : 1) * Math.acos(r(u,v)); }\n\t\t\t\t\t\t\t// initial angle\n\t\t\t\t\t\t\tvar a1 = a([1,0], [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]);\n\t\t\t\t\t\t\t// angle delta\n\t\t\t\t\t\t\tvar u = [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry];\n\t\t\t\t\t\t\tvar v = [(-currp.x-cpp.x)/rx,(-currp.y-cpp.y)/ry];\n\t\t\t\t\t\t\tvar ad = a(u, v);\n\t\t\t\t\t\t\tif (r(u,v) <= -1) ad = Math.PI;\n\t\t\t\t\t\t\tif (r(u,v) >= 1) ad = 0;\n\n\t\t\t\t\t\t\tif (sweepFlag == 0 && ad > 0) ad = ad - 2 * Math.PI;\n\t\t\t\t\t\t\tif (sweepFlag == 1 && ad < 0) ad = ad + 2 * Math.PI;\n\n\t\t\t\t\t\t\t// for markers\n\t\t\t\t\t\t\tvar halfWay = new svg.Point(\n\t\t\t\t\t\t\t\tcentp.x - rx * Math.cos((a1 + ad) / 2),\n\t\t\t\t\t\t\t\tcentp.y - ry * Math.sin((a1 + ad) / 2)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tpp.addMarkerAngle(halfWay, (a1 + ad) / 2 + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2);\n\t\t\t\t\t\t\tpp.addMarkerAngle(cp, ad + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2);\n\n\t\t\t\t\t\t\tbb.addPoint(cp.x, cp.y); // TODO: this is too naive, make it better\n\t\t\t\t\t\t\tif (ctx != null) {\n\t\t\t\t\t\t\t\tvar r = rx > ry ? rx : ry;\n\t\t\t\t\t\t\t\tvar sx = rx > ry ? 1 : rx / ry;\n\t\t\t\t\t\t\t\tvar sy = rx > ry ? ry / rx : 1;\n\n\t\t\t\t\t\t\t\tctx.translate(centp.x, centp.y);\n\t\t\t\t\t\t\t\tctx.rotate(xAxisRotation);\n\t\t\t\t\t\t\t\tctx.scale(sx, sy);\n\t\t\t\t\t\t\t\tctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag);\n\t\t\t\t\t\t\t\tctx.scale(1/sx, 1/sy);\n\t\t\t\t\t\t\t\tctx.rotate(-xAxisRotation);\n\t\t\t\t\t\t\t\tctx.translate(-centp.x, -centp.y);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Z':\n\t\t\t\t\t\tif (ctx != null) ctx.closePath();\n\t\t\t\t\t\tpp.current = pp.start;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn bb;\n\t\t\t}\n\n\t\t\tthis.getMarkers = function() {\n\t\t\t\tvar points = this.PathParser.getMarkerPoints();\n\t\t\t\tvar angles = this.PathParser.getMarkerAngles();\n\t\t\t\t\n\t\t\t\tvar markers = [];\n\t\t\t\tfor (var i=0; i<points.length; i++) {\n\t\t\t\t\tmarkers.push([points[i], angles[i]]);\n\t\t\t\t}\n\t\t\t\treturn markers;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.path.prototype = new svg.Element.PathElementBase;\n\t\t\n\t\t// pattern element\n\t\tsvg.Element.pattern = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.createPattern = function(ctx, element) {\n\t\t\t\t// render me using a temporary svg element\n\t\t\t\tvar tempSvg = new svg.Element.svg();\n\t\t\t\ttempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);\n\t\t\t\ttempSvg.attributes['x'] = new svg.Property('x', this.attribute('x').value);\n\t\t\t\ttempSvg.attributes['y'] = new svg.Property('y', this.attribute('y').value);\n\t\t\t\ttempSvg.attributes['width'] = new svg.Property('width', this.attribute('width').value);\n\t\t\t\ttempSvg.attributes['height'] = new svg.Property('height', this.attribute('height').value);\n\t\t\t\ttempSvg.children = this.children;\n\t\t\t\t\n\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\tc.width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tc.height = this.attribute('height').Length.toPixels('y');\n\t\t\t\ttempSvg.render(c.getContext('2d'));\t\t\n\t\t\t\treturn ctx.createPattern(c, 'repeat');\n\t\t\t}\n\t\t}\n\t\tsvg.Element.pattern.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// marker element\n\t\tsvg.Element.marker = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseRender = this.render;\n\t\t\tthis.render = function(ctx, point, angle) {\n\t\t\t\tctx.translate(point.x, point.y);\n\t\t\t\tif (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(angle);\n\t\t\t\tif (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(ctx.lineWidth, ctx.lineWidth);\n\t\t\t\tctx.save();\n\t\t\t\t\t\t\t\n\t\t\t\t// render me using a temporary svg element\n\t\t\t\tvar tempSvg = new svg.Element.svg();\n\t\t\t\ttempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);\n\t\t\t\ttempSvg.attributes['refX'] = new svg.Property('refX', this.attribute('refX').value);\n\t\t\t\ttempSvg.attributes['refY'] = new svg.Property('refY', this.attribute('refY').value);\n\t\t\t\ttempSvg.attributes['width'] = new svg.Property('width', this.attribute('markerWidth').value);\n\t\t\t\ttempSvg.attributes['height'] = new svg.Property('height', this.attribute('markerHeight').value);\n\t\t\t\ttempSvg.attributes['fill'] = new svg.Property('fill', this.attribute('fill').valueOrDefault('black'));\n\t\t\t\ttempSvg.attributes['stroke'] = new svg.Property('stroke', this.attribute('stroke').valueOrDefault('none'));\n\t\t\t\ttempSvg.children = this.children;\n\t\t\t\ttempSvg.render(ctx);\n\t\t\t\t\n\t\t\t\tctx.restore();\n\t\t\t\tif (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(1/ctx.lineWidth, 1/ctx.lineWidth);\n\t\t\t\tif (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(-angle);\n\t\t\t\tctx.translate(-point.x, -point.y);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.marker.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// definitions element\n\t\tsvg.Element.defs = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NOOP\n\t\t\t}\n\t\t}\n\t\tsvg.Element.defs.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// base for gradients\n\t\tsvg.Element.GradientBase = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.gradientUnits = this.attribute('gradientUnits').valueOrDefault('objectBoundingBox');\n\t\t\t\n\t\t\tthis.stops = [];\t\t\t\n\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\tvar child = this.children[i];\n\t\t\t\tthis.stops.push(child);\n\t\t\t}\t\n\t\t\t\n\t\t\tthis.getGradient = function() {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t}\t\t\t\n\n\t\t\tthis.createGradient = function(ctx, element) {\n\t\t\t\tvar stopsContainer = this;\n\t\t\t\tif (this.attribute('xlink:href').hasValue()) {\n\t\t\t\t\tstopsContainer = this.attribute('xlink:href').Definition.getDefinition();\n\t\t\t\t}\n\t\t\t\n\t\t\t\tvar g = this.getGradient(ctx, element);\n\t\t\t\tfor (var i=0; i<stopsContainer.stops.length; i++) {\n\t\t\t\t\tg.addColorStop(stopsContainer.stops[i].offset, stopsContainer.stops[i].color);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (this.attribute('gradientTransform').hasValue()) {\n\t\t\t\t\t// render as transformed pattern on temporary canvas\n\t\t\t\t\tvar rootView = svg.ViewPort.viewPorts[0];\n\t\t\t\t\t\n\t\t\t\t\tvar rect = new svg.Element.rect();\n\t\t\t\t\trect.attributes['x'] = new svg.Property('x', -svg.MAX_VIRTUAL_PIXELS/3.0);\n\t\t\t\t\trect.attributes['y'] = new svg.Property('y', -svg.MAX_VIRTUAL_PIXELS/3.0);\n\t\t\t\t\trect.attributes['width'] = new svg.Property('width', svg.MAX_VIRTUAL_PIXELS);\n\t\t\t\t\trect.attributes['height'] = new svg.Property('height', svg.MAX_VIRTUAL_PIXELS);\n\t\t\t\t\t\n\t\t\t\t\tvar group = new svg.Element.g();\n\t\t\t\t\tgroup.attributes['transform'] = new svg.Property('transform', this.attribute('gradientTransform').value);\n\t\t\t\t\tgroup.children = [ rect ];\n\t\t\t\t\t\n\t\t\t\t\tvar tempSvg = new svg.Element.svg();\n\t\t\t\t\ttempSvg.attributes['x'] = new svg.Property('x', 0);\n\t\t\t\t\ttempSvg.attributes['y'] = new svg.Property('y', 0);\n\t\t\t\t\ttempSvg.attributes['width'] = new svg.Property('width', rootView.width);\n\t\t\t\t\ttempSvg.attributes['height'] = new svg.Property('height', rootView.height);\n\t\t\t\t\ttempSvg.children = [ group ];\n\t\t\t\t\t\n\t\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\t\tc.width = rootView.width;\n\t\t\t\t\tc.height = rootView.height;\n\t\t\t\t\tvar tempCtx = c.getContext('2d');\n\t\t\t\t\ttempCtx.fillStyle = g;\n\t\t\t\t\ttempSvg.render(tempCtx);\t\t\n\t\t\t\t\treturn tempCtx.createPattern(c, 'no-repeat');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn g;\t\t\t\t\n\t\t\t}\n\t\t}\n\t\tsvg.Element.GradientBase.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// linear gradient element\n\t\tsvg.Element.linearGradient = function(node) {\n\t\t\tthis.base = svg.Element.GradientBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getGradient = function(ctx, element) {\n\t\t\t\tvar bb = element.getBoundingBox();\n\t\t\t\t\n\t\t\t\tvar x1 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('x1').numValue() \n\t\t\t\t\t: this.attribute('x1').Length.toPixels('x'));\n\t\t\t\tvar y1 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('y1').numValue()\n\t\t\t\t\t: this.attribute('y1').Length.toPixels('y'));\n\t\t\t\tvar x2 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('x2').numValue()\n\t\t\t\t\t: this.attribute('x2').Length.toPixels('x'));\n\t\t\t\tvar y2 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('y2').numValue()\n\t\t\t\t\t: this.attribute('y2').Length.toPixels('y'));\n\n\t\t\t\treturn ctx.createLinearGradient(x1, y1, x2, y2);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.linearGradient.prototype = new svg.Element.GradientBase;\n\t\t\n\t\t// radial gradient element\n\t\tsvg.Element.radialGradient = function(node) {\n\t\t\tthis.base = svg.Element.GradientBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getGradient = function(ctx, element) {\n\t\t\t\tvar bb = element.getBoundingBox();\n\t\t\t\t\n\t\t\t\tvar cx = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('cx').numValue() \n\t\t\t\t\t: this.attribute('cx').Length.toPixels('x'));\n\t\t\t\tvar cy = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('cy').numValue() \n\t\t\t\t\t: this.attribute('cy').Length.toPixels('y'));\n\t\t\t\t\n\t\t\t\tvar fx = cx;\n\t\t\t\tvar fy = cy;\n\t\t\t\tif (this.attribute('fx').hasValue()) {\n\t\t\t\t\tfx = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('fx').numValue() \n\t\t\t\t\t: this.attribute('fx').Length.toPixels('x'));\n\t\t\t\t}\n\t\t\t\tif (this.attribute('fy').hasValue()) {\n\t\t\t\t\tfy = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('fy').numValue() \n\t\t\t\t\t: this.attribute('fy').Length.toPixels('y'));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar r = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? (bb.width() + bb.height()) / 2.0 * this.attribute('r').numValue()\n\t\t\t\t\t: this.attribute('r').Length.toPixels());\n\t\t\t\t\n\t\t\t\treturn ctx.createRadialGradient(fx, fy, 0, cx, cy, r);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.radialGradient.prototype = new svg.Element.GradientBase;\n\t\t\n\t\t// gradient stop element\n\t\tsvg.Element.stop = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.offset = this.attribute('offset').numValue();\n\t\t\t\n\t\t\tvar stopColor = this.style('stop-color');\n\t\t\tif (this.style('stop-opacity').hasValue()) stopColor = stopColor.Color.addOpacity(this.style('stop-opacity').value);\n\t\t\tthis.color = stopColor.value;\n\t\t}\n\t\tsvg.Element.stop.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// animation base element\n\t\tsvg.Element.AnimateBase = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tsvg.Animations.push(this);\n\t\t\t\n\t\t\tthis.duration = 0.0;\n\t\t\tthis.begin = this.attribute('begin').Time.toMilliseconds();\n\t\t\tthis.maxDuration = this.begin + this.attribute('dur').Time.toMilliseconds();\n\t\t\t\n\t\t\tthis.getProperty = function() {\n\t\t\t\tvar attributeType = this.attribute('attributeType').value;\n\t\t\t\tvar attributeName = this.attribute('attributeName').value;\n\t\t\t\t\n\t\t\t\tif (attributeType == 'CSS') {\n\t\t\t\t\treturn this.parent.style(attributeName, true);\n\t\t\t\t}\n\t\t\t\treturn this.parent.attribute(attributeName, true);\t\t\t\n\t\t\t};\n\t\t\t\n\t\t\tthis.initialValue = null;\n\t\t\tthis.removed = false;\t\t\t\n\n\t\t\tthis.calcValue = function() {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\t\n\t\t\tthis.update = function(delta) {\t\n\t\t\t\t// set initial value\n\t\t\t\tif (this.initialValue == null) {\n\t\t\t\t\tthis.initialValue = this.getProperty().value;\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// if we're past the end time\n\t\t\t\tif (this.duration > this.maxDuration) {\n\t\t\t\t\t// loop for indefinitely repeating animations\n\t\t\t\t\tif (this.attribute('repeatCount').value == 'indefinite') {\n\t\t\t\t\t\tthis.duration = 0.0\n\t\t\t\t\t}\n\t\t\t\t\telse if (this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed) {\n\t\t\t\t\t\tthis.removed = true;\n\t\t\t\t\t\tthis.getProperty().value = this.initialValue;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn false; // no updates made\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\n\t\t\t\tthis.duration = this.duration + delta;\n\t\t\t\n\t\t\t\t// if we're past the begin time\n\t\t\t\tvar updated = false;\n\t\t\t\tif (this.begin < this.duration) {\n\t\t\t\t\tvar newValue = this.calcValue(); // tween\n\t\t\t\t\t\n\t\t\t\t\tif (this.attribute('type').hasValue()) {\n\t\t\t\t\t\t// for transform, etc.\n\t\t\t\t\t\tvar type = this.attribute('type').value;\n\t\t\t\t\t\tnewValue = type + '(' + newValue + ')';\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.getProperty().value = newValue;\n\t\t\t\t\tupdated = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn updated;\n\t\t\t}\n\t\t\t\n\t\t\t// fraction of duration we've covered\n\t\t\tthis.progress = function() {\n\t\t\t\treturn ((this.duration - this.begin) / (this.maxDuration - this.begin));\n\t\t\t}\t\t\t\n\t\t}\n\t\tsvg.Element.AnimateBase.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// animate element\n\t\tsvg.Element.animate = function(node) {\n\t\t\tthis.base = svg.Element.AnimateBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.calcValue = function() {\n\t\t\t\tvar from = this.attribute('from').numValue();\n\t\t\t\tvar to = this.attribute('to').numValue();\n\t\t\t\t\n\t\t\t\t// tween value linearly\n\t\t\t\treturn from + (to - from) * this.progress(); \n\t\t\t};\n\t\t}\n\t\tsvg.Element.animate.prototype = new svg.Element.AnimateBase;\n\t\t\t\n\t\t// animate color element\n\t\tsvg.Element.animateColor = function(node) {\n\t\t\tthis.base = svg.Element.AnimateBase;\n\t\t\tthis.base(node);\n\n\t\t\tthis.calcValue = function() {\n\t\t\t\tvar from = new RGBColor(this.attribute('from').value);\n\t\t\t\tvar to = new RGBColor(this.attribute('to').value);\n\t\t\t\t\n\t\t\t\tif (from.ok && to.ok) {\n\t\t\t\t\t// tween color linearly\n\t\t\t\t\tvar r = from.r + (to.r - from.r) * this.progress();\n\t\t\t\t\tvar g = from.g + (to.g - from.g) * this.progress();\n\t\t\t\t\tvar b = from.b + (to.b - from.b) * this.progress();\n\t\t\t\t\treturn 'rgb('+parseInt(r,10)+','+parseInt(g,10)+','+parseInt(b,10)+')';\n\t\t\t\t}\n\t\t\t\treturn this.attribute('from').value;\n\t\t\t};\n\t\t}\n\t\tsvg.Element.animateColor.prototype = new svg.Element.AnimateBase;\n\t\t\n\t\t// animate transform element\n\t\tsvg.Element.animateTransform = function(node) {\n\t\t\tthis.base = svg.Element.animate;\n\t\t\tthis.base(node);\n\t\t}\n\t\tsvg.Element.animateTransform.prototype = new svg.Element.animate;\n\t\t\n\t\t// font element\n\t\tsvg.Element.font = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\n\t\t\tthis.horizAdvX = this.attribute('horiz-adv-x').numValue();\t\t\t\n\t\t\t\n\t\t\tthis.isRTL = false;\n\t\t\tthis.isArabic = false;\n\t\t\tthis.fontFace = null;\n\t\t\tthis.missingGlyph = null;\n\t\t\tthis.glyphs = [];\t\t\t\n\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\tvar child = this.children[i];\n\t\t\t\tif (child.type == 'font-face') {\n\t\t\t\t\tthis.fontFace = child;\n\t\t\t\t\tif (child.style('font-family').hasValue()) {\n\t\t\t\t\t\tsvg.Definitions[child.style('font-family').value] = this;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (child.type == 'missing-glyph') this.missingGlyph = child;\n\t\t\t\telse if (child.type == 'glyph') {\n\t\t\t\t\tif (child.arabicForm != '') {\n\t\t\t\t\t\tthis.isRTL = true;\n\t\t\t\t\t\tthis.isArabic = true;\n\t\t\t\t\t\tif (typeof(this.glyphs[child.unicode]) == 'undefined') this.glyphs[child.unicode] = [];\n\t\t\t\t\t\tthis.glyphs[child.unicode][child.arabicForm] = child;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.glyphs[child.unicode] = child;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t}\n\t\tsvg.Element.font.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// font-face element\n\t\tsvg.Element.fontface = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.ascent = this.attribute('ascent').value;\n\t\t\tthis.descent = this.attribute('descent').value;\n\t\t\tthis.unitsPerEm = this.attribute('units-per-em').numValue();\t\t\t\t\n\t\t}\n\t\tsvg.Element.fontface.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// missing-glyph element\n\t\tsvg.Element.missingglyph = function(node) {\n\t\t\tthis.base = svg.Element.path;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.horizAdvX = 0;\n\t\t}\n\t\tsvg.Element.missingglyph.prototype = new svg.Element.path;\n\t\t\n\t\t// glyph element\n\t\tsvg.Element.glyph = function(node) {\n\t\t\tthis.base = svg.Element.path;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.horizAdvX = this.attribute('horiz-adv-x').numValue();\n\t\t\tthis.unicode = this.attribute('unicode').value;\n\t\t\tthis.arabicForm = this.attribute('arabic-form').value;\n\t\t}\n\t\tsvg.Element.glyph.prototype = new svg.Element.path;\n\t\t\n\t\t// text element\n\t\tsvg.Element.text = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tif (node != null) {\n\t\t\t\t// add children\n\t\t\t\tthis.children = [];\n\t\t\t\tfor (var i=0; i<node.childNodes.length; i++) {\n\t\t\t\t\tvar childNode = node.childNodes[i];\n\t\t\t\t\tif (childNode.nodeType == 1) { // capture tspan and tref nodes\n\t\t\t\t\t\tthis.addChild(childNode, true);\n\t\t\t\t\t}\n\t\t\t\t\telse if (childNode.nodeType == 3) { // capture text\n\t\t\t\t\t\tthis.addChild(new svg.Element.tspan(childNode), false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\tif (this.style('dominant-baseline').hasValue()) ctx.textBaseline = this.style('dominant-baseline').value;\n\t\t\t\tif (this.style('alignment-baseline').hasValue()) ctx.textBaseline = this.style('alignment-baseline').value;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar textAnchor = this.style('text-anchor').valueOrDefault('start');\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tvar child = this.children[i];\n\t\t\t\t\n\t\t\t\t\tif (child.attribute('x').hasValue()) {\n\t\t\t\t\t\tchild.x = child.attribute('x').Length.toPixels('x');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (child.attribute('dx').hasValue()) x += child.attribute('dx').Length.toPixels('x');\n\t\t\t\t\t\tchild.x = x;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar childLength = child.measureText(ctx);\n\t\t\t\t\tif (textAnchor != 'start' && (i==0 || child.attribute('x').hasValue())) { // new group?\n\t\t\t\t\t\t// loop through rest of children\n\t\t\t\t\t\tvar groupLength = childLength;\n\t\t\t\t\t\tfor (var j=i+1; j<this.children.length; j++) {\n\t\t\t\t\t\t\tvar childInGroup = this.children[j];\n\t\t\t\t\t\t\tif (childInGroup.attribute('x').hasValue()) break; // new group\n\t\t\t\t\t\t\tgroupLength += childInGroup.measureText(ctx);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchild.x -= (textAnchor == 'end' ? groupLength : groupLength / 2.0);\n\t\t\t\t\t}\n\t\t\t\t\tx = child.x + childLength;\n\t\t\t\t\t\n\t\t\t\t\tif (child.attribute('y').hasValue()) {\n\t\t\t\t\t\tchild.y = child.attribute('y').Length.toPixels('y');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (child.attribute('dy').hasValue()) y += child.attribute('dy').Length.toPixels('y');\n\t\t\t\t\t\tchild.y = y;\n\t\t\t\t\t}\t\n\t\t\t\t\ty = child.y;\n\t\t\t\t\t\n\t\t\t\t\tchild.render(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsvg.Element.text.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// text base\n\t\tsvg.Element.TextElementBase = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getGlyph = function(font, text, i) {\n\t\t\t\tvar c = text[i];\n\t\t\t\tvar glyph = null;\n\t\t\t\tif (font.isArabic) {\n\t\t\t\t\tvar arabicForm = 'isolated';\n\t\t\t\t\tif ((i==0 || text[i-1]==' ') && i<text.length-2 && text[i+1]!=' ') arabicForm = 'terminal'; \n\t\t\t\t\tif (i>0 && text[i-1]!=' ' && i<text.length-2 && text[i+1]!=' ') arabicForm = 'medial';\n\t\t\t\t\tif (i>0 && text[i-1]!=' ' && (i == text.length-1 || text[i+1]==' ')) arabicForm = 'initial';\n\t\t\t\t\tif (typeof(font.glyphs[c]) != 'undefined') {\n\t\t\t\t\t\tglyph = font.glyphs[c][arabicForm];\n\t\t\t\t\t\tif (glyph == null && font.glyphs[c].type == 'glyph') glyph = font.glyphs[c];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tglyph = font.glyphs[c];\n\t\t\t\t}\n\t\t\t\tif (glyph == null) glyph = font.missingGlyph;\n\t\t\t\treturn glyph;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar customFont = this.parent.style('font-family').Definition.getDefinition();\n\t\t\t\tif (customFont != null) {\n\t\t\t\t\tvar fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tvar fontStyle = this.parent.style('font-style').valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle);\n\t\t\t\t\tvar text = this.getText();\n\t\t\t\t\tif (customFont.isRTL) text = text.split(\"\").reverse().join(\"\");\n\t\t\t\t\t\n\t\t\t\t\tvar dx = svg.ToNumberArray(this.parent.attribute('dx').value);\n\t\t\t\t\tfor (var i=0; i<text.length; i++) {\n\t\t\t\t\t\tvar glyph = this.getGlyph(customFont, text, i);\n\t\t\t\t\t\tvar scale = fontSize / customFont.fontFace.unitsPerEm;\n\t\t\t\t\t\tctx.translate(this.x, this.y);\n\t\t\t\t\t\tctx.scale(scale, -scale);\n\t\t\t\t\t\tvar lw = ctx.lineWidth;\n\t\t\t\t\t\tctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize;\n\t\t\t\t\t\tif (fontStyle == 'italic') ctx.transform(1, 0, .4, 1, 0, 0);\n\t\t\t\t\t\tglyph.render(ctx);\n\t\t\t\t\t\tif (fontStyle == 'italic') ctx.transform(1, 0, -.4, 1, 0, 0);\n\t\t\t\t\t\tctx.lineWidth = lw;\n\t\t\t\t\t\tctx.scale(1/scale, -1/scale);\n\t\t\t\t\t\tctx.translate(-this.x, -this.y);\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm;\n\t\t\t\t\t\tif (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {\n\t\t\t\t\t\t\tthis.x += dx[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y);\n\t\t\t\tif (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y);\n\t\t\t}\n\t\t\t\n\t\t\tthis.getText = function() {\n\t\t\t\t// OVERRIDE ME\n\t\t\t}\n\t\t\t\n\t\t\tthis.measureText = function(ctx) {\n\t\t\t\tvar customFont = this.parent.style('font-family').Definition.getDefinition();\n\t\t\t\tif (customFont != null) {\n\t\t\t\t\tvar fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tvar measure = 0;\n\t\t\t\t\tvar text = this.getText();\n\t\t\t\t\tif (customFont.isRTL) text = text.split(\"\").reverse().join(\"\");\n\t\t\t\t\tvar dx = svg.ToNumberArray(this.parent.attribute('dx').value);\n\t\t\t\t\tfor (var i=0; i<text.length; i++) {\n\t\t\t\t\t\tvar glyph = this.getGlyph(customFont, text, i);\n\t\t\t\t\t\tmeasure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm;\n\t\t\t\t\t\tif (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {\n\t\t\t\t\t\t\tmeasure += dx[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn measure;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tvar textToMeasure = svg.compressSpaces(this.getText());\n\t\t\t\tif (!ctx.measureText) return textToMeasure.length * 10;\n\t\t\t\t\n\t\t\t\tctx.save();\n\t\t\t\tthis.setContext(ctx);\n\t\t\t\tvar width = ctx.measureText(textToMeasure).width;\n\t\t\t\tctx.restore();\n\t\t\t\treturn width;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// tspan \n\t\tsvg.Element.tspan = function(node) {\n\t\t\tthis.base = svg.Element.TextElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.text = node.nodeType == 3 ? node.nodeValue : // text\n\t\t\t\t\t\tnode.childNodes.length > 0 ? node.childNodes[0].nodeValue : // element\n\t\t\t\t\t\tnode.text;\n\t\t\tthis.getText = function() {\n\t\t\t\treturn this.text;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.tspan.prototype = new svg.Element.TextElementBase;\n\t\t\n\t\t// tref\n\t\tsvg.Element.tref = function(node) {\n\t\t\tthis.base = svg.Element.TextElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getText = function() {\n\t\t\t\tvar element = this.attribute('xlink:href').Definition.getDefinition();\n\t\t\t\tif (element != null) return element.children[0].getText();\n\t\t\t}\n\t\t}\n\t\tsvg.Element.tref.prototype = new svg.Element.TextElementBase;\t\t\n\t\t\n\t\t// a element\n\t\tsvg.Element.a = function(node) {\n\t\t\tthis.base = svg.Element.TextElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.hasText = true;\n\t\t\tfor (var i=0; i<node.childNodes.length; i++) {\n\t\t\t\tif (node.childNodes[i].nodeType != 3) this.hasText = false;\n\t\t\t}\n\t\t\t\n\t\t\t// this might contain text\n\t\t\tthis.text = this.hasText ? node.childNodes[0].nodeValue : '';\n\t\t\tthis.getText = function() {\n\t\t\t\treturn this.text;\n\t\t\t}\t\t\n\n\t\t\tthis.baseRenderChildren = this.renderChildren;\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tif (this.hasText) {\n\t\t\t\t\t// render as text element\n\t\t\t\t\tthis.baseRenderChildren(ctx);\n\t\t\t\t\tvar fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tsvg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.Length.toPixels('y'), this.x + this.measureText(ctx), this.y));\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// render as temporary group\n\t\t\t\t\tvar g = new svg.Element.g();\n\t\t\t\t\tg.children = this.children;\n\t\t\t\t\tg.parent = this;\n\t\t\t\t\tg.render(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.onclick = function() {\n\t\t\t\twindow.open(this.attribute('xlink:href').value);\n\t\t\t}\n\t\t\t\n\t\t\tthis.onmousemove = function() {\n\t\t\t\tsvg.ctx.canvas.style.cursor = 'pointer';\n\t\t\t}\n\t\t}\n\t\tsvg.Element.a.prototype = new svg.Element.TextElementBase;\t\t\n\t\t\n\t\t// image element\n\t\tsvg.Element.image = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tsvg.Images.push(this);\n\t\t\tthis.img = document.createElement('img');\n\t\t\tthis.loaded = false;\n\t\t\tvar that = this;\n\t\t\tthis.img.onload = function() { that.loaded = true; }\n\t\t\tthis.img.src = this.attribute('xlink:href').value;\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\t\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\t\t\t\n\t\t\t\tif (width == 0 || height == 0) return;\n\t\t\t\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(x, y);\n\t\t\t\tsvg.AspectRatio(ctx,\n\t\t\t\t\t\t\t\tthis.attribute('preserveAspectRatio').value,\n\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\tthis.img.width,\n\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\tthis.img.height,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0);\t\n\t\t\t\tctx.drawImage(this.img, 0, 0);\t\t\t\n\t\t\t\tctx.restore();\n\t\t\t}\n\t\t}\n\t\tsvg.Element.image.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// group element\n\t\tsvg.Element.g = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getBoundingBox = function() {\n\t\t\t\tvar bb = new svg.BoundingBox();\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tbb.addBoundingBox(this.children[i].getBoundingBox());\n\t\t\t\t}\n\t\t\t\treturn bb;\n\t\t\t};\n\t\t}\n\t\tsvg.Element.g.prototype = new svg.Element.RenderedElementBase;\n\n\t\t// symbol element\n\t\tsvg.Element.symbol = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\t\t\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\t\n\t\t\t\t// viewbox\n\t\t\t\tif (this.attribute('viewBox').hasValue()) {\t\t\t\t\n\t\t\t\t\tvar viewBox = svg.ToNumberArray(this.attribute('viewBox').value);\n\t\t\t\t\tvar minX = viewBox[0];\n\t\t\t\t\tvar minY = viewBox[1];\n\t\t\t\t\twidth = viewBox[2];\n\t\t\t\t\theight = viewBox[3];\n\t\t\t\t\t\n\t\t\t\t\tsvg.AspectRatio(ctx,\n\t\t\t\t\t\t\t\t\tthis.attribute('preserveAspectRatio').value, \n\t\t\t\t\t\t\t\t\tthis.attribute('width').Length.toPixels('x'),\n\t\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\t\tthis.attribute('height').Length.toPixels('y'),\n\t\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\t\tminX,\n\t\t\t\t\t\t\t\t\tminY);\n\n\t\t\t\t\tsvg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t}\n\t\tsvg.Element.symbol.prototype = new svg.Element.RenderedElementBase;\t\t\n\t\t\t\n\t\t// style element\n\t\tsvg.Element.style = function(node) { \n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\t// text, or spaces then CDATA\n\t\t\tvar css = node.childNodes[0].nodeValue + (node.childNodes.length > 1 ? node.childNodes[1].nodeValue : '');\n\t\t\tcss = css.replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*\\/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm, ''); // remove comments\n\t\t\tcss = svg.compressSpaces(css); // replace whitespace\n\t\t\tvar cssDefs = css.split('}');\n\t\t\tfor (var i=0; i<cssDefs.length; i++) {\n\t\t\t\tif (svg.trim(cssDefs[i]) != '') {\n\t\t\t\t\tvar cssDef = cssDefs[i].split('{');\n\t\t\t\t\tvar cssClasses = cssDef[0].split(',');\n\t\t\t\t\tvar cssProps = cssDef[1].split(';');\n\t\t\t\t\tfor (var j=0; j<cssClasses.length; j++) {\n\t\t\t\t\t\tvar cssClass = svg.trim(cssClasses[j]);\n\t\t\t\t\t\tif (cssClass != '') {\n\t\t\t\t\t\t\tvar props = {};\n\t\t\t\t\t\t\tfor (var k=0; k<cssProps.length; k++) {\n\t\t\t\t\t\t\t\tvar prop = cssProps[k].indexOf(':');\n\t\t\t\t\t\t\t\tvar name = cssProps[k].substr(0, prop);\n\t\t\t\t\t\t\t\tvar value = cssProps[k].substr(prop + 1, cssProps[k].length - prop);\n\t\t\t\t\t\t\t\tif (name != null && value != null) {\n\t\t\t\t\t\t\t\t\tprops[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsvg.Styles[cssClass] = props;\n\t\t\t\t\t\t\tif (cssClass == '@font-face') {\n\t\t\t\t\t\t\t\tvar fontFamily = props['font-family'].value.replace(/\"/g,'');\n\t\t\t\t\t\t\t\tvar srcs = props['src'].value.split(',');\n\t\t\t\t\t\t\t\tfor (var s=0; s<srcs.length; s++) {\n\t\t\t\t\t\t\t\t\tif (srcs[s].indexOf('format(\"svg\")') > 0) {\n\t\t\t\t\t\t\t\t\t\tvar urlStart = srcs[s].indexOf('url');\n\t\t\t\t\t\t\t\t\t\tvar urlEnd = srcs[s].indexOf(')', urlStart);\n\t\t\t\t\t\t\t\t\t\tvar url = srcs[s].substr(urlStart + 5, urlEnd - urlStart - 6);\n\t\t\t\t\t\t\t\t\t\tvar doc = svg.parseXml(svg.ajax(url));\n\t\t\t\t\t\t\t\t\t\tvar fonts = doc.getElementsByTagName('font');\n\t\t\t\t\t\t\t\t\t\tfor (var f=0; f<fonts.length; f++) {\n\t\t\t\t\t\t\t\t\t\t\tvar font = svg.CreateElement(fonts[f]);\n\t\t\t\t\t\t\t\t\t\t\tsvg.Definitions[fontFamily] = font;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsvg.Element.style.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// use element \n\t\tsvg.Element.use = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\tif (this.attribute('x').hasValue()) ctx.translate(this.attribute('x').Length.toPixels('x'), 0);\n\t\t\t\tif (this.attribute('y').hasValue()) ctx.translate(0, this.attribute('y').Length.toPixels('y'));\n\t\t\t}\n\t\t\t\n\t\t\tthis.getDefinition = function() {\n\t\t\t\tvar element = this.attribute('xlink:href').Definition.getDefinition();\n\t\t\t\tif (this.attribute('width').hasValue()) element.attribute('width', true).value = this.attribute('width').value;\n\t\t\t\tif (this.attribute('height').hasValue()) element.attribute('height', true).value = this.attribute('height').value;\n\t\t\t\treturn element;\n\t\t\t}\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar element = this.getDefinition();\n\t\t\t\tif (element != null) element.path(ctx);\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar element = this.getDefinition();\n\t\t\t\tif (element != null) element.render(ctx);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.use.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// mask element\n\t\tsvg.Element.mask = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\t\t\t\n\t\t\tthis.apply = function(ctx, element) {\n\t\t\t\t// render as temp svg\t\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\n\t\t\t\t\n\t\t\t\t// temporarily remove mask to avoid recursion\n\t\t\t\tvar mask = element.attribute('mask').value;\n\t\t\t\telement.attribute('mask').value = '';\n\t\t\t\t\n\t\t\t\t\tvar cMask = document.createElement('canvas');\n\t\t\t\t\tcMask.width = x + width;\n\t\t\t\t\tcMask.height = y + height;\n\t\t\t\t\tvar maskCtx = cMask.getContext('2d');\n\t\t\t\t\tthis.renderChildren(maskCtx);\n\t\t\t\t\n\t\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\t\tc.width = x + width;\n\t\t\t\t\tc.height = y + height;\n\t\t\t\t\tvar tempCtx = c.getContext('2d');\n\t\t\t\t\telement.render(tempCtx);\n\t\t\t\t\ttempCtx.globalCompositeOperation = 'destination-in';\n\t\t\t\t\ttempCtx.fillStyle = maskCtx.createPattern(cMask, 'no-repeat');\n\t\t\t\t\ttempCtx.fillRect(0, 0, x + width, y + height);\n\t\t\t\t\t\n\t\t\t\t\tctx.fillStyle = tempCtx.createPattern(c, 'no-repeat');\n\t\t\t\t\tctx.fillRect(0, 0, x + width, y + height);\n\t\t\t\t\t\n\t\t\t\t// reassign mask\n\t\t\t\telement.attribute('mask').value = mask;\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NO RENDER\n\t\t\t}\n\t\t}\n\t\tsvg.Element.mask.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// clip element\n\t\tsvg.Element.clipPath = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.apply = function(ctx) {\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tif (this.children[i].path) {\n\t\t\t\t\t\tthis.children[i].path(ctx);\n\t\t\t\t\t\tctx.clip();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NO RENDER\n\t\t\t}\n\t\t}\n\t\tsvg.Element.clipPath.prototype = new svg.Element.ElementBase;\n\n\t\t// filters\n\t\tsvg.Element.filter = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\t\t\t\n\t\t\tthis.apply = function(ctx, element) {\n\t\t\t\t// render as temp svg\t\n\t\t\t\tvar bb = element.getBoundingBox();\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tif (x == 0 || y == 0) {\n\t\t\t\t\tx = bb.x1;\n\t\t\t\t\ty = bb.y1;\n\t\t\t\t}\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\n\t\t\t\tif (width == 0 || height == 0) {\n\t\t\t\t\twidth = bb.width();\n\t\t\t\t\theight = bb.height();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// temporarily remove filter to avoid recursion\n\t\t\t\tvar filter = element.style('filter').value;\n\t\t\t\telement.style('filter').value = '';\n\t\t\t\t\n\t\t\t\t// max filter distance\n\t\t\t\tvar extraPercent = .20;\n\t\t\t\tvar px = extraPercent * width;\n\t\t\t\tvar py = extraPercent * height;\n\t\t\t\t\n\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\tc.width = width + 2*px;\n\t\t\t\tc.height = height + 2*py;\n\t\t\t\tvar tempCtx = c.getContext('2d');\n\t\t\t\ttempCtx.translate(-x + px, -y + py);\n\t\t\t\telement.render(tempCtx);\n\t\t\t\n\t\t\t\t// apply filters\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tthis.children[i].apply(tempCtx, 0, 0, width + 2*px, height + 2*py);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// render on me\n\t\t\t\tctx.drawImage(c, 0, 0, width + 2*px, height + 2*py, x - px, y - py, width + 2*px, height + 2*py);\n\t\t\t\t\n\t\t\t\t// reassign filter\n\t\t\t\telement.style('filter', true).value = filter;\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NO RENDER\n\t\t\t}\t\t\n\t\t}\n\t\tsvg.Element.filter.prototype = new svg.Element.ElementBase;\n\t\t\n\t\tsvg.Element.feGaussianBlur = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tfunction make_fgauss(sigma) {\n\t\t\t\tsigma = Math.max(sigma, 0.01);\t\t\t      \n\t\t\t\tvar len = Math.ceil(sigma * 4.0) + 1;                     \n\t\t\t\tmask = [];                               \n\t\t\t\tfor (var i = 0; i < len; i++) {                             \n\t\t\t\t\tmask[i] = Math.exp(-0.5 * (i / sigma) * (i / sigma));                                           \n\t\t\t\t}                                                           \n\t\t\t\treturn mask; \n\t\t\t}\n\t\t\t\n\t\t\tfunction normalize(mask) {\n\t\t\t\tvar sum = 0;\n\t\t\t\tfor (var i = 1; i < mask.length; i++) {\n\t\t\t\t\tsum += Math.abs(mask[i]);\n\t\t\t\t}\n\t\t\t\tsum = 2 * sum + Math.abs(mask[0]);\n\t\t\t\tfor (var i = 0; i < mask.length; i++) {\n\t\t\t\t\tmask[i] /= sum;\n\t\t\t\t}\n\t\t\t\treturn mask;\n\t\t\t}\n\t\t\t\n\t\t\tfunction convolve_even(src, dst, mask, width, height) {\n\t\t\t  for (var y = 0; y < height; y++) {\n\t\t\t\tfor (var x = 0; x < width; x++) {\n\t\t\t\t  var a = imGet(src, x, y, width, height, 3)/255;\n\t\t\t\t  for (var rgba = 0; rgba < 4; rgba++) {\t\t\t\t\t  \n\t\t\t\t\t  var sum = mask[0] * (a==0?255:imGet(src, x, y, width, height, rgba)) * (a==0||rgba==3?1:a);\n\t\t\t\t\t  for (var i = 1; i < mask.length; i++) {\n\t\t\t\t\t\tvar a1 = imGet(src, Math.max(x-i,0), y, width, height, 3)/255;\n\t\t\t\t\t    var a2 = imGet(src, Math.min(x+i, width-1), y, width, height, 3)/255;\n\t\t\t\t\t\tsum += mask[i] * \n\t\t\t\t\t\t  ((a1==0?255:imGet(src, Math.max(x-i,0), y, width, height, rgba)) * (a1==0||rgba==3?1:a1) + \n\t\t\t\t\t\t   (a2==0?255:imGet(src, Math.min(x+i, width-1), y, width, height, rgba)) * (a2==0||rgba==3?1:a2));\n\t\t\t\t\t  }\n\t\t\t\t\t  imSet(dst, y, x, height, width, rgba, sum);\n\t\t\t\t  }\t\t\t  \n\t\t\t\t}\n\t\t\t  }\n\t\t\t}\t\t\n\n\t\t\tfunction imGet(img, x, y, width, height, rgba) {\n\t\t\t\treturn img[y*width*4 + x*4 + rgba];\n\t\t\t}\n\t\t\t\n\t\t\tfunction imSet(img, x, y, width, height, rgba, val) {\n\t\t\t\timg[y*width*4 + x*4 + rgba] = val;\n\t\t\t}\n\t\t\t\t\t\t\n\t\t\tfunction blur(ctx, width, height, sigma)\n\t\t\t{\n\t\t\t\tvar srcData = ctx.getImageData(0, 0, width, height);\n\t\t\t\tvar mask = make_fgauss(sigma);\n\t\t\t\tmask = normalize(mask);\n\t\t\t\ttmp = [];\n\t\t\t\tconvolve_even(srcData.data, tmp, mask, width, height);\n\t\t\t\tconvolve_even(tmp, srcData.data, mask, height, width);\n\t\t\t\tctx.clearRect(0, 0, width, height);\n\t\t\t\tctx.putImageData(srcData, 0, 0);\n\t\t\t}\t\t\t\n\t\t\n\t\t\tthis.apply = function(ctx, x, y, width, height) {\n\t\t\t\t// assuming x==0 && y==0 for now\n\t\t\t\tblur(ctx, width, height, this.attribute('stdDeviation').numValue());\n\t\t\t}\n\t\t}\n\t\tsvg.Element.filter.prototype = new svg.Element.feGaussianBlur;\n\t\t\n\t\t// title element, do nothing\n\t\tsvg.Element.title = function(node) {\n\t\t}\n\t\tsvg.Element.title.prototype = new svg.Element.ElementBase;\n\n\t\t// desc element, do nothing\n\t\tsvg.Element.desc = function(node) {\n\t\t}\n\t\tsvg.Element.desc.prototype = new svg.Element.ElementBase;\t\t\n\t\t\n\t\tsvg.Element.MISSING = function(node) {\n\t\t\tconsole.log('ERROR: Element \\'' + node.nodeName + '\\' not yet implemented.');\n\t\t}\n\t\tsvg.Element.MISSING.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// element factory\n\t\tsvg.CreateElement = function(node) {\t\n\t\t\tvar className = node.nodeName.replace(/^[^:]+:/,''); // remove namespace\n\t\t\tclassName = className.replace(/\\-/g,''); // remove dashes\n\t\t\tvar e = null;\n\t\t\tif (typeof(svg.Element[className]) != 'undefined') {\n\t\t\t\te = new svg.Element[className](node);\n\t\t\t}\n\t\t\telse {\n\t\t\t\te = new svg.Element.MISSING(node);\n\t\t\t}\n\n\t\t\te.type = node.nodeName;\n\t\t\treturn e;\n\t\t}\n\t\t\t\t\n\t\t// load from url\n\t\tsvg.load = function(ctx, url) {\n\t\t\tsvg.loadXml(ctx, svg.ajax(url));\n\t\t}\n\t\t\n\t\t// load from xml\n\t\tsvg.loadXml = function(ctx, xml) {\n\t\t\tsvg.loadXmlDoc(ctx, svg.parseXml(xml));\n\t\t}\n\t\t\n\t\tsvg.loadXmlDoc = function(ctx, dom) {\n\t\t\tsvg.init(ctx);\n\t\t\t\n\t\t\tvar mapXY = function(p) {\n\t\t\t\tvar e = ctx.canvas;\n\t\t\t\twhile (e) {\n\t\t\t\t\tp.x -= e.offsetLeft;\n\t\t\t\t\tp.y -= e.offsetTop;\n\t\t\t\t\te = e.offsetParent;\n\t\t\t\t}\n\t\t\t\tif (window.scrollX) p.x += window.scrollX;\n\t\t\t\tif (window.scrollY) p.y += window.scrollY;\n\t\t\t\treturn p;\n\t\t\t}\n\t\t\t\n\t\t\t// bind mouse\n\t\t\tif (svg.opts['ignoreMouse'] != true) {\n\t\t\t\tctx.canvas.onclick = function(e) {\n\t\t\t\t\tvar p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));\n\t\t\t\t\tsvg.Mouse.onclick(p.x, p.y);\n\t\t\t\t};\n\t\t\t\tctx.canvas.onmousemove = function(e) {\n\t\t\t\t\tvar p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));\n\t\t\t\t\tsvg.Mouse.onmousemove(p.x, p.y);\n\t\t\t\t};\n\t\t\t}\n\t\t\n\t\t\tvar e = svg.CreateElement(dom.documentElement);\n\t\t\te.root = true;\n\t\t\t\t\t\n\t\t\t// render loop\n\t\t\tvar isFirstRender = true;\n\t\t\tvar draw = function() {\n\t\t\t\tsvg.ViewPort.Clear();\n\t\t\t\tif (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight);\n\t\t\t\n\t\t\t\tif (svg.opts['ignoreDimensions'] != true) {\n\t\t\t\t\t// set canvas size\n\t\t\t\t\tif (e.style('width').hasValue()) {\n\t\t\t\t\t\tctx.canvas.width = e.style('width').Length.toPixels('x');\n\t\t\t\t\t\tctx.canvas.style.width = ctx.canvas.width + 'px';\n\t\t\t\t\t}\n\t\t\t\t\tif (e.style('height').hasValue()) {\n\t\t\t\t\t\tctx.canvas.height = e.style('height').Length.toPixels('y');\n\t\t\t\t\t\tctx.canvas.style.height = ctx.canvas.height + 'px';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar cWidth = ctx.canvas.clientWidth || ctx.canvas.width;\n\t\t\t\tvar cHeight = ctx.canvas.clientHeight || ctx.canvas.height;\n\t\t\t\tsvg.ViewPort.SetCurrent(cWidth, cHeight);\t\t\n\t\t\t\t\n\t\t\t\tif (svg.opts != null && svg.opts['offsetX'] != null) e.attribute('x', true).value = svg.opts['offsetX'];\n\t\t\t\tif (svg.opts != null && svg.opts['offsetY'] != null) e.attribute('y', true).value = svg.opts['offsetY'];\n\t\t\t\tif (svg.opts != null && svg.opts['scaleWidth'] != null && svg.opts['scaleHeight'] != null) {\n\t\t\t\t\tvar xRatio = 1, yRatio = 1;\n\t\t\t\t\tif (e.attribute('width').hasValue()) xRatio = e.attribute('width').Length.toPixels('x') / svg.opts['scaleWidth'];\n\t\t\t\t\tif (e.attribute('height').hasValue()) yRatio = e.attribute('height').Length.toPixels('y') / svg.opts['scaleHeight'];\n\t\t\t\t\n\t\t\t\t\te.attribute('width', true).value = svg.opts['scaleWidth'];\n\t\t\t\t\te.attribute('height', true).value = svg.opts['scaleHeight'];\t\t\t\n\t\t\t\t\te.attribute('viewBox', true).value = '0 0 ' + (cWidth * xRatio) + ' ' + (cHeight * yRatio);\n\t\t\t\t\te.attribute('preserveAspectRatio', true).value = 'none';\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// clear and render\n\t\t\t\tif (svg.opts['ignoreClear'] != true) {\n\t\t\t\t\tctx.clearRect(0, 0, cWidth, cHeight);\n\t\t\t\t}\n\t\t\t\te.render(ctx);\n\t\t\t\tif (isFirstRender) {\n\t\t\t\t\tisFirstRender = false;\n\t\t\t\t\tif (svg.opts != null && typeof(svg.opts['renderCallback']) == 'function') svg.opts['renderCallback']();\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tvar waitingForImages = true;\n\t\t\tif (svg.ImagesLoaded()) {\n\t\t\t\twaitingForImages = false;\n\t\t\t\tdraw();\n\t\t\t}\n\t\t\tsvg.intervalID = setInterval(function() { \n\t\t\t\tvar needUpdate = false;\n\t\t\t\t\n\t\t\t\tif (waitingForImages && svg.ImagesLoaded()) {\n\t\t\t\t\twaitingForImages = false;\n\t\t\t\t\tneedUpdate = true;\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// need update from mouse events?\n\t\t\t\tif (svg.opts['ignoreMouse'] != true) {\n\t\t\t\t\tneedUpdate = needUpdate | svg.Mouse.hasEvents();\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// need update from animations?\n\t\t\t\tif (svg.opts['ignoreAnimation'] != true) {\n\t\t\t\t\tfor (var i=0; i<svg.Animations.length; i++) {\n\t\t\t\t\t\tneedUpdate = needUpdate | svg.Animations[i].update(1000 / svg.FRAMERATE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// need update from redraw?\n\t\t\t\tif (svg.opts != null && typeof(svg.opts['forceRedraw']) == 'function') {\n\t\t\t\t\tif (svg.opts['forceRedraw']() == true) needUpdate = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// render if needed\n\t\t\t\tif (needUpdate) {\n\t\t\t\t\tdraw();\t\t\t\t\n\t\t\t\t\tsvg.Mouse.runEvents(); // run and clear our events\n\t\t\t\t}\n\t\t\t}, 1000 / svg.FRAMERATE);\n\t\t}\n\t\t\n\t\tsvg.stop = function() {\n\t\t\tif (svg.intervalID) {\n\t\t\t\tclearInterval(svg.intervalID);\n\t\t\t}\n\t\t}\n\t\t\n\t\tsvg.Mouse = new (function() {\n\t\t\tthis.events = [];\n\t\t\tthis.hasEvents = function() { return this.events.length != 0; }\n\t\t\n\t\t\tthis.onclick = function(x, y) {\n\t\t\t\tthis.events.push({ type: 'onclick', x: x, y: y, \n\t\t\t\t\trun: function(e) { if (e.onclick) e.onclick(); }\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.onmousemove = function(x, y) {\n\t\t\t\tthis.events.push({ type: 'onmousemove', x: x, y: y,\n\t\t\t\t\trun: function(e) { if (e.onmousemove) e.onmousemove(); }\n\t\t\t\t});\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\tthis.eventElements = [];\n\t\t\t\n\t\t\tthis.checkPath = function(element, ctx) {\n\t\t\t\tfor (var i=0; i<this.events.length; i++) {\n\t\t\t\t\tvar e = this.events[i];\n\t\t\t\t\tif (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.checkBoundingBox = function(element, bb) {\n\t\t\t\tfor (var i=0; i<this.events.length; i++) {\n\t\t\t\t\tvar e = this.events[i];\n\t\t\t\t\tif (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element;\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.runEvents = function() {\n\t\t\t\tsvg.ctx.canvas.style.cursor = '';\n\t\t\t\t\n\t\t\t\tfor (var i=0; i<this.events.length; i++) {\n\t\t\t\t\tvar e = this.events[i];\n\t\t\t\t\tvar element = this.eventElements[i];\n\t\t\t\t\twhile (element) {\n\t\t\t\t\t\te.run(element);\n\t\t\t\t\t\telement = element.parent;\n\t\t\t\t\t}\n\t\t\t\t}\t\t\n\t\t\t\n\t\t\t\t// done running, clear\n\t\t\t\tthis.events = []; \n\t\t\t\tthis.eventElements = [];\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn svg;\n\t}\n})();\n\nif (CanvasRenderingContext2D) {\n\tCanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh) {\n\t\tcanvg(this.canvas, s, { \n\t\t\tignoreMouse: true, \n\t\t\tignoreAnimation: true, \n\t\t\tignoreDimensions: true, \n\t\t\tignoreClear: true, \n\t\t\toffsetX: dx, \n\t\t\toffsetY: dy, \n\t\t\tscaleWidth: dw, \n\t\t\tscaleHeight: dh\n\t\t});\n\t}\n}/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * CanVGRenderer Extension module\n *\n * (c) 2011-2012 Torstein Hønsi, Erik Olsson\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts */\n\n(function (Highcharts) { // encapsulate\n\tvar UNDEFINED,\n\t\tDIV = 'div',\n\t\tABSOLUTE = 'absolute',\n\t\tRELATIVE = 'relative',\n\t\tHIDDEN = 'hidden',\n\t\tVISIBLE = 'visible',\n\t\tPX = 'px',\n\t\tcss = Highcharts.css,\n\t\tCanVGRenderer = Highcharts.CanVGRenderer,\n\t\tSVGRenderer = Highcharts.SVGRenderer,\n\t\textend = Highcharts.extend,\n\t\tmerge = Highcharts.merge,\n\t\taddEvent = Highcharts.addEvent,\n\t\tcreateElement = Highcharts.createElement,\n\t\tdiscardElement = Highcharts.discardElement;\n\n\t// Extend CanVG renderer on demand, inherit from SVGRenderer\n\textend(CanVGRenderer.prototype, SVGRenderer.prototype);\n\n\t// Add additional functionality:\n\textend(CanVGRenderer.prototype, {\n\t\tcreate: function (chart, container, chartWidth, chartHeight) {\n\t\t\tthis.setContainer(container, chartWidth, chartHeight);\n\t\t\tthis.configure(chart);\n\t\t},\n\t\tsetContainer: function (container, chartWidth, chartHeight) {\n\t\t\tvar containerStyle = container.style,\n\t\t\t\tcontainerParent = container.parentNode,\n\t\t\t\tcontainerLeft = containerStyle.left,\n\t\t\t\tcontainerTop = containerStyle.top,\n\t\t\t\tcontainerOffsetWidth = container.offsetWidth,\n\t\t\t\tcontainerOffsetHeight = container.offsetHeight,\n\t\t\t\tcanvas,\n\t\t\t\tinitialHiddenStyle = { visibility: HIDDEN, position: ABSOLUTE };\n\n\t\t\tthis.init.apply(this, [container, chartWidth, chartHeight]);\n\n\t\t\t// add the canvas above it\n\t\t\tcanvas = createElement('canvas', {\n\t\t\t\twidth: containerOffsetWidth,\n\t\t\t\theight: containerOffsetHeight\n\t\t\t}, {\n\t\t\t\tposition: RELATIVE,\n\t\t\t\tleft: containerLeft,\n\t\t\t\ttop: containerTop\n\t\t\t}, container);\n\t\t\tthis.canvas = canvas;\n\n\t\t\t// Create the tooltip line and div, they are placed as siblings to\n\t\t\t// the container (and as direct childs to the div specified in the html page)\n\t\t\tthis.ttLine = createElement(DIV, null, initialHiddenStyle, containerParent);\n\t\t\tthis.ttDiv = createElement(DIV, null, initialHiddenStyle, containerParent);\n\t\t\tthis.ttTimer = UNDEFINED;\n\n\t\t\t// Move away the svg node to a new div inside the container's parent so we can hide it.\n\t\t\tvar hiddenSvg = createElement(DIV, {\n\t\t\t\twidth: containerOffsetWidth,\n\t\t\t\theight: containerOffsetHeight\n\t\t\t}, {\n\t\t\t\tvisibility: HIDDEN,\n\t\t\t\tleft: containerLeft,\n\t\t\t\ttop: containerTop\n\t\t\t}, containerParent);\n\t\t\tthis.hiddenSvg = hiddenSvg;\n\t\t\thiddenSvg.appendChild(this.box);\n\t\t},\n\n\t\t/**\n\t\t * Configures the renderer with the chart. Attach a listener to the event tooltipRefresh.\n\t\t **/\n\t\tconfigure: function (chart) {\n\t\t\tvar renderer = this,\n\t\t\t\toptions = chart.options.tooltip,\n\t\t\t\tborderWidth = options.borderWidth,\n\t\t\t\ttooltipDiv = renderer.ttDiv,\n\t\t\t\ttooltipDivStyle = options.style,\n\t\t\t\ttooltipLine = renderer.ttLine,\n\t\t\t\tpadding = parseInt(tooltipDivStyle.padding, 10);\n\n\t\t\t// Add border styling from options to the style\n\t\t\ttooltipDivStyle = merge(tooltipDivStyle, {\n\t\t\t\tpadding: padding + PX,\n\t\t\t\t'background-color': options.backgroundColor,\n\t\t\t\t'border-style': 'solid',\n\t\t\t\t'border-width': borderWidth + PX,\n\t\t\t\t'border-radius': options.borderRadius + PX\n\t\t\t});\n\n\t\t\t// Optionally add shadow\n\t\t\tif (options.shadow) {\n\t\t\t\ttooltipDivStyle = merge(tooltipDivStyle, {\n\t\t\t\t\t'box-shadow': '1px 1px 3px gray', // w3c\n\t\t\t\t\t'-webkit-box-shadow': '1px 1px 3px gray' // webkit\n\t\t\t\t});\n\t\t\t}\n\t\t\tcss(tooltipDiv, tooltipDivStyle);\n\n\t\t\t// Set simple style on the line\n\t\t\tcss(tooltipLine, {\n\t\t\t\t'border-left': '1px solid darkgray'\n\t\t\t});\n\n\t\t\t// This event is triggered when a new tooltip should be shown\n\t\t\taddEvent(chart, 'tooltipRefresh', function (args) {\n\t\t\t\tvar chartContainer = chart.container,\n\t\t\t\t\toffsetLeft = chartContainer.offsetLeft,\n\t\t\t\t\toffsetTop = chartContainer.offsetTop,\n\t\t\t\t\tposition;\n\n\t\t\t\t// Set the content of the tooltip\n\t\t\t\ttooltipDiv.innerHTML = args.text;\n\n\t\t\t\t// Compute the best position for the tooltip based on the divs size and container size.\n\t\t\t\tposition = chart.tooltip.getPosition(tooltipDiv.offsetWidth, tooltipDiv.offsetHeight, {plotX: args.x, plotY: args.y});\n\n\t\t\t\tcss(tooltipDiv, {\n\t\t\t\t\tvisibility: VISIBLE,\n\t\t\t\t\tleft: position.x + PX,\n\t\t\t\t\ttop: position.y + PX,\n\t\t\t\t\t'border-color': args.borderColor\n\t\t\t\t});\n\n\t\t\t\t// Position the tooltip line\n\t\t\t\tcss(tooltipLine, {\n\t\t\t\t\tvisibility: VISIBLE,\n\t\t\t\t\tleft: offsetLeft + args.x + PX,\n\t\t\t\t\ttop: offsetTop + chart.plotTop + PX,\n\t\t\t\t\theight: chart.plotHeight  + PX\n\t\t\t\t});\n\n\t\t\t\t// This timeout hides the tooltip after 3 seconds\n\t\t\t\t// First clear any existing timer\n\t\t\t\tif (renderer.ttTimer !== UNDEFINED) {\n\t\t\t\t\tclearTimeout(renderer.ttTimer);\n\t\t\t\t}\n\n\t\t\t\t// Start a new timer that hides tooltip and line\n\t\t\t\trenderer.ttTimer = setTimeout(function () {\n\t\t\t\t\tcss(tooltipDiv, { visibility: HIDDEN });\n\t\t\t\t\tcss(tooltipLine, { visibility: HIDDEN });\n\t\t\t\t}, 3000);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Extend SVGRenderer.destroy to also destroy the elements added by CanVGRenderer.\n\t\t */\n\t\tdestroy: function () {\n\t\t\tvar renderer = this;\n\n\t\t\t// Remove the canvas\n\t\t\tdiscardElement(renderer.canvas);\n\n\t\t\t// Kill the timer\n\t\t\tif (renderer.ttTimer !== UNDEFINED) {\n\t\t\t\tclearTimeout(renderer.ttTimer);\n\t\t\t}\n\n\t\t\t// Remove the divs for tooltip and line\n\t\t\tdiscardElement(renderer.ttLine);\n\t\t\tdiscardElement(renderer.ttDiv);\n\t\t\tdiscardElement(renderer.hiddenSvg);\n\n\t\t\t// Continue with base class\n\t\t\treturn SVGRenderer.prototype.destroy.apply(renderer);\n\t\t},\n\n\t\t/**\n\t\t * Take a color and return it if it's a string, do not make it a gradient even if it is a\n\t\t * gradient. Currently canvg cannot render gradients (turns out black),\n\t\t * see: http://code.google.com/p/canvg/issues/detail?id=104\n\t\t *\n\t\t * @param {Object} color The color or config object\n\t\t */\n\t\tcolor: function (color, elem, prop) {\n\t\t\tif (color && color.linearGradient) {\n\t\t\t\t// Pick the end color and forward to base implementation\n\t\t\t\tcolor = color.stops[color.stops.length - 1][1];\n\t\t\t}\n\t\t\treturn SVGRenderer.prototype.color.call(this, color, elem, prop);\n\t\t},\n\n\t\t/**\n\t\t * Draws the SVG on the canvas or adds a draw invokation to the deferred list.\n\t\t */\n\t\tdraw: function () {\n\t\t\tvar renderer = this;\n\t\t\twindow.canvg(renderer.canvas, renderer.hiddenSvg.innerHTML);\n\t\t}\n\t});\n}(Highcharts));\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/data.js",
    "content": "/*\n Data plugin for Highcharts\n\n (c) 2012-2013 Torstein Hønsi\n Last revision 2013-06-07\n\n License: www.highcharts.com/license\n*/\n(function(h){var k=h.each,m=function(b,a){this.init(b,a)};h.extend(m.prototype,{init:function(b,a){this.options=b;this.chartOptions=a;this.columns=b.columns||this.rowsToColumns(b.rows)||[];this.columns.length?this.dataFound():(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var b=this.chartOptions,a=b&&b.chart&&b.chart.type,c=[];k(b&&b.series||[],function(b){c.push((h.seriesTypes[b.type||a||\"line\"].prototype.pointArrayMap||[0]).length)});this.valueCount=\n{global:(h.seriesTypes[a||\"line\"].prototype.pointArrayMap||[0]).length,individual:c}},dataFound:function(){this.parseTypes();this.findHeaderRow();this.parsed();this.complete()},parseCSV:function(){var b=this,a=this.options,c=a.csv,d=this.columns,f=a.startRow||0,i=a.endRow||Number.MAX_VALUE,j=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g=0;c&&(c=c.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\").split(a.lineDelimiter||\"\\n\"),k(c,function(c,h){var n=b.trim(c),p=n.indexOf(\"#\")===0;h>=f&&h<=i&&!p&&n!==\"\"&&\n(n=c.split(a.itemDelimiter||\",\"),k(n,function(b,a){a>=j&&a<=e&&(d[a-j]||(d[a-j]=[]),d[a-j][g]=b)}),g+=1)}),this.dataFound())},parseTable:function(){var b=this.options,a=b.table,c=this.columns,d=b.startRow||0,f=b.endRow||Number.MAX_VALUE,i=b.startColumn||0,j=b.endColumn||Number.MAX_VALUE,e;a&&(typeof a===\"string\"&&(a=document.getElementById(a)),k(a.getElementsByTagName(\"tr\"),function(a,b){e=0;b>=d&&b<=f&&k(a.childNodes,function(a){if((a.tagName===\"TD\"||a.tagName===\"TH\")&&e>=i&&e<=j)c[e]||(c[e]=[]),\nc[e][b-d]=a.innerHTML,e+=1})}),this.dataFound())},parseGoogleSpreadsheet:function(){var b=this,a=this.options,c=a.googleSpreadsheetKey,d=this.columns,f=a.startRow||0,i=a.endRow||Number.MAX_VALUE,j=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,h;c&&jQuery.getJSON(\"https://spreadsheets.google.com/feeds/cells/\"+c+\"/\"+(a.googleSpreadsheetWorksheet||\"od6\")+\"/public/values?alt=json-in-script&callback=?\",function(a){var a=a.feed.entry,c,k=a.length,m=0,o=0,l;for(l=0;l<k;l++)c=a[l],m=Math.max(m,c.gs$cell.col),\no=Math.max(o,c.gs$cell.row);for(l=0;l<m;l++)if(l>=j&&l<=e)d[l-j]=[],d[l-j].length=Math.min(o,i-f);for(l=0;l<k;l++)if(c=a[l],g=c.gs$cell.row-1,h=c.gs$cell.col-1,h>=j&&h<=e&&g>=f&&g<=i)d[h-j][g-f]=c.content.$t;b.dataFound()})},findHeaderRow:function(){k(this.columns,function(){});this.headerRow=0},trim:function(b){return typeof b===\"string\"?b.replace(/^\\s+|\\s+$/g,\"\"):b},parseTypes:function(){for(var b=this.columns,a=b.length,c,d,f,i;a--;)for(c=b[a].length;c--;)d=b[a][c],f=parseFloat(d),i=this.trim(d),\ni==f?(b[a][c]=f,f>31536E6?b[a].isDatetime=!0:b[a].isNumeric=!0):(d=this.parseDate(d),a===0&&typeof d===\"number\"&&!isNaN(d)?(b[a][c]=d,b[a].isDatetime=!0):b[a][c]=i===\"\"?null:i)},dateFormats:{\"YYYY-mm-dd\":{regex:\"^([0-9]{4})-([0-9]{2})-([0-9]{2})$\",parser:function(b){return Date.UTC(+b[1],b[2]-1,+b[3])}}},parseDate:function(b){var a=this.options.parseDate,c,d,f;a&&(c=a(b));if(typeof b===\"string\")for(d in this.dateFormats)a=this.dateFormats[d],(f=b.match(a.regex))&&(c=a.parser(f));return c},rowsToColumns:function(b){var a,\nc,d,f,i;if(b){i=[];c=b.length;for(a=0;a<c;a++){f=b[a].length;for(d=0;d<f;d++)i[d]||(i[d]=[]),i[d][a]=b[a][d]}}return i},parsed:function(){this.options.parsed&&this.options.parsed.call(this,this.columns)},complete:function(){var b=this.columns,a,c,d=this.options,f,i,j,e,g,k;if(d.complete){this.getColumnDistribution();b.length>1&&(a=b.shift(),this.headerRow===0&&a.shift(),a.isDatetime?c=\"datetime\":a.isNumeric||(c=\"category\"));for(e=0;e<b.length;e++)if(this.headerRow===0)b[e].name=b[e].shift();i=[];\nfor(e=0,k=0;e<b.length;k++){f=h.pick(this.valueCount.individual[k],this.valueCount.global);j=[];for(g=0;g<b[e].length;g++)j[g]=[a[g],b[e][g]!==void 0?b[e][g]:null],f>1&&j[g].push(b[e+1][g]!==void 0?b[e+1][g]:null),f>2&&j[g].push(b[e+2][g]!==void 0?b[e+2][g]:null),f>3&&j[g].push(b[e+3][g]!==void 0?b[e+3][g]:null),f>4&&j[g].push(b[e+4][g]!==void 0?b[e+4][g]:null);i[k]={name:b[e].name,data:j};e+=f}d.complete({xAxis:{type:c},series:i})}}});h.Data=m;h.data=function(b,a){return new m(b,a)};h.wrap(h.Chart.prototype,\n\"init\",function(b,a,c){var d=this;a&&a.data?h.data(h.extend(a.data,{complete:function(f){a.series&&k(a.series,function(b,c){a.series[c]=h.merge(b,f.series[c])});a=h.merge(f,a);b.call(d,a,c)}}),a):b.call(d,a,c)})})(Highcharts);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/data.src.js",
    "content": "/**\n * @license Data plugin for Highcharts\n *\n * (c) 2012-2013 Torstein Hønsi\n * Last revision 2013-06-07\n *\n * License: www.highcharts.com/license\n */\n\n/*\n * The Highcharts Data plugin is a utility to ease parsing of input sources like\n * CSV, HTML tables or grid views into basic configuration options for use \n * directly in the Highcharts constructor.\n *\n * Demo: http://jsfiddle.net/highcharts/SnLFj/\n *\n * --- OPTIONS ---\n *\n * - columns : Array<Array<Mixed>>\n * A two-dimensional array representing the input data on tabular form. This input can\n * be used when the data is already parsed, for example from a grid view component.\n * Each cell can be a string or number. If not switchRowsAndColumns is set, the columns\n * are interpreted as series. See also the rows option.\n *\n * - complete : Function(chartOptions)\n * The callback that is evaluated when the data is finished loading, optionally from an \n * external source, and parsed. The first argument passed is a finished chart options\n * object, containing series and an xAxis with categories if applicable. Thise options\n * can be extended with additional options and passed directly to the chart constructor.\n *\n * - csv : String\n * A comma delimited string to be parsed. Related options are startRow, endRow, startColumn\n * and endColumn to delimit what part of the table is used. The lineDelimiter and \n * itemDelimiter options define the CSV delimiter formats.\n * \n * - endColumn : Integer\n * In tabular input data, the first row (indexed by 0) to use. Defaults to the last \n * column containing data.\n *\n * - endRow : Integer\n * In tabular input data, the last row (indexed by 0) to use. Defaults to the last row\n * containing data.\n *\n * - googleSpreadsheetKey : String \n * A Google Spreadsheet key. See https://developers.google.com/gdata/samples/spreadsheet_sample\n * for general information on GS.\n *\n * - googleSpreadsheetWorksheet : String \n * The Google Spreadsheet worksheet. The available id's can be read from \n * https://spreadsheets.google.com/feeds/worksheets/{key}/public/basic\n *\n * - itemDelimiter : String\n * Item or cell delimiter for parsing CSV. Defaults to \",\".\n *\n * - lineDelimiter : String\n * Line delimiter for parsing CSV. Defaults to \"\\n\".\n *\n * - parsed : Function\n * A callback function to access the parsed columns, the two-dimentional input data\n * array directly, before they are interpreted into series data and categories.\n *\n * - parseDate : Function\n * A callback function to parse string representations of dates into JavaScript timestamps.\n * Return an integer on success.\n *\n * - rows : Array<Array<Mixed>>\n * The same as the columns input option, but defining rows intead of columns.\n *\n * - startColumn : Integer\n * In tabular input data, the first column (indexed by 0) to use. \n *\n * - startRow : Integer\n * In tabular input data, the first row (indexed by 0) to use.\n *\n * - table : String|HTMLElement\n * A HTML table or the id of such to be parsed as input data. Related options ara startRow,\n * endRow, startColumn and endColumn to delimit what part of the table is used.\n */\n\n// JSLint options:\n/*global jQuery */\n\n(function (Highcharts) {\t\n\t\n\t// Utilities\n\tvar each = Highcharts.each;\n\t\n\t\n\t// The Data constructor\n\tvar Data = function (dataOptions, chartOptions) {\n\t\tthis.init(dataOptions, chartOptions);\n\t};\n\t\n\t// Set the prototype properties\n\tHighcharts.extend(Data.prototype, {\n\t\t\n\t/**\n\t * Initialize the Data object with the given options\n\t */\n\tinit: function (options, chartOptions) {\n\t\tthis.options = options;\n\t\tthis.chartOptions = chartOptions;\n\t\tthis.columns = options.columns || this.rowsToColumns(options.rows) || [];\n\n\t\t// No need to parse or interpret anything\n\t\tif (this.columns.length) {\n\t\t\tthis.dataFound();\n\n\t\t// Parse and interpret\n\t\t} else {\n\n\t\t\t// Parse a CSV string if options.csv is given\n\t\t\tthis.parseCSV();\n\t\t\t\n\t\t\t// Parse a HTML table if options.table is given\n\t\t\tthis.parseTable();\n\n\t\t\t// Parse a Google Spreadsheet \n\t\t\tthis.parseGoogleSpreadsheet();\t\n\t\t}\n\n\t},\n\n\t/**\n\t * Get the column distribution. For example, a line series takes a single column for \n\t * Y values. A range series takes two columns for low and high values respectively,\n\t * and an OHLC series takes four columns.\n\t */\n\tgetColumnDistribution: function () {\n\t\tvar chartOptions = this.chartOptions,\n\t\t\tgetValueCount = function (type) {\n\t\t\t\treturn (Highcharts.seriesTypes[type || 'line'].prototype.pointArrayMap || [0]).length;\n\t\t\t},\n\t\t\tglobalType = chartOptions && chartOptions.chart && chartOptions.chart.type,\n\t\t\tindividualCounts = [];\n\n\t\teach((chartOptions && chartOptions.series) || [], function (series) {\n\t\t\tindividualCounts.push(getValueCount(series.type || globalType));\n\t\t});\n\n\t\tthis.valueCount = {\n\t\t\tglobal: getValueCount(globalType),\n\t\t\tindividual: individualCounts\n\t\t};\n\t},\n\n\n\tdataFound: function () {\n\t\t// Interpret the values into right types\n\t\tthis.parseTypes();\n\t\t\n\t\t// Use first row for series names?\n\t\tthis.findHeaderRow();\n\t\t\n\t\t// Handle columns if a handleColumns callback is given\n\t\tthis.parsed();\n\t\t\n\t\t// Complete if a complete callback is given\n\t\tthis.complete();\n\t\t\n\t},\n\t\n\t/**\n\t * Parse a CSV input string\n\t */\n\tparseCSV: function () {\n\t\tvar self = this,\n\t\t\toptions = this.options,\n\t\t\tcsv = options.csv,\n\t\t\tcolumns = this.columns,\n\t\t\tstartRow = options.startRow || 0,\n\t\t\tendRow = options.endRow || Number.MAX_VALUE,\n\t\t\tstartColumn = options.startColumn || 0,\n\t\t\tendColumn = options.endColumn || Number.MAX_VALUE,\n\t\t\tlines,\n\t\t\tactiveRowNo = 0;\n\t\t\t\n\t\tif (csv) {\n\t\t\t\n\t\t\tlines = csv\n\t\t\t\t.replace(/\\r\\n/g, \"\\n\") // Unix\n\t\t\t\t.replace(/\\r/g, \"\\n\") // Mac\n\t\t\t\t.split(options.lineDelimiter || \"\\n\");\n\t\t\t\n\t\t\teach(lines, function (line, rowNo) {\n\t\t\t\tvar trimmed = self.trim(line),\n\t\t\t\t\tisComment = trimmed.indexOf('#') === 0,\n\t\t\t\t\tisBlank = trimmed === '',\n\t\t\t\t\titems;\n\t\t\t\t\n\t\t\t\tif (rowNo >= startRow && rowNo <= endRow && !isComment && !isBlank) {\n\t\t\t\t\titems = line.split(options.itemDelimiter || ',');\n\t\t\t\t\teach(items, function (item, colNo) {\n\t\t\t\t\t\tif (colNo >= startColumn && colNo <= endColumn) {\n\t\t\t\t\t\t\tif (!columns[colNo - startColumn]) {\n\t\t\t\t\t\t\t\tcolumns[colNo - startColumn] = [];\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcolumns[colNo - startColumn][activeRowNo] = item;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tactiveRowNo += 1;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.dataFound();\n\t\t}\n\t},\n\t\n\t/**\n\t * Parse a HTML table\n\t */\n\tparseTable: function () {\n\t\tvar options = this.options,\n\t\t\ttable = options.table,\n\t\t\tcolumns = this.columns,\n\t\t\tstartRow = options.startRow || 0,\n\t\t\tendRow = options.endRow || Number.MAX_VALUE,\n\t\t\tstartColumn = options.startColumn || 0,\n\t\t\tendColumn = options.endColumn || Number.MAX_VALUE,\n\t\t\tcolNo;\n\t\t\t\n\t\tif (table) {\n\t\t\t\n\t\t\tif (typeof table === 'string') {\n\t\t\t\ttable = document.getElementById(table);\n\t\t\t}\n\t\t\t\n\t\t\teach(table.getElementsByTagName('tr'), function (tr, rowNo) {\n\t\t\t\tcolNo = 0; \n\t\t\t\tif (rowNo >= startRow && rowNo <= endRow) {\n\t\t\t\t\teach(tr.childNodes, function (item) {\n\t\t\t\t\t\tif ((item.tagName === 'TD' || item.tagName === 'TH') && colNo >= startColumn && colNo <= endColumn) {\n\t\t\t\t\t\t\tif (!columns[colNo]) {\n\t\t\t\t\t\t\t\tcolumns[colNo] = [];\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcolumns[colNo][rowNo - startRow] = item.innerHTML;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcolNo += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.dataFound(); // continue\n\t\t}\n\t},\n\n\t/**\n\t * TODO: \n\t * - switchRowsAndColumns\n\t */\n\tparseGoogleSpreadsheet: function () {\n\t\tvar self = this,\n\t\t\toptions = this.options,\n\t\t\tgoogleSpreadsheetKey = options.googleSpreadsheetKey,\n\t\t\tcolumns = this.columns,\n\t\t\tstartRow = options.startRow || 0,\n\t\t\tendRow = options.endRow || Number.MAX_VALUE,\n\t\t\tstartColumn = options.startColumn || 0,\n\t\t\tendColumn = options.endColumn || Number.MAX_VALUE,\n\t\t\tgr, // google row\n\t\t\tgc; // google column\n\n\t\tif (googleSpreadsheetKey) {\n\t\t\tjQuery.getJSON('https://spreadsheets.google.com/feeds/cells/' + \n\t\t\t\t  googleSpreadsheetKey + '/' + (options.googleSpreadsheetWorksheet || 'od6') +\n\t\t\t\t\t  '/public/values?alt=json-in-script&callback=?',\n\t\t\t\t\t  function (json) {\n\t\t\t\t\t\n\t\t\t\t// Prepare the data from the spreadsheat\n\t\t\t\tvar cells = json.feed.entry,\n\t\t\t\t\tcell,\n\t\t\t\t\tcellCount = cells.length,\n\t\t\t\t\tcolCount = 0,\n\t\t\t\t\trowCount = 0,\n\t\t\t\t\ti;\n\t\t\t\n\t\t\t\t// First, find the total number of columns and rows that \n\t\t\t\t// are actually filled with data\n\t\t\t\tfor (i = 0; i < cellCount; i++) {\n\t\t\t\t\tcell = cells[i];\n\t\t\t\t\tcolCount = Math.max(colCount, cell.gs$cell.col);\n\t\t\t\t\trowCount = Math.max(rowCount, cell.gs$cell.row);\t\t\t\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// Set up arrays containing the column data\n\t\t\t\tfor (i = 0; i < colCount; i++) {\n\t\t\t\t\tif (i >= startColumn && i <= endColumn) {\n\t\t\t\t\t\t// Create new columns with the length of either end-start or rowCount\n\t\t\t\t\t\tcolumns[i - startColumn] = [];\n\n\t\t\t\t\t\t// Setting the length to avoid jslint warning\n\t\t\t\t\t\tcolumns[i - startColumn].length = Math.min(rowCount, endRow - startRow);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Loop over the cells and assign the value to the right\n\t\t\t\t// place in the column arrays\n\t\t\t\tfor (i = 0; i < cellCount; i++) {\n\t\t\t\t\tcell = cells[i];\n\t\t\t\t\tgr = cell.gs$cell.row - 1; // rows start at 1\n\t\t\t\t\tgc = cell.gs$cell.col - 1; // columns start at 1\n\n\t\t\t\t\t// If both row and col falls inside start and end\n\t\t\t\t\t// set the transposed cell value in the newly created columns\n\t\t\t\t\tif (gc >= startColumn && gc <= endColumn &&\n\t\t\t\t\t\tgr >= startRow && gr <= endRow) {\n\t\t\t\t\t\tcolumns[gc - startColumn][gr - startRow] = cell.content.$t;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.dataFound();\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Find the header row. For now, we just check whether the first row contains\n\t * numbers or strings. Later we could loop down and find the first row with \n\t * numbers.\n\t */\n\tfindHeaderRow: function () {\n\t\tvar headerRow = 0;\n\t\teach(this.columns, function (column) {\n\t\t\tif (typeof column[0] !== 'string') {\n\t\t\t\theaderRow = null;\n\t\t\t}\n\t\t});\n\t\tthis.headerRow = 0;\t\t\t\n\t},\n\t\n\t/**\n\t * Trim a string from whitespace\n\t */\n\ttrim: function (str) {\n\t\treturn typeof str === 'string' ? str.replace(/^\\s+|\\s+$/g, '') : str;\n\t},\n\t\n\t/**\n\t * Parse numeric cells in to number types and date types in to true dates.\n\t * @param {Object} columns\n\t */\n\tparseTypes: function () {\n\t\tvar columns = this.columns,\n\t\t\tcol = columns.length, \n\t\t\trow,\n\t\t\tval,\n\t\t\tfloatVal,\n\t\t\ttrimVal,\n\t\t\tdateVal;\n\t\t\t\n\t\twhile (col--) {\n\t\t\trow = columns[col].length;\n\t\t\twhile (row--) {\n\t\t\t\tval = columns[col][row];\n\t\t\t\tfloatVal = parseFloat(val);\n\t\t\t\ttrimVal = this.trim(val);\n\n\t\t\t\t/*jslint eqeq: true*/\n\t\t\t\tif (trimVal == floatVal) { // is numeric\n\t\t\t\t/*jslint eqeq: false*/\n\t\t\t\t\tcolumns[col][row] = floatVal;\n\t\t\t\t\t\n\t\t\t\t\t// If the number is greater than milliseconds in a year, assume datetime\n\t\t\t\t\tif (floatVal > 365 * 24 * 3600 * 1000) {\n\t\t\t\t\t\tcolumns[col].isDatetime = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolumns[col].isNumeric = true;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t} else { // string, continue to determine if it is a date string or really a string\n\t\t\t\t\tdateVal = this.parseDate(val);\n\t\t\t\t\t\n\t\t\t\t\tif (col === 0 && typeof dateVal === 'number' && !isNaN(dateVal)) { // is date\n\t\t\t\t\t\tcolumns[col][row] = dateVal;\n\t\t\t\t\t\tcolumns[col].isDatetime = true;\n\t\t\t\t\t\n\t\t\t\t\t} else { // string\n\t\t\t\t\t\tcolumns[col][row] = trimVal === '' ? null : trimVal;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t},\n\t//*\n\tdateFormats: {\n\t\t'YYYY-mm-dd': {\n\t\t\tregex: '^([0-9]{4})-([0-9]{2})-([0-9]{2})$',\n\t\t\tparser: function (match) {\n\t\t\t\treturn Date.UTC(+match[1], match[2] - 1, +match[3]);\n\t\t\t}\n\t\t}\n\t},\n\t// */\n\t/**\n\t * Parse a date and return it as a number. Overridable through options.parseDate.\n\t */\n\tparseDate: function (val) {\n\t\tvar parseDate = this.options.parseDate,\n\t\t\tret,\n\t\t\tkey,\n\t\t\tformat,\n\t\t\tmatch;\n\n\t\tif (parseDate) {\n\t\t\tret = parseDate(val);\n\t\t}\n\t\t\t\n\t\tif (typeof val === 'string') {\n\t\t\tfor (key in this.dateFormats) {\n\t\t\t\tformat = this.dateFormats[key];\n\t\t\t\tmatch = val.match(format.regex);\n\t\t\t\tif (match) {\n\t\t\t\t\tret = format.parser(match);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Reorganize rows into columns\n\t */\n\trowsToColumns: function (rows) {\n\t\tvar row,\n\t\t\trowsLength,\n\t\t\tcol,\n\t\t\tcolsLength,\n\t\t\tcolumns;\n\n\t\tif (rows) {\n\t\t\tcolumns = [];\n\t\t\trowsLength = rows.length;\n\t\t\tfor (row = 0; row < rowsLength; row++) {\n\t\t\t\tcolsLength = rows[row].length;\n\t\t\t\tfor (col = 0; col < colsLength; col++) {\n\t\t\t\t\tif (!columns[col]) {\n\t\t\t\t\t\tcolumns[col] = [];\n\t\t\t\t\t}\n\t\t\t\t\tcolumns[col][row] = rows[row][col];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn columns;\n\t},\n\t\n\t/**\n\t * A hook for working directly on the parsed columns\n\t */\n\tparsed: function () {\n\t\tif (this.options.parsed) {\n\t\t\tthis.options.parsed.call(this, this.columns);\n\t\t}\n\t},\n\t\n\t/**\n\t * If a complete callback function is provided in the options, interpret the \n\t * columns into a Highcharts options object.\n\t */\n\tcomplete: function () {\n\t\t\n\t\tvar columns = this.columns,\n\t\t\tfirstCol,\n\t\t\ttype,\n\t\t\toptions = this.options,\n\t\t\tvalueCount,\n\t\t\tseries,\n\t\t\tdata,\n\t\t\ti,\n\t\t\tj,\n\t\t\tseriesIndex;\n\t\t\t\n\t\t\n\t\tif (options.complete) {\n\n\t\t\tthis.getColumnDistribution();\n\t\t\t\n\t\t\t// Use first column for X data or categories?\n\t\t\tif (columns.length > 1) {\n\t\t\t\tfirstCol = columns.shift();\n\t\t\t\tif (this.headerRow === 0) {\n\t\t\t\t\tfirstCol.shift(); // remove the first cell\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif (firstCol.isDatetime) {\n\t\t\t\t\ttype = 'datetime';\n\t\t\t\t} else if (!firstCol.isNumeric) {\n\t\t\t\t\ttype = 'category';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get the names and shift the top row\n\t\t\tfor (i = 0; i < columns.length; i++) {\n\t\t\t\tif (this.headerRow === 0) {\n\t\t\t\t\tcolumns[i].name = columns[i].shift();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Use the next columns for series\n\t\t\tseries = [];\n\t\t\tfor (i = 0, seriesIndex = 0; i < columns.length; seriesIndex++) {\n\n\t\t\t\t// This series' value count\n\t\t\t\tvalueCount = Highcharts.pick(this.valueCount.individual[seriesIndex], this.valueCount.global);\n\t\t\t\t\n\t\t\t\t// Iterate down the cells of each column and add data to the series\n\t\t\t\tdata = [];\n\t\t\t\tfor (j = 0; j < columns[i].length; j++) {\n\t\t\t\t\tdata[j] = [\n\t\t\t\t\t\tfirstCol[j], \n\t\t\t\t\t\tcolumns[i][j] !== undefined ? columns[i][j] : null\n\t\t\t\t\t];\n\t\t\t\t\tif (valueCount > 1) {\n\t\t\t\t\t\tdata[j].push(columns[i + 1][j] !== undefined ? columns[i + 1][j] : null);\n\t\t\t\t\t}\n\t\t\t\t\tif (valueCount > 2) {\n\t\t\t\t\t\tdata[j].push(columns[i + 2][j] !== undefined ? columns[i + 2][j] : null);\n\t\t\t\t\t}\n\t\t\t\t\tif (valueCount > 3) {\n\t\t\t\t\t\tdata[j].push(columns[i + 3][j] !== undefined ? columns[i + 3][j] : null);\n\t\t\t\t\t}\n\t\t\t\t\tif (valueCount > 4) {\n\t\t\t\t\t\tdata[j].push(columns[i + 4][j] !== undefined ? columns[i + 4][j] : null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add the series\n\t\t\t\tseries[seriesIndex] = {\n\t\t\t\t\tname: columns[i].name,\n\t\t\t\t\tdata: data\n\t\t\t\t};\n\n\t\t\t\ti += valueCount;\n\t\t\t}\n\t\t\t\n\t\t\t// Do the callback\n\t\t\toptions.complete({\n\t\t\t\txAxis: {\n\t\t\t\t\ttype: type\n\t\t\t\t},\n\t\t\t\tseries: series\n\t\t\t});\n\t\t}\n\t}\n\t});\n\t\n\t// Register the Data prototype and data function on Highcharts\n\tHighcharts.Data = Data;\n\tHighcharts.data = function (options, chartOptions) {\n\t\treturn new Data(options, chartOptions);\n\t};\n\n\t// Extend Chart.init so that the Chart constructor accepts a new configuration\n\t// option group, data.\n\tHighcharts.wrap(Highcharts.Chart.prototype, 'init', function (proceed, userOptions, callback) {\n\t\tvar chart = this;\n\n\t\tif (userOptions && userOptions.data) {\n\t\t\tHighcharts.data(Highcharts.extend(userOptions.data, {\n\t\t\t\tcomplete: function (dataOptions) {\n\t\t\t\t\t\n\t\t\t\t\t// Merge series configs\n\t\t\t\t\tif (userOptions.series) {\n\t\t\t\t\t\teach(userOptions.series, function (series, i) {\n\t\t\t\t\t\t\tuserOptions.series[i] = Highcharts.merge(series, dataOptions.series[i]);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Do the merge\n\t\t\t\t\tuserOptions = Highcharts.merge(dataOptions, userOptions);\n\n\t\t\t\t\tproceed.call(chart, userOptions, callback);\n\t\t\t\t}\n\t\t\t}), userOptions);\n\t\t} else {\n\t\t\tproceed.call(chart, userOptions, callback);\n\t\t}\n\t});\n\n}(Highcharts));\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/drilldown.js",
    "content": "(function(e){function q(b,a,c){return\"rgba(\"+[Math.round(b[0]+(a[0]-b[0])*c),Math.round(b[1]+(a[1]-b[1])*c),Math.round(b[2]+(a[2]-b[2])*c),b[3]+(a[3]-b[3])*c].join(\",\")+\")\"}var m=function(){},j=e.getOptions(),g=e.each,n=e.extend,o=e.wrap,h=e.Chart,i=e.seriesTypes,k=i.pie,l=i.column,r=HighchartsAdapter.fireEvent;n(j.lang,{drillUpText:\"◁ Back to {series.name}\"});j.drilldown={activeAxisLabelStyle:{cursor:\"pointer\",color:\"#039\",fontWeight:\"bold\",textDecoration:\"underline\"},activeDataLabelStyle:{cursor:\"pointer\",\ncolor:\"#039\",fontWeight:\"bold\",textDecoration:\"underline\"},animation:{duration:500},drillUpButton:{position:{align:\"right\",x:-10,y:10}}};e.SVGRenderer.prototype.Element.prototype.fadeIn=function(){this.attr({opacity:0.1,visibility:\"visible\"}).animate({opacity:1},{duration:250})};h.prototype.drilldownLevels=[];h.prototype.addSeriesAsDrilldown=function(b,a){var c=b.series,d=c.xAxis,f=c.yAxis,e;e=b.color||c.color;var g,a=n({color:e},a);g=HighchartsAdapter.inArray(this,c.points);this.drilldownLevels.push({seriesOptions:c.userOptions,\nshapeArgs:b.shapeArgs,bBox:b.graphic.getBBox(),color:e,newSeries:a,pointOptions:c.options.data[g],pointIndex:g,oldExtremes:{xMin:d&&d.userMin,xMax:d&&d.userMax,yMin:f&&f.userMin,yMax:f&&f.userMax}});e=this.addSeries(a,!1);if(d)d.oldPos=d.pos,d.userMin=d.userMax=null,f.userMin=f.userMax=null;if(c.type===e.type)e.animate=e.animateDrilldown||m,e.options.animation=!0;c.remove(!1);this.redraw();this.showDrillUpButton()};h.prototype.getDrilldownBackText=function(){return this.options.lang.drillUpText.replace(\"{series.name}\",\nthis.drilldownLevels[this.drilldownLevels.length-1].seriesOptions.name)};h.prototype.showDrillUpButton=function(){var b=this,a=this.getDrilldownBackText(),c=b.options.drilldown.drillUpButton;this.drillUpButton?this.drillUpButton.attr({text:a}).align():this.drillUpButton=this.renderer.button(a,null,null,function(){b.drillUp()}).attr(n({align:c.position.align,zIndex:9},c.theme)).add().align(c.position,!1,c.relativeTo||\"plotBox\")};h.prototype.drillUp=function(){var b=this.drilldownLevels.pop(),a=this.series[0],\nc=b.oldExtremes,d=this.addSeries(b.seriesOptions,!1);r(this,\"drillup\",{seriesOptions:b.seriesOptions});if(d.type===a.type)d.drilldownLevel=b,d.animate=d.animateDrillupTo||m,d.options.animation=!0,a.animateDrillupFrom&&a.animateDrillupFrom(b);a.remove(!1);d.xAxis&&(d.xAxis.setExtremes(c.xMin,c.xMax,!1),d.yAxis.setExtremes(c.yMin,c.yMax,!1));this.redraw();this.drilldownLevels.length===0?this.drillUpButton=this.drillUpButton.destroy():this.drillUpButton.attr({text:this.getDrilldownBackText()}).align()};\nk.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],c=this.chart.options.drilldown.animation,d=a.shapeArgs,f=d.start,s=(d.end-f)/this.points.length,h=e.Color(a.color).rgba;b||g(this.points,function(a,b){var g=e.Color(a.color).rgba;a.graphic.attr(e.merge(d,{start:f+b*s,end:f+(b+1)*s})).animate(a.shapeArgs,e.merge(c,{step:function(a,d){d.prop===\"start\"&&this.attr({fill:q(h,g,d.pos)})}}))})};k.prototype.animateDrillupTo=l.prototype.animateDrillupTo=\nfunction(b){if(!b){var a=this,c=a.drilldownLevel;g(this.points,function(a){a.graphic.hide();a.dataLabel&&a.dataLabel.hide();a.connector&&a.connector.hide()});setTimeout(function(){g(a.points,function(a,b){var e=b===c.pointIndex?\"show\":\"fadeIn\";a.graphic[e]();if(a.dataLabel)a.dataLabel[e]();if(a.connector)a.connector[e]()})},Math.max(this.chart.options.drilldown.animation.duration-50,0));this.animate=m}};l.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length-\n1].shapeArgs,c=this.chart.options.drilldown.animation;b||(a.x+=this.xAxis.oldPos-this.xAxis.pos,g(this.points,function(b){b.graphic.attr(a).animate(b.shapeArgs,c)}))};l.prototype.animateDrillupFrom=k.prototype.animateDrillupFrom=function(b){var a=this.chart.options.drilldown.animation,c=this.group;delete this.group;g(this.points,function(d){var f=d.graphic,g=e.Color(d.color).rgba;delete d.graphic;f.animate(b.shapeArgs,e.merge(a,{step:function(a,c){c.prop===\"start\"&&this.attr({fill:q(g,e.Color(b.color).rgba,\nc.pos)})},complete:function(){f.destroy();c&&(c=c.destroy())}}))})};e.Point.prototype.doDrilldown=function(){for(var b=this.series.chart,a=b.options.drilldown,c=a.series.length,d;c--&&!d;)a.series[c].id===this.drilldown&&(d=a.series[c]);r(b,\"drilldown\",{point:this,seriesOptions:d});d&&b.addSeriesAsDrilldown(this,d)};o(e.Point.prototype,\"init\",function(b,a,c,d){var f=b.call(this,a,c,d),b=a.chart,a=(a=a.xAxis&&a.xAxis.ticks[d])&&a.label;if(f.drilldown){if(e.addEvent(f,\"click\",function(){f.doDrilldown()}),\na){if(!a._basicStyle)a._basicStyle=a.element.getAttribute(\"style\");a.addClass(\"highcharts-drilldown-axis-label\").css(b.options.drilldown.activeAxisLabelStyle).on(\"click\",function(){f.doDrilldown&&f.doDrilldown()})}}else a&&a._basicStyle&&a.element.setAttribute(\"style\",a._basicStyle);return f});o(e.Series.prototype,\"drawDataLabels\",function(b){var a=this.chart.options.drilldown.activeDataLabelStyle;b.call(this);g(this.points,function(b){if(b.drilldown&&b.dataLabel)b.dataLabel.attr({\"class\":\"highcharts-drilldown-data-label\"}).css(a).on(\"click\",\nfunction(){b.doDrilldown()})})});l.prototype.supportsDrilldown=!0;k.prototype.supportsDrilldown=!0;var p,j=function(b){b.call(this);g(this.points,function(a){a.drilldown&&a.graphic&&a.graphic.attr({\"class\":\"highcharts-drilldown-point\"}).css({cursor:\"pointer\"})})};for(p in i)i[p].prototype.supportsDrilldown&&o(i[p].prototype,\"drawTracker\",j)})(Highcharts);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/drilldown.src.js",
    "content": "/**\n * Highcharts Drilldown plugin\n * \n * Author: Torstein Honsi\n * Last revision: 2013-02-18\n * License: MIT License\n *\n * Demo: http://jsfiddle.net/highcharts/Vf3yT/\n */\n\n/*global HighchartsAdapter*/\n(function (H) {\n\n\t\"use strict\";\n\n\tvar noop = function () {},\n\t\tdefaultOptions = H.getOptions(),\n\t\teach = H.each,\n\t\textend = H.extend,\n\t\twrap = H.wrap,\n\t\tChart = H.Chart,\n\t\tseriesTypes = H.seriesTypes,\n\t\tPieSeries = seriesTypes.pie,\n\t\tColumnSeries = seriesTypes.column,\n\t\tfireEvent = HighchartsAdapter.fireEvent;\n\n\t// Utilities\n\tfunction tweenColors(startColor, endColor, pos) {\n\t\tvar rgba = [\n\t\t\t\tMath.round(startColor[0] + (endColor[0] - startColor[0]) * pos),\n\t\t\t\tMath.round(startColor[1] + (endColor[1] - startColor[1]) * pos),\n\t\t\t\tMath.round(startColor[2] + (endColor[2] - startColor[2]) * pos),\n\t\t\t\tstartColor[3] + (endColor[3] - startColor[3]) * pos\n\t\t\t];\n\t\treturn 'rgba(' + rgba.join(',') + ')';\n\t}\n\n\t// Add language\n\textend(defaultOptions.lang, {\n\t\tdrillUpText: '◁ Back to {series.name}'\n\t});\n\tdefaultOptions.drilldown = {\n\t\tactiveAxisLabelStyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#039',\n\t\t\tfontWeight: 'bold',\n\t\t\ttextDecoration: 'underline'\t\t\t\n\t\t},\n\t\tactiveDataLabelStyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#039',\n\t\t\tfontWeight: 'bold',\n\t\t\ttextDecoration: 'underline'\t\t\t\n\t\t},\n\t\tanimation: {\n\t\t\tduration: 500\n\t\t},\n\t\tdrillUpButton: {\n\t\t\tposition: { \n\t\t\t\talign: 'right',\n\t\t\t\tx: -10,\n\t\t\t\ty: 10\n\t\t\t}\n\t\t\t// relativeTo: 'plotBox'\n\t\t\t// theme\n\t\t}\n\t};\t\n\n\t/**\n\t * A general fadeIn method\n\t */\n\tH.SVGRenderer.prototype.Element.prototype.fadeIn = function () {\n\t\tthis\n\t\t.attr({\n\t\t\topacity: 0.1,\n\t\t\tvisibility: 'visible'\n\t\t})\n\t\t.animate({\n\t\t\topacity: 1\n\t\t}, {\n\t\t\tduration: 250\n\t\t});\n\t};\n\n\t// Extend the Chart prototype\n\tChart.prototype.drilldownLevels = [];\n\n\tChart.prototype.addSeriesAsDrilldown = function (point, ddOptions) {\n\t\tvar oldSeries = point.series,\n\t\t\txAxis = oldSeries.xAxis,\n\t\t\tyAxis = oldSeries.yAxis,\n\t\t\tnewSeries,\n\t\t\tcolor = point.color || oldSeries.color,\n\t\t\tpointIndex,\n\t\t\tlevel;\n\t\t\t\n\t\tddOptions = extend({\n\t\t\tcolor: color\n\t\t}, ddOptions);\n\t\tpointIndex = HighchartsAdapter.inArray(this, oldSeries.points);\n\t\tlevel = {\n\t\t\tseriesOptions: oldSeries.userOptions,\n\t\t\tshapeArgs: point.shapeArgs,\n\t\t\tbBox: point.graphic.getBBox(),\n\t\t\tcolor: color,\n\t\t\tnewSeries: ddOptions,\n\t\t\tpointOptions: oldSeries.options.data[pointIndex],\n\t\t\tpointIndex: pointIndex,\n\t\t\toldExtremes: {\n\t\t\t\txMin: xAxis && xAxis.userMin,\n\t\t\t\txMax: xAxis && xAxis.userMax,\n\t\t\t\tyMin: yAxis && yAxis.userMin,\n\t\t\t\tyMax: yAxis && yAxis.userMax\n\t\t\t}\n\t\t};\n\n\t\tthis.drilldownLevels.push(level);\n\n\t\tnewSeries = this.addSeries(ddOptions, false);\n\t\tif (xAxis) {\n\t\t\txAxis.oldPos = xAxis.pos;\n\t\t\txAxis.userMin = xAxis.userMax = null;\n\t\t\tyAxis.userMin = yAxis.userMax = null;\n\t\t}\n\n\t\t// Run fancy cross-animation on supported and equal types\n\t\tif (oldSeries.type === newSeries.type) {\n\t\t\tnewSeries.animate = newSeries.animateDrilldown || noop;\n\t\t\tnewSeries.options.animation = true;\n\t\t}\n\t\t\n\t\toldSeries.remove(false);\n\t\t\n\t\tthis.redraw();\n\t\tthis.showDrillUpButton();\n\t};\n\n\tChart.prototype.getDrilldownBackText = function () {\n\t\tvar lastLevel = this.drilldownLevels[this.drilldownLevels.length - 1];\n\n\t\treturn this.options.lang.drillUpText.replace('{series.name}', lastLevel.seriesOptions.name);\n\n\t};\n\n\tChart.prototype.showDrillUpButton = function () {\n\t\tvar chart = this,\n\t\t\tbackText = this.getDrilldownBackText(),\n\t\t\tbuttonOptions = chart.options.drilldown.drillUpButton;\n\t\t\t\n\n\t\tif (!this.drillUpButton) {\n\t\t\tthis.drillUpButton = this.renderer.button(\n\t\t\t\tbackText,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tfunction () {\n\t\t\t\t\tchart.drillUp(); \n\t\t\t\t}\n\t\t\t)\n\t\t\t.attr(extend({\n\t\t\t\talign: buttonOptions.position.align,\n\t\t\t\tzIndex: 9\n\t\t\t}, buttonOptions.theme))\n\t\t\t.add()\n\t\t\t.align(buttonOptions.position, false, buttonOptions.relativeTo || 'plotBox');\n\t\t} else {\n\t\t\tthis.drillUpButton.attr({\n\t\t\t\ttext: backText\n\t\t\t})\n\t\t\t.align();\n\t\t}\n\t};\n\n\tChart.prototype.drillUp = function () {\n\t\tvar chart = this,\n\t\t\tlevel = chart.drilldownLevels.pop(),\n\t\t\toldSeries = chart.series[0],\n\t\t\toldExtremes = level.oldExtremes,\n\t\t\tnewSeries = chart.addSeries(level.seriesOptions, false);\n\t\t\n\t\tfireEvent(chart, 'drillup', { seriesOptions: level.seriesOptions });\n\n\t\tif (newSeries.type === oldSeries.type) {\n\t\t\tnewSeries.drilldownLevel = level;\n\t\t\tnewSeries.animate = newSeries.animateDrillupTo || noop;\n\t\t\tnewSeries.options.animation = true;\n\n\t\t\tif (oldSeries.animateDrillupFrom) {\n\t\t\t\toldSeries.animateDrillupFrom(level);\n\t\t\t}\n\t\t}\n\n\t\toldSeries.remove(false);\n\n\t\t// Reset the zoom level of the upper series\n\t\tif (newSeries.xAxis) {\n\t\t\tnewSeries.xAxis.setExtremes(oldExtremes.xMin, oldExtremes.xMax, false);\n\t\t\tnewSeries.yAxis.setExtremes(oldExtremes.yMin, oldExtremes.yMax, false);\n\t\t}\n\n\n\t\tthis.redraw();\n\n\t\tif (this.drilldownLevels.length === 0) {\n\t\t\tthis.drillUpButton = this.drillUpButton.destroy();\n\t\t} else {\n\t\t\tthis.drillUpButton.attr({\n\t\t\t\ttext: this.getDrilldownBackText()\n\t\t\t})\n\t\t\t.align();\n\t\t}\n\t};\n\n\tPieSeries.prototype.animateDrilldown = function (init) {\n\t\tvar level = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1],\n\t\t\tanimationOptions = this.chart.options.drilldown.animation,\n\t\t\tanimateFrom = level.shapeArgs,\n\t\t\tstart = animateFrom.start,\n\t\t\tangle = animateFrom.end - start,\n\t\t\tstartAngle = angle / this.points.length,\n\t\t\tstartColor = H.Color(level.color).rgba;\n\n\t\tif (!init) {\n\t\t\teach(this.points, function (point, i) {\n\t\t\t\tvar endColor = H.Color(point.color).rgba;\n\n\t\t\t\t/*jslint unparam: true*/\n\t\t\t\tpoint.graphic\n\t\t\t\t\t.attr(H.merge(animateFrom, {\n\t\t\t\t\t\tstart: start + i * startAngle,\n\t\t\t\t\t\tend: start + (i + 1) * startAngle\n\t\t\t\t\t}))\n\t\t\t\t\t.animate(point.shapeArgs, H.merge(animationOptions, {\n\t\t\t\t\t\tstep: function (val, fx) {\n\t\t\t\t\t\t\tif (fx.prop === 'start') {\n\t\t\t\t\t\t\t\tthis.attr({\n\t\t\t\t\t\t\t\t\tfill: tweenColors(startColor, endColor, fx.pos)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t/*jslint unparam: false*/\n\t\t\t});\n\t\t}\n\t};\n\n\n\t/**\n\t * When drilling up, keep the upper series invisible until the lower series has\n\t * moved into place\n\t */\n\tPieSeries.prototype.animateDrillupTo = \n\t\t\tColumnSeries.prototype.animateDrillupTo = function (init) {\n\t\tif (!init) {\n\t\t\tvar newSeries = this,\n\t\t\t\tlevel = newSeries.drilldownLevel;\n\n\t\t\teach(this.points, function (point) {\n\t\t\t\tpoint.graphic.hide();\n\t\t\t\tif (point.dataLabel) {\n\t\t\t\t\tpoint.dataLabel.hide();\n\t\t\t\t}\n\t\t\t\tif (point.connector) {\n\t\t\t\t\tpoint.connector.hide();\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t\t// Do dummy animation on first point to get to complete\n\t\t\tsetTimeout(function () {\n\t\t\t\teach(newSeries.points, function (point, i) {  \n\t\t\t\t\t// Fade in other points\t\t\t  \n\t\t\t\t\tvar verb = i === level.pointIndex ? 'show' : 'fadeIn';\n\t\t\t\t\tpoint.graphic[verb]();\n\t\t\t\t\tif (point.dataLabel) {\n\t\t\t\t\t\tpoint.dataLabel[verb]();\n\t\t\t\t\t}\n\t\t\t\t\tif (point.connector) {\n\t\t\t\t\t\tpoint.connector[verb]();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, Math.max(this.chart.options.drilldown.animation.duration - 50, 0));\n\n\t\t\t// Reset\n\t\t\tthis.animate = noop;\n\t\t}\n\n\t};\n\t\n\tColumnSeries.prototype.animateDrilldown = function (init) {\n\t\tvar animateFrom = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1].shapeArgs,\n\t\t\tanimationOptions = this.chart.options.drilldown.animation;\n\t\t\t\n\t\tif (!init) {\n\n\t\t\tanimateFrom.x += (this.xAxis.oldPos - this.xAxis.pos);\n\t\n\t\t\teach(this.points, function (point) {\n\t\t\t\tpoint.graphic\n\t\t\t\t\t.attr(animateFrom)\n\t\t\t\t\t.animate(point.shapeArgs, animationOptions);\n\t\t\t});\n\t\t}\n\t\t\n\t};\n\n\t/**\n\t * When drilling up, pull out the individual point graphics from the lower series\n\t * and animate them into the origin point in the upper series.\n\t */\n\tColumnSeries.prototype.animateDrillupFrom = \n\t\tPieSeries.prototype.animateDrillupFrom =\n\tfunction (level) {\n\t\tvar animationOptions = this.chart.options.drilldown.animation,\n\t\t\tgroup = this.group;\n\n\t\tdelete this.group;\n\t\teach(this.points, function (point) {\n\t\t\tvar graphic = point.graphic,\n\t\t\t\tstartColor = H.Color(point.color).rgba;\n\n\t\t\tdelete point.graphic;\n\n\t\t\t/*jslint unparam: true*/\n\t\t\tgraphic.animate(level.shapeArgs, H.merge(animationOptions, {\n\n\t\t\t\tstep: function (val, fx) {\n\t\t\t\t\tif (fx.prop === 'start') {\n\t\t\t\t\t\tthis.attr({\n\t\t\t\t\t\t\tfill: tweenColors(startColor, H.Color(level.color).rgba, fx.pos)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcomplete: function () {\n\t\t\t\t\tgraphic.destroy();\n\t\t\t\t\tif (group) {\n\t\t\t\t\t\tgroup = group.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}));\n\t\t\t/*jslint unparam: false*/\n\t\t});\n\t};\n\t\n\tH.Point.prototype.doDrilldown = function () {\n\t\tvar series = this.series,\n\t\t\tchart = series.chart,\n\t\t\tdrilldown = chart.options.drilldown,\n\t\t\ti = drilldown.series.length,\n\t\t\tseriesOptions;\n\t\t\n\t\twhile (i-- && !seriesOptions) {\n\t\t\tif (drilldown.series[i].id === this.drilldown) {\n\t\t\t\tseriesOptions = drilldown.series[i];\n\t\t\t}\n\t\t}\n\n\t\t// Fire the event. If seriesOptions is undefined, the implementer can check for \n\t\t// seriesOptions, and call addSeriesAsDrilldown async if necessary.\n\t\tfireEvent(chart, 'drilldown', { \n\t\t\tpoint: this,\n\t\t\tseriesOptions: seriesOptions\n\t\t});\n\t\t\n\t\tif (seriesOptions) {\n\t\t\tchart.addSeriesAsDrilldown(this, seriesOptions);\n\t\t}\n\n\t};\n\t\n\twrap(H.Point.prototype, 'init', function (proceed, series, options, x) {\n\t\tvar point = proceed.call(this, series, options, x),\n\t\t\tchart = series.chart,\n\t\t\ttick = series.xAxis && series.xAxis.ticks[x],\n\t\t\ttickLabel = tick && tick.label;\n\t\t\n\t\tif (point.drilldown) {\n\t\t\t\n\t\t\t// Add the click event to the point label\n\t\t\tH.addEvent(point, 'click', function () {\n\t\t\t\tpoint.doDrilldown();\n\t\t\t});\n\t\t\t\n\t\t\t// Make axis labels clickable\n\t\t\tif (tickLabel) {\n\t\t\t\tif (!tickLabel._basicStyle) {\n\t\t\t\t\ttickLabel._basicStyle = tickLabel.element.getAttribute('style');\n\t\t\t\t}\n\t\t\t\ttickLabel\n\t\t\t\t\t.addClass('highcharts-drilldown-axis-label')\n\t\t\t\t\t.css(chart.options.drilldown.activeAxisLabelStyle)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tif (point.doDrilldown) {\n\t\t\t\t\t\t\tpoint.doDrilldown();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t}\n\t\t} else if (tickLabel && tickLabel._basicStyle) {\n\t\t\ttickLabel.element.setAttribute('style', tickLabel._basicStyle);\n\t\t}\n\t\t\n\t\treturn point;\n\t});\n\n\twrap(H.Series.prototype, 'drawDataLabels', function (proceed) {\n\t\tvar css = this.chart.options.drilldown.activeDataLabelStyle;\n\n\t\tproceed.call(this);\n\n\t\teach(this.points, function (point) {\n\t\t\tif (point.drilldown && point.dataLabel) {\n\t\t\t\tpoint.dataLabel\n\t\t\t\t\t.attr({\n\t\t\t\t\t\t'class': 'highcharts-drilldown-data-label'\n\t\t\t\t\t})\n\t\t\t\t\t.css(css)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tpoint.doDrilldown();\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\t// Mark the trackers with a pointer \n\tColumnSeries.prototype.supportsDrilldown = true;\n\tPieSeries.prototype.supportsDrilldown = true;\n\tvar type, \n\t\tdrawTrackerWrapper = function (proceed) {\n\t\t\tproceed.call(this);\n\t\t\teach(this.points, function (point) {\n\t\t\t\tif (point.drilldown && point.graphic) {\n\t\t\t\t\tpoint.graphic\n\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t'class': 'highcharts-drilldown-point'\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.css({ cursor: 'pointer' });\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\tfor (type in seriesTypes) {\n\t\tif (seriesTypes[type].prototype.supportsDrilldown) {\n\t\t\twrap(seriesTypes[type].prototype, 'drawTracker', drawTrackerWrapper);\n\t\t}\n\t}\n\t\t\n}(Highcharts));\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/exporting.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Exporting module\n\n (c) 2010-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(f){var A=f.Chart,t=f.addEvent,C=f.removeEvent,k=f.createElement,n=f.discardElement,u=f.css,o=f.merge,r=f.each,p=f.extend,D=Math.max,j=document,B=window,E=f.isTouchDevice,F=f.Renderer.prototype.symbols,x=f.getOptions(),y;p(x.lang,{printChart:\"Print chart\",downloadPNG:\"Download PNG image\",downloadJPEG:\"Download JPEG image\",downloadPDF:\"Download PDF document\",downloadSVG:\"Download SVG vector image\",contextButtonTitle:\"Chart context menu\"});x.navigation={menuStyle:{border:\"1px solid #A0A0A0\",\nbackground:\"#FFFFFF\",padding:\"5px 0\"},menuItemStyle:{padding:\"0 10px\",background:\"none\",color:\"#303030\",fontSize:E?\"14px\":\"11px\"},menuItemHoverStyle:{background:\"#4572A5\",color:\"#FFFFFF\"},buttonOptions:{symbolFill:\"#E0E0E0\",symbolSize:14,symbolStroke:\"#666\",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:\"right\",buttonSpacing:3,height:22,theme:{fill:\"white\",stroke:\"none\"},verticalAlign:\"top\",width:24}};x.exporting={type:\"image/png\",url:\"http://export.highcharts.com/\",buttons:{contextButton:{menuClassName:\"highcharts-contextmenu\",\nsymbol:\"menu\",_titleKey:\"contextButtonTitle\",menuItems:[{textKey:\"printChart\",onclick:function(){this.print()}},{separator:!0},{textKey:\"downloadPNG\",onclick:function(){this.exportChart()}},{textKey:\"downloadJPEG\",onclick:function(){this.exportChart({type:\"image/jpeg\"})}},{textKey:\"downloadPDF\",onclick:function(){this.exportChart({type:\"application/pdf\"})}},{textKey:\"downloadSVG\",onclick:function(){this.exportChart({type:\"image/svg+xml\"})}}]}}};f.post=function(c,a){var d,b;b=k(\"form\",{method:\"post\",\naction:c,enctype:\"multipart/form-data\"},{display:\"none\"},j.body);for(d in a)k(\"input\",{type:\"hidden\",name:d,value:a[d]},null,b);b.submit();n(b)};p(A.prototype,{getSVG:function(c){var a=this,d,b,z,h,g=o(a.options,c);if(!j.createElementNS)j.createElementNS=function(a,b){return j.createElement(b)};c=k(\"div\",null,{position:\"absolute\",top:\"-9999em\",width:a.chartWidth+\"px\",height:a.chartHeight+\"px\"},j.body);b=a.renderTo.style.width;h=a.renderTo.style.height;b=g.exporting.sourceWidth||g.chart.width||/px$/.test(b)&&\nparseInt(b,10)||600;h=g.exporting.sourceHeight||g.chart.height||/px$/.test(h)&&parseInt(h,10)||400;p(g.chart,{animation:!1,renderTo:c,forExport:!0,width:b,height:h});g.exporting.enabled=!1;g.series=[];r(a.series,function(a){z=o(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});z.isInternal||g.series.push(z)});d=new f.Chart(g,a.callback);r([\"xAxis\",\"yAxis\"],function(b){r(a[b],function(a,c){var g=d[b][c],f=a.getExtremes(),h=f.userMin,f=f.userMax;g&&(h!==void 0||f!==void 0)&&g.setExtremes(h,\nf,!0,!1)})});b=d.container.innerHTML;g=null;d.destroy();n(c);b=b.replace(/zIndex=\"[^\"]+\"/g,\"\").replace(/isShadow=\"[^\"]+\"/g,\"\").replace(/symbolName=\"[^\"]+\"/g,\"\").replace(/jQuery[0-9]+=\"[^\"]+\"/g,\"\").replace(/url\\([^#]+#/g,\"url(#\").replace(/<svg /,'<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" ').replace(/ href=/g,\" xlink:href=\").replace(/\\n/,\" \").replace(/<\\/svg>.*?$/,\"</svg>\").replace(/&nbsp;/g,\" \").replace(/&shy;/g,\"­\").replace(/<IMG /g,\"<image \").replace(/height=([^\" ]+)/g,'height=\"$1\"').replace(/width=([^\" ]+)/g,\n'width=\"$1\"').replace(/hc-svg-href=\"([^\"]+)\">/g,'xlink:href=\"$1\"/>').replace(/id=([^\" >]+)/g,'id=\"$1\"').replace(/class=([^\" >]+)/g,'class=\"$1\"').replace(/ transform /g,\" \").replace(/:(path|rect)/g,\"$1\").replace(/style=\"([^\"]+)\"/g,function(a){return a.toLowerCase()});return b=b.replace(/(url\\(#highcharts-[0-9]+)&quot;/g,\"$1\").replace(/&quot;/g,\"'\")},exportChart:function(c,a){var c=c||{},d=this.options.exporting,d=this.getSVG(o({chart:{borderRadius:0}},d.chartOptions,a,{exporting:{sourceWidth:c.sourceWidth||\nd.sourceWidth,sourceHeight:c.sourceHeight||d.sourceHeight}})),c=o(this.options.exporting,c);f.post(c.url,{filename:c.filename||\"chart\",type:c.type,width:c.width||0,scale:c.scale||2,svg:d})},print:function(){var c=this,a=c.container,d=[],b=a.parentNode,f=j.body,h=f.childNodes;if(!c.isPrinting)c.isPrinting=!0,r(h,function(a,b){if(a.nodeType===1)d[b]=a.style.display,a.style.display=\"none\"}),f.appendChild(a),B.focus(),B.print(),setTimeout(function(){b.appendChild(a);r(h,function(a,b){if(a.nodeType===\n1)a.style.display=d[b]});c.isPrinting=!1},1E3)},contextMenu:function(c,a,d,b,f,h,g){var e=this,j=e.options.navigation,q=j.menuItemStyle,l=e.chartWidth,m=e.chartHeight,o=\"cache-\"+c,i=e[o],s=D(f,h),v,w,n;if(!i)e[o]=i=k(\"div\",{className:c},{position:\"absolute\",zIndex:1E3,padding:s+\"px\"},e.container),v=k(\"div\",null,p({MozBoxShadow:\"3px 3px 10px #888\",WebkitBoxShadow:\"3px 3px 10px #888\",boxShadow:\"3px 3px 10px #888\"},j.menuStyle),i),w=function(){u(i,{display:\"none\"});g&&g.setState(0);e.openMenu=!1},t(i,\n\"mouseleave\",function(){n=setTimeout(w,500)}),t(i,\"mouseenter\",function(){clearTimeout(n)}),t(document,\"mousedown\",function(a){e.pointer.inClass(a.target,c)||w()}),r(a,function(a){if(a){var b=a.separator?k(\"hr\",null,null,v):k(\"div\",{onmouseover:function(){u(this,j.menuItemHoverStyle)},onmouseout:function(){u(this,q)},onclick:function(){w();a.onclick.apply(e,arguments)},innerHTML:a.text||e.options.lang[a.textKey]},p({cursor:\"pointer\"},q),v);e.exportDivElements.push(b)}}),e.exportDivElements.push(v,\ni),e.exportMenuWidth=i.offsetWidth,e.exportMenuHeight=i.offsetHeight;a={display:\"block\"};d+e.exportMenuWidth>l?a.right=l-d-f-s+\"px\":a.left=d-s+\"px\";b+h+e.exportMenuHeight>m&&g.alignOptions.verticalAlign!==\"top\"?a.bottom=m-b-s+\"px\":a.top=b+h-s+\"px\";u(i,a);e.openMenu=!0},addButton:function(c){var a=this,d=a.renderer,b=o(a.options.navigation.buttonOptions,c),j=b.onclick,h=b.menuItems,g,e,k={stroke:b.symbolStroke,fill:b.symbolFill},q=b.symbolSize||12;if(!a.btnCount)a.btnCount=0;if(!a.exportDivElements)a.exportDivElements=\n[],a.exportSVGElements=[];if(b.enabled!==!1){var l=b.theme,m=l.states,n=m&&m.hover,m=m&&m.select,i;delete l.states;j?i=function(){j.apply(a,arguments)}:h&&(i=function(){a.contextMenu(e.menuClassName,h,e.translateX,e.translateY,e.width,e.height,e);e.setState(2)});b.text&&b.symbol?l.paddingLeft=f.pick(l.paddingLeft,25):b.text||p(l,{width:b.width,height:b.height,padding:0});e=d.button(b.text,0,0,i,l,n,m).attr({title:a.options.lang[b._titleKey],\"stroke-linecap\":\"round\"});e.menuClassName=c.menuClassName||\n\"highcharts-menu-\"+a.btnCount++;b.symbol&&(g=d.symbol(b.symbol,b.symbolX-q/2,b.symbolY-q/2,q,q).attr(p(k,{\"stroke-width\":b.symbolStrokeWidth||1,zIndex:1})).add(e));e.add().align(p(b,{width:e.width,x:f.pick(b.x,y)}),!0,\"spacingBox\");y+=(e.width+b.buttonSpacing)*(b.align===\"right\"?-1:1);a.exportSVGElements.push(e,g)}},destroyExport:function(c){var c=c.target,a,d;for(a=0;a<c.exportSVGElements.length;a++)if(d=c.exportSVGElements[a])d.onclick=d.ontouchstart=null,c.exportSVGElements[a]=d.destroy();for(a=\n0;a<c.exportDivElements.length;a++)d=c.exportDivElements[a],C(d,\"mouseleave\"),c.exportDivElements[a]=d.onmouseout=d.onmouseover=d.ontouchstart=d.onclick=null,n(d)}});F.menu=function(c,a,d,b){return[\"M\",c,a+2.5,\"L\",c+d,a+2.5,\"M\",c,a+b/2+0.5,\"L\",c+d,a+b/2+0.5,\"M\",c,a+b-1.5,\"L\",c+d,a+b-1.5]};A.prototype.callbacks.push(function(c){var a,d=c.options.exporting,b=d.buttons;y=0;if(d.enabled!==!1){for(a in b)c.addButton(b[a]);t(c,\"destroy\",c.destroyExport)}})})(Highcharts);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/exporting.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Exporting module\n *\n * (c) 2010-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts, document, window, Math, setTimeout */\n\n(function (Highcharts) { // encapsulate\n\n// create shortcuts\nvar Chart = Highcharts.Chart,\n\taddEvent = Highcharts.addEvent,\n\tremoveEvent = Highcharts.removeEvent,\n\tcreateElement = Highcharts.createElement,\n\tdiscardElement = Highcharts.discardElement,\n\tcss = Highcharts.css,\n\tmerge = Highcharts.merge,\n\teach = Highcharts.each,\n\textend = Highcharts.extend,\n\tmath = Math,\n\tmathMax = math.max,\n\tdoc = document,\n\twin = window,\n\tisTouchDevice = Highcharts.isTouchDevice,\n\tM = 'M',\n\tL = 'L',\n\tDIV = 'div',\n\tHIDDEN = 'hidden',\n\tNONE = 'none',\n\tPREFIX = 'highcharts-',\n\tABSOLUTE = 'absolute',\n\tPX = 'px',\n\tUNDEFINED,\n\tsymbols = Highcharts.Renderer.prototype.symbols,\n\tdefaultOptions = Highcharts.getOptions(),\n\tbuttonOffset;\n\n\t// Add language\n\textend(defaultOptions.lang, {\n\t\tprintChart: 'Print chart',\n\t\tdownloadPNG: 'Download PNG image',\n\t\tdownloadJPEG: 'Download JPEG image',\n\t\tdownloadPDF: 'Download PDF document',\n\t\tdownloadSVG: 'Download SVG vector image',\n\t\tcontextButtonTitle: 'Chart context menu'\n\t});\n\n// Buttons and menus are collected in a separate config option set called 'navigation'.\n// This can be extended later to add control buttons like zoom and pan right click menus.\ndefaultOptions.navigation = {\n\tmenuStyle: {\n\t\tborder: '1px solid #A0A0A0',\n\t\tbackground: '#FFFFFF',\n\t\tpadding: '5px 0'\n\t},\n\tmenuItemStyle: {\n\t\tpadding: '0 10px',\n\t\tbackground: NONE,\n\t\tcolor: '#303030',\n\t\tfontSize: isTouchDevice ? '14px' : '11px'\n\t},\n\tmenuItemHoverStyle: {\n\t\tbackground: '#4572A5',\n\t\tcolor: '#FFFFFF'\n\t},\n\n\tbuttonOptions: {\n\t\tsymbolFill: '#E0E0E0',\n\t\tsymbolSize: 14,\n\t\tsymbolStroke: '#666',\n\t\tsymbolStrokeWidth: 3,\n\t\tsymbolX: 12.5,\n\t\tsymbolY: 10.5,\n\t\talign: 'right',\n\t\tbuttonSpacing: 3, \n\t\theight: 22,\n\t\t// text: null,\n\t\ttheme: {\n\t\t\tfill: 'white', // capture hover\n\t\t\tstroke: 'none'\n\t\t},\n\t\tverticalAlign: 'top',\n\t\twidth: 24\n\t}\n};\n\n\n\n// Add the export related options\ndefaultOptions.exporting = {\n\t//enabled: true,\n\t//filename: 'chart',\n\ttype: 'image/png',\n\turl: 'http://export.highcharts.com/',\n\t//width: undefined,\n\t//scale: 2\n\tbuttons: {\n\t\tcontextButton: {\n\t\t\tmenuClassName: PREFIX + 'contextmenu',\n\t\t\t//x: -10,\n\t\t\tsymbol: 'menu',\n\t\t\t_titleKey: 'contextButtonTitle',\n\t\t\tmenuItems: [{\n\t\t\t\ttextKey: 'printChart',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.print();\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tseparator: true\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadPNG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart();\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadJPEG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart({\n\t\t\t\t\t\ttype: 'image/jpeg'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadPDF',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart({\n\t\t\t\t\t\ttype: 'application/pdf'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadSVG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart({\n\t\t\t\t\t\ttype: 'image/svg+xml'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Enable this block to add \"View SVG\" to the dropdown menu\n\t\t\t/*\n\t\t\t,{\n\n\t\t\t\ttext: 'View SVG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tvar svg = this.getSVG()\n\t\t\t\t\t\t.replace(/</g, '\\n&lt;')\n\t\t\t\t\t\t.replace(/>/g, '&gt;');\n\n\t\t\t\t\tdoc.body.innerHTML = '<pre>' + svg + '</pre>';\n\t\t\t\t}\n\t\t\t} // */\n\t\t\t]\n\t\t}\n\t}\n};\n\n// Add the Highcharts.post utility\nHighcharts.post = function (url, data) {\n\tvar name,\n\t\tform;\n\t\n\t// create the form\n\tform = createElement('form', {\n\t\tmethod: 'post',\n\t\taction: url,\n\t\tenctype: 'multipart/form-data'\n\t}, {\n\t\tdisplay: NONE\n\t}, doc.body);\n\n\t// add the data\n\tfor (name in data) {\n\t\tcreateElement('input', {\n\t\t\ttype: HIDDEN,\n\t\t\tname: name,\n\t\t\tvalue: data[name]\n\t\t}, null, form);\n\t}\n\n\t// submit\n\tform.submit();\n\n\t// clean up\n\tdiscardElement(form);\n};\n\nextend(Chart.prototype, {\n\n\t/**\n\t * Return an SVG representation of the chart\n\t *\n\t * @param additionalOptions {Object} Additional chart options for the generated SVG representation\n\t */\n\tgetSVG: function (additionalOptions) {\n\t\tvar chart = this,\n\t\t\tchartCopy,\n\t\t\tsandbox,\n\t\t\tsvg,\n\t\t\tseriesOptions,\n\t\t\tsourceWidth,\n\t\t\tsourceHeight,\n\t\t\tcssWidth,\n\t\t\tcssHeight,\n\t\t\toptions = merge(chart.options, additionalOptions); // copy the options and add extra options\n\n\t\t// IE compatibility hack for generating SVG content that it doesn't really understand\n\t\tif (!doc.createElementNS) {\n\t\t\t/*jslint unparam: true*//* allow unused parameter ns in function below */\n\t\t\tdoc.createElementNS = function (ns, tagName) {\n\t\t\t\treturn doc.createElement(tagName);\n\t\t\t};\n\t\t\t/*jslint unparam: false*/\n\t\t}\n\n\t\t// create a sandbox where a new chart will be generated\n\t\tsandbox = createElement(DIV, null, {\n\t\t\tposition: ABSOLUTE,\n\t\t\ttop: '-9999em',\n\t\t\twidth: chart.chartWidth + PX,\n\t\t\theight: chart.chartHeight + PX\n\t\t}, doc.body);\n\t\t\n\t\t// get the source size\n\t\tcssWidth = chart.renderTo.style.width;\n\t\tcssHeight = chart.renderTo.style.height;\n\t\tsourceWidth = options.exporting.sourceWidth ||\n\t\t\toptions.chart.width ||\n\t\t\t(/px$/.test(cssWidth) && parseInt(cssWidth, 10)) ||\n\t\t\t600;\n\t\tsourceHeight = options.exporting.sourceHeight ||\n\t\t\toptions.chart.height ||\n\t\t\t(/px$/.test(cssHeight) && parseInt(cssHeight, 10)) ||\n\t\t\t400;\n\n\t\t// override some options\n\t\textend(options.chart, {\n\t\t\tanimation: false,\n\t\t\trenderTo: sandbox,\n\t\t\tforExport: true,\n\t\t\twidth: sourceWidth,\n\t\t\theight: sourceHeight\n\t\t});\n\t\toptions.exporting.enabled = false; // hide buttons in print\n\t\t\n\t\t// prepare for replicating the chart\n\t\toptions.series = [];\n\t\teach(chart.series, function (serie) {\n\t\t\tseriesOptions = merge(serie.options, {\n\t\t\t\tanimation: false, // turn off animation\n\t\t\t\tshowCheckbox: false,\n\t\t\t\tvisible: serie.visible\n\t\t\t});\n\n\t\t\tif (!seriesOptions.isInternal) { // used for the navigator series that has its own option set\n\t\t\t\toptions.series.push(seriesOptions);\n\t\t\t}\n\t\t});\n\n\t\t// generate the chart copy\n\t\tchartCopy = new Highcharts.Chart(options, chart.callback);\n\n\t\t// reflect axis extremes in the export\n\t\teach(['xAxis', 'yAxis'], function (axisType) {\n\t\t\teach(chart[axisType], function (axis, i) {\n\t\t\t\tvar axisCopy = chartCopy[axisType][i],\n\t\t\t\t\textremes = axis.getExtremes(),\n\t\t\t\t\tuserMin = extremes.userMin,\n\t\t\t\t\tuserMax = extremes.userMax;\n\n\t\t\t\tif (axisCopy && (userMin !== UNDEFINED || userMax !== UNDEFINED)) {\n\t\t\t\t\taxisCopy.setExtremes(userMin, userMax, true, false);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// get the SVG from the container's innerHTML\n\t\tsvg = chartCopy.container.innerHTML;\n\n\t\t// free up memory\n\t\toptions = null;\n\t\tchartCopy.destroy();\n\t\tdiscardElement(sandbox);\n\n\t\t// sanitize\n\t\tsvg = svg\n\t\t\t.replace(/zIndex=\"[^\"]+\"/g, '')\n\t\t\t.replace(/isShadow=\"[^\"]+\"/g, '')\n\t\t\t.replace(/symbolName=\"[^\"]+\"/g, '')\n\t\t\t.replace(/jQuery[0-9]+=\"[^\"]+\"/g, '')\n\t\t\t.replace(/url\\([^#]+#/g, 'url(#')\n\t\t\t.replace(/<svg /, '<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" ')\n\t\t\t.replace(/ href=/g, ' xlink:href=')\n\t\t\t.replace(/\\n/, ' ')\n\t\t\t.replace(/<\\/svg>.*?$/, '</svg>') // any HTML added to the container after the SVG (#894)\n\t\t\t/* This fails in IE < 8\n\t\t\t.replace(/([0-9]+)\\.([0-9]+)/g, function(s1, s2, s3) { // round off to save weight\n\t\t\t\treturn s2 +'.'+ s3[0];\n\t\t\t})*/\n\n\t\t\t// Replace HTML entities, issue #347\n\t\t\t.replace(/&nbsp;/g, '\\u00A0') // no-break space\n\t\t\t.replace(/&shy;/g,  '\\u00AD') // soft hyphen\n\n\t\t\t// IE specific\n\t\t\t.replace(/<IMG /g, '<image ')\n\t\t\t.replace(/height=([^\" ]+)/g, 'height=\"$1\"')\n\t\t\t.replace(/width=([^\" ]+)/g, 'width=\"$1\"')\n\t\t\t.replace(/hc-svg-href=\"([^\"]+)\">/g, 'xlink:href=\"$1\"/>')\n\t\t\t.replace(/id=([^\" >]+)/g, 'id=\"$1\"')\n\t\t\t.replace(/class=([^\" >]+)/g, 'class=\"$1\"')\n\t\t\t.replace(/ transform /g, ' ')\n\t\t\t.replace(/:(path|rect)/g, '$1')\n\t\t\t.replace(/style=\"([^\"]+)\"/g, function (s) {\n\t\t\t\treturn s.toLowerCase();\n\t\t\t});\n\n\t\t// IE9 beta bugs with innerHTML. Test again with final IE9.\n\t\tsvg = svg.replace(/(url\\(#highcharts-[0-9]+)&quot;/g, '$1')\n\t\t\t.replace(/&quot;/g, \"'\");\n\n\t\treturn svg;\n\t},\n\n\t/**\n\t * Submit the SVG representation of the chart to the server\n\t * @param {Object} options Exporting options. Possible members are url, type and width.\n\t * @param {Object} chartOptions Additional chart options for the SVG representation of the chart\n\t */\n\texportChart: function (options, chartOptions) {\n\t\toptions = options || {};\n\t\t\n\t\tvar chart = this,\n\t\t\tchartExportingOptions = chart.options.exporting,\n\t\t\tsvg = chart.getSVG(merge(\n\t\t\t\t{ chart: { borderRadius: 0 } },\n\t\t\t\tchartExportingOptions.chartOptions,\n\t\t\t\tchartOptions, \n\t\t\t\t{\n\t\t\t\t\texporting: {\n\t\t\t\t\t\tsourceWidth: options.sourceWidth || chartExportingOptions.sourceWidth,\n\t\t\t\t\t\tsourceHeight: options.sourceHeight || chartExportingOptions.sourceHeight\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t));\n\n\t\t// merge the options\n\t\toptions = merge(chart.options.exporting, options);\n\t\t\n\t\t// do the post\n\t\tHighcharts.post(options.url, {\n\t\t\tfilename: options.filename || 'chart',\n\t\t\ttype: options.type,\n\t\t\twidth: options.width || 0, // IE8 fails to post undefined correctly, so use 0\n\t\t\tscale: options.scale || 2,\n\t\t\tsvg: svg\n\t\t});\n\n\t},\n\t\n\t/**\n\t * Print the chart\n\t */\n\tprint: function () {\n\n\t\tvar chart = this,\n\t\t\tcontainer = chart.container,\n\t\t\torigDisplay = [],\n\t\t\torigParent = container.parentNode,\n\t\t\tbody = doc.body,\n\t\t\tchildNodes = body.childNodes;\n\n\t\tif (chart.isPrinting) { // block the button while in printing mode\n\t\t\treturn;\n\t\t}\n\n\t\tchart.isPrinting = true;\n\n\t\t// hide all body content\n\t\teach(childNodes, function (node, i) {\n\t\t\tif (node.nodeType === 1) {\n\t\t\t\torigDisplay[i] = node.style.display;\n\t\t\t\tnode.style.display = NONE;\n\t\t\t}\n\t\t});\n\n\t\t// pull out the chart\n\t\tbody.appendChild(container);\n\n\t\t// print\n\t\twin.focus(); // #1510\n\t\twin.print();\n\n\t\t// allow the browser to prepare before reverting\n\t\tsetTimeout(function () {\n\n\t\t\t// put the chart back in\n\t\t\torigParent.appendChild(container);\n\n\t\t\t// restore all body content\n\t\t\teach(childNodes, function (node, i) {\n\t\t\t\tif (node.nodeType === 1) {\n\t\t\t\t\tnode.style.display = origDisplay[i];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tchart.isPrinting = false;\n\n\t\t}, 1000);\n\n\t},\n\n\t/**\n\t * Display a popup menu for choosing the export type\n\t *\n\t * @param {String} className An identifier for the menu\n\t * @param {Array} items A collection with text and onclicks for the items\n\t * @param {Number} x The x position of the opener button\n\t * @param {Number} y The y position of the opener button\n\t * @param {Number} width The width of the opener button\n\t * @param {Number} height The height of the opener button\n\t */\n\tcontextMenu: function (className, items, x, y, width, height, button) {\n\t\tvar chart = this,\n\t\t\tnavOptions = chart.options.navigation,\n\t\t\tmenuItemStyle = navOptions.menuItemStyle,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\tcacheName = 'cache-' + className,\n\t\t\tmenu = chart[cacheName],\n\t\t\tmenuPadding = mathMax(width, height), // for mouse leave detection\n\t\t\tboxShadow = '3px 3px 10px #888',\n\t\t\tinnerMenu,\n\t\t\thide,\n\t\t\thideTimer,\n\t\t\tmenuStyle;\n\n\t\t// create the menu only the first time\n\t\tif (!menu) {\n\n\t\t\t// create a HTML element above the SVG\n\t\t\tchart[cacheName] = menu = createElement(DIV, {\n\t\t\t\tclassName: className\n\t\t\t}, {\n\t\t\t\tposition: ABSOLUTE,\n\t\t\t\tzIndex: 1000,\n\t\t\t\tpadding: menuPadding + PX\n\t\t\t}, chart.container);\n\n\t\t\tinnerMenu = createElement(DIV, null,\n\t\t\t\textend({\n\t\t\t\t\tMozBoxShadow: boxShadow,\n\t\t\t\t\tWebkitBoxShadow: boxShadow,\n\t\t\t\t\tboxShadow: boxShadow\n\t\t\t\t}, navOptions.menuStyle), menu);\n\n\t\t\t// hide on mouse out\n\t\t\thide = function () {\n\t\t\t\tcss(menu, { display: NONE });\n\t\t\t\tif (button) {\n\t\t\t\t\tbutton.setState(0);\n\t\t\t\t}\n\t\t\t\tchart.openMenu = false;\n\t\t\t};\n\n\t\t\t// Hide the menu some time after mouse leave (#1357)\n\t\t\taddEvent(menu, 'mouseleave', function () {\n\t\t\t\thideTimer = setTimeout(hide, 500);\n\t\t\t});\n\t\t\taddEvent(menu, 'mouseenter', function () {\n\t\t\t\tclearTimeout(hideTimer);\n\t\t\t});\n\t\t\t// Hide it on clicking or touching outside the menu (#2258)\n\t\t\taddEvent(document, 'mousedown', function (e) {\n\t\t\t\tif (!chart.pointer.inClass(e.target, className)) {\n\t\t\t\t\thide();\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t\t// create the items\n\t\t\teach(items, function (item) {\n\t\t\t\tif (item) {\n\t\t\t\t\tvar element = item.separator ? \n\t\t\t\t\t\tcreateElement('hr', null, null, innerMenu) :\n\t\t\t\t\t\tcreateElement(DIV, {\n\t\t\t\t\t\t\tonmouseover: function () {\n\t\t\t\t\t\t\t\tcss(this, navOptions.menuItemHoverStyle);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonmouseout: function () {\n\t\t\t\t\t\t\t\tcss(this, menuItemStyle);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonclick: function () {\n\t\t\t\t\t\t\t\thide();\n\t\t\t\t\t\t\t\titem.onclick.apply(chart, arguments);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tinnerHTML: item.text || chart.options.lang[item.textKey]\n\t\t\t\t\t\t}, extend({\n\t\t\t\t\t\t\tcursor: 'pointer'\n\t\t\t\t\t\t}, menuItemStyle), innerMenu);\n\n\n\t\t\t\t\t// Keep references to menu divs to be able to destroy them\n\t\t\t\t\tchart.exportDivElements.push(element);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Keep references to menu and innerMenu div to be able to destroy them\n\t\t\tchart.exportDivElements.push(innerMenu, menu);\n\n\t\t\tchart.exportMenuWidth = menu.offsetWidth;\n\t\t\tchart.exportMenuHeight = menu.offsetHeight;\n\t\t}\n\n\t\tmenuStyle = { display: 'block' };\n\n\t\t// if outside right, right align it\n\t\tif (x + chart.exportMenuWidth > chartWidth) {\n\t\t\tmenuStyle.right = (chartWidth - x - width - menuPadding) + PX;\n\t\t} else {\n\t\t\tmenuStyle.left = (x - menuPadding) + PX;\n\t\t}\n\t\t// if outside bottom, bottom align it\n\t\tif (y + height + chart.exportMenuHeight > chartHeight && button.alignOptions.verticalAlign !== 'top') {\n\t\t\tmenuStyle.bottom = (chartHeight - y - menuPadding)  + PX;\n\t\t} else {\n\t\t\tmenuStyle.top = (y + height - menuPadding) + PX;\n\t\t}\n\n\t\tcss(menu, menuStyle);\n\t\tchart.openMenu = true;\n\t},\n\n\t/**\n\t * Add the export button to the chart\n\t */\n\taddButton: function (options) {\n\t\tvar chart = this,\n\t\t\trenderer = chart.renderer,\n\t\t\tbtnOptions = merge(chart.options.navigation.buttonOptions, options),\n\t\t\tonclick = btnOptions.onclick,\n\t\t\tmenuItems = btnOptions.menuItems,\n\t\t\tsymbol,\n\t\t\tbutton,\n\t\t\tsymbolAttr = {\n\t\t\t\tstroke: btnOptions.symbolStroke,\n\t\t\t\tfill: btnOptions.symbolFill\n\t\t\t},\n\t\t\tsymbolSize = btnOptions.symbolSize || 12;\n\t\tif (!chart.btnCount) {\n\t\t\tchart.btnCount = 0;\n\t\t}\n\n\t\t// Keeps references to the button elements\n\t\tif (!chart.exportDivElements) {\n\t\t\tchart.exportDivElements = [];\n\t\t\tchart.exportSVGElements = [];\n\t\t}\n\n\t\tif (btnOptions.enabled === false) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tvar attr = btnOptions.theme,\n\t\t\tstates = attr.states,\n\t\t\thover = states && states.hover,\n\t\t\tselect = states && states.select,\n\t\t\tcallback;\n\n\t\tdelete attr.states;\n\n\t\tif (onclick) {\n\t\t\tcallback = function () {\n\t\t\t\tonclick.apply(chart, arguments);\n\t\t\t};\n\n\t\t} else if (menuItems) {\n\t\t\tcallback = function () {\n\t\t\t\tchart.contextMenu(\n\t\t\t\t\tbutton.menuClassName, \n\t\t\t\t\tmenuItems, \n\t\t\t\t\tbutton.translateX, \n\t\t\t\t\tbutton.translateY, \n\t\t\t\t\tbutton.width, \n\t\t\t\t\tbutton.height,\n\t\t\t\t\tbutton\n\t\t\t\t);\n\t\t\t\tbutton.setState(2);\n\t\t\t};\n\t\t}\n\n\n\t\tif (btnOptions.text && btnOptions.symbol) {\n\t\t\tattr.paddingLeft = Highcharts.pick(attr.paddingLeft, 25);\n\t\t\n\t\t} else if (!btnOptions.text) {\n\t\t\textend(attr, {\n\t\t\t\twidth: btnOptions.width,\n\t\t\t\theight: btnOptions.height,\n\t\t\t\tpadding: 0\n\t\t\t});\n\t\t}\n\n\t\tbutton = renderer.button(btnOptions.text, 0, 0, callback, attr, hover, select)\n\t\t\t.attr({\n\t\t\t\ttitle: chart.options.lang[btnOptions._titleKey],\n\t\t\t\t'stroke-linecap': 'round'\n\t\t\t});\n\t\tbutton.menuClassName = options.menuClassName || PREFIX + 'menu-' + chart.btnCount++;\n\n\t\tif (btnOptions.symbol) {\n\t\t\tsymbol = renderer.symbol(\n\t\t\t\t\tbtnOptions.symbol,\n\t\t\t\t\tbtnOptions.symbolX - (symbolSize / 2),\n\t\t\t\t\tbtnOptions.symbolY - (symbolSize / 2),\n\t\t\t\t\tsymbolSize,\t\t\t\t\n\t\t\t\t\tsymbolSize\n\t\t\t\t)\n\t\t\t\t.attr(extend(symbolAttr, {\n\t\t\t\t\t'stroke-width': btnOptions.symbolStrokeWidth || 1,\n\t\t\t\t\tzIndex: 1\n\t\t\t\t})).add(button);\n\t\t}\n\n\t\tbutton.add()\n\t\t\t.align(extend(btnOptions, {\n\t\t\t\twidth: button.width,\n\t\t\t\tx: Highcharts.pick(btnOptions.x, buttonOffset) // #1654\n\t\t\t}), true, 'spacingBox');\n\n\t\tbuttonOffset += (button.width + btnOptions.buttonSpacing) * (btnOptions.align === 'right' ? -1 : 1);\n\n\t\tchart.exportSVGElements.push(button, symbol);\n\n\t},\n\n\t/**\n\t * Destroy the buttons.\n\t */\n\tdestroyExport: function (e) {\n\t\tvar chart = e.target,\n\t\t\ti,\n\t\t\telem;\n\n\t\t// Destroy the extra buttons added\n\t\tfor (i = 0; i < chart.exportSVGElements.length; i++) {\n\t\t\telem = chart.exportSVGElements[i];\n\t\t\t\n\t\t\t// Destroy and null the svg/vml elements\n\t\t\tif (elem) { // #1822\n\t\t\t\telem.onclick = elem.ontouchstart = null;\n\t\t\t\tchart.exportSVGElements[i] = elem.destroy();\n\t\t\t}\n\t\t}\n\n\t\t// Destroy the divs for the menu\n\t\tfor (i = 0; i < chart.exportDivElements.length; i++) {\n\t\t\telem = chart.exportDivElements[i];\n\n\t\t\t// Remove the event handler\n\t\t\tremoveEvent(elem, 'mouseleave');\n\n\t\t\t// Remove inline events\n\t\t\tchart.exportDivElements[i] = elem.onmouseout = elem.onmouseover = elem.ontouchstart = elem.onclick = null;\n\n\t\t\t// Destroy the div by moving to garbage bin\n\t\t\tdiscardElement(elem);\n\t\t}\n\t}\n});\n\n\nsymbols.menu = function (x, y, width, height) {\n\tvar arr = [\n\t\tM, x, y + 2.5,\n\t\tL, x + width, y + 2.5,\n\t\tM, x, y + height / 2 + 0.5,\n\t\tL, x + width, y + height / 2 + 0.5,\n\t\tM, x, y + height - 1.5,\n\t\tL, x + width, y + height - 1.5\n\t];\n\treturn arr;\n};\n\n// Add the buttons on chart load\nChart.prototype.callbacks.push(function (chart) {\n\tvar n,\n\t\texportingOptions = chart.options.exporting,\n\t\tbuttons = exportingOptions.buttons;\n\n\tbuttonOffset = 0;\n\n\tif (exportingOptions.enabled !== false) {\n\n\t\tfor (n in buttons) {\n\t\t\tchart.addButton(buttons[n]);\n\t\t}\n\n\t\t// Destroy the export elements at chart destroy\n\t\taddEvent(chart, 'destroy', chart.destroyExport);\n\t}\n\n});\n\n\n}(Highcharts));\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/funnel.js",
    "content": "/*\n \n Highcharts funnel module, Beta\n\n (c) 2010-2012 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(d){var u=d.getOptions().plotOptions,p=d.seriesTypes,D=d.merge,z=function(){},A=d.each;u.funnel=D(u.pie,{center:[\"50%\",\"50%\"],width:\"90%\",neckWidth:\"30%\",height:\"100%\",neckHeight:\"25%\",dataLabels:{connectorWidth:1,connectorColor:\"#606060\"},size:!0,states:{select:{color:\"#C0C0C0\",borderColor:\"#000000\",shadow:!1}}});p.funnel=d.extendClass(p.pie,{type:\"funnel\",animate:z,translate:function(){var a=function(k,a){return/%$/.test(k)?a*parseInt(k,10)/100:parseInt(k,10)},g=0,e=this.chart,f=e.plotWidth,\ne=e.plotHeight,h=0,c=this.options,C=c.center,b=a(C[0],f),d=a(C[0],e),p=a(c.width,f),i,q,j=a(c.height,e),r=a(c.neckWidth,f),s=a(c.neckHeight,e),v=j-s,a=this.data,w,x,u=c.dataLabels.position===\"left\"?1:0,y,m,B,n,l,t,o;this.getWidthAt=q=function(k){return k>j-s||j===s?r:r+(p-r)*((j-s-k)/(j-s))};this.getX=function(k,a){return b+(a?-1:1)*(q(k)/2+c.dataLabels.distance)};this.center=[b,d,j];this.centerX=b;A(a,function(a){g+=a.y});A(a,function(a){o=null;x=g?a.y/g:0;m=d-j/2+h*j;l=m+x*j;i=q(m);y=b-i/2;B=y+\ni;i=q(l);n=b-i/2;t=n+i;m>v?(y=n=b-r/2,B=t=b+r/2):l>v&&(o=l,i=q(v),n=b-i/2,t=n+i,l=v);w=[\"M\",y,m,\"L\",B,m,t,l];o&&w.push(t,o,n,o);w.push(n,l,\"Z\");a.shapeType=\"path\";a.shapeArgs={d:w};a.percentage=x*100;a.plotX=b;a.plotY=(m+(o||l))/2;a.tooltipPos=[b,a.plotY];a.slice=z;a.half=u;h+=x});this.setTooltipPoints()},drawPoints:function(){var a=this,g=a.options,e=a.chart.renderer;A(a.data,function(f){var h=f.graphic,c=f.shapeArgs;h?h.animate(c):f.graphic=e.path(c).attr({fill:f.color,stroke:g.borderColor,\"stroke-width\":g.borderWidth}).add(a.group)})},\nsortByAngle:z,drawDataLabels:function(){var a=this.data,g=this.options.dataLabels.distance,e,f,h,c=a.length,d,b;for(this.center[2]-=2*g;c--;)h=a[c],f=(e=h.half)?1:-1,b=h.plotY,d=this.getX(b,e),h.labelPos=[0,b,d+(g-5)*f,b,d+g*f,b,e?\"right\":\"left\",0];p.pie.prototype.drawDataLabels.call(this)}})})(Highcharts);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/funnel.src.js",
    "content": "/**\n * @license \n * Highcharts funnel module, Beta\n *\n * (c) 2010-2012 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n/*global Highcharts */\n(function (Highcharts) {\n\t\n'use strict';\n\n// create shortcuts\nvar defaultOptions = Highcharts.getOptions(),\n\tdefaultPlotOptions = defaultOptions.plotOptions,\n\tseriesTypes = Highcharts.seriesTypes,\n\tmerge = Highcharts.merge,\n\tnoop = function () {},\n\teach = Highcharts.each;\n\n// set default options\ndefaultPlotOptions.funnel = merge(defaultPlotOptions.pie, {\n\tcenter: ['50%', '50%'],\n\twidth: '90%',\n\tneckWidth: '30%',\n\theight: '100%',\n\tneckHeight: '25%',\n\n\tdataLabels: {\n\t\t//position: 'right',\n\t\tconnectorWidth: 1,\n\t\tconnectorColor: '#606060'\n\t},\n\tsize: true, // to avoid adapting to data label size in Pie.drawDataLabels\n\tstates: {\n\t\tselect: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tborderColor: '#000000',\n\t\t\tshadow: false\n\t\t}\n\t}\t\n});\n\n\nseriesTypes.funnel = Highcharts.extendClass(seriesTypes.pie, {\n\t\n\ttype: 'funnel',\n\tanimate: noop,\n\n\t/**\n\t * Overrides the pie translate method\n\t */\n\ttranslate: function () {\n\t\t\n\t\tvar \n\t\t\t// Get positions - either an integer or a percentage string must be given\n\t\t\tgetLength = function (length, relativeTo) {\n\t\t\t\treturn (/%$/).test(length) ?\n\t\t\t\t\trelativeTo * parseInt(length, 10) / 100 :\n\t\t\t\t\tparseInt(length, 10);\n\t\t\t},\n\t\t\t\n\t\t\tsum = 0,\n\t\t\tseries = this,\n\t\t\tchart = series.chart,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tcumulative = 0, // start at top\n\t\t\toptions = series.options,\n\t\t\tcenter = options.center,\n\t\t\tcenterX = getLength(center[0], plotWidth),\n\t\t\tcenterY = getLength(center[0], plotHeight),\n\t\t\twidth = getLength(options.width, plotWidth),\n\t\t\ttempWidth,\n\t\t\tgetWidthAt,\n\t\t\theight = getLength(options.height, plotHeight),\n\t\t\tneckWidth = getLength(options.neckWidth, plotWidth),\n\t\t\tneckHeight = getLength(options.neckHeight, plotHeight),\n\t\t\tneckY = height - neckHeight,\n\t\t\tdata = series.data,\n\t\t\tpath,\n\t\t\tfraction,\n\t\t\thalf = options.dataLabels.position === 'left' ? 1 : 0,\n\n\t\t\tx1, \n\t\t\ty1, \n\t\t\tx2, \n\t\t\tx3, \n\t\t\ty3, \n\t\t\tx4, \n\t\t\ty5;\n\n\t\t// Return the width at a specific y coordinate\n\t\tseries.getWidthAt = getWidthAt = function (y) {\n\t\t\treturn y > height - neckHeight || height === neckHeight ?\n\t\t\t\tneckWidth :\n\t\t\t\tneckWidth + (width - neckWidth) * ((height - neckHeight - y) / (height - neckHeight));\n\t\t};\n\t\tseries.getX = function (y, half) {\n\t\t\treturn centerX + (half ? -1 : 1) * ((getWidthAt(y) / 2) + options.dataLabels.distance);\n\t\t};\n\n\t\t// Expose\n\t\tseries.center = [centerX, centerY, height];\n\t\tseries.centerX = centerX;\n\n\t\t/*\n\t\t * Individual point coordinate naming:\n\t\t *\n\t\t * x1,y1 _________________ x2,y1\n\t\t *  \\                         /\n\t\t *   \\                       /\n\t\t *    \\                     /\n\t\t *     \\                   /\n\t\t *      \\                 /\n\t\t *     x3,y3 _________ x4,y3\n\t\t *\n\t\t * Additional for the base of the neck:\n\t\t *\n\t\t *       |               |\n\t\t *       |               |\n\t\t *       |               |\n\t\t *     x3,y5 _________ x4,y5\n\t\t */\n\n\n\n\n\t\t// get the total sum\n\t\teach(data, function (point) {\n\t\t\tsum += point.y;\n\t\t});\n\n\t\teach(data, function (point) {\n\t\t\t// set start and end positions\n\t\t\ty5 = null;\n\t\t\tfraction = sum ? point.y / sum : 0;\n\t\t\ty1 = centerY - height / 2 + cumulative * height;\n\t\t\ty3 = y1 + fraction * height;\n\t\t\t//tempWidth = neckWidth + (width - neckWidth) * ((height - neckHeight - y1) / (height - neckHeight));\n\t\t\ttempWidth = getWidthAt(y1);\n\t\t\tx1 = centerX - tempWidth / 2;\n\t\t\tx2 = x1 + tempWidth;\n\t\t\ttempWidth = getWidthAt(y3);\n\t\t\tx3 = centerX - tempWidth / 2;\n\t\t\tx4 = x3 + tempWidth;\n\n\t\t\t// the entire point is within the neck\n\t\t\tif (y1 > neckY) {\n\t\t\t\tx1 = x3 = centerX - neckWidth / 2;\n\t\t\t\tx2 = x4 = centerX + neckWidth / 2;\n\t\t\t\n\t\t\t// the base of the neck\n\t\t\t} else if (y3 > neckY) {\n\t\t\t\ty5 = y3;\n\n\t\t\t\ttempWidth = getWidthAt(neckY);\n\t\t\t\tx3 = centerX - tempWidth / 2;\n\t\t\t\tx4 = x3 + tempWidth;\n\n\t\t\t\ty3 = neckY;\n\t\t\t}\n\n\t\t\t// save the path\n\t\t\tpath = [\n\t\t\t\t'M',\n\t\t\t\tx1, y1,\n\t\t\t\t'L',\n\t\t\t\tx2, y1,\n\t\t\t\tx4, y3\n\t\t\t];\n\t\t\tif (y5) {\n\t\t\t\tpath.push(x4, y5, x3, y5);\n\t\t\t}\n\t\t\tpath.push(x3, y3, 'Z');\n\n\t\t\t// prepare for using shared dr\n\t\t\tpoint.shapeType = 'path';\n\t\t\tpoint.shapeArgs = { d: path };\n\n\n\t\t\t// for tooltips and data labels\n\t\t\tpoint.percentage = fraction * 100;\n\t\t\tpoint.plotX = centerX;\n\t\t\tpoint.plotY = (y1 + (y5 || y3)) / 2;\n\n\t\t\t// Placement of tooltips and data labels\n\t\t\tpoint.tooltipPos = [\n\t\t\t\tcenterX,\n\t\t\t\tpoint.plotY\n\t\t\t];\n\n\t\t\t// Slice is a noop on funnel points\n\t\t\tpoint.slice = noop;\n\t\t\t\n\t\t\t// Mimicking pie data label placement logic\n\t\t\tpoint.half = half;\n\n\t\t\tcumulative += fraction;\n\t\t});\n\n\n\t\tseries.setTooltipPoints();\n\t},\n\t/**\n\t * Draw a single point (wedge)\n\t * @param {Object} point The point object\n\t * @param {Object} color The color of the point\n\t * @param {Number} brightness The brightness relative to the color\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer;\n\n\t\teach(series.data, function (point) {\n\t\t\t\n\t\t\tvar graphic = point.graphic,\n\t\t\t\tshapeArgs = point.shapeArgs;\n\n\t\t\tif (!graphic) { // Create the shapes\n\t\t\t\tpoint.graphic = renderer.path(shapeArgs).\n\t\t\t\t\tattr({\n\t\t\t\t\t\tfill: point.color,\n\t\t\t\t\t\tstroke: options.borderColor,\n\t\t\t\t\t\t'stroke-width': options.borderWidth\n\t\t\t\t\t}).\n\t\t\t\t\tadd(series.group);\n\t\t\t\t\t\n\t\t\t} else { // Update the shapes\n\t\t\t\tgraphic.animate(shapeArgs);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Funnel items don't have angles (#2289)\n\t */\n\tsortByAngle: noop,\n\t\n\t/**\n\t * Extend the pie data label method\n\t */\n\tdrawDataLabels: function () {\n\t\tvar data = this.data,\n\t\t\tlabelDistance = this.options.dataLabels.distance,\n\t\t\tleftSide,\n\t\t\tsign,\n\t\t\tpoint,\n\t\t\ti = data.length,\n\t\t\tx,\n\t\t\ty;\n\t\t\n\t\t// In the original pie label anticollision logic, the slots are distributed\n\t\t// from one labelDistance above to one labelDistance below the pie. In funnels\n\t\t// we don't want this.\n\t\tthis.center[2] -= 2 * labelDistance;\n\t\t\n\t\t// Set the label position array for each point.\n\t\twhile (i--) {\n\t\t\tpoint = data[i];\n\t\t\tleftSide = point.half;\n\t\t\tsign = leftSide ? 1 : -1;\n\t\t\ty = point.plotY;\n\t\t\tx = this.getX(y, leftSide);\n\t\t\t\t\n\t\t\t// set the anchor point for data labels\n\t\t\tpoint.labelPos = [\n\t\t\t\t0, // first break of connector\n\t\t\t\ty, // a/a\n\t\t\t\tx + (labelDistance - 5) * sign, // second break, right outside point shape\n\t\t\t\ty, // a/a\n\t\t\t\tx + labelDistance * sign, // landing point for connector\n\t\t\t\ty, // a/a\n\t\t\t\tleftSide ? 'right' : 'left', // alignment\n\t\t\t\t0 // center angle\n\t\t\t];\n\t\t}\n\t\t\n\t\tseriesTypes.pie.prototype.drawDataLabels.call(this);\n\t}\n\n});\n\n\n}(Highcharts));\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/heatmap.js",
    "content": "(function(b){var k=b.seriesTypes,l=b.each;k.heatmap=b.extendClass(k.map,{colorKey:\"z\",useMapGeometry:!1,pointArrayMap:[\"y\",\"z\"],translate:function(){var c=this,b=c.options,i=Number.MAX_VALUE,j=Number.MIN_VALUE;c.generatePoints();l(c.data,function(a){var e=a.x,f=a.y,d=a.z,g=(b.colsize||1)/2,h=(b.rowsize||1)/2;a.path=[\"M\",e-g,f-h,\"L\",e+g,f-h,\"L\",e+g,f+h,\"L\",e-g,f+h,\"Z\"];a.shapeType=\"path\";a.shapeArgs={d:c.translatePath(a.path)};typeof d===\"number\"&&(d>j?j=d:d<i&&(i=d))});c.translateColors(i,j)},getBox:function(){}})})(Highcharts);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/heatmap.src.js",
    "content": "(function (Highcharts) {\n\tvar seriesTypes = Highcharts.seriesTypes,\n\t\teach = Highcharts.each;\n\t\n\tseriesTypes.heatmap = Highcharts.extendClass(seriesTypes.map, {\n\t\tcolorKey: 'z',\n\t\tuseMapGeometry: false,\n\t\tpointArrayMap: ['y', 'z'],\n\t\ttranslate: function () {\n\t\t\tvar series = this,\n\t\t\t\toptions = series.options,\n\t\t\t\tdataMin = Number.MAX_VALUE,\n\t\t\t\tdataMax = Number.MIN_VALUE;\n\n\t\t\tseries.generatePoints();\n\t\n\t\t\teach(series.data, function (point) {\n\t\t\t\tvar x = point.x,\n\t\t\t\t\ty = point.y,\n\t\t\t\t\tvalue = point.z,\n\t\t\t\t\txPad = (options.colsize || 1) / 2,\n\t\t\t\t\tyPad = (options.rowsize || 1) / 2;\n\n\t\t\t\tpoint.path = [\n\t\t\t\t\t'M', x - xPad, y - yPad,\n\t\t\t\t\t'L', x + xPad, y - yPad,\n\t\t\t\t\t'L', x + xPad, y + yPad,\n\t\t\t\t\t'L', x - xPad, y + yPad,\n\t\t\t\t\t'Z'\n\t\t\t\t];\n\t\t\t\t\n\t\t\t\tpoint.shapeType = 'path';\n\t\t\t\tpoint.shapeArgs = {\n\t\t\t\t\td: series.translatePath(point.path)\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (typeof value === 'number') {\n\t\t\t\t\tif (value > dataMax) {\n\t\t\t\t\t\tdataMax = value;\n\t\t\t\t\t} else if (value < dataMin) {\n\t\t\t\t\t\tdataMin = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tseries.translateColors(dataMin, dataMax);\n\t\t},\n\t\t\n\t\tgetBox: function () {}\n\t\t\t\n\t});\n\t\n}(Highcharts));\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/map.js",
    "content": "/*\n Map plugin v0.1 for Highcharts\n\n (c) 2011-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(g){function x(a,b,c){for(var d=4,e=[];d--;)e[d]=Math.round(b.rgba[d]+(a.rgba[d]-b.rgba[d])*(1-c));return\"rgba(\"+e.join(\",\")+\")\"}var r=g.Axis,y=g.Chart,s=g.Point,z=g.Pointer,l=g.each,v=g.extend,p=g.merge,n=g.pick,A=g.numberFormat,B=g.getOptions(),k=g.seriesTypes,q=B.plotOptions,t=g.wrap,u=g.Color,w=function(){};B.mapNavigation={buttonOptions:{align:\"right\",verticalAlign:\"bottom\",x:0,width:18,height:18,style:{fontSize:\"15px\",fontWeight:\"bold\",textAlign:\"center\"}},buttons:{zoomIn:{onclick:function(){this.mapZoom(0.5)},\ntext:\"+\",y:-32},zoomOut:{onclick:function(){this.mapZoom(2)},text:\"-\",y:0}}};g.splitPath=function(a){var b,a=a.replace(/([A-Za-z])/g,\" $1 \"),a=a.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\"),a=a.split(/[ ,]+/);for(b=0;b<a.length;b++)/[a-zA-Z]/.test(a[b])||(a[b]=parseFloat(a[b]));return a};g.maps={};t(r.prototype,\"getSeriesExtremes\",function(a){var b=this.isXAxis,c,d,e=[];l(this.series,function(a,b){if(a.useMapGeometry)e[b]=a.xData,a.xData=[]});a.call(this);c=n(this.dataMin,Number.MAX_VALUE);d=n(this.dataMax,\nNumber.MIN_VALUE);l(this.series,function(a,i){if(a.useMapGeometry)c=Math.min(c,a[b?\"minX\":\"minY\"]),d=Math.max(d,a[b?\"maxX\":\"maxY\"]),a.xData=e[i]});this.dataMin=c;this.dataMax=d});t(r.prototype,\"setAxisTranslation\",function(a){var b=this.chart,c=b.plotWidth/b.plotHeight,d=this.isXAxis,e=b.xAxis[0];a.call(this);if(b.options.chart.type===\"map\"&&!d&&e.transA!==void 0)this.transA=e.transA=Math.min(this.transA,e.transA),a=(e.max-e.min)/(this.max-this.min),e=a>c?this:e,c=(e.max-e.min)*e.transA,e.minPixelPadding=\n(e.len-c)/2});t(y.prototype,\"render\",function(a){var b=this,c=b.options.mapNavigation;a.call(b);b.renderMapNavigation();c.zoomOnDoubleClick&&g.addEvent(b.container,\"dblclick\",function(a){b.pointer.onContainerDblClick(a)});c.zoomOnMouseWheel&&g.addEvent(b.container,document.onmousewheel===void 0?\"DOMMouseScroll\":\"mousewheel\",function(a){b.pointer.onContainerMouseWheel(a)})});v(z.prototype,{onContainerDblClick:function(a){var b=this.chart,a=this.normalize(a);b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-\nb.plotTop)&&b.mapZoom(0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY))},onContainerMouseWheel:function(a){var b=this.chart,c,a=this.normalize(a);c=a.detail||-(a.wheelDelta/120);b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&b.mapZoom(c>0?2:0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY))}});t(z.prototype,\"init\",function(a,b,c){a.call(this,b,c);if(c.mapNavigation.enableTouchZoom)this.pinchX=this.pinchHor=this.pinchY=this.pinchVert=!0});v(y.prototype,{renderMapNavigation:function(){var a=\nthis,b=this.options.mapNavigation,c=b.buttons,d,e,f,i=function(){this.handler.call(a)};if(b.enableButtons)for(d in c)if(c.hasOwnProperty(d))f=p(b.buttonOptions,c[d]),e=a.renderer.button(f.text,0,0,i).attr({width:f.width,height:f.height}).css(f.style).add(),e.handler=f.onclick,e.align(v(f,{width:e.width,height:e.height}),null,\"spacingBox\")},fitToBox:function(a,b){l([[\"x\",\"width\"],[\"y\",\"height\"]],function(c){var d=c[0],c=c[1];a[d]+a[c]>b[d]+b[c]&&(a[c]>b[c]?(a[c]=b[c],a[d]=b[d]):a[d]=b[d]+b[c]-a[c]);\na[c]>b[c]&&(a[c]=b[c]);a[d]<b[d]&&(a[d]=b[d])});return a},mapZoom:function(a,b,c){if(!this.isMapZooming){var d=this,e=d.xAxis[0],f=e.max-e.min,i=n(b,e.min+f/2),b=f*a,f=d.yAxis[0],h=f.max-f.min,c=n(c,f.min+h/2);a*=h;i-=b/2;h=c-a/2;c=n(d.options.chart.animation,!0);b=d.fitToBox({x:i,y:h,width:b,height:a},{x:e.dataMin,y:f.dataMin,width:e.dataMax-e.dataMin,height:f.dataMax-f.dataMin});e.setExtremes(b.x,b.x+b.width,!1);f.setExtremes(b.y,b.y+b.height,!1);if(e=c?c.duration||500:0)d.isMapZooming=!0,setTimeout(function(){d.isMapZooming=\n!1},e);d.redraw()}}});q.map=p(q.scatter,{animation:!1,nullColor:\"#F8F8F8\",borderColor:\"silver\",borderWidth:1,marker:null,stickyTracking:!1,dataLabels:{verticalAlign:\"middle\"},turboThreshold:0,tooltip:{followPointer:!0,pointFormat:\"{point.name}: {point.y}<br/>\"},states:{normal:{animation:!0}}});r=g.extendClass(s,{applyOptions:function(a,b){var c=s.prototype.applyOptions.call(this,a,b);if(c.path&&typeof c.path===\"string\")c.path=c.options.path=g.splitPath(c.path);return c},onMouseOver:function(){clearTimeout(this.colorInterval);\ns.prototype.onMouseOver.call(this)},onMouseOut:function(){var a=this,b=+new Date,c=u(a.options.color),d=u(a.pointAttr.hover.fill),e=a.series.options.states.normal.animation,f=e&&(e.duration||500);if(f&&c.rgba.length===4&&d.rgba.length===4)delete a.pointAttr[\"\"].fill,clearTimeout(a.colorInterval),a.colorInterval=setInterval(function(){var e=(new Date-b)/f,h=a.graphic;e>1&&(e=1);h&&h.attr(\"fill\",x(d,c,e));e>=1&&clearTimeout(a.colorInterval)},13);s.prototype.onMouseOut.call(a)}});k.map=g.extendClass(k.scatter,\n{type:\"map\",pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\"},colorKey:\"y\",pointClass:r,trackerGroups:[\"group\",\"markerGroup\",\"dataLabelsGroup\"],getSymbol:w,supportsDrilldown:!0,getExtremesFromAll:!0,useMapGeometry:!0,init:function(a){var b=this,c=a.options.legend.valueDecimals,d=[],e,f,i,h,j,o,m;o=a.options.legend.layout===\"horizontal\";g.Series.prototype.init.apply(this,arguments);j=b.options.colorRange;if(h=b.options.valueRanges)l(h,function(a){f=a.from;i=a.to;e=\n\"\";f===void 0?e=\"< \":i===void 0&&(e=\"> \");f!==void 0&&(e+=A(f,c));f!==void 0&&i!==void 0&&(e+=\" - \");i!==void 0&&(e+=A(i,c));d.push(g.extend({chart:b.chart,name:e,options:{},drawLegendSymbol:k.area.prototype.drawLegendSymbol,visible:!0,setState:function(){},setVisible:function(){}},a))}),b.legendItems=d;else if(j)f=j.from,i=j.to,h=j.fromLabel,j=j.toLabel,m=o?[0,0,1,0]:[0,1,0,0],o||(o=h,h=j,j=o),o={linearGradient:{x1:m[0],y1:m[1],x2:m[2],y2:m[3]},stops:[[0,f],[1,i]]},d=[{chart:b.chart,options:{},fromLabel:h,\ntoLabel:j,color:o,drawLegendSymbol:this.drawLegendSymbolGradient,visible:!0,setState:function(){},setVisible:function(){}}],b.legendItems=d},drawLegendSymbol:k.area.prototype.drawLegendSymbol,drawLegendSymbolGradient:function(a,b){var c=a.options.symbolPadding,d=n(a.options.padding,8),e,f,i=this.chart.renderer.fontMetrics(a.options.itemStyle.fontSize).h,h=a.options.layout===\"horizontal\",j;j=n(a.options.rectangleLength,200);h?(e=-(c/2),f=0):(e=-j+a.baseline-c/2,f=d+i);b.fromText=this.chart.renderer.text(b.fromLabel,\nf,e).attr({zIndex:2}).add(b.legendGroup);f=b.fromText.getBBox();b.legendSymbol=this.chart.renderer.rect(h?f.x+f.width+c:f.x-i-c,f.y,h?j:i,h?i:j,2).attr({zIndex:1}).add(b.legendGroup);j=b.legendSymbol.getBBox();b.toText=this.chart.renderer.text(b.toLabel,j.x+j.width+c,h?e:j.y+j.height-c).attr({zIndex:2}).add(b.legendGroup);e=b.toText.getBBox();h?(a.offsetWidth=f.width+j.width+e.width+c*2+d,a.itemY=i+d):(a.offsetWidth=Math.max(f.width,e.width)+c+j.width+d,a.itemY=j.height+d,a.itemX=c)},getBox:function(a){var b=\nNumber.MIN_VALUE,c=Number.MAX_VALUE,d=Number.MIN_VALUE,e=Number.MAX_VALUE;l(a||this.options.data,function(a){for(var i=a.path,h=i.length,j=!1,g=Number.MIN_VALUE,m=Number.MAX_VALUE,k=Number.MIN_VALUE,l=Number.MAX_VALUE;h--;)typeof i[h]===\"number\"&&!isNaN(i[h])&&(j?(g=Math.max(g,i[h]),m=Math.min(m,i[h])):(k=Math.max(k,i[h]),l=Math.min(l,i[h])),j=!j);a._maxX=g;a._minX=m;a._maxY=k;a._minY=l;b=Math.max(b,g);c=Math.min(c,m);d=Math.max(d,k);e=Math.min(e,l)});this.minY=e;this.maxY=d;this.minX=c;this.maxX=\nb},translatePath:function(a){var b=!1,c=this.xAxis,d=this.yAxis,e,a=[].concat(a);for(e=a.length;e--;)typeof a[e]===\"number\"&&(a[e]=b?Math.round(c.translate(a[e])):Math.round(d.len-d.translate(a[e])),b=!b);return a},setData:function(){g.Series.prototype.setData.apply(this,arguments);this.getBox()},translate:function(){var a=this,b=Number.MAX_VALUE,c=Number.MIN_VALUE;a.generatePoints();l(a.data,function(d){d.shapeType=\"path\";d.shapeArgs={d:a.translatePath(d.path)};if(typeof d.y===\"number\")if(d.y>c)c=\nd.y;else if(d.y<b)b=d.y});a.translateColors(b,c)},translateColors:function(a,b){var c=this.options,d=c.valueRanges,e=c.colorRange,f=this.colorKey,i,h;e&&(i=u(e.from),h=u(e.to));l(this.data,function(g){var k=g[f],m,l,n;if(d)for(n=d.length;n--;){if(m=d[n],i=m.from,h=m.to,(i===void 0||k>=i)&&(h===void 0||k<=h)){l=m.color;break}}else e&&k!==void 0&&(m=1-(b-k)/(b-a),l=k===null?c.nullColor:x(i,h,m));if(l)g.color=null,g.options.color=l})},drawGraph:w,drawDataLabels:w,drawPoints:function(){var a=this.xAxis,\nb=this.yAxis,c=this.colorKey;l(this.data,function(a){a.plotY=1;if(a[c]===null)a[c]=0,a.isNull=!0});k.column.prototype.drawPoints.apply(this);l(this.data,function(d){var e=d.dataLabels,f=a.toPixels(d._minX,!0),g=a.toPixels(d._maxX,!0),h=b.toPixels(d._minY,!0),j=b.toPixels(d._maxY,!0);d.plotX=Math.round(f+(g-f)*n(e&&e.anchorX,0.5));d.plotY=Math.round(h+(j-h)*n(e&&e.anchorY,0.5));d.isNull&&(d[c]=null)});g.Series.prototype.drawDataLabels.call(this)},animateDrilldown:function(a){var b=this.chart.plotBox,\nc=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],d=c.bBox,e=this.chart.options.drilldown.animation;if(!a)a=Math.min(d.width/b.width,d.height/b.height),c.shapeArgs={scaleX:a,scaleY:a,translateX:d.x,translateY:d.y},l(this.points,function(a){a.graphic.attr(c.shapeArgs).animate({scaleX:1,scaleY:1,translateX:0,translateY:0},e)}),delete this.animate},animateDrillupFrom:function(a){k.column.prototype.animateDrillupFrom.call(this,a)},animateDrillupTo:function(a){k.column.prototype.animateDrillupTo.call(this,\na)}});q.mapline=p(q.map,{lineWidth:1,backgroundColor:\"none\"});k.mapline=g.extendClass(k.map,{type:\"mapline\",pointAttrToOptions:{stroke:\"color\",\"stroke-width\":\"lineWidth\",fill:\"backgroundColor\"},drawLegendSymbol:k.line.prototype.drawLegendSymbol});q.mappoint=p(q.scatter,{dataLabels:{enabled:!0,format:\"{point.name}\",color:\"black\",style:{textShadow:\"0 0 5px white\"}}});k.mappoint=g.extendClass(k.scatter,{type:\"mappoint\"});g.Map=function(a,b){var c={endOnTick:!1,gridLineWidth:0,labels:{enabled:!1},lineWidth:0,\nminPadding:0,maxPadding:0,startOnTick:!1,tickWidth:0,title:null},d;d=a.series;a.series=null;a=p({chart:{type:\"map\",panning:\"xy\"},xAxis:c,yAxis:p(c,{reversed:!0})},a,{chart:{inverted:!1}});a.series=d;return new g.Chart(a,b)}})(Highcharts);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/map.src.js",
    "content": "/**\n * @license Map plugin v0.1 for Highcharts\n *\n * (c) 2011-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n/* \n * See www.highcharts.com/studies/world-map.htm for use case.\n *\n * To do:\n * - Optimize long variable names and alias adapter methods and Highcharts namespace variables\n * - Zoom and pan GUI\n */\n(function (Highcharts) {\n\tvar UNDEFINED,\n\t\tAxis = Highcharts.Axis,\n\t\tChart = Highcharts.Chart,\n\t\tPoint = Highcharts.Point,\n\t\tPointer = Highcharts.Pointer,\n\t\teach = Highcharts.each,\n\t\textend = Highcharts.extend,\n\t\tmerge = Highcharts.merge,\n\t\tpick = Highcharts.pick,\n\t\tnumberFormat = Highcharts.numberFormat,\n\t\tdefaultOptions = Highcharts.getOptions(),\n\t\tseriesTypes = Highcharts.seriesTypes,\n\t\tplotOptions = defaultOptions.plotOptions,\n\t\twrap = Highcharts.wrap,\n\t\tColor = Highcharts.Color,\n\t\tnoop = function () {};\n\n\t\n\n\t/*\n\t * Return an intermediate color between two colors, according to pos where 0\n\t * is the from color and 1 is the to color\n\t */\n\tfunction tweenColors(from, to, pos) {\n\t\tvar i = 4,\n\t\t\trgba = [];\n\n\t\twhile (i--) {\n\t\t\trgba[i] = Math.round(\n\t\t\t\tto.rgba[i] + (from.rgba[i] - to.rgba[i]) * (1 - pos)\n\t\t\t);\n\t\t}\n\t\treturn 'rgba(' + rgba.join(',') + ')';\n\t}\n\n\t// Set the default map navigation options\n\tdefaultOptions.mapNavigation = {\n\t\tbuttonOptions: {\n\t\t\talign: 'right',\n\t\t\tverticalAlign: 'bottom',\n\t\t\tx: 0,\n\t\t\twidth: 18,\n\t\t\theight: 18,\n\t\t\tstyle: {\n\t\t\t\tfontSize: '15px',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\ttextAlign: 'center'\n\t\t\t}\n\t\t},\n\t\tbuttons: {\n\t\t\tzoomIn: {\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.mapZoom(0.5);\n\t\t\t\t},\n\t\t\t\ttext: '+',\n\t\t\t\ty: -32\n\t\t\t},\n\t\t\tzoomOut: {\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.mapZoom(2);\n\t\t\t\t},\n\t\t\t\ttext: '-',\n\t\t\t\ty: 0\n\t\t\t}\n\t\t}\n\t\t// enableButtons: false,\n\t\t// enableTouchZoom: false,\n\t\t// zoomOnDoubleClick: false,\n\t\t// zoomOnMouseWheel: false\n\n\t};\n\t\n\t/**\n\t * Utility for reading SVG paths directly.\n\t */\n\tHighcharts.splitPath = function (path) {\n\t\tvar i;\n\n\t\t// Move letters apart\n\t\tpath = path.replace(/([A-Za-z])/g, ' $1 ');\n\t\t// Trim\n\t\tpath = path.replace(/^\\s*/, \"\").replace(/\\s*$/, \"\");\n\t\t\n\t\t// Split on spaces and commas\n\t\tpath = path.split(/[ ,]+/);\n\t\t\n\t\t// Parse numbers\n\t\tfor (i = 0; i < path.length; i++) {\n\t\t\tif (!/[a-zA-Z]/.test(path[i])) {\n\t\t\t\tpath[i] = parseFloat(path[i]);\n\t\t\t}\n\t\t}\n\t\treturn path;\n\t};\n\n\t// A placeholder for map definitions\n\tHighcharts.maps = {};\n\t\n\t/**\n\t * Override to use the extreme coordinates from the SVG shape, not the\n\t * data values\n\t */\n\twrap(Axis.prototype, 'getSeriesExtremes', function (proceed) {\n\t\tvar isXAxis = this.isXAxis,\n\t\t\tdataMin,\n\t\t\tdataMax,\n\t\t\txData = [];\n\n\t\t// Remove the xData array and cache it locally so that the proceed method doesn't use it\n\t\teach(this.series, function (series, i) {\n\t\t\tif (series.useMapGeometry) {\n\t\t\t\txData[i] = series.xData;\n\t\t\t\tseries.xData = [];\n\t\t\t}\n\t\t});\n\n\t\t// Call base to reach normal cartesian series (like mappoint)\n\t\tproceed.call(this);\n\n\t\t// Run extremes logic for map and mapline\n\t\tdataMin = pick(this.dataMin, Number.MAX_VALUE);\n\t\tdataMax = pick(this.dataMax, Number.MIN_VALUE);\n\t\teach(this.series, function (series, i) {\n\t\t\tif (series.useMapGeometry) {\n\t\t\t\tdataMin = Math.min(dataMin, series[isXAxis ? 'minX' : 'minY']);\n\t\t\t\tdataMax = Math.max(dataMax, series[isXAxis ? 'maxX' : 'maxY']);\n\t\t\t\tseries.xData = xData[i]; // Reset xData array\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.dataMin = dataMin;\n\t\tthis.dataMax = dataMax;\n\t});\n\t\n\t/**\n\t * Override axis translation to make sure the aspect ratio is always kept\n\t */\n\twrap(Axis.prototype, 'setAxisTranslation', function (proceed) {\n\t\tvar chart = this.chart,\n\t\t\tmapRatio,\n\t\t\tplotRatio = chart.plotWidth / chart.plotHeight,\n\t\t\tisXAxis = this.isXAxis,\n\t\t\tadjustedAxisLength,\n\t\t\txAxis = chart.xAxis[0],\n\t\t\tpadAxis;\n\t\t\n\t\t// Run the parent method\n\t\tproceed.call(this);\n\t\t\n\t\t// On Y axis, handle both\n\t\tif (chart.options.chart.type === 'map' && !isXAxis && xAxis.transA !== UNDEFINED) {\n\t\t\t\n\t\t\t// Use the same translation for both axes\n\t\t\tthis.transA = xAxis.transA = Math.min(this.transA, xAxis.transA);\n\t\t\t\n\t\t\tmapRatio = (xAxis.max - xAxis.min) / (this.max - this.min);\n\t\t\t\n\t\t\t// What axis to pad to put the map in the middle\n\t\t\tpadAxis = mapRatio > plotRatio ? this : xAxis;\n\t\t\t\n\t\t\t// Pad it\n\t\t\tadjustedAxisLength = (padAxis.max - padAxis.min) * padAxis.transA;\n\t\t\tpadAxis.minPixelPadding = (padAxis.len - adjustedAxisLength) / 2;\n\t\t}\n\t});\n\n\n\t//--- Start zooming and panning features\n\n\twrap(Chart.prototype, 'render', function (proceed) {\n\t\tvar chart = this,\n\t\t\tmapNavigation = chart.options.mapNavigation;\n\n\t\tproceed.call(chart);\n\n\t\t// Render the plus and minus buttons\n\t\tchart.renderMapNavigation();\n\n\t\t// Add the double click event\n\t\tif (mapNavigation.zoomOnDoubleClick) {\n\t\t\tHighcharts.addEvent(chart.container, 'dblclick', function (e) {\n\t\t\t\tchart.pointer.onContainerDblClick(e);\n\t\t\t});\n\t\t}\n\n\t\t// Add the mousewheel event\n\t\tif (mapNavigation.zoomOnMouseWheel) {\n\t\t\tHighcharts.addEvent(chart.container, document.onmousewheel === undefined ? 'DOMMouseScroll' : 'mousewheel', function (e) {\n\t\t\t\tchart.pointer.onContainerMouseWheel(e);\n\t\t\t});\n\t\t}\n\t});\n\n\t// Extend the Pointer\n\textend(Pointer.prototype, {\n\n\t\t/**\n\t\t * The event handler for the doubleclick event\n\t\t */\n\t\tonContainerDblClick: function (e) {\n\t\t\tvar chart = this.chart;\n\n\t\t\te = this.normalize(e);\n\n\t\t\tif (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\t\t\t\tchart.mapZoom(\n\t\t\t\t\t0.5,\n\t\t\t\t\tchart.xAxis[0].toValue(e.chartX),\n\t\t\t\t\tchart.yAxis[0].toValue(e.chartY)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The event handler for the mouse scroll event\n\t\t */\n\t\tonContainerMouseWheel: function (e) {\n\t\t\tvar chart = this.chart,\n\t\t\t\tdelta;\n\n\t\t\te = this.normalize(e);\n\n\t\t\t// Firefox uses e.detail, WebKit and IE uses wheelDelta\n\t\t\tdelta = e.detail || -(e.wheelDelta / 120);\n\t\t\tif (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\t\t\t\tchart.mapZoom(\n\t\t\t\t\tdelta > 0 ? 2 : 0.5,\n\t\t\t\t\tchart.xAxis[0].toValue(e.chartX),\n\t\t\t\t\tchart.yAxis[0].toValue(e.chartY)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\t// Implement the pinchType option\n\twrap(Pointer.prototype, 'init', function (proceed, chart, options) {\n\n\t\tproceed.call(this, chart, options);\n\n\t\t// Pinch status\n\t\tif (options.mapNavigation.enableTouchZoom) {\n\t\t\tthis.pinchX = this.pinchHor = \n\t\t\t\tthis.pinchY = this.pinchVert = true;\n\t\t}\n\t});\n\n\t// Add events to the Chart object itself\n\textend(Chart.prototype, {\n\t\trenderMapNavigation: function () {\n\t\t\tvar chart = this,\n\t\t\t\toptions = this.options.mapNavigation,\n\t\t\t\tbuttons = options.buttons,\n\t\t\t\tn,\n\t\t\t\tbutton,\n\t\t\t\tbuttonOptions,\n\t\t\t\touterHandler = function () { \n\t\t\t\t\tthis.handler.call(chart); \n\t\t\t\t};\n\n\t\t\tif (options.enableButtons) {\n\t\t\t\tfor (n in buttons) {\n\t\t\t\t\tif (buttons.hasOwnProperty(n)) {\n\t\t\t\t\t\tbuttonOptions = merge(options.buttonOptions, buttons[n]);\n\n\t\t\t\t\t\tbutton = chart.renderer.button(buttonOptions.text, 0, 0, outerHandler)\n\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\twidth: buttonOptions.width,\n\t\t\t\t\t\t\t\theight: buttonOptions.height\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.css(buttonOptions.style)\n\t\t\t\t\t\t\t.add();\n\t\t\t\t\t\tbutton.handler = buttonOptions.onclick;\n\t\t\t\t\t\tbutton.align(extend(buttonOptions, { width: button.width, height: button.height }), null, 'spacingBox');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Fit an inner box to an outer. If the inner box overflows left or right, align it to the sides of the\n\t\t * outer. If it overflows both sides, fit it within the outer. This is a pattern that occurs more places\n\t\t * in Highcharts, perhaps it should be elevated to a common utility function.\n\t\t */\n\t\tfitToBox: function (inner, outer) {\n\t\t\teach([['x', 'width'], ['y', 'height']], function (dim) {\n\t\t\t\tvar pos = dim[0],\n\t\t\t\t\tsize = dim[1];\n\t\t\t\tif (inner[pos] + inner[size] > outer[pos] + outer[size]) { // right overflow\n\t\t\t\t\tif (inner[size] > outer[size]) { // the general size is greater, fit fully to outer\n\t\t\t\t\t\tinner[size] = outer[size];\n\t\t\t\t\t\tinner[pos] = outer[pos];\n\t\t\t\t\t} else { // align right\n\t\t\t\t\t\tinner[pos] = outer[pos] + outer[size] - inner[size];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (inner[size] > outer[size]) {\n\t\t\t\t\tinner[size] = outer[size];\n\t\t\t\t}\n\t\t\t\tif (inner[pos] < outer[pos]) {\n\t\t\t\t\tinner[pos] = outer[pos];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\n\t\t\treturn inner;\n\t\t},\n\n\t\t/**\n\t\t * Zoom the map in or out by a certain amount. Less than 1 zooms in, greater than 1 zooms out.\n\t\t */\n\t\tmapZoom: function (howMuch, centerXArg, centerYArg) {\n\n\t\t\tif (this.isMapZooming) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar chart = this,\n\t\t\t\txAxis = chart.xAxis[0],\n\t\t\t\txRange = xAxis.max - xAxis.min,\n\t\t\t\tcenterX = pick(centerXArg, xAxis.min + xRange / 2),\n\t\t\t\tnewXRange = xRange * howMuch,\n\t\t\t\tyAxis = chart.yAxis[0],\n\t\t\t\tyRange = yAxis.max - yAxis.min,\n\t\t\t\tcenterY = pick(centerYArg, yAxis.min + yRange / 2),\n\t\t\t\tnewYRange = yRange * howMuch,\n\t\t\t\tnewXMin = centerX - newXRange / 2,\n\t\t\t\tnewYMin = centerY - newYRange / 2,\n\t\t\t\tanimation = pick(chart.options.chart.animation, true),\n\t\t\t\tdelay,\n\t\t\t\tnewExt = chart.fitToBox({\n\t\t\t\t\tx: newXMin,\n\t\t\t\t\ty: newYMin,\n\t\t\t\t\twidth: newXRange,\n\t\t\t\t\theight: newYRange\n\t\t\t\t}, {\n\t\t\t\t\tx: xAxis.dataMin,\n\t\t\t\t\ty: yAxis.dataMin,\n\t\t\t\t\twidth: xAxis.dataMax - xAxis.dataMin,\n\t\t\t\t\theight: yAxis.dataMax - yAxis.dataMin\n\t\t\t\t});\n\n\t\t\txAxis.setExtremes(newExt.x, newExt.x + newExt.width, false);\n\t\t\tyAxis.setExtremes(newExt.y, newExt.y + newExt.height, false);\n\n\t\t\t// Prevent zooming until this one is finished animating\n\t\t\tdelay = animation ? animation.duration || 500 : 0;\n\t\t\tif (delay) {\n\t\t\t\tchart.isMapZooming = true;\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tchart.isMapZooming = false;\n\t\t\t\t}, delay);\n\t\t\t}\n\n\t\t\tchart.redraw();\n\t\t}\n\t});\n\t\n\t/**\n\t * Extend the default options with map options\n\t */\n\tplotOptions.map = merge(plotOptions.scatter, {\n\t\tanimation: false, // makes the complex shapes slow\n\t\tnullColor: '#F8F8F8',\n\t\tborderColor: 'silver',\n\t\tborderWidth: 1,\n\t\tmarker: null,\n\t\tstickyTracking: false,\n\t\tdataLabels: {\n\t\t\tverticalAlign: 'middle'\n\t\t},\n\t\tturboThreshold: 0,\n\t\ttooltip: {\n\t\t\tfollowPointer: true,\n\t\t\tpointFormat: '{point.name}: {point.y}<br/>'\n\t\t},\n\t\tstates: {\n\t\t\tnormal: {\n\t\t\t\tanimation: true\n\t\t\t}\n\t\t}\n\t});\n\n\tvar MapAreaPoint = Highcharts.extendClass(Point, {\n\t\t/**\n\t\t * Extend the Point object to split paths\n\t\t */\n\t\tapplyOptions: function (options, x) {\n\n\t\t\tvar point = Point.prototype.applyOptions.call(this, options, x);\n\n\t\t\tif (point.path && typeof point.path === 'string') {\n\t\t\t\tpoint.path = point.options.path = Highcharts.splitPath(point.path);\n\t\t\t}\n\n\t\t\treturn point;\n\t\t},\n\t\t/**\n\t\t * Stop the fade-out \n\t\t */\n\t\tonMouseOver: function () {\n\t\t\tclearTimeout(this.colorInterval);\n\t\t\tPoint.prototype.onMouseOver.call(this);\n\t\t},\n\t\t/**\n\t\t * Custom animation for tweening out the colors. Animation reduces blinking when hovering\n\t\t * over islands and coast lines. We run a custom implementation of animation becuase we\n\t\t * need to be able to run this independently from other animations like zoom redraw. Also,\n\t\t * adding color animation to the adapters would introduce almost the same amount of code.\n\t\t */\n\t\tonMouseOut: function () {\n\t\t\tvar point = this,\n\t\t\t\tstart = +new Date(),\n\t\t\t\tnormalColor = Color(point.options.color),\n\t\t\t\thoverColor = Color(point.pointAttr.hover.fill),\n\t\t\t\tanimation = point.series.options.states.normal.animation,\n\t\t\t\tduration = animation && (animation.duration || 500);\n\n\t\t\tif (duration && normalColor.rgba.length === 4 && hoverColor.rgba.length === 4) {\n\t\t\t\tdelete point.pointAttr[''].fill; // avoid resetting it in Point.setState\n\n\t\t\t\tclearTimeout(point.colorInterval);\n\t\t\t\tpoint.colorInterval = setInterval(function () {\n\t\t\t\t\tvar pos = (new Date() - start) / duration,\n\t\t\t\t\t\tgraphic = point.graphic;\n\t\t\t\t\tif (pos > 1) {\n\t\t\t\t\t\tpos = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (graphic) {\n\t\t\t\t\t\tgraphic.attr('fill', tweenColors(hoverColor, normalColor, pos));\n\t\t\t\t\t}\n\t\t\t\t\tif (pos >= 1) {\n\t\t\t\t\t\tclearTimeout(point.colorInterval);\n\t\t\t\t\t}\n\t\t\t\t}, 13);\n\t\t\t}\n\t\t\tPoint.prototype.onMouseOut.call(point);\n\t\t}\n\t});\n\n\t/**\n\t * Add the series type\n\t */\n\tseriesTypes.map = Highcharts.extendClass(seriesTypes.scatter, {\n\t\ttype: 'map',\n\t\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\t\tstroke: 'borderColor',\n\t\t\t'stroke-width': 'borderWidth',\n\t\t\tfill: 'color'\n\t\t},\n\t\tcolorKey: 'y',\n\t\tpointClass: MapAreaPoint,\n\t\ttrackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'],\n\t\tgetSymbol: noop,\n\t\tsupportsDrilldown: true,\n\t\tgetExtremesFromAll: true,\n\t\tuseMapGeometry: true, // get axis extremes from paths, not values\n\t\tinit: function (chart) {\n\t\t\tvar series = this,\n\t\t\t\tvalueDecimals = chart.options.legend.valueDecimals,\n\t\t\t\tlegendItems = [],\n\t\t\t\tname,\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t\tfromLabel,\n\t\t\t\ttoLabel,\n\t\t\t\tcolorRange,\n\t\t\t\tvalueRanges,\n\t\t\t\tgradientColor,\n\t\t\t\tgrad,\n\t\t\t\ttmpLabel,\n\t\t\t\thorizontal = chart.options.legend.layout === 'horizontal';\n\n\t\t\t\n\t\t\tHighcharts.Series.prototype.init.apply(this, arguments);\n\t\t\tcolorRange = series.options.colorRange;\n\t\t\tvalueRanges = series.options.valueRanges;\n\n\t\t\tif (valueRanges) {\n\t\t\t\teach(valueRanges, function (range) {\n\t\t\t\t\tfrom = range.from;\n\t\t\t\t\tto = range.to;\n\t\t\t\t\t\n\t\t\t\t\t// Assemble the default name. This can be overridden by legend.options.labelFormatter\n\t\t\t\t\tname = '';\n\t\t\t\t\tif (from === UNDEFINED) {\n\t\t\t\t\t\tname = '< ';\n\t\t\t\t\t} else if (to === UNDEFINED) {\n\t\t\t\t\t\tname = '> ';\n\t\t\t\t\t}\n\t\t\t\t\tif (from !== UNDEFINED) {\n\t\t\t\t\t\tname += numberFormat(from, valueDecimals);\n\t\t\t\t\t}\n\t\t\t\t\tif (from !== UNDEFINED && to !== UNDEFINED) {\n\t\t\t\t\t\tname += ' - ';\n\t\t\t\t\t}\n\t\t\t\t\tif (to !== UNDEFINED) {\n\t\t\t\t\t\tname += numberFormat(to, valueDecimals);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Add a mock object to the legend items\n\t\t\t\t\tlegendItems.push(Highcharts.extend({\n\t\t\t\t\t\tchart: series.chart,\n\t\t\t\t\t\tname: name,\n\t\t\t\t\t\toptions: {},\n\t\t\t\t\t\tdrawLegendSymbol: seriesTypes.area.prototype.drawLegendSymbol,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tsetState: function () {},\n\t\t\t\t\t\tsetVisible: function () {}\n\t\t\t\t\t}, range));\n\t\t\t\t});\n\t\t\t\tseries.legendItems = legendItems;\n\n\t\t\t} else if (colorRange) {\n\n\t\t\t\tfrom = colorRange.from;\n\t\t\t\tto = colorRange.to;\n\t\t\t\tfromLabel = colorRange.fromLabel;\n\t\t\t\ttoLabel = colorRange.toLabel;\n\n\t\t\t\t// Flips linearGradient variables and label text.\n\t\t\t\tgrad = horizontal ? [0, 0, 1, 0] : [0, 1, 0, 0]; \n\t\t\t\tif (!horizontal) {\n\t\t\t\t\ttmpLabel = fromLabel;\n\t\t\t\t\tfromLabel = toLabel;\n\t\t\t\t\ttoLabel = tmpLabel;\n\t\t\t\t} \n\n\t\t\t\t// Creates color gradient.\n\t\t\t\tgradientColor = {\n\t\t\t\t\tlinearGradient: { x1: grad[0], y1: grad[1], x2: grad[2], y2: grad[3] },\n\t\t\t\t\tstops: \n\t\t\t\t\t[\n\t\t\t\t\t\t[0, from],\n\t\t\t\t\t\t[1, to]\n\t\t\t\t\t]\n\t\t\t\t};\n\n\t\t\t\t// Add a mock object to the legend items.\n\t\t\t\tlegendItems = [{\n\t\t\t\t\tchart: series.chart,\n\t\t\t\t\toptions: {},\n\t\t\t\t\tfromLabel: fromLabel,\n\t\t\t\t\ttoLabel: toLabel,\n\t\t\t\t\tcolor: gradientColor,\n\t\t\t\t\tdrawLegendSymbol: this.drawLegendSymbolGradient,\n\t\t\t\t\tvisible: true,\n\t\t\t\t\tsetState: function () {},\n\t\t\t\t\tsetVisible: function () {}\n\t\t\t\t}];\n\n\t\t\t\tseries.legendItems = legendItems;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * If neither valueRanges nor colorRanges are defined, use basic area symbol.\n\t\t */\n\t\tdrawLegendSymbol: seriesTypes.area.prototype.drawLegendSymbol,\n\n\t\t/**\n\t\t * Gets the series' symbol in the legend and extended legend with more information.\n\t\t * \n\t\t * @param {Object} legend The legend object\n\t\t * @param {Object} item The series (this) or point\n\t\t */\n\t\tdrawLegendSymbolGradient: function (legend, item) {\n\t\t\tvar spacing = legend.options.symbolPadding,\n\t\t\t\tpadding = pick(legend.options.padding, 8),\n\t\t\t\tpositionY,\n\t\t\t\tpositionX,\n\t\t\t\tgradientSize = this.chart.renderer.fontMetrics(legend.options.itemStyle.fontSize).h,\n\t\t\t\thorizontal = legend.options.layout === 'horizontal',\n\t\t\t\tbox1,\n\t\t\t\tbox2,\n\t\t\t\tbox3,\n\t\t\t\trectangleLength = pick(legend.options.rectangleLength, 200);\n\n\t\t\t// Set local variables based on option.\n\t\t\tif (horizontal) {\n\t\t\t\tpositionY = -(spacing / 2);\n\t\t\t\tpositionX = 0;\n\t\t\t} else {\n\t\t\t\tpositionY = -rectangleLength + legend.baseline - (spacing / 2);\n\t\t\t\tpositionX = padding + gradientSize;\n\t\t\t}\n\n\t\t\t// Creates the from text.\n\t\t\titem.fromText = this.chart.renderer.text(\n\t\t\t\t\titem.fromLabel,\t// Text.\n\t\t\t\t\tpositionX,\t\t// Lower left x.\n\t\t\t\t\tpositionY\t\t// Lower left y.\n\t\t\t\t).attr({\n\t\t\t\t\tzIndex: 2\n\t\t\t\t}).add(item.legendGroup);\n\t\t\tbox1 = item.fromText.getBBox();\n\n\t\t\t// Creates legend symbol.\n\t\t\t// Ternary changes variables based on option.\n\t\t\titem.legendSymbol = this.chart.renderer.rect(\n\t\t\t\thorizontal ? box1.x + box1.width + spacing : box1.x - gradientSize - spacing,\t\t// Upper left x.\n\t\t\t\tbox1.y,\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Upper left y.\n\t\t\t\thorizontal ? rectangleLength : gradientSize,\t\t\t\t\t\t\t\t\t\t\t// Width.\n\t\t\t\thorizontal ? gradientSize : rectangleLength,\t\t\t\t\t\t\t\t\t\t// Height.\n\t\t\t\t2\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Corner radius.\n\t\t\t).attr({\n\t\t\t\tzIndex: 1\n\t\t\t}).add(item.legendGroup);\n\t\t\tbox2 = item.legendSymbol.getBBox();\n\n\t\t\t// Creates the to text.\n\t\t\t// Vertical coordinate changed based on option.\n\t\t\titem.toText = this.chart.renderer.text(\n\t\t\t\t\titem.toLabel,\n\t\t\t\t\tbox2.x + box2.width + spacing,\n\t\t\t\t\thorizontal ? positionY : box2.y + box2.height - spacing\n\t\t\t\t).attr({\n\t\t\t\t\tzIndex: 2\n\t\t\t\t}).add(item.legendGroup);\n\t\t\tbox3 = item.toText.getBBox();\n\n\t\t\t// Changes legend box settings based on option.\n\t\t\tif (horizontal) {\n\t\t\t\tlegend.offsetWidth = box1.width + box2.width + box3.width + (spacing * 2) + padding;\n\t\t\t\tlegend.itemY = gradientSize + padding;\n\t\t\t} else {\n\t\t\t\tlegend.offsetWidth = Math.max(box1.width, box3.width) + (spacing) + box2.width + padding;\n\t\t\t\tlegend.itemY = box2.height + padding;\n\t\t\t\tlegend.itemX = spacing;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get the bounding box of all paths in the map combined.\n\t\t */\n\t\tgetBox: function (paths) {\n\t\t\tvar maxX = Number.MIN_VALUE, \n\t\t\t\tminX =  Number.MAX_VALUE, \n\t\t\t\tmaxY = Number.MIN_VALUE, \n\t\t\t\tminY =  Number.MAX_VALUE;\n\t\t\t\n\t\t\t\n\t\t\t// Find the bounding box\n\t\t\teach(paths || this.options.data, function (point) {\n\t\t\t\tvar path = point.path,\n\t\t\t\t\ti = path.length,\n\t\t\t\t\teven = false, // while loop reads from the end\n\t\t\t\t\tpointMaxX = Number.MIN_VALUE, \n\t\t\t\t\tpointMinX =  Number.MAX_VALUE, \n\t\t\t\t\tpointMaxY = Number.MIN_VALUE, \n\t\t\t\t\tpointMinY =  Number.MAX_VALUE;\n\t\t\t\t\t\n\t\t\t\twhile (i--) {\n\t\t\t\t\tif (typeof path[i] === 'number' && !isNaN(path[i])) {\n\t\t\t\t\t\tif (even) { // even = x\n\t\t\t\t\t\t\tpointMaxX = Math.max(pointMaxX, path[i]);\n\t\t\t\t\t\t\tpointMinX = Math.min(pointMinX, path[i]);\n\t\t\t\t\t\t} else { // odd = Y\n\t\t\t\t\t\t\tpointMaxY = Math.max(pointMaxY, path[i]);\n\t\t\t\t\t\t\tpointMinY = Math.min(pointMinY, path[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\teven = !even;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Cache point bounding box for use to position data labels\n\t\t\t\tpoint._maxX = pointMaxX;\n\t\t\t\tpoint._minX = pointMinX;\n\t\t\t\tpoint._maxY = pointMaxY;\n\t\t\t\tpoint._minY = pointMinY;\n\n\t\t\t\tmaxX = Math.max(maxX, pointMaxX);\n\t\t\t\tminX = Math.min(minX, pointMinX);\n\t\t\t\tmaxY = Math.max(maxY, pointMaxY);\n\t\t\t\tminY = Math.min(minY, pointMinY);\n\t\t\t});\n\t\t\tthis.minY = minY;\n\t\t\tthis.maxY = maxY;\n\t\t\tthis.minX = minX;\n\t\t\tthis.maxX = maxX;\n\t\t\t\n\t\t},\n\t\t\n\t\t\n\t\t\n\t\t/**\n\t\t * Translate the path so that it automatically fits into the plot area box\n\t\t * @param {Object} path\n\t\t */\n\t\ttranslatePath: function (path) {\n\t\t\t\n\t\t\tvar series = this,\n\t\t\t\teven = false, // while loop reads from the end\n\t\t\t\txAxis = series.xAxis,\n\t\t\t\tyAxis = series.yAxis,\n\t\t\t\ti;\n\t\t\t\t\n\t\t\t// Preserve the original\n\t\t\tpath = [].concat(path);\n\t\t\t\t\n\t\t\t// Do the translation\n\t\t\ti = path.length;\n\t\t\twhile (i--) {\n\t\t\t\tif (typeof path[i] === 'number') {\n\t\t\t\t\tif (even) { // even = x\n\t\t\t\t\t\tpath[i] = Math.round(xAxis.translate(path[i]));\n\t\t\t\t\t} else { // odd = Y\n\t\t\t\t\t\tpath[i] = Math.round(yAxis.len - yAxis.translate(path[i]));\n\t\t\t\t\t}\n\t\t\t\t\teven = !even;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn path;\n\t\t},\n\t\t\n\t\tsetData: function () {\n\t\t\tHighcharts.Series.prototype.setData.apply(this, arguments);\n\t\t\tthis.getBox();\n\t\t},\n\t\t\n\t\t/**\n\t\t * Add the path option for data points. Find the max value for color calculation.\n\t\t */\n\t\ttranslate: function () {\n\t\t\tvar series = this,\n\t\t\t\tdataMin = Number.MAX_VALUE,\n\t\t\t\tdataMax = Number.MIN_VALUE;\n\t\n\t\t\tseries.generatePoints();\n\t\n\t\t\teach(series.data, function (point) {\n\t\t\t\t\n\t\t\t\tpoint.shapeType = 'path';\n\t\t\t\tpoint.shapeArgs = {\n\t\t\t\t\td: series.translatePath(point.path)\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// TODO: do point colors in drawPoints instead of point.init\n\t\t\t\tif (typeof point.y === 'number') {\n\t\t\t\t\tif (point.y > dataMax) {\n\t\t\t\t\t\tdataMax = point.y;\n\t\t\t\t\t} else if (point.y < dataMin) {\n\t\t\t\t\t\tdataMin = point.y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tseries.translateColors(dataMin, dataMax);\n\t\t},\n\t\t\n\t\t/**\n\t\t * In choropleth maps, the color is a result of the value, so this needs translation too\n\t\t */\n\t\ttranslateColors: function (dataMin, dataMax) {\n\t\t\t\n\t\t\tvar seriesOptions = this.options,\n\t\t\t\tvalueRanges = seriesOptions.valueRanges,\n\t\t\t\tcolorRange = seriesOptions.colorRange,\n\t\t\t\tcolorKey = this.colorKey,\n\t\t\t\tfrom,\n\t\t\t\tto;\n\n\t\t\tif (colorRange) {\n\t\t\t\tfrom = Color(colorRange.from);\n\t\t\t\tto = Color(colorRange.to);\n\t\t\t}\n\t\t\t\n\t\t\teach(this.data, function (point) {\n\t\t\t\tvar value = point[colorKey],\n\t\t\t\t\trange,\n\t\t\t\t\tcolor,\n\t\t\t\t\ti,\n\t\t\t\t\tpos;\n\n\t\t\t\tif (valueRanges) {\n\t\t\t\t\ti = valueRanges.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\trange = valueRanges[i];\n\t\t\t\t\t\tfrom = range.from;\n\t\t\t\t\t\tto = range.to;\n\t\t\t\t\t\tif ((from === UNDEFINED || value >= from) && (to === UNDEFINED || value <= to)) {\n\t\t\t\t\t\t\tcolor = range.color;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t} else if (colorRange && value !== undefined) {\n\n\t\t\t\t\tpos = 1 - ((dataMax - value) / (dataMax - dataMin));\n\t\t\t\t\tcolor = value === null ? seriesOptions.nullColor : tweenColors(from, to, pos);\n\t\t\t\t}\n\n\t\t\t\tif (color) {\n\t\t\t\t\tpoint.color = null; // reset from previous drilldowns, use of the same data options\n\t\t\t\t\tpoint.options.color = color;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t\n\t\tdrawGraph: noop,\n\t\t\n\t\t/**\n\t\t * We need the points' bounding boxes in order to draw the data labels, so \n\t\t * we skip it now and call if from drawPoints instead.\n\t\t */\n\t\tdrawDataLabels: noop,\n\t\t\n\t\t/** \n\t\t * Use the drawPoints method of column, that is able to handle simple shapeArgs.\n\t\t * Extend it by assigning the tooltip position.\n\t\t */\n\t\tdrawPoints: function () {\n\t\t\tvar series = this,\n\t\t\t\txAxis = series.xAxis,\n\t\t\t\tyAxis = series.yAxis,\n\t\t\t\tcolorKey = series.colorKey;\n\t\t\t\n\t\t\t// Make points pass test in drawing\n\t\t\teach(series.data, function (point) {\n\t\t\t\tpoint.plotY = 1; // pass null test in column.drawPoints\n\t\t\t\tif (point[colorKey] === null) {\n\t\t\t\t\tpoint[colorKey] = 0;\n\t\t\t\t\tpoint.isNull = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t// Draw them\n\t\t\tseriesTypes.column.prototype.drawPoints.apply(series);\n\t\t\t\n\t\t\teach(series.data, function (point) {\n\n\t\t\t\tvar dataLabels = point.dataLabels,\n\t\t\t\t\tminX = xAxis.toPixels(point._minX, true),\n\t\t\t\t\tmaxX = xAxis.toPixels(point._maxX, true),\n\t\t\t\t\tminY = yAxis.toPixels(point._minY, true),\n\t\t\t\t\tmaxY = yAxis.toPixels(point._maxY, true);\n\n\t\t\t\tpoint.plotX = Math.round(minX + (maxX - minX) * pick(dataLabels && dataLabels.anchorX, 0.5));\n\t\t\t\tpoint.plotY = Math.round(minY + (maxY - minY) * pick(dataLabels && dataLabels.anchorY, 0.5)); \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// Reset escaped null points\n\t\t\t\tif (point.isNull) {\n\t\t\t\t\tpoint[colorKey] = null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Now draw the data labels\n\t\t\tHighcharts.Series.prototype.drawDataLabels.call(series);\n\t\t\t\n\t\t},\n\n\t\t/**\n\t\t * Animate in the new series from the clicked point in the old series.\n\t\t * Depends on the drilldown.js module\n\t\t */\n\t\tanimateDrilldown: function (init) {\n\t\t\tvar toBox = this.chart.plotBox,\n\t\t\t\tlevel = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1],\n\t\t\t\tfromBox = level.bBox,\n\t\t\t\tanimationOptions = this.chart.options.drilldown.animation,\n\t\t\t\tscale;\n\t\t\t\t\n\t\t\tif (!init) {\n\n\t\t\t\tscale = Math.min(fromBox.width / toBox.width, fromBox.height / toBox.height);\n\t\t\t\tlevel.shapeArgs = {\n\t\t\t\t\tscaleX: scale,\n\t\t\t\t\tscaleY: scale,\n\t\t\t\t\ttranslateX: fromBox.x,\n\t\t\t\t\ttranslateY: fromBox.y\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// TODO: Animate this.group instead\n\t\t\t\teach(this.points, function (point) {\n\n\t\t\t\t\tpoint.graphic\n\t\t\t\t\t\t.attr(level.shapeArgs)\n\t\t\t\t\t\t.animate({\n\t\t\t\t\t\t\tscaleX: 1,\n\t\t\t\t\t\t\tscaleY: 1,\n\t\t\t\t\t\t\ttranslateX: 0,\n\t\t\t\t\t\t\ttranslateY: 0\n\t\t\t\t\t\t}, animationOptions);\n\n\t\t\t\t});\n\n\t\t\t\tdelete this.animate;\n\t\t\t}\n\t\t\t\n\t\t},\n\n\t\t/**\n\t\t * When drilling up, pull out the individual point graphics from the lower series\n\t\t * and animate them into the origin point in the upper series.\n\t\t */\n\t\tanimateDrillupFrom: function (level) {\n\t\t\tseriesTypes.column.prototype.animateDrillupFrom.call(this, level);\n\t\t},\n\n\n\t\t/**\n\t\t * When drilling up, keep the upper series invisible until the lower series has\n\t\t * moved into place\n\t\t */\n\t\tanimateDrillupTo: function (init) {\n\t\t\tseriesTypes.column.prototype.animateDrillupTo.call(this, init);\n\t\t}\n\t});\n\n\n\t// The mapline series type\n\tplotOptions.mapline = merge(plotOptions.map, {\n\t\tlineWidth: 1,\n\t\tbackgroundColor: 'none'\n\t});\n\tseriesTypes.mapline = Highcharts.extendClass(seriesTypes.map, {\n\t\ttype: 'mapline',\n\t\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\t\tstroke: 'color',\n\t\t\t'stroke-width': 'lineWidth',\n\t\t\tfill: 'backgroundColor'\n\t\t},\n\t\tdrawLegendSymbol: seriesTypes.line.prototype.drawLegendSymbol\n\t});\n\n\t// The mappoint series type\n\tplotOptions.mappoint = merge(plotOptions.scatter, {\n\t\tdataLabels: {\n\t\t\tenabled: true,\n\t\t\tformat: '{point.name}',\n\t\t\tcolor: 'black',\n\t\t\tstyle: {\n\t\t\t\ttextShadow: '0 0 5px white'\n\t\t\t}\n\t\t}\n\t});\n\tseriesTypes.mappoint = Highcharts.extendClass(seriesTypes.scatter, {\n\t\ttype: 'mappoint'\n\t});\n\t\n\n\t\n\t/**\n\t * A wrapper for Chart with all the default values for a Map\n\t */\n\tHighcharts.Map = function (options, callback) {\n\t\t\n\t\tvar hiddenAxis = {\n\t\t\t\tendOnTick: false,\n\t\t\t\tgridLineWidth: 0,\n\t\t\t\tlabels: {\n\t\t\t\t\tenabled: false\n\t\t\t\t},\n\t\t\t\tlineWidth: 0,\n\t\t\t\tminPadding: 0,\n\t\t\t\tmaxPadding: 0,\n\t\t\t\tstartOnTick: false,\n\t\t\t\ttickWidth: 0,\n\t\t\t\ttitle: null\n\t\t\t},\n\t\t\tseriesOptions;\n\t\t\n\t\t// Don't merge the data\n\t\tseriesOptions = options.series;\n\t\toptions.series = null;\n\t\t\n\t\toptions = merge({\n\t\t\tchart: {\n\t\t\t\ttype: 'map',\n\t\t\t\tpanning: 'xy'\n\t\t\t},\n\t\t\txAxis: hiddenAxis,\n\t\t\tyAxis: merge(hiddenAxis, { reversed: true })\t\n\t\t},\n\t\toptions, // user's options\n\t\n\t\t{ // forced options\n\t\t\tchart: {\n\t\t\t\tinverted: false\n\t\t\t}\n\t\t});\n\t\n\t\toptions.series = seriesOptions;\n\t\n\t\n\t\treturn new Highcharts.Chart(options, callback);\n\t};\n}(Highcharts));\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/no-data-to-display.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Plugin for displaying a message when there is no data visible in chart.\n\n (c) 2010-2013 Highsoft AS\n Author: Øystein Moseng\n\n License: www.highcharts.com/license\n*/\n(function(c){function f(){return!!this.points.length}function g(){this.hasData()?this.hideNoData():this.showNoData()}var d=c.seriesTypes,e=c.Chart.prototype,h=c.getOptions(),i=c.extend;i(h.lang,{noData:\"No data to display\"});h.noData={position:{x:0,y:0,align:\"center\",verticalAlign:\"middle\"},attr:{},style:{fontWeight:\"bold\",fontSize:\"12px\",color:\"#60606a\"}};d.pie.prototype.hasData=f;if(d.gauge)d.gauge.prototype.hasData=f;if(d.waterfall)d.waterfall.prototype.hasData=f;c.Series.prototype.hasData=function(){return this.dataMax!==\nvoid 0&&this.dataMin!==void 0};e.showNoData=function(a){var b=this.options,a=a||b.lang.noData,b=b.noData;if(!this.noDataLabel)this.noDataLabel=this.renderer.label(a,0,0,null,null,null,null,null,\"no-data\").attr(b.attr).css(b.style).add(),this.noDataLabel.align(i(this.noDataLabel.getBBox(),b.position),!1,\"plotBox\")};e.hideNoData=function(){if(this.noDataLabel)this.noDataLabel=this.noDataLabel.destroy()};e.hasData=function(){for(var a=this.series,b=a.length;b--;)if(a[b].hasData()&&!a[b].options.isInternal)return!0;\nreturn!1};e.callbacks.push(function(a){c.addEvent(a,\"load\",g);c.addEvent(a,\"redraw\",g)})})(Highcharts);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/modules/no-data-to-display.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Plugin for displaying a message when there is no data visible in chart.\n *\n * (c) 2010-2013 Highsoft AS\n * Author: Øystein Moseng\n *\n * License: www.highcharts.com/license\n */\n\n(function (H) { // docs\n\t\n\tvar seriesTypes = H.seriesTypes,\n\t\tchartPrototype = H.Chart.prototype,\n\t\tdefaultOptions = H.getOptions(),\n\t\textend = H.extend;\n\n\t// Add language option\n\textend(defaultOptions.lang, {\n\t\tnoData: 'No data to display'\n\t});\n\t\n\t// Add default display options for message\n\tdefaultOptions.noData = {\n\t\tposition: {\n\t\t\tx: 0,\n\t\t\ty: 0,\t\t\t\n\t\t\talign: 'center',\n\t\t\tverticalAlign: 'middle'\n\t\t},\n\t\tattr: {\t\t\t\t\t\t\n\t\t},\n\t\tstyle: {\t\n\t\t\tfontWeight: 'bold',\t\t\n\t\t\tfontSize: '12px',\n\t\t\tcolor: '#60606a'\t\t\n\t\t}\n\t};\n\n\t/**\n\t * Define hasData functions for series. These return true if there are data points on this series within the plot area\n\t */\t\n\tfunction hasDataPie() {\n\t\treturn !!this.points.length; /* != 0 */\n\t}\n\n\tseriesTypes.pie.prototype.hasData = hasDataPie;\n\n\tif (seriesTypes.gauge) {\n\t\tseriesTypes.gauge.prototype.hasData = hasDataPie;\n\t}\n\n\tif (seriesTypes.waterfall) {\n\t\tseriesTypes.waterfall.prototype.hasData = hasDataPie;\n\t}\n\n\tH.Series.prototype.hasData = function () {\n\t\treturn this.dataMax !== undefined && this.dataMin !== undefined;\n\t};\n\t\n\t/**\n\t * Display a no-data message.\n\t *\n\t * @param {String} str An optional message to show in place of the default one \n\t */\n\tchartPrototype.showNoData = function (str) {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\ttext = str || options.lang.noData,\n\t\t\tnoDataOptions = options.noData;\n\n\t\tif (!chart.noDataLabel) {\n\t\t\tchart.noDataLabel = chart.renderer.label(text, 0, 0, null, null, null, null, null, 'no-data')\n\t\t\t\t.attr(noDataOptions.attr)\n\t\t\t\t.css(noDataOptions.style)\n\t\t\t\t.add();\n\t\t\tchart.noDataLabel.align(extend(chart.noDataLabel.getBBox(), noDataOptions.position), false, 'plotBox');\n\t\t}\n\t};\n\n\t/**\n\t * Hide no-data message\t\n\t */\t\n\tchartPrototype.hideNoData = function () {\n\t\tvar chart = this;\n\t\tif (chart.noDataLabel) {\n\t\t\tchart.noDataLabel = chart.noDataLabel.destroy();\n\t\t}\n\t};\n\n\t/**\n\t * Returns true if there are data points within the plot area now\n\t */\t\n\tchartPrototype.hasData = function () {\n\t\tvar chart = this,\n\t\t\tseries = chart.series,\n\t\t\ti = series.length;\n\n\t\twhile (i--) {\n\t\t\tif (series[i].hasData() && !series[i].options.isInternal) { \n\t\t\t\treturn true;\n\t\t\t}\t\n\t\t}\n\n\t\treturn false;\n\t};\n\n\t/**\n\t * Show no-data message if there is no data in sight. Otherwise, hide it.\n\t */\n\tfunction handleNoData() {\n\t\tvar chart = this;\n\t\tif (chart.hasData()) {\n\t\t\tchart.hideNoData();\n\t\t} else {\n\t\t\tchart.showNoData();\n\t\t}\n\t}\n\n\t/**\n\t * Add event listener to handle automatic display of no-data message\n\t */\n\tchartPrototype.callbacks.push(function (chart) {\n\t\tH.addEvent(chart, 'load', handleNoData);\n\t\tH.addEvent(chart, 'redraw', handleNoData);\n\t});\n\n}(Highcharts));\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/themes/dark-blue.js",
    "content": "/**\n * Dark blue theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(48, 48, 96)'],\n\t\t\t\t[1, 'rgb(0, 0, 0)']\n\t\t\t]\n\t\t},\n\t\tborderColor: '#000000',\n\t\tborderWidth: 2,\n\t\tclassName: 'dark-container',\n\t\tplotBackgroundColor: 'rgba(255, 255, 255, .1)',\n\t\tplotBorderColor: '#CCCCCC',\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tfont: 'bold 16px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#666666',\n\t\t\tfont: 'bold 12px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineColor: '#333333',\n\t\tgridLineWidth: 1,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\ttickColor: '#A0A0A0',\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\tgridLineColor: '#333333',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\tminorTickInterval: null,\n\t\ttickColor: '#A0A0A0',\n\t\ttickWidth: 1,\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\ttooltip: {\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.75)',\n\t\tstyle: {\n\t\t\tcolor: '#F0F0F0'\n\t\t}\n\t},\n\ttoolbar: {\n\t\titemStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\tplotOptions: {\n\t\tline: {\n\t\t\tdataLabels: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t},\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tspline: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tscatter: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tcandlestick: {\n\t\t\tlineColor: 'white'\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: '#A0A0A0'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#FFF'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#444'\n\t\t}\n\t},\n\tcredits: {\n\t\tstyle: {\n\t\t\tcolor: '#666'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\tsymbolStroke: '#DDDDDD',\n\t\t\thoverSymbolStroke: '#FFFFFF',\n\t\t\ttheme: {\n\t\t\t\tfill: {\n\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\tstops: [\n\t\t\t\t\t\t[0.4, '#606060'],\n\t\t\t\t\t\t[0.6, '#333333']\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tstroke: '#000000'\n\t\t\t}\n\t\t}\n\t},\n\n\t// scroll charts\n\trangeSelector: {\n\t\tbuttonTheme: {\n\t\t\tfill: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\t\tstroke: '#000000',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t},\n\t\t\tstates: {\n\t\t\t\thover: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.4, '#BBB'],\n\t\t\t\t\t\t\t[0.6, '#888']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'white'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.1, '#000'],\n\t\t\t\t\t\t\t[0.3, '#333']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'yellow'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinputStyle: {\n\t\t\tbackgroundColor: '#333',\n\t\t\tcolor: 'silver'\n\t\t},\n\t\tlabelStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\n\tnavigator: {\n\t\thandles: {\n\t\t\tbackgroundColor: '#666',\n\t\t\tborderColor: '#AAA'\n\t\t},\n\t\toutlineColor: '#CCC',\n\t\tmaskFill: 'rgba(16, 16, 16, 0.5)',\n\t\tseries: {\n\t\t\tcolor: '#7798BF',\n\t\t\tlineColor: '#A6C7ED'\n\t\t}\n\t},\n\n\tscrollbar: {\n\t\tbarBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbarBorderColor: '#CCC',\n\t\tbuttonArrowColor: '#CCC',\n\t\tbuttonBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbuttonBorderColor: '#CCC',\n\t\trifleColor: '#FFF',\n\t\ttrackBackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#000'],\n\t\t\t\t[1, '#333']\n\t\t\t]\n\t\t},\n\t\ttrackBorderColor: '#666'\n\t},\n\n\t// special colors for some of the\n\tlegendBackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\tlegendBackgroundColorSolid: 'rgb(35, 35, 70)',\n\tdataLabelsColor: '#444',\n\ttextColor: '#C0C0C0',\n\tmaskColor: 'rgba(255,255,255,0.3)'\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/themes/dark-green.js",
    "content": "/**\n * Dark blue theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: [0, 0, 250, 500],\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(48, 96, 48)'],\n\t\t\t\t[1, 'rgb(0, 0, 0)']\n\t\t\t]\n\t\t},\n\t\tborderColor: '#000000',\n\t\tborderWidth: 2,\n\t\tclassName: 'dark-container',\n\t\tplotBackgroundColor: 'rgba(255, 255, 255, .1)',\n\t\tplotBorderColor: '#CCCCCC',\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tfont: 'bold 16px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#666666',\n\t\t\tfont: 'bold 12px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineColor: '#333333',\n\t\tgridLineWidth: 1,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\ttickColor: '#A0A0A0',\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\tgridLineColor: '#333333',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\tminorTickInterval: null,\n\t\ttickColor: '#A0A0A0',\n\t\ttickWidth: 1,\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\ttooltip: {\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.75)',\n\t\tstyle: {\n\t\t\tcolor: '#F0F0F0'\n\t\t}\n\t},\n\ttoolbar: {\n\t\titemStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\tplotOptions: {\n\t\tline: {\n\t\t\tdataLabels: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t},\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tspline: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tscatter: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tcandlestick: {\n\t\t\tlineColor: 'white'\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: '#A0A0A0'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#FFF'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#444'\n\t\t}\n\t},\n\tcredits: {\n\t\tstyle: {\n\t\t\tcolor: '#666'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\tsymbolStroke: '#DDDDDD',\n\t\t\thoverSymbolStroke: '#FFFFFF',\n\t\t\ttheme: {\n\t\t\t\tfill: {\n\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\tstops: [\n\t\t\t\t\t\t[0.4, '#606060'],\n\t\t\t\t\t\t[0.6, '#333333']\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tstroke: '#000000'\n\t\t\t}\n\t\t}\n\t},\n\n\t// scroll charts\n\trangeSelector: {\n\t\tbuttonTheme: {\n\t\t\tfill: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\t\tstroke: '#000000',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t},\n\t\t\tstates: {\n\t\t\t\thover: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.4, '#BBB'],\n\t\t\t\t\t\t\t[0.6, '#888']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'white'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.1, '#000'],\n\t\t\t\t\t\t\t[0.3, '#333']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'yellow'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinputStyle: {\n\t\t\tbackgroundColor: '#333',\n\t\t\tcolor: 'silver'\n\t\t},\n\t\tlabelStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\n\tnavigator: {\n\t\thandles: {\n\t\t\tbackgroundColor: '#666',\n\t\t\tborderColor: '#AAA'\n\t\t},\n\t\toutlineColor: '#CCC',\n\t\tmaskFill: 'rgba(16, 16, 16, 0.5)',\n\t\tseries: {\n\t\t\tcolor: '#7798BF',\n\t\t\tlineColor: '#A6C7ED'\n\t\t}\n\t},\n\n\tscrollbar: {\n\t\tbarBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbarBorderColor: '#CCC',\n\t\tbuttonArrowColor: '#CCC',\n\t\tbuttonBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbuttonBorderColor: '#CCC',\n\t\trifleColor: '#FFF',\n\t\ttrackBackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#000'],\n\t\t\t\t[1, '#333']\n\t\t\t]\n\t\t},\n\t\ttrackBorderColor: '#666'\n\t},\n\n\t// special colors for some of the\n\tlegendBackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\tlegendBackgroundColorSolid: 'rgb(35, 35, 70)',\n\tdataLabelsColor: '#444',\n\ttextColor: '#C0C0C0',\n\tmaskColor: 'rgba(255,255,255,0.3)'\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/themes/gray.js",
    "content": "/**\n * Gray theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#7798BF\", \"#55BF3B\", \"#DF5353\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(96, 96, 96)'],\n\t\t\t\t[1, 'rgb(16, 16, 16)']\n\t\t\t]\n\t\t},\n\t\tborderWidth: 0,\n\t\tborderRadius: 15,\n\t\tplotBackgroundColor: null,\n\t\tplotShadow: false,\n\t\tplotBorderWidth: 0\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#FFF',\n\t\t\tfont: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#DDD',\n\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineWidth: 0,\n\t\tlineColor: '#999',\n\t\ttickColor: '#999',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#999',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#AAA',\n\t\t\t\tfont: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\talternateGridColor: null,\n\t\tminorTickInterval: null,\n\t\tgridLineColor: 'rgba(255, 255, 255, .1)',\n\t\tminorGridLineColor: 'rgba(255,255,255,0.07)',\n\t\tlineWidth: 0,\n\t\ttickWidth: 0,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#999',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#AAA',\n\t\t\t\tfont: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tcolor: '#CCC'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#FFF'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#333'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\ttooltip: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgba(96, 96, 96, .8)'],\n\t\t\t\t[1, 'rgba(16, 16, 16, .8)']\n\t\t\t]\n\t\t},\n\t\tborderWidth: 0,\n\t\tstyle: {\n\t\t\tcolor: '#FFF'\n\t\t}\n\t},\n\n\n\tplotOptions: {\n\t\tseries: {\n\t\t\tshadow: true\n\t\t},\n\t\tline: {\n\t\t\tdataLabels: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t},\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tspline: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tscatter: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tcandlestick: {\n\t\t\tlineColor: 'white'\n\t\t}\n\t},\n\n\ttoolbar: {\n\t\titemStyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\tsymbolStroke: '#DDDDDD',\n\t\t\thoverSymbolStroke: '#FFFFFF',\n\t\t\ttheme: {\n\t\t\t\tfill: {\n\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\tstops: [\n\t\t\t\t\t\t[0.4, '#606060'],\n\t\t\t\t\t\t[0.6, '#333333']\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tstroke: '#000000'\n\t\t\t}\n\t\t}\n\t},\n\n\t// scroll charts\n\trangeSelector: {\n\t\tbuttonTheme: {\n\t\t\tfill: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\t\tstroke: '#000000',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t},\n\t\t\tstates: {\n\t\t\t\thover: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.4, '#BBB'],\n\t\t\t\t\t\t\t[0.6, '#888']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'white'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.1, '#000'],\n\t\t\t\t\t\t\t[0.3, '#333']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'yellow'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinputStyle: {\n\t\t\tbackgroundColor: '#333',\n\t\t\tcolor: 'silver'\n\t\t},\n\t\tlabelStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\n\tnavigator: {\n\t\thandles: {\n\t\t\tbackgroundColor: '#666',\n\t\t\tborderColor: '#AAA'\n\t\t},\n\t\toutlineColor: '#CCC',\n\t\tmaskFill: 'rgba(16, 16, 16, 0.5)',\n\t\tseries: {\n\t\t\tcolor: '#7798BF',\n\t\t\tlineColor: '#A6C7ED'\n\t\t}\n\t},\n\n\tscrollbar: {\n\t\tbarBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbarBorderColor: '#CCC',\n\t\tbuttonArrowColor: '#CCC',\n\t\tbuttonBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbuttonBorderColor: '#CCC',\n\t\trifleColor: '#FFF',\n\t\ttrackBackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#000'],\n\t\t\t\t[1, '#333']\n\t\t\t]\n\t\t},\n\t\ttrackBorderColor: '#666'\n\t},\n\n\t// special colors for some of the demo examples\n\tlegendBackgroundColor: 'rgba(48, 48, 48, 0.8)',\n\tlegendBackgroundColorSolid: 'rgb(70, 70, 70)',\n\tdataLabelsColor: '#444',\n\ttextColor: '#E0E0E0',\n\tmaskColor: 'rgba(255,255,255,0.3)'\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/themes/grid.js",
    "content": "/**\n * Grid theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(255, 255, 255)'],\n\t\t\t\t[1, 'rgb(240, 240, 255)']\n\t\t\t]\n\t\t},\n\t\tborderWidth: 2,\n\t\tplotBackgroundColor: 'rgba(255, 255, 255, .9)',\n\t\tplotShadow: true,\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#000',\n\t\t\tfont: 'bold 16px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#666666',\n\t\t\tfont: 'bold 12px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineWidth: 1,\n\t\tlineColor: '#000',\n\t\ttickColor: '#000',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#000',\n\t\t\t\tfont: '11px Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#333',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\tminorTickInterval: 'auto',\n\t\tlineColor: '#000',\n\t\tlineWidth: 1,\n\t\ttickWidth: 1,\n\t\ttickColor: '#000',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#000',\n\t\t\t\tfont: '11px Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#333',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: 'black'\n\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#039'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: 'gray'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#99b'\n\t\t}\n\t},\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\ttheme: {\n\t\t\t\tstroke: '#CCCCCC'\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/highcharts/themes/skies.js",
    "content": "/**\n * Skies theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#514F78\", \"#42A07B\", \"#9B5E4A\", \"#72727F\", \"#1F949A\", \"#82914E\", \"#86777F\", \"#42A07B\"],\n\tchart: {\n\t\tclassName: 'skies',\n\t\tborderWidth: 0,\n\t\tplotShadow: true,\n\t\tplotBackgroundImage: 'http://www.highcharts.com/demo/gfx/skies.jpg',\n\t\tplotBackgroundColor: {\n\t\t\tlinearGradient: [0, 0, 250, 500],\n\t\t\tstops: [\n\t\t\t\t[0, 'rgba(255, 255, 255, 1)'],\n\t\t\t\t[1, 'rgba(255, 255, 255, 0)']\n\t\t\t]\n\t\t},\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#3E576F',\n\t\t\tfont: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#6D869F',\n\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineWidth: 0,\n\t\tlineColor: '#C0D0E0',\n\t\ttickColor: '#C0D0E0',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\talternateGridColor: 'rgba(255, 255, 255, .5)',\n\t\tlineColor: '#C0D0E0',\n\t\ttickColor: '#C0D0E0',\n\t\ttickWidth: 1,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: '#3E576F'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: 'black'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#3E576F'\n\t\t}\n\t}\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/jquery-1.10.2.js",
    "content": "/*!\n * jQuery JavaScript Library v1.10.2\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03T13:48Z\n */\n(function( window, undefined ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\"use strict\";\nvar\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// Support: IE<10\n\t// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`\n\tcore_strundefined = typeof undefined,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tlocation = window.location,\n\tdocument = window.document,\n\tdocElem = document.documentElement,\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// [[Class]] -> type pairs\n\tclass2type = {},\n\n\t// List of deleted data cache ids, so we can reuse them\n\tcore_deletedIds = [],\n\n\tcore_version = \"1.10.2\",\n\n\t// Save a reference to some core methods\n\tcore_concat = core_deletedIds.concat,\n\tcore_push = core_deletedIds.push,\n\tcore_slice = core_deletedIds.slice,\n\tcore_indexOf = core_deletedIds.indexOf,\n\tcore_toString = class2type.toString,\n\tcore_hasOwn = class2type.hasOwnProperty,\n\tcore_trim = core_version.trim,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Used for matching numbers\n\tcore_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n\n\t// Used for splitting on whitespace\n\tcore_rnotwhite = /\\S+/g,\n\n\t// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t},\n\n\t// The ready event handler\n\tcompleted = function( event ) {\n\n\t\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\n\t\t\tdetach();\n\t\t\tjQuery.ready();\n\t\t}\n\t},\n\t// Clean-up method for dom ready events\n\tdetach = function() {\n\t\tif ( document.addEventListener ) {\n\t\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\t\t\twindow.removeEventListener( \"load\", completed, false );\n\n\t\t} else {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\t\twindow.detachEvent( \"onload\", completed );\n\t\t}\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: core_version,\n\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn core_slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( core_slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: core_push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( core_version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready );\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.trigger ) {\n\t\t\tjQuery( document ).trigger(\"ready\").off(\"ready\");\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn String( obj );\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ core_toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!core_hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( jQuery.support.ownLast ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn core_hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || core_hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\t// data: string of html\n\t// context (optional): If specified, the fragment will be created in this context, defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tparseHTML: function( data, context, keepScripts ) {\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\t\tcontext = context || document;\n\n\t\tvar parsed = rsingleTag.exec( data ),\n\t\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif ( parsed ) {\n\t\t\treturn [ context.createElement( parsed[1] ) ];\n\t\t}\n\n\t\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\t\tif ( scripts ) {\n\t\t\tjQuery( scripts ).remove();\n\t\t}\n\t\treturn jQuery.merge( [], parsed.childNodes );\n\t},\n\n\tparseJSON: function( data ) {\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\tif ( data === null ) {\n\t\t\treturn data;\n\t\t}\n\n\t\tif ( typeof data === \"string\" ) {\n\n\t\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\t\tdata = jQuery.trim( data );\n\n\t\t\tif ( data ) {\n\t\t\t\t// Make sure the incoming data is actual JSON\n\t\t\t\t// Logic borrowed from http://json.org/json2.js\n\t\t\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\t\t\treturn ( new Function( \"return \" + data ) )();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\tcore_trim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcore_push.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( core_indexOf ) {\n\t\t\t\treturn core_indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar l = second.length,\n\t\t\ti = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof l === \"number\" ) {\n\t\t\tfor ( ; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar retVal,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn core_concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = core_slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\t\tvar i = 0,\n\t\t\tlength = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif ( jQuery.type( key ) === \"object\" ) {\n\t\t\tchainable = true;\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t\t}\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\tchainable = true;\n\n\t\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif ( raw ) {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\n\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations.\n\t// Note: this method belongs to the css module but it's needed here for the support module.\n\t// If support gets modularized, this method should be moved back to the css module.\n\tswap: function( elem, options, callback, args ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.apply( elem, args || [] );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || type !== \"function\" &&\n\t\t( length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj );\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n/*!\n * Sizzle CSS Selector Engine v1.10.2\n * http://sizzlejs.com/\n *\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03\n */\n(function( window, undefined ) {\n\nvar i,\n\tsupport,\n\tcachedruns,\n\tExpr,\n\tgetText,\n\tisXML,\n\tcompile,\n\toutermostContext,\n\tsortInput,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\thasDuplicate = false,\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n\t\t\"*(?:([*^$|!~]?=)\" + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n\t// Prefer arguments quoted,\n\t//   then not containing pseudos/brackets,\n\t//   then attribute selectors/non-parenthetical expressions,\n\t//   then anything else\n\t// These preferences are here to reduce the number of selectors\n\t//   needing tokenize in the PSEUDO preFilter\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes.replace( 3, 8 ) + \")*)|.*)\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trsibling = new RegExp( whitespace + \"*[+~]\" ),\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\t// BMP codepoint\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( documentIsHTML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && context.parentNode || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key += \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect xml\n * @param {Element|Object} elem An element or a document\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar doc = node ? node.ownerDocument || node : preferredDoc,\n\t\tparent = doc.defaultView;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsHTML = !isXML( doc );\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent.attachEvent && parent !== parent.top ) {\n\t\tparent.attachEvent( \"onbeforeunload\", function() {\n\t\t\tsetDocument();\n\t\t});\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getElementsByClassName = assert(function( div ) {\n\t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\n\n\t\t// Support: Safari<4\n\t\t// Catch class over-caching\n\t\tdiv.firstChild.className = \"i\";\n\t\t// Support: Opera<10\n\t\t// Catch gEBCN failure to find non-leading classes\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\n\t});\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\n\t\t\t// Support: Opera 10-12/IE8\n\t\t\t// ^= $= *= and empty values\n\t\t\t// Should not select anything\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type attribute is restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"t\", \"\" );\n\n\t\t\tif ( div.querySelectorAll(\"[t^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = docElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );\n\n\t\tif ( compare ) {\n\t\t\t// Disconnected nodes\n\t\t\tif ( compare & 1 ||\n\t\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\tif ( a === doc || contains(preferredDoc, a) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === doc || contains(preferredDoc, b) ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\t// Maintain original order\n\t\t\t\treturn sortInput ?\n\t\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t\t0;\n\t\t\t}\n\n\t\t\treturn compare & 4 ? -1 : 1;\n\t\t}\n\n\t\t// Not directly comparable, sort on existence of method\n\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\t} else if ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [elem] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val === undefined ?\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull :\n\t\tval;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( ; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (see #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[5] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] && match[4] !== undefined ) {\n\t\t\t\tmatch[2] = match[4];\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\n\t\t\t//   not comment, processing instructions, or others\n\t\t\t// Thanks to Diego Perini for the nodeName shortcut\n\t\t\t//   Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeName > \"@\" || elem.nodeType === 3 || elem.nodeType === 4 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === elem.type );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( tokens = [] );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar data, cache, outerCache,\n\t\t\t\tdirkey = dirruns + \" \" + doneName;\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {\n\t\t\t\t\t\t\tif ( (data = cache[1]) === true || data === cachedruns ) {\n\t\t\t\t\t\t\t\treturn data === true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcache = outerCache[ dir ] = [ dirkey ];\n\t\t\t\t\t\t\tcache[1] = matcher( elem, context, xml ) || cachedruns;\n\t\t\t\t\t\t\tif ( cache[1] === true ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\t// A counter to specify which element is currently being matched\n\tvar matcherCachedRuns = 0,\n\t\tbySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, expandContext ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tsetMatched = [],\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\toutermost = expandContext != null,\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t\tcachedruns = matcherCachedRuns;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\tcachedruns = ++matcherCachedRuns;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !group ) {\n\t\t\tgroup = tokenize( selector );\n\t\t}\n\t\ti = group.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( group[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\t}\n\treturn cached;\n};\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tmatch = tokenize( selector );\n\n\tif ( !seed ) {\n\t\t// Try to minimize operations if there is only one group\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && context.parentNode || context\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\tcompile( selector, match )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector )\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome<14\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn (val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\telem[ name ] === true ? name.toLowerCase() : null;\n\t\t}\n\t});\n}\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})( window );\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\t\t// Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar action = tuple[ 0 ],\n\t\t\t\t\t\t\t\tfn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = core_slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;\n\t\t\t\t\tif( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\njQuery.support = (function( support ) {\n\n\tvar all, a, input, select, fragment, opt, eventName, isSupported, i,\n\t\tdiv = document.createElement(\"div\");\n\n\t// Setup\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// Finish early in limited (non-browser) environments\n\tall = div.getElementsByTagName(\"*\") || [];\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\tif ( !a || !a.style || !all.length ) {\n\t\treturn support;\n\t}\n\n\t// First batch of tests\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\ta.style.cssText = \"top:1px;float:left;opacity:.5\";\n\n\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName(\"tbody\").length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName(\"link\").length;\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute(\"style\") );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute(\"href\") === \"/a\";\n\n\t// Make sure that element opacity exists\n\t// (IE uses filter instead)\n\t// Use a regex to work around a WebKit issue. See #5145\n\tsupport.opacity = /^0.5/.test( a.style.opacity );\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!a.style.cssFloat;\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement(\"form\").enctype;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone = document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\n\n\t// Will be defined later\n\tsupport.inlineBlockNeedsLayout = false;\n\tsupport.shrinkWrapBlocks = false;\n\tsupport.pixelPosition = false;\n\tsupport.deleteExpando = true;\n\tsupport.noCloneEvent = true;\n\tsupport.reliableMarginRight = true;\n\tsupport.boxSizingReliable = true;\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<9\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement(\"input\");\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"checked\", \"t\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( input );\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\n\tif ( div.attachEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\n\t\tdiv.cloneNode( true ).click();\n\t}\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)\n\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\tfor ( i in { submit: true, change: true, focusin: true }) {\n\t\tdiv.setAttribute( eventName = \"on\" + i, \"t\" );\n\n\t\tsupport[ i + \"Bubbles\" ] = eventName in window || div.attributes[ eventName ].expando === false;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t// Support: IE<9\n\t// Iteration over object's inherited properties before its own.\n\tfor ( i in jQuery( support ) ) {\n\t\tbreak;\n\t}\n\tsupport.ownLast = i !== \"0\";\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, marginDiv, tds,\n\t\t\tdivReset = \"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = \"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\";\n\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE8\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\ttds = div.getElementsByTagName(\"td\");\n\t\ttds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Support: IE8\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check box-sizing and margin behavior.\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n\n\t\t// Workaround failing boxSizing test due to offsetWidth returning wrong value\n\t\t// with some non-1 values of body zoom, ticket #13543\n\t\tjQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {\n\t\t\tsupport.boxSizing = div.offsetWidth === 4;\n\t\t});\n\n\t\t// Use window.getComputedStyle because jsdom on node.js will break without it.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tsupport.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tsupport.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tmarginDiv = div.appendChild( document.createElement(\"div\") );\n\t\t\tmarginDiv.style.cssText = div.style.cssText = divReset;\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== core_strundefined ) {\n\t\t\t// Support: IE<8\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Support: IE6\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.innerHTML = \"<div></div>\";\n\t\t\tdiv.firstChild.style.width = \"5px\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n\t\t\tif ( support.inlineBlockNeedsLayout ) {\n\t\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t\t// Support: IE<8\n\t\t\t\tbody.style.zoom = 1;\n\t\t\t}\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\t// Null elements to avoid leaks in IE\n\t\tcontainer = div = tds = marginDiv = null;\n\t});\n\n\t// Null elements to avoid leaks in IE\n\tall = select = fragment = opt = a = input = null;\n\n\treturn support;\n})({});\n\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ){\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, null\n\t} else {\n\t\tcache[ id ] = null;\n\t}\n}\n\njQuery.extend({\n\tcache: {},\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"applet\": true,\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\t// Do not set data on non-element because it will not be cleared (#8335).\n\t\tif ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t// nodes accept data unless otherwise specified; rejection can be conditional\n\t\treturn !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar attrs, name,\n\t\t\tdata = null,\n\t\t\ti = 0,\n\t\t\telem = this[0];\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattrs = elem.attributes;\n\t\t\t\t\tfor ( ; i < attrs.length; i++ ) {\n\t\t\t\t\t\tname = attrs[i].name;\n\n\t\t\t\t\t\tif ( name.indexOf(\"data-\") === 0 ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each(function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t}) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar nodeHook, boolHook,\n\trclass = /[\\t\\r\\n\\f]/g,\n\trreturn = /\\r/g,\n\trfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute,\n\tgetSetInput = jQuery.support.input;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = jQuery.trim( cur );\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( core_rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === core_strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar ret, hooks, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Use proper attribute retrieval(#6932, #12072)\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\telem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === core_strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( core_rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t} else {\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;\n\n\tjQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar fn = jQuery.expr.attrHandle[ name ],\n\t\t\t\tret = isXML ?\n\t\t\t\t\tundefined :\n\t\t\t\t\t/* jshint eqeqeq: false */\n\t\t\t\t\t(jQuery.expr.attrHandle[ name ] = undefined) !=\n\t\t\t\t\t\tgetter( elem, name, isXML ) ?\n\n\t\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\t\tnull;\n\t\t\tjQuery.expr.attrHandle[ name ] = fn;\n\t\t\treturn ret;\n\t\t} :\n\t\tfunction( elem, name, isXML ) {\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t};\n});\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\treturn name === \"value\" || value === elem.getAttribute( name ) ?\n\t\t\t\tvalue :\n\t\t\t\tundefined;\n\t\t}\n\t};\n\tjQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =\n\t\t// Some attributes are constructed with empty-string values when not defined\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\t(ret = elem.getAttributeNode( name )) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t};\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\treturn ret && ret.specified ?\n\t\t\t\tret.value :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !jQuery.support.hrefNormalized ) {\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !jQuery.support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t// Support: Webkit\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = core_hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = core_hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, ret, handleObj, matched, j,\n\t\t\thandlerQueue = [],\n\t\t\targs = core_slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar sel, handleObj, matches, i,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== \"click\") ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Chrome 23+, Safari?\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Even when returnValue equals to undefined Firefox will still show alert\n\t\t\t\tif ( event.result !== undefined ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === core_strundefined ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar type, origFn;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\nvar isSimple = /^.[^:#\\[\\.,]*$/,\n\trparentsprev = /^(?:parents|prev(?:Until|All))/,\n\trneedsContext = jQuery.expr.match.needsContext,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tret = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tcur = ret.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( jQuery.unique(all) );\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.unique( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tvar elem = elems[ 0 ];\n\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\t\treturn elem.nodeType === 1;\n\t\t\t}));\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;\n\t});\n}\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\tmanipulation_rcheckableType = /^(?:checkbox|radio)$/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\tparam: [ 1, \"<object>\", \"</object>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\n\t\t_default: jQuery.support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\"  ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\tvar elem = this[0] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar\n\t\t\t// Snapshot the DOM in case .domManip sweeps something relevant into its fragment\n\t\t\targs = jQuery.map( this, function( elem ) {\n\t\t\t\treturn [ elem.nextSibling, elem.parentNode ];\n\t\t\t}),\n\t\t\ti = 0;\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\tvar next = args[ i++ ],\n\t\t\t\tparent = args[ i++ ];\n\n\t\t\tif ( parent ) {\n\t\t\t\t// Don't use the snapshot next if it has moved (#13810)\n\t\t\t\tif ( next && next.parentNode !== parent ) {\n\t\t\t\t\tnext = this.nextSibling;\n\t\t\t\t}\n\t\t\t\tjQuery( this ).remove();\n\t\t\t\tparent.insertBefore( elem, next );\n\t\t\t}\n\t\t// Allow new content to include elements from the context set\n\t\t}, true );\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn i ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback, allowIntersection ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = core_concat.apply( [], args );\n\n\t\tvar first, node, hasScripts,\n\t\t\tscripts, doc, fragment,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction || !( l <= 1 || typeof value !== \"string\" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[0] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback, allowIntersection );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[i], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Hope ajax is available...\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\t\tfragment = first = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (jQuery.find.attr( elem, \"type\" ) !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[1];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && manipulation_rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone(true);\n\t\t\tjQuery( insert[i] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tcore_push.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n// Used in buildFragment, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( manipulation_rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar j, elem, contains,\n\t\t\ttmp, tag, tbody, wrap,\n\t\t\tl = elems.length,\n\n\t\t\t// Ensure a safe fragment\n\t\t\tsafe = createSafeFragment( context ),\n\n\t\t\tnodes = [],\n\t\t\ti = 0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\twrap[1] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t\t0;\n\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\t\ttmp = safe.lastChild;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from fragment\n\t\tif ( tmp ) {\n\t\t\tsafe.removeChild( tmp );\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t\t}\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttmp = null;\n\n\t\treturn safe;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== core_strundefined ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcore_deletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_evalUrl: function( url ) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\t\t\t\"throws\": true\n\t\t});\n\t}\n});\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\nvar iframe, getStyles, curCSS,\n\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\n\trposition = /^(top|right|bottom|left)$/,\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trmargin = /^margin/,\n\trnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n\trnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + core_pnum + \")\", \"i\" ),\n\telemdisplay = { BODY: \"block\" },\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: 0,\n\t\tfontWeight: 400\n\t},\n\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction isHidden( elem, el ) {\n\t// isHidden might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\n\t\t\tif ( !values[ index ] ) {\n\t\t\t\thidden = isHidden( elem );\n\n\t\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn jQuery.access( this, function( elem, name, value ) {\n\t\t\tvar len, styles,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !jQuery.support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\n// NOTE: we've included the \"window\" in window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar width, minWidth, maxWidth,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\n\t\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\tif ( computed ) {\n\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar left, rs, rsLeft,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\t\t\tret = computed ? computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\n// Try to determine the default display value of an element\nfunction css_defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe ||\n\t\t\t\tjQuery(\"<iframe frameborder='0' width='0' height='0'/>\")\n\t\t\t\t.css( \"cssText\", \"display:block !important\" )\n\t\t\t).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;\n\t\t\tdoc.write(\"<!doctype html><html><body>\");\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\n\n// Called ONLY from within css_defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\t\tdisplay = jQuery.css( elem[0], \"display\" );\n\telem.remove();\n\treturn display;\n}\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, \"display\" ) ) ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\n// These hooks cannot be added until DOM ready because the support test\n// for it is not run until after DOM ready\njQuery(function() {\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// getComputedStyle returns percent when specified for top/left/bottom/right\n\t// rather than make the css module depend on the offset module, we just check for it here\n\tif ( !jQuery.support.pixelPosition && jQuery.fn.position ) {\n\t\tjQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\t\t\tjQuery.cssHooks[ prop ] = {\n\t\t\t\tget: function( elem, computed ) {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\t\t\tcomputed;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\t// Support: Opera <= 12.12\n\t\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||\n\t\t\t(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\n\t};\n}\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function(){\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function(){\n\t\t\tvar type = this.type;\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !manipulation_rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ){\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ){\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n//Serialize an array of form elements or a set of\n//key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\tajax_nonce = jQuery.now(),\n\n\tajax_rquery = /\\?/,\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat(\"*\");\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar deep, key,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, response, type,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = url.slice( off, url.length );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ){\n\tjQuery.fn[ type ] = function( fn ){\n\t\treturn this.on( type, fn );\n\t};\n});\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( core_rnotwhite ) || [\"\"];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + ajax_nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ajax_nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery(\"head\")[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement(\"script\");\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( ajax_nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( ajax_rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\nvar xhrCallbacks, xhrSupported,\n\txhrId = 0,\n\t// #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject && function() {\n\t\t// Abort all pending requests\n\t\tvar key;\n\t\tfor ( key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t};\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject(\"Microsoft.XMLHTTP\");\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\nxhrSupported = jQuery.ajaxSettings.xhr();\njQuery.support.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = jQuery.support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar handle, i,\n\t\t\t\t\t\txhr = s.xhr();\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( err ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, responseHeaders, statusText, responses;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occurred\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\n\t\t\t\t\t\t\t\t\t// When requesting binary data, IE6-9 will throw an exception\n\t\t\t\t\t\t\t\t\t// on any attempt to access responseText (#11426)\n\t\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( !s.async ) {\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\tsetTimeout( callback );\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\nvar fxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + core_pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t}]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tif ( jQuery.css( elem, \"display\" ) === \"inline\" &&\n\t\t\t\tjQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !jQuery.support.shrinkWrapBlocks ) {\n\t\t\tanim.always(function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = jQuery._data( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth? 1 : 0;\n\tfor( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p*Math.PI ) / 2;\n\t}\n};\n\njQuery.timers = [];\njQuery.fx = Tween.prototype.init;\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tif ( timer() && jQuery.timers.push( timer ) ) {\n\t\tjQuery.fx.start();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\njQuery.fn.offset = function( options ) {\n\tif ( arguments.length ) {\n\t\treturn options === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t}\n\n\tvar docElem, win,\n\t\tbox = { top: 0, left: 0 },\n\t\telem = this[ 0 ],\n\t\tdoc = elem && elem.ownerDocument;\n\n\tif ( !doc ) {\n\t\treturn;\n\t}\n\n\tdocElem = doc.documentElement;\n\n\t// Make sure it's not a disconnected DOM node\n\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\treturn box;\n\t}\n\n\t// If we don't have gBCR, just use 0,0 rather than error\n\t// BlackBerry 5, iOS 3 (original iPhone)\n\tif ( typeof elem.getBoundingClientRect !== core_strundefined ) {\n\t\tbox = elem.getBoundingClientRect();\n\t}\n\twin = getWindow( doc );\n\treturn {\n\t\ttop: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),\n\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t};\n};\n\njQuery.offset = {\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top  += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true)\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\") === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( {scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\"}, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn jQuery.access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn jQuery.access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n// Limit scope pollution from any deprecated API\n// (function() {\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n// })();\nif ( typeof module === \"object\" && module && typeof module.exports === \"object\" ) {\n\t// Expose jQuery as module.exports in loaders that implement the Node\n\t// module pattern (including browserify). Do not create the global, since\n\t// the user will be storing it themselves locally, and globals are frowned\n\t// upon in the Node module world.\n\tmodule.exports = jQuery;\n} else {\n\t// Otherwise expose jQuery to the global object as usual\n\twindow.jQuery = window.$ = jQuery;\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( \"jquery\", [], function () { return jQuery; } );\n\t}\n}\n\n})( window );\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/video-js/video-js.css",
    "content": "/*!\nVideo.js Default Styles (http://videojs.com)\nVersion 4.3.0\nCreate your own skin at http://designer.videojs.com\n*/\n/* SKIN\n================================================================================\nThe main class name for all skin-specific styles. To make your own skin,\nreplace all occurances of 'vjs-default-skin' with a new name. Then add your new\nskin name to your video tag instead of the default skin.\ne.g. <video class=\"video-js my-skin-name\">\n*/\n.vjs-default-skin {\n  color: #cccccc;\n}\n/* Custom Icon Font\n--------------------------------------------------------------------------------\nThe control icons are from a custom font. Each icon corresponds to a character\n(e.g. \"\\e001\"). Font icons allow for easy scaling and coloring of icons.\n*/\n@font-face {\n  font-family: 'VideoJS';\n  src: url('font/vjs.eot');\n  src: url('font/vjs.eot?#iefix') format('embedded-opentype'), url('font/vjs.woff') format('woff'), url('font/vjs.ttf') format('truetype');\n  font-weight: normal;\n  font-style: normal;\n}\n/* Base UI Component Classes\n--------------------------------------------------------------------------------\n*/\n/* Slider - used for Volume bar and Seek bar */\n.vjs-default-skin .vjs-slider {\n  /* Replace browser focus hightlight with handle highlight */\n  outline: 0;\n  position: relative;\n  cursor: pointer;\n  padding: 0;\n  /* background-color-with-alpha */\n  background-color: #333333;\n  background-color: rgba(51, 51, 51, 0.9);\n}\n.vjs-default-skin .vjs-slider:focus {\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 2em #ffffff;\n  -moz-box-shadow: 0 0 2em #ffffff;\n  box-shadow: 0 0 2em #ffffff;\n}\n.vjs-default-skin .vjs-slider-handle {\n  position: absolute;\n  /* Needed for IE6 */\n  left: 0;\n  top: 0;\n}\n.vjs-default-skin .vjs-slider-handle:before {\n  content: \"\\e009\";\n  font-family: VideoJS;\n  font-size: 1em;\n  line-height: 1;\n  text-align: center;\n  text-shadow: 0em 0em 1em #fff;\n  position: absolute;\n  top: 0;\n  left: 0;\n  /* Rotate the square icon to make a diamond */\n  /* transform */\n  -webkit-transform: rotate(-45deg);\n  -moz-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n  -o-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n/* Control Bar\n--------------------------------------------------------------------------------\nThe default control bar that is a container for most of the controls.\n*/\n.vjs-default-skin .vjs-control-bar {\n  /* Start hidden */\n  display: none;\n  position: absolute;\n  /* Place control bar at the bottom of the player box/video.\n     If you want more margin below the control bar, add more height. */\n  bottom: 0;\n  /* Use left/right to stretch to 100% width of player div */\n  left: 0;\n  right: 0;\n  /* Height includes any margin you want above or below control items */\n  height: 3.0em;\n  /* background-color-with-alpha */\n  background-color: #07141e;\n  background-color: rgba(7, 20, 30, 0.7);\n}\n/* Show the control bar only once the video has started playing */\n.vjs-default-skin.vjs-has-started .vjs-control-bar {\n  display: block;\n  /* Visibility needed to make sure things hide in older browsers too. */\n\n  visibility: visible;\n  opacity: 1;\n  /* transition */\n  -webkit-transition: visibility 0.1s, opacity 0.1s;\n  -moz-transition: visibility 0.1s, opacity 0.1s;\n  -o-transition: visibility 0.1s, opacity 0.1s;\n  transition: visibility 0.1s, opacity 0.1s;\n}\n/* Hide the control bar when the video is playing and the user is inactive  */\n.vjs-default-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {\n  display: block;\n  visibility: hidden;\n  opacity: 0;\n  /* transition */\n  -webkit-transition: visibility 1s, opacity 1s;\n  -moz-transition: visibility 1s, opacity 1s;\n  -o-transition: visibility 1s, opacity 1s;\n  transition: visibility 1s, opacity 1s;\n}\n.vjs-default-skin.vjs-controls-disabled .vjs-control-bar {\n  display: none;\n}\n.vjs-default-skin.vjs-using-native-controls .vjs-control-bar {\n  display: none;\n}\n/* IE8 is flakey with fonts, and you have to change the actual content to force\nfonts to show/hide properly.\n  - \"\\9\" IE8 hack didn't work for this\n  - Found in XP IE8 from http://modern.ie. Does not show up in \"IE8 mode\" in IE9\n*/\n@media \\0screen {\n  .vjs-default-skin.vjs-user-inactive.vjs-playing .vjs-control-bar :before {\n    content: \"\";\n  }\n}\n/* General styles for individual controls. */\n.vjs-default-skin .vjs-control {\n  outline: none;\n  position: relative;\n  float: left;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n  height: 3.0em;\n  width: 4em;\n}\n/* FontAwsome button icons */\n.vjs-default-skin .vjs-control:before {\n  font-family: VideoJS;\n  font-size: 1.5em;\n  line-height: 2;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);\n}\n/* Replacement for focus outline */\n.vjs-default-skin .vjs-control:focus:before,\n.vjs-default-skin .vjs-control:hover:before {\n  text-shadow: 0em 0em 1em #ffffff;\n}\n.vjs-default-skin .vjs-control:focus {\n  /*  outline: 0; */\n  /* keyboard-only users cannot see the focus on several of the UI elements when\n  this is set to 0 */\n\n}\n/* Hide control text visually, but have it available for screenreaders */\n.vjs-default-skin .vjs-control-text {\n  /* hide-visually */\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n/* Play/Pause\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-play-control {\n  width: 5em;\n  cursor: pointer;\n}\n.vjs-default-skin .vjs-play-control:before {\n  content: \"\\e001\";\n}\n.vjs-default-skin.vjs-playing .vjs-play-control:before {\n  content: \"\\e002\";\n}\n/* Volume/Mute\n-------------------------------------------------------------------------------- */\n.vjs-default-skin .vjs-mute-control,\n.vjs-default-skin .vjs-volume-menu-button {\n  cursor: pointer;\n  float: right;\n}\n.vjs-default-skin .vjs-mute-control:before,\n.vjs-default-skin .vjs-volume-menu-button:before {\n  content: \"\\e006\";\n}\n.vjs-default-skin .vjs-mute-control.vjs-vol-0:before,\n.vjs-default-skin .vjs-volume-menu-button.vjs-vol-0:before {\n  content: \"\\e003\";\n}\n.vjs-default-skin .vjs-mute-control.vjs-vol-1:before,\n.vjs-default-skin .vjs-volume-menu-button.vjs-vol-1:before {\n  content: \"\\e004\";\n}\n.vjs-default-skin .vjs-mute-control.vjs-vol-2:before,\n.vjs-default-skin .vjs-volume-menu-button.vjs-vol-2:before {\n  content: \"\\e005\";\n}\n.vjs-default-skin .vjs-volume-control {\n  width: 5em;\n  float: right;\n}\n.vjs-default-skin .vjs-volume-bar {\n  width: 5em;\n  height: 0.6em;\n  margin: 1.1em auto 0;\n}\n.vjs-default-skin .vjs-volume-menu-button .vjs-menu-content {\n  height: 2.9em;\n}\n.vjs-default-skin .vjs-volume-level {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 0.5em;\n  background: #66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat;\n}\n.vjs-default-skin .vjs-volume-bar .vjs-volume-handle {\n  width: 0.5em;\n  height: 0.5em;\n}\n.vjs-default-skin .vjs-volume-handle:before {\n  font-size: 0.9em;\n  top: -0.2em;\n  left: -0.2em;\n  width: 1em;\n  height: 1em;\n}\n.vjs-default-skin .vjs-volume-menu-button .vjs-menu .vjs-menu-content {\n  width: 6em;\n  left: -4em;\n}\n/* Progress\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-progress-control {\n  position: absolute;\n  left: 0;\n  right: 0;\n  width: auto;\n  font-size: 0.3em;\n  height: 1em;\n  /* Set above the rest of the controls. */\n  top: -1em;\n  /* Shrink the bar slower than it grows. */\n  /* transition */\n  -webkit-transition: all 0.4s;\n  -moz-transition: all 0.4s;\n  -o-transition: all 0.4s;\n  transition: all 0.4s;\n}\n/* On hover, make the progress bar grow to something that's more clickable.\n    This simply changes the overall font for the progress bar, and this\n    updates both the em-based widths and heights, as wells as the icon font */\n.vjs-default-skin:hover .vjs-progress-control {\n  font-size: .9em;\n  /* Even though we're not changing the top/height, we need to include them in\n      the transition so they're handled correctly. */\n\n  /* transition */\n  -webkit-transition: all 0.2s;\n  -moz-transition: all 0.2s;\n  -o-transition: all 0.2s;\n  transition: all 0.2s;\n}\n/* Box containing play and load progresses. Also acts as seek scrubber. */\n.vjs-default-skin .vjs-progress-holder {\n  height: 100%;\n}\n/* Progress Bars */\n.vjs-default-skin .vjs-progress-holder .vjs-play-progress,\n.vjs-default-skin .vjs-progress-holder .vjs-load-progress {\n  position: absolute;\n  display: block;\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  /* Needed for IE6 */\n  left: 0;\n  top: 0;\n}\n.vjs-default-skin .vjs-play-progress {\n  /*\n    Using a data URI to create the white diagonal lines with a transparent\n      background. Surprisingly works in IE8.\n      Created using http://www.patternify.com\n    Changing the first color value will change the bar color.\n    Also using a paralax effect to make the lines move backwards.\n      The -50% left position makes that happen.\n  */\n\n  background: #66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat;\n}\n.vjs-default-skin .vjs-load-progress {\n  background: #646464 /* IE8- Fallback */;\n  background: rgba(255, 255, 255, 0.4);\n}\n.vjs-default-skin .vjs-seek-handle {\n  width: 1.5em;\n  height: 100%;\n}\n.vjs-default-skin .vjs-seek-handle:before {\n  padding-top: 0.1em /* Minor adjustment */;\n}\n/* Time Display\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-time-controls {\n  font-size: 1em;\n  /* Align vertically by making the line height the same as the control bar */\n  line-height: 3em;\n}\n.vjs-default-skin .vjs-current-time {\n  float: left;\n}\n.vjs-default-skin .vjs-duration {\n  float: left;\n}\n/* Remaining time is in the HTML, but not included in default design */\n.vjs-default-skin .vjs-remaining-time {\n  display: none;\n  float: left;\n}\n.vjs-time-divider {\n  float: left;\n  line-height: 3em;\n}\n/* Fullscreen\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-fullscreen-control {\n  width: 3.8em;\n  cursor: pointer;\n  float: right;\n}\n.vjs-default-skin .vjs-fullscreen-control:before {\n  content: \"\\e000\";\n}\n/* Switch to the exit icon when the player is in fullscreen */\n.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control:before {\n  content: \"\\e00b\";\n}\n/* Big Play Button (play button at start)\n--------------------------------------------------------------------------------\nPositioning of the play button in the center or other corners can be done more\neasily in the skin designer. http://designer.videojs.com/\n*/\n.vjs-default-skin .vjs-big-play-button {\n  left: 0.5em;\n  top: 0.5em;\n  font-size: 3em;\n  display: block;\n  z-index: 2;\n  position: absolute;\n  width: 4em;\n  height: 2.6em;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  opacity: 1;\n  /* Need a slightly gray bg so it can be seen on black backgrounds */\n  /* background-color-with-alpha */\n  background-color: #07141e;\n  background-color: rgba(7, 20, 30, 0.7);\n  border: 0.1em solid #3b4249;\n  /* border-radius */\n  -webkit-border-radius: 0.8em;\n  -moz-border-radius: 0.8em;\n  border-radius: 0.8em;\n  /* box-shadow */\n  -webkit-box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);\n  -moz-box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);\n  box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);\n  /* transition */\n  -webkit-transition: all 0.4s;\n  -moz-transition: all 0.4s;\n  -o-transition: all 0.4s;\n  transition: all 0.4s;\n}\n/* Optionally center */\n.vjs-default-skin.vjs-big-play-centered .vjs-big-play-button {\n  /* Center it horizontally */\n  left: 50%;\n  margin-left: -2.1em;\n  /* Center it vertically */\n  top: 50%;\n  margin-top: -1.4000000000000001em;\n}\n/* Hide if controls are disabled */\n.vjs-default-skin.vjs-controls-disabled .vjs-big-play-button {\n  display: none;\n}\n/* Hide when video starts playing */\n.vjs-default-skin.vjs-has-started .vjs-big-play-button {\n  display: none;\n}\n/* Hide on mobile devices. Remove when we stop using native controls\n    by default on mobile  */\n.vjs-default-skin.vjs-using-native-controls .vjs-big-play-button {\n  display: none;\n}\n.vjs-default-skin:hover .vjs-big-play-button,\n.vjs-default-skin .vjs-big-play-button:focus {\n  outline: 0;\n  border-color: #fff;\n  /* IE8 needs a non-glow hover state */\n  background-color: #505050;\n  background-color: rgba(50, 50, 50, 0.75);\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 3em #ffffff;\n  -moz-box-shadow: 0 0 3em #ffffff;\n  box-shadow: 0 0 3em #ffffff;\n  /* transition */\n  -webkit-transition: all 0s;\n  -moz-transition: all 0s;\n  -o-transition: all 0s;\n  transition: all 0s;\n}\n.vjs-default-skin .vjs-big-play-button:before {\n  content: \"\\e001\";\n  font-family: VideoJS;\n  /* In order to center the play icon vertically we need to set the line height\n     to the same as the button height */\n\n  line-height: 2.6em;\n  text-shadow: 0.05em 0.05em 0.1em #000;\n  text-align: center /* Needed for IE8 */;\n  position: absolute;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n/* Loading Spinner\n--------------------------------------------------------------------------------\n*/\n.vjs-loading-spinner {\n  display: none;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  font-size: 4em;\n  line-height: 1;\n  width: 1em;\n  height: 1em;\n  margin-left: -0.5em;\n  margin-top: -0.5em;\n  opacity: 0.75;\n  /* animation */\n  -webkit-animation: spin 1.5s infinite linear;\n  -moz-animation: spin 1.5s infinite linear;\n  -o-animation: spin 1.5s infinite linear;\n  animation: spin 1.5s infinite linear;\n}\n.vjs-default-skin .vjs-loading-spinner:before {\n  content: \"\\e01e\";\n  font-family: VideoJS;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 1em;\n  height: 1em;\n  text-align: center;\n  text-shadow: 0em 0em 0.1em #000;\n}\n@-moz-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n  }\n  100% {\n    -moz-transform: rotate(359deg);\n  }\n}\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n  }\n}\n@-o-keyframes spin {\n  0% {\n    -o-transform: rotate(0deg);\n  }\n  100% {\n    -o-transform: rotate(359deg);\n  }\n}\n@keyframes spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(359deg);\n  }\n}\n/* Menu Buttons (Captions/Subtitles/etc.)\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-menu-button {\n  float: right;\n  cursor: pointer;\n}\n.vjs-default-skin .vjs-menu {\n  display: none;\n  position: absolute;\n  bottom: 0;\n  left: 0em;\n  /* (Width of vjs-menu - width of button) / 2 */\n\n  width: 0em;\n  height: 0em;\n  margin-bottom: 3em;\n  border-left: 2em solid transparent;\n  border-right: 2em solid transparent;\n  border-top: 1.55em solid #000000;\n  /* Same width top as ul bottom */\n\n  border-top-color: rgba(7, 40, 50, 0.5);\n  /* Same as ul background */\n\n}\n/* Button Pop-up Menu */\n.vjs-default-skin .vjs-menu-button .vjs-menu .vjs-menu-content {\n  display: block;\n  padding: 0;\n  margin: 0;\n  position: absolute;\n  width: 10em;\n  bottom: 1.5em;\n  /* Same bottom as vjs-menu border-top */\n\n  max-height: 15em;\n  overflow: auto;\n  left: -5em;\n  /* Width of menu - width of button / 2 */\n\n  /* background-color-with-alpha */\n  background-color: #07141e;\n  background-color: rgba(7, 20, 30, 0.7);\n  /* box-shadow */\n  -webkit-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);\n  -moz-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);\n  box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);\n}\n.vjs-default-skin .vjs-menu-button:hover .vjs-menu {\n  display: block;\n}\n.vjs-default-skin .vjs-menu-button ul li {\n  list-style: none;\n  margin: 0;\n  padding: 0.3em 0 0.3em 0;\n  line-height: 1.4em;\n  font-size: 1.2em;\n  text-align: center;\n  text-transform: lowercase;\n}\n.vjs-default-skin .vjs-menu-button ul li.vjs-selected {\n  background-color: #000;\n}\n.vjs-default-skin .vjs-menu-button ul li:focus,\n.vjs-default-skin .vjs-menu-button ul li:hover,\n.vjs-default-skin .vjs-menu-button ul li.vjs-selected:focus,\n.vjs-default-skin .vjs-menu-button ul li.vjs-selected:hover {\n  outline: 0;\n  color: #111;\n  /* background-color-with-alpha */\n  background-color: #ffffff;\n  background-color: rgba(255, 255, 255, 0.75);\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 1em #ffffff;\n  -moz-box-shadow: 0 0 1em #ffffff;\n  box-shadow: 0 0 1em #ffffff;\n}\n.vjs-default-skin .vjs-menu-button ul li.vjs-menu-title {\n  text-align: center;\n  text-transform: uppercase;\n  font-size: 1em;\n  line-height: 2em;\n  padding: 0;\n  margin: 0 0 0.3em 0;\n  font-weight: bold;\n  cursor: default;\n}\n/* Subtitles Button */\n.vjs-default-skin .vjs-subtitles-button:before {\n  content: \"\\e00c\";\n}\n/* Captions Button */\n.vjs-default-skin .vjs-captions-button:before {\n  content: \"\\e008\";\n}\n/* Replacement for focus outline */\n.vjs-default-skin .vjs-captions-button:focus .vjs-control-content:before,\n.vjs-default-skin .vjs-captions-button:hover .vjs-control-content:before {\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 1em #ffffff;\n  -moz-box-shadow: 0 0 1em #ffffff;\n  box-shadow: 0 0 1em #ffffff;\n}\n/*\nREQUIRED STYLES (be careful overriding)\n================================================================================\nWhen loading the player, the video tag is replaced with a DIV,\nthat will hold the video tag or object tag for other playback methods.\nThe div contains the video playback element (Flash or HTML5) and controls,\nand sets the width and height of the video.\n\n** If you want to add some kind of border/padding (e.g. a frame), or special\npositioning, use another containing element. Otherwise you risk messing up\ncontrol positioning and full window mode. **\n*/\n.video-js {\n  background-color: #000;\n  position: relative;\n  padding: 0;\n  /* Start with 10px for base font size so other dimensions can be em based and\n     easily calculable. */\n\n  font-size: 10px;\n  /* Allow poster to be vertially aligned. */\n\n  vertical-align: middle;\n  /*  display: table-cell; */\n  /*This works in Safari but not Firefox.*/\n\n  /* Provide some basic defaults for fonts */\n\n  font-weight: normal;\n  font-style: normal;\n  /* Avoiding helvetica: issue #376 */\n\n  font-family: Arial, sans-serif;\n  /* Turn off user selection (text highlighting) by default.\n     The majority of player components will not be text blocks.\n     Text areas will need to turn user selection back on. */\n\n  /* user-select */\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n/* Playback technology elements expand to the width/height of the containing div\n    <video> or <object> */\n.video-js .vjs-tech {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n/* Fix for Firefox 9 fullscreen (only if it is enabled). Not needed when\n   checking fullScreenEnabled. */\n.video-js:-moz-full-screen {\n  position: absolute;\n}\n/* Fullscreen Styles */\nbody.vjs-full-window {\n  padding: 0;\n  margin: 0;\n  height: 100%;\n  /* Fix for IE6 full-window. http://www.cssplay.co.uk/layouts/fixed.html */\n  overflow-y: auto;\n}\n.video-js.vjs-fullscreen {\n  position: fixed;\n  overflow: hidden;\n  z-index: 1000;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  width: 100% !important;\n  height: 100% !important;\n  /* IE6 full-window (underscore hack) */\n  _position: absolute;\n}\n.video-js:-webkit-full-screen {\n  width: 100% !important;\n  height: 100% !important;\n}\n.video-js.vjs-fullscreen.vjs-user-inactive {\n  cursor: none;\n}\n/* Poster Styles */\n.vjs-poster {\n  background-repeat: no-repeat;\n  background-position: 50% 50%;\n  background-size: contain;\n  cursor: pointer;\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  position: relative;\n  width: 100%;\n}\n.vjs-poster img {\n  display: block;\n  margin: 0 auto;\n  max-height: 100%;\n  padding: 0;\n  width: 100%;\n}\n/* Hide the poster when native controls are used otherwise it covers them */\n.video-js.vjs-using-native-controls .vjs-poster {\n  display: none;\n}\n/* Text Track Styles */\n/* Overall track holder for both captions and subtitles */\n.video-js .vjs-text-track-display {\n  text-align: center;\n  position: absolute;\n  bottom: 4em;\n  /* Leave padding on left and right */\n  left: 1em;\n  right: 1em;\n}\n/* Individual tracks */\n.video-js .vjs-text-track {\n  display: none;\n  font-size: 1.4em;\n  text-align: center;\n  margin-bottom: 0.1em;\n  /* Transparent black background, or fallback to all black (oldIE) */\n  /* background-color-with-alpha */\n  background-color: #000000;\n  background-color: rgba(0, 0, 0, 0.5);\n}\n.video-js .vjs-subtitles {\n  color: #ffffff /* Subtitles are white */;\n}\n.video-js .vjs-captions {\n  color: #ffcc66 /* Captions are yellow */;\n}\n.vjs-tt-cue {\n  display: block;\n}\n/* Hide disabled or unsupported controls */\n.vjs-default-skin .vjs-hidden {\n  display: none;\n}\n.vjs-lock-showing {\n  display: block !important;\n  opacity: 1;\n  visibility: visible;\n}\n/* -----------------------------------------------------------------------------\nThe original source of this file lives at\nhttps://github.com/videojs/video.js/blob/master/src/css/video-js.less */\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/video-js/video.dev.js",
    "content": "/**\n * @fileoverview Main function src.\n */\n\n// HTML5 Shiv. Must be in <head> to support older browsers.\ndocument.createElement('video');\ndocument.createElement('audio');\ndocument.createElement('track');\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n *\n * **ALIASES** videojs, _V_ (deprecated)\n *\n * The `vjs` function can be used to initialize or retrieve a player.\n *\n *     var myPlayer = vjs('my_video_id');\n *\n * @param  {String|Element} id      Video element or video element ID\n * @param  {Object=} options        Optional options object for config/settings\n * @param  {Function=} ready        Optional ready callback\n * @return {vjs.Player}             A player instance\n * @namespace\n */\nvar vjs = function(id, options, ready){\n  var tag; // Element of ID\n\n  // Allow for element or ID to be passed in\n  // String ID\n  if (typeof id === 'string') {\n\n    // Adjust for jQuery ID syntax\n    if (id.indexOf('#') === 0) {\n      id = id.slice(1);\n    }\n\n    // If a player instance has already been created for this ID return it.\n    if (vjs.players[id]) {\n      return vjs.players[id];\n\n    // Otherwise get element for ID\n    } else {\n      tag = vjs.el(id);\n    }\n\n  // ID is a media element\n  } else {\n    tag = id;\n  }\n\n  // Check for a useable element\n  if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n    throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n  }\n\n  // Element may have a player attr referring to an already created player instance.\n  // If not, set up a new player and return the instance.\n  return tag['player'] || new vjs.Player(tag, options, ready);\n};\n\n// Extended name, also available externally, window.videojs\nvar videojs = vjs;\nwindow.videojs = window.vjs = vjs;\n\n// CDN Version. Used to target right flash swf.\nvjs.CDN_VERSION = '4.3';\nvjs.ACCESS_PROTOCOL = ('https:' == document.location.protocol ? 'https://' : 'http://');\n\n/**\n * Global Player instance options, surfaced from vjs.Player.prototype.options_\n * vjs.options = vjs.Player.prototype.options_\n * All options should use string keys so they avoid\n * renaming by closure compiler\n * @type {Object}\n */\nvjs.options = {\n  // Default order of fallback technology\n  'techOrder': ['html5','flash'],\n  // techOrder: ['flash','html5'],\n\n  'html5': {},\n  'flash': {},\n\n  // Default of web browser is 300x150. Should rely on source width/height.\n  'width': 300,\n  'height': 150,\n  // defaultVolume: 0.85,\n  'defaultVolume': 0.00, // The freakin seaguls are driving me crazy!\n\n  // Included control sets\n  'children': {\n    'mediaLoader': {},\n    'posterImage': {},\n    'textTrackDisplay': {},\n    'loadingSpinner': {},\n    'bigPlayButton': {},\n    'controlBar': {}\n  },\n\n  // Default message to show when a video cannot be played.\n  'notSupportedMessage': 'Sorry, no compatible source and playback ' +\n      'technology were found for this video. Try using another browser ' +\n      'like <a href=\"http://bit.ly/ccMUEC\">Chrome</a> or download the ' +\n      'latest <a href=\"http://adobe.ly/mwfN1\">Adobe Flash Player</a>.'\n};\n\n// Set CDN Version of swf\n// The added (+) blocks the replace from changing this 4.3 string\nif (vjs.CDN_VERSION !== 'GENERATED'+'_CDN_VSN') {\n  videojs.options['flash']['swf'] = vjs.ACCESS_PROTOCOL + 'vjs.zencdn.net/'+vjs.CDN_VERSION+'/video-js.swf';\n}\n\n/**\n * Global player list\n * @type {Object}\n */\nvjs.players = {};\n/**\n * Core Object/Class for objects that use inheritance + contstructors\n *\n * To create a class that can be subclassed itself, extend the CoreObject class.\n *\n *     var Animal = CoreObject.extend();\n *     var Horse = Animal.extend();\n *\n * The constructor can be defined through the init property of an object argument.\n *\n *     var Animal = CoreObject.extend({\n *       init: function(name, sound){\n *         this.name = name;\n *       }\n *     });\n *\n * Other methods and properties can be added the same way, or directly to the\n * prototype.\n *\n *    var Animal = CoreObject.extend({\n *       init: function(name){\n *         this.name = name;\n *       },\n *       getName: function(){\n *         return this.name;\n *       },\n *       sound: '...'\n *    });\n *\n *    Animal.prototype.makeSound = function(){\n *      alert(this.sound);\n *    };\n *\n * To create an instance of a class, use the create method.\n *\n *    var fluffy = Animal.create('Fluffy');\n *    fluffy.getName(); // -> Fluffy\n *\n * Methods and properties can be overridden in subclasses.\n *\n *     var Horse = Animal.extend({\n *       sound: 'Neighhhhh!'\n *     });\n *\n *     var horsey = Horse.create('Horsey');\n *     horsey.getName(); // -> Horsey\n *     horsey.makeSound(); // -> Alert: Neighhhhh!\n *\n * @class\n * @constructor\n */\nvjs.CoreObject = vjs['CoreObject'] = function(){};\n// Manually exporting vjs['CoreObject'] here for Closure Compiler\n// because of the use of the extend/create class methods\n// If we didn't do this, those functions would get flattend to something like\n// `a = ...` and `this.prototype` would refer to the global object instead of\n// CoreObject\n\n/**\n * Create a new object that inherits from this Object\n *\n *     var Animal = CoreObject.extend();\n *     var Horse = Animal.extend();\n *\n * @param {Object} props Functions and properties to be applied to the\n *                       new object's prototype\n * @return {vjs.CoreObject} An object that inherits from CoreObject\n * @this {*}\n */\nvjs.CoreObject.extend = function(props){\n  var init, subObj;\n\n  props = props || {};\n  // Set up the constructor using the supplied init method\n  // or using the init of the parent object\n  // Make sure to check the unobfuscated version for external libs\n  init = props['init'] || props.init || this.prototype['init'] || this.prototype.init || function(){};\n  // In Resig's simple class inheritance (previously used) the constructor\n  //  is a function that calls `this.init.apply(arguments)`\n  // However that would prevent us from using `ParentObject.call(this);`\n  //  in a Child constuctor because the `this` in `this.init`\n  //  would still refer to the Child and cause an inifinite loop.\n  // We would instead have to do\n  //    `ParentObject.prototype.init.apply(this, argumnents);`\n  //  Bleh. We're not creating a _super() function, so it's good to keep\n  //  the parent constructor reference simple.\n  subObj = function(){\n    init.apply(this, arguments);\n  };\n\n  // Inherit from this object's prototype\n  subObj.prototype = vjs.obj.create(this.prototype);\n  // Reset the constructor property for subObj otherwise\n  // instances of subObj would have the constructor of the parent Object\n  subObj.prototype.constructor = subObj;\n\n  // Make the class extendable\n  subObj.extend = vjs.CoreObject.extend;\n  // Make a function for creating instances\n  subObj.create = vjs.CoreObject.create;\n\n  // Extend subObj's prototype with functions and other properties from props\n  for (var name in props) {\n    if (props.hasOwnProperty(name)) {\n      subObj.prototype[name] = props[name];\n    }\n  }\n\n  return subObj;\n};\n\n/**\n * Create a new instace of this Object class\n *\n *     var myAnimal = Animal.create();\n *\n * @return {vjs.CoreObject} An instance of a CoreObject subclass\n * @this {*}\n */\nvjs.CoreObject.create = function(){\n  // Create a new object that inherits from this object's prototype\n  var inst = vjs.obj.create(this.prototype);\n\n  // Apply this constructor function to the new object\n  this.apply(inst, arguments);\n\n  // Return the new object\n  return inst;\n};\n/**\n * @fileoverview Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n * @param  {Element|Object}   elem Element or object to bind listeners to\n * @param  {String}   type Type of event to bind to.\n * @param  {Function} fn   Event listener.\n * @private\n */\nvjs.on = function(elem, type, fn){\n  var data = vjs.getData(elem);\n\n  // We need a place to store all our handler data\n  if (!data.handlers) data.handlers = {};\n\n  if (!data.handlers[type]) data.handlers[type] = [];\n\n  if (!fn.guid) fn.guid = vjs.guid++;\n\n  data.handlers[type].push(fn);\n\n  if (!data.dispatcher) {\n    data.disabled = false;\n\n    data.dispatcher = function (event){\n\n      if (data.disabled) return;\n      event = vjs.fixEvent(event);\n\n      var handlers = data.handlers[event.type];\n\n      if (handlers) {\n        // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n        var handlersCopy = handlers.slice(0);\n\n        for (var m = 0, n = handlersCopy.length; m < n; m++) {\n          if (event.isImmediatePropagationStopped()) {\n            break;\n          } else {\n            handlersCopy[m].call(elem, event);\n          }\n        }\n      }\n    };\n  }\n\n  if (data.handlers[type].length == 1) {\n    if (document.addEventListener) {\n      elem.addEventListener(type, data.dispatcher, false);\n    } else if (document.attachEvent) {\n      elem.attachEvent('on' + type, data.dispatcher);\n    }\n  }\n};\n\n/**\n * Removes event listeners from an element\n * @param  {Element|Object}   elem Object to remove listeners from\n * @param  {String=}   type Type of listener to remove. Don't include to remove all events from element.\n * @param  {Function} fn   Specific listener to remove. Don't incldue to remove listeners for an event type.\n * @private\n */\nvjs.off = function(elem, type, fn) {\n  // Don't want to add a cache object through getData if not needed\n  if (!vjs.hasData(elem)) return;\n\n  var data = vjs.getData(elem);\n\n  // If no events exist, nothing to unbind\n  if (!data.handlers) { return; }\n\n  // Utility function\n  var removeType = function(t){\n     data.handlers[t] = [];\n     vjs.cleanUpEvents(elem,t);\n  };\n\n  // Are we removing all bound events?\n  if (!type) {\n    for (var t in data.handlers) removeType(t);\n    return;\n  }\n\n  var handlers = data.handlers[type];\n\n  // If no handlers exist, nothing to unbind\n  if (!handlers) return;\n\n  // If no listener was provided, remove all listeners for type\n  if (!fn) {\n    removeType(type);\n    return;\n  }\n\n  // We're only removing a single handler\n  if (fn.guid) {\n    for (var n = 0; n < handlers.length; n++) {\n      if (handlers[n].guid === fn.guid) {\n        handlers.splice(n--, 1);\n      }\n    }\n  }\n\n  vjs.cleanUpEvents(elem, type);\n};\n\n/**\n * Clean up the listener cache and dispatchers\n * @param  {Element|Object} elem Element to clean up\n * @param  {String} type Type of event to clean up\n * @private\n */\nvjs.cleanUpEvents = function(elem, type) {\n  var data = vjs.getData(elem);\n\n  // Remove the events of a particular type if there are none left\n  if (data.handlers[type].length === 0) {\n    delete data.handlers[type];\n    // data.handlers[type] = null;\n    // Setting to null was causing an error with data.handlers\n\n    // Remove the meta-handler from the element\n    if (document.removeEventListener) {\n      elem.removeEventListener(type, data.dispatcher, false);\n    } else if (document.detachEvent) {\n      elem.detachEvent('on' + type, data.dispatcher);\n    }\n  }\n\n  // Remove the events object if there are no types left\n  if (vjs.isEmpty(data.handlers)) {\n    delete data.handlers;\n    delete data.dispatcher;\n    delete data.disabled;\n\n    // data.handlers = null;\n    // data.dispatcher = null;\n    // data.disabled = null;\n  }\n\n  // Finally remove the expando if there is no data left\n  if (vjs.isEmpty(data)) {\n    vjs.removeData(elem);\n  }\n};\n\n/**\n * Fix a native event to have standard property values\n * @param  {Object} event Event object to fix\n * @return {Object}\n * @private\n */\nvjs.fixEvent = function(event) {\n\n  function returnTrue() { return true; }\n  function returnFalse() { return false; }\n\n  // Test if fixing up is needed\n  // Used to check if !event.stopPropagation instead of isPropagationStopped\n  // But native events return true for stopPropagation, but don't have\n  // other expected methods like isPropagationStopped. Seems to be a problem\n  // with the Javascript Ninja code. So we're just overriding all events now.\n  if (!event || !event.isPropagationStopped) {\n    var old = event || window.event;\n\n    event = {};\n    // Clone the old object so that we can modify the values event = {};\n    // IE8 Doesn't like when you mess with native event properties\n    // Firefox returns false for event.hasOwnProperty('type') and other props\n    //  which makes copying more difficult.\n    // TODO: Probably best to create a whitelist of event props\n    for (var key in old) {\n      // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n      if (key !== 'layerX' && key !== 'layerY') {\n        event[key] = old[key];\n      }\n    }\n\n    // The event occurred on this element\n    if (!event.target) {\n      event.target = event.srcElement || document;\n    }\n\n    // Handle which other element the event is related to\n    event.relatedTarget = event.fromElement === event.target ?\n      event.toElement :\n      event.fromElement;\n\n    // Stop the default browser action\n    event.preventDefault = function () {\n      if (old.preventDefault) {\n        old.preventDefault();\n      }\n      event.returnValue = false;\n      event.isDefaultPrevented = returnTrue;\n    };\n\n    event.isDefaultPrevented = returnFalse;\n\n    // Stop the event from bubbling\n    event.stopPropagation = function () {\n      if (old.stopPropagation) {\n        old.stopPropagation();\n      }\n      event.cancelBubble = true;\n      event.isPropagationStopped = returnTrue;\n    };\n\n    event.isPropagationStopped = returnFalse;\n\n    // Stop the event from bubbling and executing other handlers\n    event.stopImmediatePropagation = function () {\n      if (old.stopImmediatePropagation) {\n        old.stopImmediatePropagation();\n      }\n      event.isImmediatePropagationStopped = returnTrue;\n      event.stopPropagation();\n    };\n\n    event.isImmediatePropagationStopped = returnFalse;\n\n    // Handle mouse position\n    if (event.clientX != null) {\n      var doc = document.documentElement, body = document.body;\n\n      event.pageX = event.clientX +\n        (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n        (doc && doc.clientLeft || body && body.clientLeft || 0);\n      event.pageY = event.clientY +\n        (doc && doc.scrollTop || body && body.scrollTop || 0) -\n        (doc && doc.clientTop || body && body.clientTop || 0);\n    }\n\n    // Handle key presses\n    event.which = event.charCode || event.keyCode;\n\n    // Fix button for mouse clicks:\n    // 0 == left; 1 == middle; 2 == right\n    if (event.button != null) {\n      event.button = (event.button & 1 ? 0 :\n        (event.button & 4 ? 1 :\n          (event.button & 2 ? 2 : 0)));\n    }\n  }\n\n  // Returns fixed-up instance\n  return event;\n};\n\n/**\n * Trigger an event for an element\n * @param  {Element|Object} elem  Element to trigger an event on\n * @param  {String} event Type of event to trigger\n * @private\n */\nvjs.trigger = function(elem, event) {\n  // Fetches element data and a reference to the parent (for bubbling).\n  // Don't want to add a data object to cache for every parent,\n  // so checking hasData first.\n  var elemData = (vjs.hasData(elem)) ? vjs.getData(elem) : {};\n  var parent = elem.parentNode || elem.ownerDocument;\n      // type = event.type || event,\n      // handler;\n\n  // If an event name was passed as a string, creates an event out of it\n  if (typeof event === 'string') {\n    event = { type:event, target:elem };\n  }\n  // Normalizes the event properties.\n  event = vjs.fixEvent(event);\n\n  // If the passed element has a dispatcher, executes the established handlers.\n  if (elemData.dispatcher) {\n    elemData.dispatcher.call(elem, event);\n  }\n\n  // Unless explicitly stopped or the event does not bubble (e.g. media events)\n    // recursively calls this function to bubble the event up the DOM.\n    if (parent && !event.isPropagationStopped() && event.bubbles !== false) {\n    vjs.trigger(parent, event);\n\n  // If at the top of the DOM, triggers the default action unless disabled.\n  } else if (!parent && !event.isDefaultPrevented()) {\n    var targetData = vjs.getData(event.target);\n\n    // Checks if the target has a default action for this event.\n    if (event.target[event.type]) {\n      // Temporarily disables event dispatching on the target as we have already executed the handler.\n      targetData.disabled = true;\n      // Executes the default action.\n      if (typeof event.target[event.type] === 'function') {\n        event.target[event.type]();\n      }\n      // Re-enables event dispatching.\n      targetData.disabled = false;\n    }\n  }\n\n  // Inform the triggerer if the default was prevented by returning false\n  return !event.isDefaultPrevented();\n  /* Original version of js ninja events wasn't complete.\n   * We've since updated to the latest version, but keeping this around\n   * for now just in case.\n   */\n  // // Added in attion to book. Book code was broke.\n  // event = typeof event === 'object' ?\n  //   event[vjs.expando] ?\n  //     event :\n  //     new vjs.Event(type, event) :\n  //   new vjs.Event(type);\n\n  // event.type = type;\n  // if (handler) {\n  //   handler.call(elem, event);\n  // }\n\n  // // Clean up the event in case it is being reused\n  // event.result = undefined;\n  // event.target = elem;\n};\n\n/**\n * Trigger a listener only once for an event\n * @param  {Element|Object}   elem Element or object to\n * @param  {String}   type\n * @param  {Function} fn\n * @private\n */\nvjs.one = function(elem, type, fn) {\n  var func = function(){\n    vjs.off(elem, type, func);\n    fn.apply(this, arguments);\n  };\n  func.guid = fn.guid = fn.guid || vjs.guid++;\n  vjs.on(elem, type, func);\n};\nvar hasOwnProp = Object.prototype.hasOwnProperty;\n\n/**\n * Creates an element and applies properties.\n * @param  {String=} tagName    Name of tag to be created.\n * @param  {Object=} properties Element properties to be applied.\n * @return {Element}\n * @private\n */\nvjs.createEl = function(tagName, properties){\n  var el, propName;\n\n  el = document.createElement(tagName || 'div');\n\n  for (propName in properties){\n    if (hasOwnProp.call(properties, propName)) {\n      //el[propName] = properties[propName];\n      // Not remembering why we were checking for dash\n      // but using setAttribute means you have to use getAttribute\n\n      // The check for dash checks for the aria-* attributes, like aria-label, aria-valuemin.\n      // The additional check for \"role\" is because the default method for adding attributes does not\n      // add the attribute \"role\". My guess is because it's not a valid attribute in some namespaces, although\n      // browsers handle the attribute just fine. The W3C allows for aria-* attributes to be used in pre-HTML5 docs.\n      // http://www.w3.org/TR/wai-aria-primer/#ariahtml. Using setAttribute gets around this problem.\n\n       if (propName.indexOf('aria-') !== -1 || propName=='role') {\n         el.setAttribute(propName, properties[propName]);\n       } else {\n         el[propName] = properties[propName];\n       }\n    }\n  }\n  return el;\n};\n\n/**\n * Uppercase the first letter of a string\n * @param  {String} string String to be uppercased\n * @return {String}\n * @private\n */\nvjs.capitalize = function(string){\n  return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\n/**\n * Object functions container\n * @type {Object}\n * @private\n */\nvjs.obj = {};\n\n/**\n * Object.create shim for prototypal inheritance\n *\n * https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create\n *\n * @function\n * @param  {Object}   obj Object to use as prototype\n * @private\n */\n vjs.obj.create = Object.create || function(obj){\n  //Create a new function called 'F' which is just an empty object.\n  function F() {}\n\n  //the prototype of the 'F' function should point to the\n  //parameter of the anonymous function.\n  F.prototype = obj;\n\n  //create a new constructor function based off of the 'F' function.\n  return new F();\n};\n\n/**\n * Loop through each property in an object and call a function\n * whose arguments are (key,value)\n * @param  {Object}   obj Object of properties\n * @param  {Function} fn  Function to be called on each property.\n * @this {*}\n * @private\n */\nvjs.obj.each = function(obj, fn, context){\n  for (var key in obj) {\n    if (hasOwnProp.call(obj, key)) {\n      fn.call(context || this, key, obj[key]);\n    }\n  }\n};\n\n/**\n * Merge two objects together and return the original.\n * @param  {Object} obj1\n * @param  {Object} obj2\n * @return {Object}\n * @private\n */\nvjs.obj.merge = function(obj1, obj2){\n  if (!obj2) { return obj1; }\n  for (var key in obj2){\n    if (hasOwnProp.call(obj2, key)) {\n      obj1[key] = obj2[key];\n    }\n  }\n  return obj1;\n};\n\n/**\n * Merge two objects, and merge any properties that are objects\n * instead of just overwriting one. Uses to merge options hashes\n * where deeper default settings are important.\n * @param  {Object} obj1 Object to override\n * @param  {Object} obj2 Overriding object\n * @return {Object}      New object. Obj1 and Obj2 will be untouched.\n * @private\n */\nvjs.obj.deepMerge = function(obj1, obj2){\n  var key, val1, val2;\n\n  // make a copy of obj1 so we're not ovewriting original values.\n  // like prototype.options_ and all sub options objects\n  obj1 = vjs.obj.copy(obj1);\n\n  for (key in obj2){\n    if (hasOwnProp.call(obj2, key)) {\n      val1 = obj1[key];\n      val2 = obj2[key];\n\n      // Check if both properties are pure objects and do a deep merge if so\n      if (vjs.obj.isPlain(val1) && vjs.obj.isPlain(val2)) {\n        obj1[key] = vjs.obj.deepMerge(val1, val2);\n      } else {\n        obj1[key] = obj2[key];\n      }\n    }\n  }\n  return obj1;\n};\n\n/**\n * Make a copy of the supplied object\n * @param  {Object} obj Object to copy\n * @return {Object}     Copy of object\n * @private\n */\nvjs.obj.copy = function(obj){\n  return vjs.obj.merge({}, obj);\n};\n\n/**\n * Check if an object is plain, and not a dom node or any object sub-instance\n * @param  {Object} obj Object to check\n * @return {Boolean}     True if plain, false otherwise\n * @private\n */\nvjs.obj.isPlain = function(obj){\n  return !!obj\n    && typeof obj === 'object'\n    && obj.toString() === '[object Object]'\n    && obj.constructor === Object;\n};\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n   It also stores a unique id on the function so it can be easily removed from events\n * @param  {*}   context The object to bind as scope\n * @param  {Function} fn      The function to be bound to a scope\n * @param  {Number=}   uid     An optional unique ID for the function to be set\n * @return {Function}\n * @private\n */\nvjs.bind = function(context, fn, uid) {\n  // Make sure the function has a unique ID\n  if (!fn.guid) { fn.guid = vjs.guid++; }\n\n  // Create the new function that changes the context\n  var ret = function() {\n    return fn.apply(context, arguments);\n  };\n\n  // Allow for the ability to individualize this function\n  // Needed in the case where multiple objects might share the same prototype\n  // IF both items add an event listener with the same function, then you try to remove just one\n  // it will remove both because they both have the same guid.\n  // when using this, you need to use the bind method when you remove the listener as well.\n  // currently used in text tracks\n  ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n  return ret;\n};\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listneres are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n * @type {Object}\n * @private\n */\nvjs.cache = {};\n\n/**\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nvjs.guid = 1;\n\n/**\n * Unique attribute name to store an element's guid in\n * @type {String}\n * @constant\n * @private\n */\nvjs.expando = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n * @param  {Element} el Element to store data for.\n * @return {Object}\n * @private\n */\nvjs.getData = function(el){\n  var id = el[vjs.expando];\n  if (!id) {\n    id = el[vjs.expando] = vjs.guid++;\n    vjs.cache[id] = {};\n  }\n  return vjs.cache[id];\n};\n\n/**\n * Returns the cache object where data for an element is stored\n * @param  {Element} el Element to store data for.\n * @return {Object}\n * @private\n */\nvjs.hasData = function(el){\n  var id = el[vjs.expando];\n  return !(!id || vjs.isEmpty(vjs.cache[id]));\n};\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n * @param  {Element} el Remove data for an element\n * @private\n */\nvjs.removeData = function(el){\n  var id = el[vjs.expando];\n  if (!id) { return; }\n  // Remove all stored data\n  // Changed to = null\n  // http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/\n  // vjs.cache[id] = null;\n  delete vjs.cache[id];\n\n  // Remove the expando property from the DOM node\n  try {\n    delete el[vjs.expando];\n  } catch(e) {\n    if (el.removeAttribute) {\n      el.removeAttribute(vjs.expando);\n    } else {\n      // IE doesn't appear to support removeAttribute on the document element\n      el[vjs.expando] = null;\n    }\n  }\n};\n\n/**\n * Check if an object is empty\n * @param  {Object}  obj The object to check for emptiness\n * @return {Boolean}\n * @private\n */\nvjs.isEmpty = function(obj) {\n  for (var prop in obj) {\n    // Inlude null properties as empty.\n    if (obj[prop] !== null) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Add a CSS class name to an element\n * @param {Element} element    Element to add class name to\n * @param {String} classToAdd Classname to add\n * @private\n */\nvjs.addClass = function(element, classToAdd){\n  if ((' '+element.className+' ').indexOf(' '+classToAdd+' ') == -1) {\n    element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;\n  }\n};\n\n/**\n * Remove a CSS class name from an element\n * @param {Element} element    Element to remove from class name\n * @param {String} classToAdd Classname to remove\n * @private\n */\nvjs.removeClass = function(element, classToRemove){\n  var classNames, i;\n\n  if (element.className.indexOf(classToRemove) == -1) { return; }\n\n  classNames = element.className.split(' ');\n\n  // no arr.indexOf in ie8, and we don't want to add a big shim\n  for (i = classNames.length - 1; i >= 0; i--) {\n    if (classNames[i] === classToRemove) {\n      classNames.splice(i,1);\n    }\n  }\n\n  element.className = classNames.join(' ');\n};\n\n/**\n * Element for testing browser HTML5 video capabilities\n * @type {Element}\n * @constant\n * @private\n */\nvjs.TEST_VID = vjs.createEl('video');\n\n/**\n * Useragent for browser testing.\n * @type {String}\n * @constant\n * @private\n */\nvjs.USER_AGENT = navigator.userAgent;\n\n/**\n * Device is an iPhone\n * @type {Boolean}\n * @constant\n * @private\n */\nvjs.IS_IPHONE = (/iPhone/i).test(vjs.USER_AGENT);\nvjs.IS_IPAD = (/iPad/i).test(vjs.USER_AGENT);\nvjs.IS_IPOD = (/iPod/i).test(vjs.USER_AGENT);\nvjs.IS_IOS = vjs.IS_IPHONE || vjs.IS_IPAD || vjs.IS_IPOD;\n\nvjs.IOS_VERSION = (function(){\n  var match = vjs.USER_AGENT.match(/OS (\\d+)_/i);\n  if (match && match[1]) { return match[1]; }\n})();\n\nvjs.IS_ANDROID = (/Android/i).test(vjs.USER_AGENT);\nvjs.ANDROID_VERSION = (function() {\n  // This matches Android Major.Minor.Patch versions\n  // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n  var match = vjs.USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n    major,\n    minor;\n\n  if (!match) {\n    return null;\n  }\n\n  major = match[1] && parseFloat(match[1]);\n  minor = match[2] && parseFloat(match[2]);\n\n  if (major && minor) {\n    return parseFloat(match[1] + '.' + match[2]);\n  } else if (major) {\n    return major;\n  } else {\n    return null;\n  }\n})();\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nvjs.IS_OLD_ANDROID = vjs.IS_ANDROID && (/webkit/i).test(vjs.USER_AGENT) && vjs.ANDROID_VERSION < 2.3;\n\nvjs.IS_FIREFOX = (/Firefox/i).test(vjs.USER_AGENT);\nvjs.IS_CHROME = (/Chrome/i).test(vjs.USER_AGENT);\n\nvjs.TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributs are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n * @param  {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n */\nvjs.getAttributeValues = function(tag){\n  var obj, knownBooleans, attrs, attrName, attrVal;\n\n  obj = {};\n\n  // known boolean attributes\n  // we can check for matching boolean properties, but older browsers\n  // won't know about HTML5 boolean attributes that we still read from\n  knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n  if (tag && tag.attributes && tag.attributes.length > 0) {\n    attrs = tag.attributes;\n\n    for (var i = attrs.length - 1; i >= 0; i--) {\n      attrName = attrs[i].name;\n      attrVal = attrs[i].value;\n\n      // check for known booleans\n      // the matching element property will return a value for typeof\n      if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n        // the value of an included boolean attribute is typically an empty\n        // string ('') which would equal false if we just check for a false value.\n        // we also don't want support bad code like autoplay='false'\n        attrVal = (attrVal !== null) ? true : false;\n      }\n\n      obj[attrName] = attrVal;\n    }\n  }\n\n  return obj;\n};\n\n/**\n * Get the computed style value for an element\n * From http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element/\n * @param  {Element} el        Element to get style value for\n * @param  {String} strCssRule Style name\n * @return {String}            Style value\n * @private\n */\nvjs.getComputedDimension = function(el, strCssRule){\n  var strValue = '';\n  if(document.defaultView && document.defaultView.getComputedStyle){\n    strValue = document.defaultView.getComputedStyle(el, '').getPropertyValue(strCssRule);\n\n  } else if(el.currentStyle){\n    // IE8 Width/Height support\n    strValue = el['client'+strCssRule.substr(0,1).toUpperCase() + strCssRule.substr(1)] + 'px';\n  }\n  return strValue;\n};\n\n/**\n * Insert an element as the first child node of another\n * @param  {Element} child   Element to insert\n * @param  {[type]} parent Element to insert child into\n * @private\n */\nvjs.insertFirst = function(child, parent){\n  if (parent.firstChild) {\n    parent.insertBefore(child, parent.firstChild);\n  } else {\n    parent.appendChild(child);\n  }\n};\n\n/**\n * Object to hold browser support information\n * @type {Object}\n * @private\n */\nvjs.support = {};\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n * @param  {String} id  Element ID\n * @return {Element}    Element with supplied ID\n * @private\n */\nvjs.el = function(id){\n  if (id.indexOf('#') === 0) {\n    id = id.slice(1);\n  }\n\n  return document.getElementById(id);\n};\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n * @param  {Number} seconds Number of seconds to be turned into a string\n * @param  {Number} guide   Number (in seconds) to model the string after\n * @return {String}         Time formatted as H:MM:SS or M:SS\n * @private\n */\nvjs.formatTime = function(seconds, guide) {\n  // Default to using seconds as guide\n  guide = guide || seconds;\n  var s = Math.floor(seconds % 60),\n      m = Math.floor(seconds / 60 % 60),\n      h = Math.floor(seconds / 3600),\n      gm = Math.floor(guide / 60 % 60),\n      gh = Math.floor(guide / 3600);\n\n  // handle invalid times\n  if (isNaN(seconds) || seconds === Infinity) {\n    // '-' is false for all relational operators (e.g. <, >=) so this setting\n    // will add the minimum number of fields specified by the guide\n    h = m = s = '-';\n  }\n\n  // Check if we need to show hours\n  h = (h > 0 || gh > 0) ? h + ':' : '';\n\n  // If hours are showing, we may need to add a leading zero.\n  // Always show at least one digit of minutes.\n  m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n  // Check if leading zero is need for seconds\n  s = (s < 10) ? '0' + s : s;\n\n  return h + m + s;\n};\n\n// Attempt to block the ability to select text while dragging controls\nvjs.blockTextSelection = function(){\n  document.body.focus();\n  document.onselectstart = function () { return false; };\n};\n// Turn off text selection blocking\nvjs.unblockTextSelection = function(){ document.onselectstart = function () { return true; }; };\n\n/**\n * Trim whitespace from the ends of a string.\n * @param  {String} string String to trim\n * @return {String}        Trimmed string\n * @private\n */\nvjs.trim = function(str){\n  return (str+'').replace(/^\\s+|\\s+$/g, '');\n};\n\n/**\n * Should round off a number to a decimal place\n * @param  {Number} num Number to round\n * @param  {Number} dec Number of decimal places to round to\n * @return {Number}     Rounded number\n * @private\n */\nvjs.round = function(num, dec) {\n  if (!dec) { dec = 0; }\n  return Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);\n};\n\n/**\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n * @param  {Number} start Start time in seconds\n * @param  {Number} end   End time in seconds\n * @return {Object}       Fake TimeRange object\n * @private\n */\nvjs.createTimeRange = function(start, end){\n  return {\n    length: 1,\n    start: function() { return start; },\n    end: function() { return end; }\n  };\n};\n\n/**\n * Simple http request for retrieving external files (e.g. text tracks)\n * @param  {String} url           URL of resource\n * @param  {Function=} onSuccess  Success callback\n * @param  {Function=} onError    Error callback\n * @private\n */\nvjs.get = function(url, onSuccess, onError){\n  var local, request;\n\n  if (typeof XMLHttpRequest === 'undefined') {\n    window.XMLHttpRequest = function () {\n      try { return new window.ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (e) {}\n      try { return new window.ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (f) {}\n      try { return new window.ActiveXObject('Msxml2.XMLHTTP'); } catch (g) {}\n      throw new Error('This browser does not support XMLHttpRequest.');\n    };\n  }\n\n  request = new XMLHttpRequest();\n  try {\n    request.open('GET', url);\n  } catch(e) {\n    onError(e);\n  }\n\n  local = (url.indexOf('file:') === 0 || (window.location.href.indexOf('file:') === 0 && url.indexOf('http') === -1));\n\n  request.onreadystatechange = function() {\n    if (request.readyState === 4) {\n      if (request.status === 200 || local && request.status === 0) {\n        onSuccess(request.responseText);\n      } else {\n        if (onError) {\n          onError();\n        }\n      }\n    }\n  };\n\n  try {\n    request.send();\n  } catch(e) {\n    if (onError) {\n      onError(e);\n    }\n  }\n};\n\n/**\n * Add to local storage (may removeable)\n * @private\n */\nvjs.setLocalStorage = function(key, value){\n  try {\n    // IE was throwing errors referencing the var anywhere without this\n    var localStorage = window.localStorage || false;\n    if (!localStorage) { return; }\n    localStorage[key] = value;\n  } catch(e) {\n    if (e.code == 22 || e.code == 1014) { // Webkit == 22 / Firefox == 1014\n      vjs.log('LocalStorage Full (VideoJS)', e);\n    } else {\n      if (e.code == 18) {\n        vjs.log('LocalStorage not allowed (VideoJS)', e);\n      } else {\n        vjs.log('LocalStorage Error (VideoJS)', e);\n      }\n    }\n  }\n};\n\n/**\n * Get abosolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n * @param  {String} url URL to make absolute\n * @return {String}     Absolute URL\n * @private\n */\nvjs.getAbsoluteURL = function(url){\n\n  // Check if absolute URL\n  if (!url.match(/^https?:\\/\\//)) {\n    // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n    url = vjs.createEl('div', {\n      innerHTML: '<a href=\"'+url+'\">x</a>'\n    }).firstChild.href;\n  }\n\n  return url;\n};\n\n// usage: log('inside coolFunc',this,arguments);\n// http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/\nvjs.log = function(){\n  vjs.log.history = vjs.log.history || [];   // store logs to an array for reference\n  vjs.log.history.push(arguments);\n  if(window.console){\n    window.console.log(Array.prototype.slice.call(arguments));\n  }\n};\n\n// Offset Left\n// getBoundingClientRect technique from John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\nvjs.findPosition = function(el) {\n    var box, docEl, body, clientLeft, scrollLeft, left, clientTop, scrollTop, top;\n\n    if (el.getBoundingClientRect && el.parentNode) {\n      box = el.getBoundingClientRect();\n    }\n\n    if (!box) {\n      return {\n        left: 0,\n        top: 0\n      };\n    }\n\n    docEl = document.documentElement;\n    body = document.body;\n\n    clientLeft = docEl.clientLeft || body.clientLeft || 0;\n    scrollLeft = window.pageXOffset || body.scrollLeft;\n    left = box.left + scrollLeft - clientLeft;\n\n    clientTop = docEl.clientTop || body.clientTop || 0;\n    scrollTop = window.pageYOffset || body.scrollTop;\n    top = box.top + scrollTop - clientTop;\n\n    return {\n      left: left,\n      top: top\n    };\n};\n/**\n * @fileoverview Player Component - Base class for all UI objects\n *\n */\n\n/**\n * Base UI Component class\n *\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n *\n *     // adding a button to the player\n *     var button = player.addChild('button');\n *     button.el(); // -> button element\n *\n *     <div class=\"video-js\">\n *       <div class=\"vjs-button\">Button</div>\n *     </div>\n *\n * Components are also event emitters.\n *\n *     button.on('click', function(){\n *       console.log('Button Clicked!');\n *     });\n *\n *     button.trigger('customevent');\n *\n * @param {Object} player  Main Player\n * @param {Object=} options\n * @class\n * @constructor\n * @extends vjs.CoreObject\n */\nvjs.Component = vjs.CoreObject.extend({\n  /**\n   * the constructor funciton for the class\n   *\n   * @constructor\n   */\n  init: function(player, options, ready){\n    this.player_ = player;\n\n    // Make a copy of prototype.options_ to protect against overriding global defaults\n    this.options_ = vjs.obj.copy(this.options_);\n\n    // Updated options with supplied options\n    options = this.options(options);\n\n    // Get ID from options, element, or create using player ID and unique ID\n    this.id_ = options['id'] || ((options['el'] && options['el']['id']) ? options['el']['id'] : player.id() + '_component_' + vjs.guid++ );\n\n    this.name_ = options['name'] || null;\n\n    // Create element if one wasn't provided in options\n    this.el_ = options['el'] || this.createEl();\n\n    this.children_ = [];\n    this.childIndex_ = {};\n    this.childNameIndex_ = {};\n\n    // Add any child components in options\n    this.initChildren();\n\n    this.ready(ready);\n    // Don't want to trigger ready here or it will before init is actually\n    // finished for all children that run this constructor\n  }\n});\n\n/**\n * Dispose of the component and all child components\n */\nvjs.Component.prototype.dispose = function(){\n  this.trigger('dispose');\n\n  // Dispose all children.\n  if (this.children_) {\n    for (var i = this.children_.length - 1; i >= 0; i--) {\n      if (this.children_[i].dispose) {\n        this.children_[i].dispose();\n      }\n    }\n  }\n\n  // Delete child references\n  this.children_ = null;\n  this.childIndex_ = null;\n  this.childNameIndex_ = null;\n\n  // Remove all event listeners.\n  this.off();\n\n  // Remove element from DOM\n  if (this.el_.parentNode) {\n    this.el_.parentNode.removeChild(this.el_);\n  }\n\n  vjs.removeData(this.el_);\n  this.el_ = null;\n};\n\n/**\n * Reference to main player instance\n *\n * @type {vjs.Player}\n * @private\n */\nvjs.Component.prototype.player_ = true;\n\n/**\n * Return the component's player\n *\n * @return {vjs.Player}\n */\nvjs.Component.prototype.player = function(){\n  return this.player_;\n};\n\n/**\n * The component's options object\n *\n * @type {Object}\n * @private\n */\nvjs.Component.prototype.options_;\n\n/**\n * Deep merge of options objects\n *\n * Whenever a property is an object on both options objects\n * the two properties will be merged using vjs.obj.deepMerge.\n *\n * This is used for merging options for child components. We\n * want it to be easy to override individual options on a child\n * component without having to rewrite all the other default options.\n *\n *     Parent.prototype.options_ = {\n *       children: {\n *         'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n *         'childTwo': {},\n *         'childThree': {}\n *       }\n *     }\n *     newOptions = {\n *       children: {\n *         'childOne': { 'foo': 'baz', 'abc': '123' }\n *         'childTwo': null,\n *         'childFour': {}\n *       }\n *     }\n *\n *     this.options(newOptions);\n *\n * RESULT\n *\n *     {\n *       children: {\n *         'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n *         'childTwo': null, // Disabled. Won't be initialized.\n *         'childThree': {},\n *         'childFour': {}\n *       }\n *     }\n *\n * @param  {Object} obj Object whose values will be overwritten\n * @return {Object}     NEW merged object. Does not return obj1.\n */\nvjs.Component.prototype.options = function(obj){\n  if (obj === undefined) return this.options_;\n\n  return this.options_ = vjs.obj.deepMerge(this.options_, obj);\n};\n\n/**\n * The DOM element for the component\n *\n * @type {Element}\n * @private\n */\nvjs.Component.prototype.el_;\n\n/**\n * Create the component's DOM element\n *\n * @param  {String=} tagName  Element's node type. e.g. 'div'\n * @param  {Object=} attributes An object of element attributes that should be set on the element\n * @return {Element}\n */\nvjs.Component.prototype.createEl = function(tagName, attributes){\n  return vjs.createEl(tagName, attributes);\n};\n\n/**\n * Get the component's DOM element\n *\n *     var domEl = myComponent.el();\n *\n * @return {Element}\n */\nvjs.Component.prototype.el = function(){\n  return this.el_;\n};\n\n/**\n * An optional element where, if defined, children will be inserted instead of\n * directly in `el_`\n *\n * @type {Element}\n * @private\n */\nvjs.Component.prototype.contentEl_;\n\n/**\n * Return the component's DOM element for embedding content.\n * Will either be el_ or a new element defined in createEl.\n *\n * @return {Element}\n */\nvjs.Component.prototype.contentEl = function(){\n  return this.contentEl_ || this.el_;\n};\n\n/**\n * The ID for the component\n *\n * @type {String}\n * @private\n */\nvjs.Component.prototype.id_;\n\n/**\n * Get the component's ID\n *\n *     var id = myComponent.id();\n *\n * @return {String}\n */\nvjs.Component.prototype.id = function(){\n  return this.id_;\n};\n\n/**\n * The name for the component. Often used to reference the component.\n *\n * @type {String}\n * @private\n */\nvjs.Component.prototype.name_;\n\n/**\n * Get the component's name. The name is often used to reference the component.\n *\n *     var name = myComponent.name();\n *\n * @return {String}\n */\nvjs.Component.prototype.name = function(){\n  return this.name_;\n};\n\n/**\n * Array of child components\n *\n * @type {Array}\n * @private\n */\nvjs.Component.prototype.children_;\n\n/**\n * Get an array of all child components\n *\n *     var kids = myComponent.children();\n *\n * @return {Array} The children\n */\nvjs.Component.prototype.children = function(){\n  return this.children_;\n};\n\n/**\n * Object of child components by ID\n *\n * @type {Object}\n * @private\n */\nvjs.Component.prototype.childIndex_;\n\n/**\n * Returns a child component with the provided ID\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.getChildById = function(id){\n  return this.childIndex_[id];\n};\n\n/**\n * Object of child components by name\n *\n * @type {Object}\n * @private\n */\nvjs.Component.prototype.childNameIndex_;\n\n/**\n * Returns a child component with the provided ID\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.getChild = function(name){\n  return this.childNameIndex_[name];\n};\n\n/**\n * Adds a child component inside this component\n *\n *     myComponent.el();\n *     // -> <div class='my-component'></div>\n *     myComonent.children();\n *     // [empty array]\n *\n *     var myButton = myComponent.addChild('MyButton');\n *     // -> <div class='my-component'><div class=\"my-button\">myButton<div></div>\n *     // -> myButton === myComonent.children()[0];\n *\n * Pass in options for child constructors and options for children of the child\n *\n *    var myButton = myComponent.addChild('MyButton', {\n *      text: 'Press Me',\n *      children: {\n *        buttonChildExample: {\n *          buttonChildOption: true\n *        }\n *      }\n *    });\n *\n * @param {String|vjs.Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {vjs.Component} The child component (created by this process if a string was used)\n * @suppress {accessControls|checkRegExp|checkTypes|checkVars|const|constantProperty|deprecated|duplicate|es5Strict|fileoverviewTags|globalThis|invalidCasts|missingProperties|nonStandardJsDocs|strictModuleDepCheck|undefinedNames|undefinedVars|unknownDefines|uselessCode|visibility}\n */\nvjs.Component.prototype.addChild = function(child, options){\n  var component, componentClass, componentName, componentId;\n\n  // If string, create new component with options\n  if (typeof child === 'string') {\n\n    componentName = child;\n\n    // Make sure options is at least an empty object to protect against errors\n    options = options || {};\n\n    // Assume name of set is a lowercased name of the UI Class (PlayButton, etc.)\n    componentClass = options['componentClass'] || vjs.capitalize(componentName);\n\n    // Set name through options\n    options['name'] = componentName;\n\n    // Create a new object & element for this controls set\n    // If there's no .player_, this is a player\n    // Closure Compiler throws an 'incomplete alias' warning if we use the vjs variable directly.\n    // Every class should be exported, so this should never be a problem here.\n    component = new window['videojs'][componentClass](this.player_ || this, options);\n\n  // child is a component instance\n  } else {\n    component = child;\n  }\n\n  this.children_.push(component);\n\n  if (typeof component.id === 'function') {\n    this.childIndex_[component.id()] = component;\n  }\n\n  // If a name wasn't used to create the component, check if we can use the\n  // name function of the component\n  componentName = componentName || (component.name && component.name());\n\n  if (componentName) {\n    this.childNameIndex_[componentName] = component;\n  }\n\n  // Add the UI object's element to the container div (box)\n  // Having an element is not required\n  if (typeof component['el'] === 'function' && component['el']()) {\n    this.contentEl().appendChild(component['el']());\n  }\n\n  // Return so it can stored on parent object if desired.\n  return component;\n};\n\n/**\n * Remove a child component from this component's list of children, and the\n * child component's element from this component's element\n *\n * @param  {vjs.Component} component Component to remove\n */\nvjs.Component.prototype.removeChild = function(component){\n  if (typeof component === 'string') {\n    component = this.getChild(component);\n  }\n\n  if (!component || !this.children_) return;\n\n  var childFound = false;\n  for (var i = this.children_.length - 1; i >= 0; i--) {\n    if (this.children_[i] === component) {\n      childFound = true;\n      this.children_.splice(i,1);\n      break;\n    }\n  }\n\n  if (!childFound) return;\n\n  this.childIndex_[component.id] = null;\n  this.childNameIndex_[component.name] = null;\n\n  var compEl = component.el();\n  if (compEl && compEl.parentNode === this.contentEl()) {\n    this.contentEl().removeChild(component.el());\n  }\n};\n\n/**\n * Add and initialize default child components from options\n *\n *     // when an instance of MyComponent is created, all children in options\n *     // will be added to the instance by their name strings and options\n *     MyComponent.prototype.options_.children = {\n *       myChildComponent: {\n *         myChildOption: true\n *       }\n *     }\n */\nvjs.Component.prototype.initChildren = function(){\n  var options = this.options_;\n\n  if (options && options['children']) {\n    var self = this;\n\n    // Loop through components and add them to the player\n    vjs.obj.each(options['children'], function(name, opts){\n      // Allow for disabling default components\n      // e.g. vjs.options['children']['posterImage'] = false\n      if (opts === false) return;\n\n      // Allow waiting to add components until a specific event is called\n      var tempAdd = function(){\n        // Set property name on player. Could cause conflicts with other prop names, but it's worth making refs easy.\n        self[name] = self.addChild(name, opts);\n      };\n\n      if (opts['loadEvent']) {\n        // this.one(opts.loadEvent, tempAdd)\n      } else {\n        tempAdd();\n      }\n    });\n  }\n};\n\n/**\n * Allows sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n */\nvjs.Component.prototype.buildCSSClass = function(){\n    // Child classes can include a function that does:\n    // return 'CLASS NAME' + this._super();\n    return '';\n};\n\n/* Events\n============================================================================= */\n\n/**\n * Add an event listener to this component's element\n *\n *     var myFunc = function(){\n *       var myPlayer = this;\n *       // Do something when the event is fired\n *     };\n *\n *     myPlayer.on(\"eventName\", myFunc);\n *\n * The context will be the component.\n *\n * @param  {String}   type The event type e.g. 'click'\n * @param  {Function} fn   The event listener\n * @return {vjs.Component} self\n */\nvjs.Component.prototype.on = function(type, fn){\n  vjs.on(this.el_, type, vjs.bind(this, fn));\n  return this;\n};\n\n/**\n * Remove an event listener from the component's element\n *\n *     myComponent.off(\"eventName\", myFunc);\n *\n * @param  {String=}   type Event type. Without type it will remove all listeners.\n * @param  {Function=} fn   Event listener. Without fn it will remove all listeners for a type.\n * @return {vjs.Component}\n */\nvjs.Component.prototype.off = function(type, fn){\n  vjs.off(this.el_, type, fn);\n  return this;\n};\n\n/**\n * Add an event listener to be triggered only once and then removed\n *\n * @param  {String}   type Event type\n * @param  {Function} fn   Event listener\n * @return {vjs.Component}\n */\nvjs.Component.prototype.one = function(type, fn) {\n  vjs.one(this.el_, type, vjs.bind(this, fn));\n  return this;\n};\n\n/**\n * Trigger an event on an element\n *\n *     myComponent.trigger('eventName');\n *\n * @param  {String}       type  The event type to trigger, e.g. 'click'\n * @param  {Event|Object} event The event object to be passed to the listener\n * @return {vjs.Component}      self\n */\nvjs.Component.prototype.trigger = function(type, event){\n  vjs.trigger(this.el_, type, event);\n  return this;\n};\n\n/* Ready\n================================================================================ */\n/**\n * Is the component loaded\n * This can mean different things depending on the component.\n *\n * @private\n * @type {Boolean}\n */\nvjs.Component.prototype.isReady_;\n\n/**\n * Trigger ready as soon as initialization is finished\n *\n * Allows for delaying ready. Override on a sub class prototype.\n * If you set this.isReadyOnInitFinish_ it will affect all components.\n * Specially used when waiting for the Flash player to asynchrnously load.\n *\n * @type {Boolean}\n * @private\n */\nvjs.Component.prototype.isReadyOnInitFinish_ = true;\n\n/**\n * List of ready listeners\n *\n * @type {Array}\n * @private\n */\nvjs.Component.prototype.readyQueue_;\n\n/**\n * Bind a listener to the component's ready state\n *\n * Different from event listeners in that if the ready event has already happend\n * it will trigger the function immediately.\n *\n * @param  {Function} fn Ready listener\n * @return {vjs.Component}\n */\nvjs.Component.prototype.ready = function(fn){\n  if (fn) {\n    if (this.isReady_) {\n      fn.call(this);\n    } else {\n      if (this.readyQueue_ === undefined) {\n        this.readyQueue_ = [];\n      }\n      this.readyQueue_.push(fn);\n    }\n  }\n  return this;\n};\n\n/**\n * Trigger the ready listeners\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.triggerReady = function(){\n  this.isReady_ = true;\n\n  var readyQueue = this.readyQueue_;\n\n  if (readyQueue && readyQueue.length > 0) {\n\n    for (var i = 0, j = readyQueue.length; i < j; i++) {\n      readyQueue[i].call(this);\n    }\n\n    // Reset Ready Queue\n    this.readyQueue_ = [];\n\n    // Allow for using event listeners also, in case you want to do something everytime a source is ready.\n    this.trigger('ready');\n  }\n};\n\n/* Display\n============================================================================= */\n\n/**\n * Add a CSS class name to the component's element\n *\n * @param {String} classToAdd Classname to add\n * @return {vjs.Component}\n */\nvjs.Component.prototype.addClass = function(classToAdd){\n  vjs.addClass(this.el_, classToAdd);\n  return this;\n};\n\n/**\n * Remove a CSS class name from the component's element\n *\n * @param {String} classToRemove Classname to remove\n * @return {vjs.Component}\n */\nvjs.Component.prototype.removeClass = function(classToRemove){\n  vjs.removeClass(this.el_, classToRemove);\n  return this;\n};\n\n/**\n * Show the component element if hidden\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.show = function(){\n  this.el_.style.display = 'block';\n  return this;\n};\n\n/**\n * Hide the component element if hidden\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.hide = function(){\n  this.el_.style.display = 'none';\n  return this;\n};\n\n/**\n * Lock an item in its visible state\n * To be used with fadeIn/fadeOut.\n *\n * @return {vjs.Component}\n * @private\n */\nvjs.Component.prototype.lockShowing = function(){\n  this.addClass('vjs-lock-showing');\n  return this;\n};\n\n/**\n * Unlock an item to be hidden\n * To be used with fadeIn/fadeOut.\n *\n * @return {vjs.Component}\n * @private\n */\nvjs.Component.prototype.unlockShowing = function(){\n  this.removeClass('vjs-lock-showing');\n  return this;\n};\n\n/**\n * Disable component by making it unshowable\n */\nvjs.Component.prototype.disable = function(){\n  this.hide();\n  this.show = function(){};\n};\n\n/**\n * Set or get the width of the component (CSS values)\n *\n * Video tag width/height only work in pixels. No percents.\n * But allowing limited percents use. e.g. width() will return number+%, not computed width\n *\n * @param  {Number|String=} num   Optional width number\n * @param  {Boolean} skipListeners Skip the 'resize' event trigger\n * @return {vjs.Component} Returns 'this' if width was set\n * @return {Number|String} Returns the width if nothing was set\n */\nvjs.Component.prototype.width = function(num, skipListeners){\n  return this.dimension('width', num, skipListeners);\n};\n\n/**\n * Get or set the height of the component (CSS values)\n *\n * @param  {Number|String=} num     New component height\n * @param  {Boolean=} skipListeners Skip the resize event trigger\n * @return {vjs.Component} The component if the height was set\n * @return {Number|String} The height if it wasn't set\n */\nvjs.Component.prototype.height = function(num, skipListeners){\n  return this.dimension('height', num, skipListeners);\n};\n\n/**\n * Set both width and height at the same time\n *\n * @param  {Number|String} width\n * @param  {Number|String} height\n * @return {vjs.Component} The component\n */\nvjs.Component.prototype.dimensions = function(width, height){\n  // Skip resize listeners on width for optimization\n  return this.width(width, true).height(height);\n};\n\n/**\n * Get or set width or height\n *\n * This is the shared code for the width() and height() methods.\n * All for an integer, integer + 'px' or integer + '%';\n *\n * Known issue: Hidden elements officially have a width of 0. We're defaulting\n * to the style.width value and falling back to computedStyle which has the\n * hidden element issue. Info, but probably not an efficient fix:\n * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n *\n * @param  {String} widthOrHeight  'width' or 'height'\n * @param  {Number|String=} num     New dimension\n * @param  {Boolean=} skipListeners Skip resize event trigger\n * @return {vjs.Component} The component if a dimension was set\n * @return {Number|String} The dimension if nothing was set\n * @private\n */\nvjs.Component.prototype.dimension = function(widthOrHeight, num, skipListeners){\n  if (num !== undefined) {\n\n    // Check if using css width/height (% or px) and adjust\n    if ((''+num).indexOf('%') !== -1 || (''+num).indexOf('px') !== -1) {\n      this.el_.style[widthOrHeight] = num;\n    } else if (num === 'auto') {\n      this.el_.style[widthOrHeight] = '';\n    } else {\n      this.el_.style[widthOrHeight] = num+'px';\n    }\n\n    // skipListeners allows us to avoid triggering the resize event when setting both width and height\n    if (!skipListeners) { this.trigger('resize'); }\n\n    // Return component\n    return this;\n  }\n\n  // Not setting a value, so getting it\n  // Make sure element exists\n  if (!this.el_) return 0;\n\n  // Get dimension value from style\n  var val = this.el_.style[widthOrHeight];\n  var pxIndex = val.indexOf('px');\n  if (pxIndex !== -1) {\n    // Return the pixel value with no 'px'\n    return parseInt(val.slice(0,pxIndex), 10);\n\n  // No px so using % or no style was set, so falling back to offsetWidth/height\n  // If component has display:none, offset will return 0\n  // TODO: handle display:none and no dimension style using px\n  } else {\n\n    return parseInt(this.el_['offset'+vjs.capitalize(widthOrHeight)], 10);\n\n    // ComputedStyle version.\n    // Only difference is if the element is hidden it will return\n    // the percent value (e.g. '100%'')\n    // instead of zero like offsetWidth returns.\n    // var val = vjs.getComputedStyleValue(this.el_, widthOrHeight);\n    // var pxIndex = val.indexOf('px');\n\n    // if (pxIndex !== -1) {\n    //   return val.slice(0, pxIndex);\n    // } else {\n    //   return val;\n    // }\n  }\n};\n\n/**\n * Fired when the width and/or height of the component changes\n * @event resize\n */\nvjs.Component.prototype.onResize;\n\n/**\n * Emit 'tap' events when touch events are supported\n *\n * This is used to support toggling the controls through a tap on the video.\n *\n * We're requireing them to be enabled because otherwise every component would\n * have this extra overhead unnecessarily, on mobile devices where extra\n * overhead is especially bad.\n * @private\n */\nvjs.Component.prototype.emitTapEvents = function(){\n  var touchStart, touchTime, couldBeTap, noTap;\n\n  // Track the start time so we can determine how long the touch lasted\n  touchStart = 0;\n\n  this.on('touchstart', function(event) {\n    // Record start time so we can detect a tap vs. \"touch and hold\"\n    touchStart = new Date().getTime();\n    // Reset couldBeTap tracking\n    couldBeTap = true;\n  });\n\n  noTap = function(){\n    couldBeTap = false;\n  };\n  // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n  this.on('touchmove', noTap);\n  this.on('touchleave', noTap);\n  this.on('touchcancel', noTap);\n\n  // When the touch ends, measure how long it took and trigger the appropriate\n  // event\n  this.on('touchend', function() {\n    // Proceed only if the touchmove/leave/cancel event didn't happen\n    if (couldBeTap === true) {\n      // Measure how long the touch lasted\n      touchTime = new Date().getTime() - touchStart;\n      // The touch needs to be quick in order to consider it a tap\n      if (touchTime < 250) {\n        this.trigger('tap');\n        // It may be good to copy the touchend event object and change the\n        // type to tap, if the other event properties aren't exact after\n        // vjs.fixEvent runs (e.g. event.target)\n      }\n    }\n  });\n};\n/* Button - Base class for all buttons\n================================================================================ */\n/**\n * Base class for all buttons\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.Button = vjs.Component.extend({\n  /**\n   * @constructor\n   * @inheritDoc\n   */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    var touchstart = false;\n    this.on('touchstart', function(event) {\n      // Stop click and other mouse events from triggering also\n      event.preventDefault();\n      touchstart = true;\n    });\n    this.on('touchmove', function() {\n      touchstart = false;\n    });\n    var self = this;\n    this.on('touchend', function(event) {\n      if (touchstart) {\n        self.onClick(event);\n      }\n      event.preventDefault();\n    });\n\n    this.on('click', this.onClick);\n    this.on('focus', this.onFocus);\n    this.on('blur', this.onBlur);\n  }\n});\n\nvjs.Button.prototype.createEl = function(type, props){\n  // Add standard Aria and Tabindex info\n  props = vjs.obj.merge({\n    className: this.buildCSSClass(),\n    innerHTML: '<div class=\"vjs-control-content\"><span class=\"vjs-control-text\">' + (this.buttonText || 'Need Text') + '</span></div>',\n    role: 'button',\n    'aria-live': 'polite', // let the screen reader user know that the text of the button may change\n    tabIndex: 0\n  }, props);\n\n  return vjs.Component.prototype.createEl.call(this, type, props);\n};\n\nvjs.Button.prototype.buildCSSClass = function(){\n  // TODO: Change vjs-control to vjs-button?\n  return 'vjs-control ' + vjs.Component.prototype.buildCSSClass.call(this);\n};\n\n  // Click - Override with specific functionality for button\nvjs.Button.prototype.onClick = function(){};\n\n  // Focus - Add keyboard functionality to element\nvjs.Button.prototype.onFocus = function(){\n  vjs.on(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n\n  // KeyPress (document level) - Trigger click when keys are pressed\nvjs.Button.prototype.onKeyPress = function(event){\n  // Check for space bar (32) or enter (13) keys\n  if (event.which == 32 || event.which == 13) {\n    event.preventDefault();\n    this.onClick();\n  }\n};\n\n// Blur - Remove keyboard triggers\nvjs.Button.prototype.onBlur = function(){\n  vjs.off(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n/* Slider\n================================================================================ */\n/**\n * The base functionality for sliders like the volume bar and seek bar\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.Slider = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    // Set property names to bar and handle to match with the child Slider class is looking for\n    this.bar = this.getChild(this.options_['barName']);\n    this.handle = this.getChild(this.options_['handleName']);\n\n    player.on(this.playerEvent, vjs.bind(this, this.update));\n\n    this.on('mousedown', this.onMouseDown);\n    this.on('touchstart', this.onMouseDown);\n    this.on('focus', this.onFocus);\n    this.on('blur', this.onBlur);\n    this.on('click', this.onClick);\n\n    this.player_.on('controlsvisible', vjs.bind(this, this.update));\n\n    // This is actually to fix the volume handle position. http://twitter.com/#!/gerritvanaaken/status/159046254519787520\n    // this.player_.one('timeupdate', vjs.bind(this, this.update));\n\n    player.ready(vjs.bind(this, this.update));\n\n    this.boundEvents = {};\n  }\n});\n\nvjs.Slider.prototype.createEl = function(type, props) {\n  props = props || {};\n  // Add the slider element class to all sub classes\n  props.className = props.className + ' vjs-slider';\n  props = vjs.obj.merge({\n    role: 'slider',\n    'aria-valuenow': 0,\n    'aria-valuemin': 0,\n    'aria-valuemax': 100,\n    tabIndex: 0\n  }, props);\n\n  return vjs.Component.prototype.createEl.call(this, type, props);\n};\n\nvjs.Slider.prototype.onMouseDown = function(event){\n  event.preventDefault();\n  vjs.blockTextSelection();\n\n  this.boundEvents.move = vjs.bind(this, this.onMouseMove);\n  this.boundEvents.end = vjs.bind(this, this.onMouseUp);\n\n  vjs.on(document, 'mousemove', this.boundEvents.move);\n  vjs.on(document, 'mouseup', this.boundEvents.end);\n  vjs.on(document, 'touchmove', this.boundEvents.move);\n  vjs.on(document, 'touchend', this.boundEvents.end);\n\n  this.onMouseMove(event);\n};\n\nvjs.Slider.prototype.onMouseUp = function() {\n  vjs.unblockTextSelection();\n  vjs.off(document, 'mousemove', this.boundEvents.move, false);\n  vjs.off(document, 'mouseup', this.boundEvents.end, false);\n  vjs.off(document, 'touchmove', this.boundEvents.move, false);\n  vjs.off(document, 'touchend', this.boundEvents.end, false);\n\n  this.update();\n};\n\nvjs.Slider.prototype.update = function(){\n  // In VolumeBar init we have a setTimeout for update that pops and update to the end of the\n  // execution stack. The player is destroyed before then update will cause an error\n  if (!this.el_) return;\n\n  // If scrubbing, we could use a cached value to make the handle keep up with the user's mouse.\n  // On HTML5 browsers scrubbing is really smooth, but some flash players are slow, so we might want to utilize this later.\n  // var progress =  (this.player_.scrubbing) ? this.player_.getCache().currentTime / this.player_.duration() : this.player_.currentTime() / this.player_.duration();\n\n  var barProgress,\n      progress = this.getPercent(),\n      handle = this.handle,\n      bar = this.bar;\n\n  // Protect against no duration and other division issues\n  if (isNaN(progress)) { progress = 0; }\n\n  barProgress = progress;\n\n  // If there is a handle, we need to account for the handle in our calculation for progress bar\n  // so that it doesn't fall short of or extend past the handle.\n  if (handle) {\n\n    var box = this.el_,\n        boxWidth = box.offsetWidth,\n\n        handleWidth = handle.el().offsetWidth,\n\n        // The width of the handle in percent of the containing box\n        // In IE, widths may not be ready yet causing NaN\n        handlePercent = (handleWidth) ? handleWidth / boxWidth : 0,\n\n        // Get the adjusted size of the box, considering that the handle's center never touches the left or right side.\n        // There is a margin of half the handle's width on both sides.\n        boxAdjustedPercent = 1 - handlePercent,\n\n        // Adjust the progress that we'll use to set widths to the new adjusted box width\n        adjustedProgress = progress * boxAdjustedPercent;\n\n    // The bar does reach the left side, so we need to account for this in the bar's width\n    barProgress = adjustedProgress + (handlePercent / 2);\n\n    // Move the handle from the left based on the adjected progress\n    handle.el().style.left = vjs.round(adjustedProgress * 100, 2) + '%';\n  }\n\n  // Set the new bar width\n  bar.el().style.width = vjs.round(barProgress * 100, 2) + '%';\n};\n\nvjs.Slider.prototype.calculateDistance = function(event){\n  var el, box, boxX, boxY, boxW, boxH, handle, pageX, pageY;\n\n  el = this.el_;\n  box = vjs.findPosition(el);\n  boxW = boxH = el.offsetWidth;\n  handle = this.handle;\n\n  if (this.options_.vertical) {\n    boxY = box.top;\n\n    if (event.changedTouches) {\n      pageY = event.changedTouches[0].pageY;\n    } else {\n      pageY = event.pageY;\n    }\n\n    if (handle) {\n      var handleH = handle.el().offsetHeight;\n      // Adjusted X and Width, so handle doesn't go outside the bar\n      boxY = boxY + (handleH / 2);\n      boxH = boxH - handleH;\n    }\n\n    // Percent that the click is through the adjusted area\n    return Math.max(0, Math.min(1, ((boxY - pageY) + boxH) / boxH));\n\n  } else {\n    boxX = box.left;\n\n    if (event.changedTouches) {\n      pageX = event.changedTouches[0].pageX;\n    } else {\n      pageX = event.pageX;\n    }\n\n    if (handle) {\n      var handleW = handle.el().offsetWidth;\n\n      // Adjusted X and Width, so handle doesn't go outside the bar\n      boxX = boxX + (handleW / 2);\n      boxW = boxW - handleW;\n    }\n\n    // Percent that the click is through the adjusted area\n    return Math.max(0, Math.min(1, (pageX - boxX) / boxW));\n  }\n};\n\nvjs.Slider.prototype.onFocus = function(){\n  vjs.on(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n\nvjs.Slider.prototype.onKeyPress = function(event){\n  if (event.which == 37) { // Left Arrow\n    event.preventDefault();\n    this.stepBack();\n  } else if (event.which == 39) { // Right Arrow\n    event.preventDefault();\n    this.stepForward();\n  }\n};\n\nvjs.Slider.prototype.onBlur = function(){\n  vjs.off(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n\n/**\n * Listener for click events on slider, used to prevent clicks\n *   from bubbling up to parent elements like button menus.\n * @param  {Object} event Event object\n */\nvjs.Slider.prototype.onClick = function(event){\n  event.stopImmediatePropagation();\n  event.preventDefault();\n};\n\n/**\n * SeekBar Behavior includes play progress bar, and seek handle\n * Needed so it can determine seek position based on handle position/size\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.SliderHandle = vjs.Component.extend();\n\n/**\n * Default value of the slider\n *\n * @type {Number}\n * @private\n */\nvjs.SliderHandle.prototype.defaultValue = 0;\n\n/** @inheritDoc */\nvjs.SliderHandle.prototype.createEl = function(type, props) {\n  props = props || {};\n  // Add the slider element class to all sub classes\n  props.className = props.className + ' vjs-slider-handle';\n  props = vjs.obj.merge({\n    innerHTML: '<span class=\"vjs-control-text\">'+this.defaultValue+'</span>'\n  }, props);\n\n  return vjs.Component.prototype.createEl.call(this, 'div', props);\n};\n/* Menu\n================================================================================ */\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.Menu = vjs.Component.extend();\n\n/**\n * Add a menu item to the menu\n * @param {Object|String} component Component or component type to add\n */\nvjs.Menu.prototype.addItem = function(component){\n  this.addChild(component);\n  component.on('click', vjs.bind(this, function(){\n    this.unlockShowing();\n  }));\n};\n\n/** @inheritDoc */\nvjs.Menu.prototype.createEl = function(){\n  var contentElType = this.options().contentElType || 'ul';\n  this.contentEl_ = vjs.createEl(contentElType, {\n    className: 'vjs-menu-content'\n  });\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    append: this.contentEl_,\n    className: 'vjs-menu'\n  });\n  el.appendChild(this.contentEl_);\n\n  // Prevent clicks from bubbling up. Needed for Menu Buttons,\n  // where a click on the parent is significant\n  vjs.on(el, 'click', function(event){\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  });\n\n  return el;\n};\n\n/**\n * The component for a menu item. `<li>`\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.MenuItem = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n    this.selected(options['selected']);\n  }\n});\n\n/** @inheritDoc */\nvjs.MenuItem.prototype.createEl = function(type, props){\n  return vjs.Button.prototype.createEl.call(this, 'li', vjs.obj.merge({\n    className: 'vjs-menu-item',\n    innerHTML: this.options_['label']\n  }, props));\n};\n\n/**\n * Handle a click on the menu item, and set it to selected\n */\nvjs.MenuItem.prototype.onClick = function(){\n  this.selected(true);\n};\n\n/**\n * Set this menu item as selected or not\n * @param  {Boolean} selected\n */\nvjs.MenuItem.prototype.selected = function(selected){\n  if (selected) {\n    this.addClass('vjs-selected');\n    this.el_.setAttribute('aria-selected',true);\n  } else {\n    this.removeClass('vjs-selected');\n    this.el_.setAttribute('aria-selected',false);\n  }\n};\n\n\n/**\n * A button class with a popup menu\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.MenuButton = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    this.menu = this.createMenu();\n\n    // Add list to element\n    this.addChild(this.menu);\n\n    // Automatically hide empty menu buttons\n    if (this.items && this.items.length === 0) {\n      this.hide();\n    }\n\n    this.on('keyup', this.onKeyPress);\n    this.el_.setAttribute('aria-haspopup', true);\n    this.el_.setAttribute('role', 'button');\n  }\n});\n\n/**\n * Track the state of the menu button\n * @type {Boolean}\n * @private\n */\nvjs.MenuButton.prototype.buttonPressed_ = false;\n\nvjs.MenuButton.prototype.createMenu = function(){\n  var menu = new vjs.Menu(this.player_);\n\n  // Add a title list item to the top\n  if (this.options().title) {\n    menu.el().appendChild(vjs.createEl('li', {\n      className: 'vjs-menu-title',\n      innerHTML: vjs.capitalize(this.kind_),\n      tabindex: -1\n    }));\n  }\n\n  this.items = this['createItems']();\n\n  if (this.items) {\n    // Add menu items to the menu\n    for (var i = 0; i < this.items.length; i++) {\n      menu.addItem(this.items[i]);\n    }\n  }\n\n  return menu;\n};\n\n/**\n * Create the list of menu items. Specific to each subclass.\n */\nvjs.MenuButton.prototype.createItems = function(){};\n\n/** @inheritDoc */\nvjs.MenuButton.prototype.buildCSSClass = function(){\n  return this.className + ' vjs-menu-button ' + vjs.Button.prototype.buildCSSClass.call(this);\n};\n\n// Focus - Add keyboard functionality to element\n// This function is not needed anymore. Instead, the keyboard functionality is handled by\n// treating the button as triggering a submenu. When the button is pressed, the submenu\n// appears. Pressing the button again makes the submenu disappear.\nvjs.MenuButton.prototype.onFocus = function(){};\n// Can't turn off list display that we turned on with focus, because list would go away.\nvjs.MenuButton.prototype.onBlur = function(){};\n\nvjs.MenuButton.prototype.onClick = function(){\n  // When you click the button it adds focus, which will show the menu indefinitely.\n  // So we'll remove focus when the mouse leaves the button.\n  // Focus is needed for tab navigation.\n  this.one('mouseout', vjs.bind(this, function(){\n    this.menu.unlockShowing();\n    this.el_.blur();\n  }));\n  if (this.buttonPressed_){\n    this.unpressButton();\n  } else {\n    this.pressButton();\n  }\n};\n\nvjs.MenuButton.prototype.onKeyPress = function(event){\n  event.preventDefault();\n\n  // Check for space bar (32) or enter (13) keys\n  if (event.which == 32 || event.which == 13) {\n    if (this.buttonPressed_){\n      this.unpressButton();\n    } else {\n      this.pressButton();\n    }\n  // Check for escape (27) key\n  } else if (event.which == 27){\n    if (this.buttonPressed_){\n      this.unpressButton();\n    }\n  }\n};\n\nvjs.MenuButton.prototype.pressButton = function(){\n  this.buttonPressed_ = true;\n  this.menu.lockShowing();\n  this.el_.setAttribute('aria-pressed', true);\n  if (this.items && this.items.length > 0) {\n    this.items[0].el().focus(); // set the focus to the title of the submenu\n  }\n};\n\nvjs.MenuButton.prototype.unpressButton = function(){\n  this.buttonPressed_ = false;\n  this.menu.unlockShowing();\n  this.el_.setAttribute('aria-pressed', false);\n};\n\n/**\n * An instance of the `vjs.Player` class is created when any of the Video.js setup methods are used to initialize a video.\n *\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n *\n * In the follwing example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n *\n * ```html\n * <video id=\"example_video_1\" data-setup='{}' controls>\n *   <source src=\"my-source.mp4\" type=\"video/mp4\">\n * </video>\n * ```\n *\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @class\n * @extends vjs.Component\n */\nvjs.Player = vjs.Component.extend({\n\n  /**\n   * player's constructor function\n   *\n   * @constructs\n   * @method init\n   * @param {Element} tag        The original video tag used for configuring options\n   * @param {Object=} options    Player options\n   * @param {Function=} ready    Ready callback function\n   */\n  init: function(tag, options, ready){\n    this.tag = tag; // Store the original tag used to set options\n\n    // Set Options\n    // The options argument overrides options set in the video tag\n    // which overrides globally set options.\n    // This latter part coincides with the load order\n    // (tag must exist before Player)\n    options = vjs.obj.merge(this.getTagSettings(tag), options);\n\n    // Cache for video property values.\n    this.cache_ = {};\n\n    // Set poster\n    this.poster_ = options['poster'];\n    // Set controls\n    this.controls_ = options['controls'];\n    // Original tag settings stored in options\n    // now remove immediately so native controls don't flash.\n    // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n    tag.controls = false;\n\n    // Run base component initializing with new options.\n    // Builds the element through createEl()\n    // Inits and embeds any child components in opts\n    vjs.Component.call(this, this, options, ready);\n\n    // Update controls className. Can't do this when the controls are initially\n    // set because the element doesn't exist yet.\n    if (this.controls()) {\n      this.addClass('vjs-controls-enabled');\n    } else {\n      this.addClass('vjs-controls-disabled');\n    }\n\n    // TODO: Make this smarter. Toggle user state between touching/mousing\n    // using events, since devices can have both touch and mouse events.\n    // if (vjs.TOUCH_ENABLED) {\n    //   this.addClass('vjs-touch-enabled');\n    // }\n\n    // Firstplay event implimentation. Not sold on the event yet.\n    // Could probably just check currentTime==0?\n    this.one('play', function(e){\n      var fpEvent = { type: 'firstplay', target: this.el_ };\n      // Using vjs.trigger so we can check if default was prevented\n      var keepGoing = vjs.trigger(this.el_, fpEvent);\n\n      if (!keepGoing) {\n        e.preventDefault();\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n      }\n    });\n\n    this.on('ended', this.onEnded);\n    this.on('play', this.onPlay);\n    this.on('firstplay', this.onFirstPlay);\n    this.on('pause', this.onPause);\n    this.on('progress', this.onProgress);\n    this.on('durationchange', this.onDurationChange);\n    this.on('error', this.onError);\n    this.on('fullscreenchange', this.onFullscreenChange);\n\n    // Make player easily findable by ID\n    vjs.players[this.id_] = this;\n\n    if (options['plugins']) {\n      vjs.obj.each(options['plugins'], function(key, val){\n        this[key](val);\n      }, this);\n    }\n\n    this.listenForUserActivity();\n  }\n});\n\n/**\n * Player instance options, surfaced using vjs.options\n * vjs.options = vjs.Player.prototype.options_\n * Make changes in vjs.options, not here.\n * All options should use string keys so they avoid\n * renaming by closure compiler\n * @type {Object}\n * @private\n */\nvjs.Player.prototype.options_ = vjs.options;\n\n/**\n * Destroys the video player and does any necessary cleanup\n *\n *     myPlayer.dispose();\n *\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n */\nvjs.Player.prototype.dispose = function(){\n  this.trigger('dispose');\n  // prevent dispose from being called twice\n  this.off('dispose');\n\n  // Kill reference to this player\n  vjs.players[this.id_] = null;\n  if (this.tag && this.tag['player']) { this.tag['player'] = null; }\n  if (this.el_ && this.el_['player']) { this.el_['player'] = null; }\n\n  // Ensure that tracking progress and time progress will stop and plater deleted\n  this.stopTrackingProgress();\n  this.stopTrackingCurrentTime();\n\n  if (this.tech) { this.tech.dispose(); }\n\n  // Component dispose\n  vjs.Component.prototype.dispose.call(this);\n};\n\nvjs.Player.prototype.getTagSettings = function(tag){\n  var options = {\n    'sources': [],\n    'tracks': []\n  };\n\n  vjs.obj.merge(options, vjs.getAttributeValues(tag));\n\n  // Get tag children settings\n  if (tag.hasChildNodes()) {\n    var children, child, childName, i, j;\n\n    children = tag.childNodes;\n\n    for (i=0,j=children.length; i<j; i++) {\n      child = children[i];\n      // Change case needed: http://ejohn.org/blog/nodename-case-sensitivity/\n      childName = child.nodeName.toLowerCase();\n      if (childName === 'source') {\n        options['sources'].push(vjs.getAttributeValues(child));\n      } else if (childName === 'track') {\n        options['tracks'].push(vjs.getAttributeValues(child));\n      }\n    }\n  }\n\n  return options;\n};\n\nvjs.Player.prototype.createEl = function(){\n  var el = this.el_ = vjs.Component.prototype.createEl.call(this, 'div');\n  var tag = this.tag;\n\n  // Remove width/height attrs from tag so CSS can make it 100% width/height\n  tag.removeAttribute('width');\n  tag.removeAttribute('height');\n  // Empty video tag tracks so the built-in player doesn't use them also.\n  // This may not be fast enough to stop HTML5 browsers from reading the tags\n  // so we'll need to turn off any default tracks if we're manually doing\n  // captions and subtitles. videoElement.textTracks\n  if (tag.hasChildNodes()) {\n    var nodes, nodesLength, i, node, nodeName, removeNodes;\n\n    nodes = tag.childNodes;\n    nodesLength = nodes.length;\n    removeNodes = [];\n\n    while (nodesLength--) {\n      node = nodes[nodesLength];\n      nodeName = node.nodeName.toLowerCase();\n      if (nodeName === 'track') {\n        removeNodes.push(node);\n      }\n    }\n\n    for (i=0; i<removeNodes.length; i++) {\n      tag.removeChild(removeNodes[i]);\n    }\n  }\n\n  // Make sure tag ID exists\n  tag.id = tag.id || 'vjs_video_' + vjs.guid++;\n\n  // Give video tag ID and class to player div\n  // ID will now reference player box, not the video tag\n  el.id = tag.id;\n  el.className = tag.className;\n\n  // Update tag id/class for use as HTML5 playback tech\n  // Might think we should do this after embedding in container so .vjs-tech class\n  // doesn't flash 100% width/height, but class only applies with .video-js parent\n  tag.id += '_html5_api';\n  tag.className = 'vjs-tech';\n\n  // Make player findable on elements\n  tag['player'] = el['player'] = this;\n  // Default state of video is paused\n  this.addClass('vjs-paused');\n\n  // Make box use width/height of tag, or rely on default implementation\n  // Enforce with CSS since width/height attrs don't work on divs\n  this.width(this.options_['width'], true); // (true) Skip resize listener on load\n  this.height(this.options_['height'], true);\n\n  // Wrap video tag in div (el/box) container\n  if (tag.parentNode) {\n    tag.parentNode.insertBefore(el, tag);\n  }\n  vjs.insertFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n\n  return el;\n};\n\n// /* Media Technology (tech)\n// ================================================================================ */\n// Load/Create an instance of playback technlogy including element and API methods\n// And append playback element in player div.\nvjs.Player.prototype.loadTech = function(techName, source){\n\n  // Pause and remove current playback technology\n  if (this.tech) {\n    this.unloadTech();\n\n  // if this is the first time loading, HTML5 tag will exist but won't be initialized\n  // so we need to remove it if we're not loading HTML5\n  } else if (techName !== 'Html5' && this.tag) {\n    vjs.Html5.disposeMediaElement(this.tag);\n    this.tag = null;\n  }\n\n  this.techName = techName;\n\n  // Turn off API access because we're loading a new tech that might load asynchronously\n  this.isReady_ = false;\n\n  var techReady = function(){\n    this.player_.triggerReady();\n\n    // Manually track progress in cases where the browser/flash player doesn't report it.\n    if (!this.features['progressEvents']) {\n      this.player_.manualProgressOn();\n    }\n\n    // Manually track timeudpates in cases where the browser/flash player doesn't report it.\n    if (!this.features['timeupdateEvents']) {\n      this.player_.manualTimeUpdatesOn();\n    }\n  };\n\n  // Grab tech-specific options from player options and add source and parent element to use.\n  var techOptions = vjs.obj.merge({ 'source': source, 'parentEl': this.el_ }, this.options_[techName.toLowerCase()]);\n\n  if (source) {\n    if (source.src == this.cache_.src && this.cache_.currentTime > 0) {\n      techOptions['startTime'] = this.cache_.currentTime;\n    }\n\n    this.cache_.src = source.src;\n  }\n\n  // Initialize tech instance\n  this.tech = new window['videojs'][techName](this, techOptions);\n\n  this.tech.ready(techReady);\n};\n\nvjs.Player.prototype.unloadTech = function(){\n  this.isReady_ = false;\n  this.tech.dispose();\n\n  // Turn off any manual progress or timeupdate tracking\n  if (this.manualProgress) { this.manualProgressOff(); }\n\n  if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }\n\n  this.tech = false;\n};\n\n// There's many issues around changing the size of a Flash (or other plugin) object.\n// First is a plugin reload issue in Firefox that has been around for 11 years: https://bugzilla.mozilla.org/show_bug.cgi?id=90268\n// Then with the new fullscreen API, Mozilla and webkit browsers will reload the flash object after going to fullscreen.\n// To get around this, we're unloading the tech, caching source and currentTime values, and reloading the tech once the plugin is resized.\n// reloadTech: function(betweenFn){\n//   vjs.log('unloadingTech')\n//   this.unloadTech();\n//   vjs.log('unloadedTech')\n//   if (betweenFn) { betweenFn.call(); }\n//   vjs.log('LoadingTech')\n//   this.loadTech(this.techName, { src: this.cache_.src })\n//   vjs.log('loadedTech')\n// },\n\n/* Fallbacks for unsupported event types\n================================================================================ */\n// Manually trigger progress events based on changes to the buffered amount\n// Many flash players and older HTML5 browsers don't send progress or progress-like events\nvjs.Player.prototype.manualProgressOn = function(){\n  this.manualProgress = true;\n\n  // Trigger progress watching when a source begins loading\n  this.trackProgress();\n\n  // Watch for a native progress event call on the tech element\n  // In HTML5, some older versions don't support the progress event\n  // So we're assuming they don't, and turning off manual progress if they do.\n  // As opposed to doing user agent detection\n  this.tech.one('progress', function(){\n\n    // Update known progress support for this playback technology\n    this.features['progressEvents'] = true;\n\n    // Turn off manual progress tracking\n    this.player_.manualProgressOff();\n  });\n};\n\nvjs.Player.prototype.manualProgressOff = function(){\n  this.manualProgress = false;\n  this.stopTrackingProgress();\n};\n\nvjs.Player.prototype.trackProgress = function(){\n\n  this.progressInterval = setInterval(vjs.bind(this, function(){\n    // Don't trigger unless buffered amount is greater than last time\n    // log(this.cache_.bufferEnd, this.buffered().end(0), this.duration())\n    /* TODO: update for multiple buffered regions */\n    if (this.cache_.bufferEnd < this.buffered().end(0)) {\n      this.trigger('progress');\n    } else if (this.bufferedPercent() == 1) {\n      this.stopTrackingProgress();\n      this.trigger('progress'); // Last update\n    }\n  }), 500);\n};\nvjs.Player.prototype.stopTrackingProgress = function(){ clearInterval(this.progressInterval); };\n\n/*! Time Tracking -------------------------------------------------------------- */\nvjs.Player.prototype.manualTimeUpdatesOn = function(){\n  this.manualTimeUpdates = true;\n\n  this.on('play', this.trackCurrentTime);\n  this.on('pause', this.stopTrackingCurrentTime);\n  // timeupdate is also called by .currentTime whenever current time is set\n\n  // Watch for native timeupdate event\n  this.tech.one('timeupdate', function(){\n    // Update known progress support for this playback technology\n    this.features['timeupdateEvents'] = true;\n    // Turn off manual progress tracking\n    this.player_.manualTimeUpdatesOff();\n  });\n};\n\nvjs.Player.prototype.manualTimeUpdatesOff = function(){\n  this.manualTimeUpdates = false;\n  this.stopTrackingCurrentTime();\n  this.off('play', this.trackCurrentTime);\n  this.off('pause', this.stopTrackingCurrentTime);\n};\n\nvjs.Player.prototype.trackCurrentTime = function(){\n  if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }\n  this.currentTimeInterval = setInterval(vjs.bind(this, function(){\n    this.trigger('timeupdate');\n  }), 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n};\n\n// Turn off play progress tracking (when paused or dragging)\nvjs.Player.prototype.stopTrackingCurrentTime = function(){ clearInterval(this.currentTimeInterval); };\n\n// /* Player event handlers (how the player reacts to certain events)\n// ================================================================================ */\n\n/**\n * Fired when the user agent begins looking for media data\n * @event loadstart\n */\nvjs.Player.prototype.onLoadStart;\n\n/**\n * Fired when the player has initial duration and dimension information\n * @event loadedmetadata\n */\nvjs.Player.prototype.onLoadedMetaData;\n\n/**\n * Fired when the player has downloaded data at the current playback position\n * @event loadeddata\n */\nvjs.Player.prototype.onLoadedData;\n\n/**\n * Fired when the player has finished downloading the source data\n * @event loadedalldata\n */\nvjs.Player.prototype.onLoadedAllData;\n\n/**\n * Fired whenever the media begins or resumes playback\n * @event play\n */\nvjs.Player.prototype.onPlay = function(){\n  vjs.removeClass(this.el_, 'vjs-paused');\n  vjs.addClass(this.el_, 'vjs-playing');\n};\n\n/**\n * Fired the first time a video is played\n *\n * Not part of the HLS spec, and we're not sure if this is the best\n * implementation yet, so use sparingly. If you don't have a reason to\n * prevent playback, use `myPlayer.one('play');` instead.\n *\n * @event firstplay\n */\nvjs.Player.prototype.onFirstPlay = function(){\n    //If the first starttime attribute is specified\n    //then we will start at the given offset in seconds\n    if(this.options_['starttime']){\n      this.currentTime(this.options_['starttime']);\n    }\n\n    this.addClass('vjs-has-started');\n};\n\n/**\n * Fired whenever the media has been paused\n * @event pause\n */\nvjs.Player.prototype.onPause = function(){\n  vjs.removeClass(this.el_, 'vjs-playing');\n  vjs.addClass(this.el_, 'vjs-paused');\n};\n\n/**\n * Fired when the current playback position has changed\n *\n * During playback this is fired every 15-250 milliseconds, depnding on the\n * playback technology in use.\n * @event timeupdate\n */\nvjs.Player.prototype.onTimeUpdate;\n\n/**\n * Fired while the user agent is downloading media data\n * @event progress\n */\nvjs.Player.prototype.onProgress = function(){\n  // Add custom event for when source is finished downloading.\n  if (this.bufferedPercent() == 1) {\n    this.trigger('loadedalldata');\n  }\n};\n\n/**\n * Fired when the end of the media resource is reached (currentTime == duration)\n * @event ended\n */\nvjs.Player.prototype.onEnded = function(){\n  if (this.options_['loop']) {\n    this.currentTime(0);\n    this.play();\n  }\n};\n\n/**\n * Fired when the duration of the media resource is first known or changed\n * @event durationchange\n */\nvjs.Player.prototype.onDurationChange = function(){\n  // Allows for cacheing value instead of asking player each time.\n  this.duration(this.techGet('duration'));\n};\n\n/**\n * Fired when the volume changes\n * @event volumechange\n */\nvjs.Player.prototype.onVolumeChange;\n\n/**\n * Fired when the player switches in or out of fullscreen mode\n * @event fullscreenchange\n */\nvjs.Player.prototype.onFullscreenChange = function() {\n  if (this.isFullScreen) {\n    this.addClass('vjs-fullscreen');\n  } else {\n    this.removeClass('vjs-fullscreen');\n  }\n};\n\n/**\n * Fired when there is an error in playback\n * @event error\n */\nvjs.Player.prototype.onError = function(e) {\n  vjs.log('Video Error', e);\n};\n\n// /* Player API\n// ================================================================================ */\n\n/**\n * Object for cached values.\n * @private\n */\nvjs.Player.prototype.cache_;\n\nvjs.Player.prototype.getCache = function(){\n  return this.cache_;\n};\n\n// Pass values to the playback tech\nvjs.Player.prototype.techCall = function(method, arg){\n  // If it's not ready yet, call method when it is\n  if (this.tech && !this.tech.isReady_) {\n    this.tech.ready(function(){\n      this[method](arg);\n    });\n\n  // Otherwise call method now\n  } else {\n    try {\n      this.tech[method](arg);\n    } catch(e) {\n      vjs.log(e);\n      throw e;\n    }\n  }\n};\n\n// Get calls can't wait for the tech, and sometimes don't need to.\nvjs.Player.prototype.techGet = function(method){\n\n  if (this.tech && this.tech.isReady_) {\n\n    // Flash likes to die and reload when you hide or reposition it.\n    // In these cases the object methods go away and we get errors.\n    // When that happens we'll catch the errors and inform tech that it's not ready any more.\n    try {\n      return this.tech[method]();\n    } catch(e) {\n      // When building additional tech libs, an expected method may not be defined yet\n      if (this.tech[method] === undefined) {\n        vjs.log('Video.js: ' + method + ' method not defined for '+this.techName+' playback technology.', e);\n      } else {\n        // When a method isn't available on the object it throws a TypeError\n        if (e.name == 'TypeError') {\n          vjs.log('Video.js: ' + method + ' unavailable on '+this.techName+' playback technology element.', e);\n          this.tech.isReady_ = false;\n        } else {\n          vjs.log(e);\n        }\n      }\n      throw e;\n    }\n  }\n\n  return;\n};\n\n/**\n * start media playback\n *\n *     myPlayer.play();\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.play = function(){\n  this.techCall('play');\n  return this;\n};\n\n/**\n * Pause the video playback\n *\n *     myPlayer.pause();\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.pause = function(){\n  this.techCall('pause');\n  return this;\n};\n\n/**\n * Check if the player is paused\n *\n *     var isPaused = myPlayer.paused();\n *     var isPlaying = !myPlayer.paused();\n *\n * @return {Boolean} false if the media is currently playing, or true otherwise\n */\nvjs.Player.prototype.paused = function(){\n  // The initial state of paused should be true (in Safari it's actually false)\n  return (this.techGet('paused') === false) ? false : true;\n};\n\n/**\n * Get or set the current time (in seconds)\n *\n *     // get\n *     var whereYouAt = myPlayer.currentTime();\n *\n *     // set\n *     myPlayer.currentTime(120); // 2 minutes into the video\n *\n * @param  {Number|String=} seconds The time to seek to\n * @return {Number}        The time in seconds, when not setting\n * @return {vjs.Player}    self, when the current time is set\n */\nvjs.Player.prototype.currentTime = function(seconds){\n  if (seconds !== undefined) {\n\n    // cache the last set value for smoother scrubbing\n    this.cache_.lastSetCurrentTime = seconds;\n\n    this.techCall('setCurrentTime', seconds);\n\n    // improve the accuracy of manual timeupdates\n    if (this.manualTimeUpdates) { this.trigger('timeupdate'); }\n\n    return this;\n  }\n\n  // cache last currentTime and return\n  // default to 0 seconds\n  return this.cache_.currentTime = (this.techGet('currentTime') || 0);\n};\n\n/**\n * Get the length in time of the video in seconds\n *\n *     var lengthOfVideo = myPlayer.duration();\n *\n * **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @return {Number} The duration of the video in seconds\n */\nvjs.Player.prototype.duration = function(seconds){\n  if (seconds !== undefined) {\n\n    // cache the last set value for optimiized scrubbing (esp. Flash)\n    this.cache_.duration = parseFloat(seconds);\n\n    return this;\n  }\n\n  if (this.cache_.duration === undefined) {\n    this.onDurationChange();\n  }\n\n  return this.cache_.duration;\n};\n\n// Calculates how much time is left. Not in spec, but useful.\nvjs.Player.prototype.remainingTime = function(){\n  return this.duration() - this.currentTime();\n};\n\n// http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n// Buffered returns a timerange object.\n// Kind of like an array of portions of the video that have been downloaded.\n// So far no browsers return more than one range (portion)\n\n/**\n * Get a TimeRange object with the times of the video that have been downloaded\n *\n * If you just want the percent of the video that's been downloaded,\n * use bufferedPercent.\n *\n *     // Number of different ranges of time have been buffered. Usually 1.\n *     numberOfRanges = bufferedTimeRange.length,\n *\n *     // Time in seconds when the first range starts. Usually 0.\n *     firstRangeStart = bufferedTimeRange.start(0),\n *\n *     // Time in seconds when the first range ends\n *     firstRangeEnd = bufferedTimeRange.end(0),\n *\n *     // Length in seconds of the first time range\n *     firstRangeLength = firstRangeEnd - firstRangeStart;\n *\n * @return {Object} A mock TimeRange object (following HTML spec)\n */\nvjs.Player.prototype.buffered = function(){\n  var buffered = this.techGet('buffered'),\n      start = 0,\n      buflast = buffered.length - 1,\n      // Default end to 0 and store in values\n      end = this.cache_.bufferEnd = this.cache_.bufferEnd || 0;\n\n  if (buffered && buflast >= 0 && buffered.end(buflast) !== end) {\n    end = buffered.end(buflast);\n    // Storing values allows them be overridden by setBufferedFromProgress\n    this.cache_.bufferEnd = end;\n  }\n\n  return vjs.createTimeRange(start, end);\n};\n\n/**\n * Get the percent (as a decimal) of the video that's been downloaded\n *\n *     var howMuchIsDownloaded = myPlayer.bufferedPercent();\n *\n * 0 means none, 1 means all.\n * (This method isn't in the HTML5 spec, but it's very convenient)\n *\n * @return {Number} A decimal between 0 and 1 representing the percent\n */\nvjs.Player.prototype.bufferedPercent = function(){\n  return (this.duration()) ? this.buffered().end(0) / this.duration() : 0;\n};\n\n/**\n * Get or set the current volume of the media\n *\n *     // get\n *     var howLoudIsIt = myPlayer.volume();\n *\n *     // set\n *     myPlayer.volume(0.5); // Set volume to half\n *\n * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n *\n * @param  {Number} percentAsDecimal The new volume as a decimal percent\n * @return {Number}                  The current volume, when getting\n * @return {vjs.Player}              self, when setting\n */\nvjs.Player.prototype.volume = function(percentAsDecimal){\n  var vol;\n\n  if (percentAsDecimal !== undefined) {\n    vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n    this.cache_.volume = vol;\n    this.techCall('setVolume', vol);\n    vjs.setLocalStorage('volume', vol);\n    return this;\n  }\n\n  // Default to 1 when returning current volume.\n  vol = parseFloat(this.techGet('volume'));\n  return (isNaN(vol)) ? 1 : vol;\n};\n\n\n/**\n * Get the current muted state, or turn mute on or off\n *\n *     // get\n *     var isVolumeMuted = myPlayer.muted();\n *\n *     // set\n *     myPlayer.muted(true); // mute the volume\n *\n * @param  {Boolean=} muted True to mute, false to unmute\n * @return {Boolean} True if mute is on, false if not, when getting\n * @return {vjs.Player} self, when setting mute\n */\nvjs.Player.prototype.muted = function(muted){\n  if (muted !== undefined) {\n    this.techCall('setMuted', muted);\n    return this;\n  }\n  return this.techGet('muted') || false; // Default to false\n};\n\n// Check if current tech can support native fullscreen (e.g. with built in controls lik iOS, so not our flash swf)\nvjs.Player.prototype.supportsFullScreen = function(){ return this.techGet('supportsFullScreen') || false; };\n\n/**\n * Increase the size of the video to full screen\n *\n *     myPlayer.requestFullScreen();\n *\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.requestFullScreen = function(){\n  var requestFullScreen = vjs.support.requestFullScreen;\n  this.isFullScreen = true;\n\n  if (requestFullScreen) {\n    // the browser supports going fullscreen at the element level so we can\n    // take the controls fullscreen as well as the video\n\n    // Trigger fullscreenchange event after change\n    // We have to specifically add this each time, and remove\n    // when cancelling fullscreen. Otherwise if there's multiple\n    // players on a page, they would all be reacting to the same fullscreen\n    // events\n    vjs.on(document, requestFullScreen.eventName, vjs.bind(this, function(e){\n      this.isFullScreen = document[requestFullScreen.isFullScreen];\n\n      // If cancelling fullscreen, remove event listener.\n      if (this.isFullScreen === false) {\n        vjs.off(document, requestFullScreen.eventName, arguments.callee);\n      }\n\n      this.trigger('fullscreenchange');\n    }));\n\n    this.el_[requestFullScreen.requestFn]();\n\n  } else if (this.tech.supportsFullScreen()) {\n    // we can't take the video.js controls fullscreen but we can go fullscreen\n    // with native controls\n    this.techCall('enterFullScreen');\n  } else {\n    // fullscreen isn't supported so we'll just stretch the video element to\n    // fill the viewport\n    this.enterFullWindow();\n    this.trigger('fullscreenchange');\n  }\n\n  return this;\n};\n\n/**\n * Return the video to its normal size after having been in full screen mode\n *\n *     myPlayer.cancelFullScreen();\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.cancelFullScreen = function(){\n  var requestFullScreen = vjs.support.requestFullScreen;\n  this.isFullScreen = false;\n\n  // Check for browser element fullscreen support\n  if (requestFullScreen) {\n    document[requestFullScreen.cancelFn]();\n  } else if (this.tech.supportsFullScreen()) {\n   this.techCall('exitFullScreen');\n  } else {\n   this.exitFullWindow();\n   this.trigger('fullscreenchange');\n  }\n\n  return this;\n};\n\n// When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\nvjs.Player.prototype.enterFullWindow = function(){\n  this.isFullWindow = true;\n\n  // Storing original doc overflow value to return to when fullscreen is off\n  this.docOrigOverflow = document.documentElement.style.overflow;\n\n  // Add listener for esc key to exit fullscreen\n  vjs.on(document, 'keydown', vjs.bind(this, this.fullWindowOnEscKey));\n\n  // Hide any scroll bars\n  document.documentElement.style.overflow = 'hidden';\n\n  // Apply fullscreen styles\n  vjs.addClass(document.body, 'vjs-full-window');\n\n  this.trigger('enterFullWindow');\n};\nvjs.Player.prototype.fullWindowOnEscKey = function(event){\n  if (event.keyCode === 27) {\n    if (this.isFullScreen === true) {\n      this.cancelFullScreen();\n    } else {\n      this.exitFullWindow();\n    }\n  }\n};\n\nvjs.Player.prototype.exitFullWindow = function(){\n  this.isFullWindow = false;\n  vjs.off(document, 'keydown', this.fullWindowOnEscKey);\n\n  // Unhide scroll bars.\n  document.documentElement.style.overflow = this.docOrigOverflow;\n\n  // Remove fullscreen styles\n  vjs.removeClass(document.body, 'vjs-full-window');\n\n  // Resize the box, controller, and poster to original sizes\n  // this.positionAll();\n  this.trigger('exitFullWindow');\n};\n\nvjs.Player.prototype.selectSource = function(sources){\n\n  // Loop through each playback technology in the options order\n  for (var i=0,j=this.options_['techOrder'];i<j.length;i++) {\n    var techName = vjs.capitalize(j[i]),\n        tech = window['videojs'][techName];\n\n    // Check if the browser supports this technology\n    if (tech.isSupported()) {\n      // Loop through each source object\n      for (var a=0,b=sources;a<b.length;a++) {\n        var source = b[a];\n\n        // Check if source can be played with this technology\n        if (tech['canPlaySource'](source)) {\n          return { source: source, tech: techName };\n        }\n      }\n    }\n  }\n\n  return false;\n};\n\n/**\n * The source function updates the video source\n *\n * There are three types of variables you can pass as the argument.\n *\n * **URL String**: A URL to the the video file. Use this method if you are sure\n * the current playback technology (HTML5/Flash) can support the source you\n * provide. Currently only MP4 files can be used in both HTML5 and Flash.\n *\n *     myPlayer.src(\"http://www.example.com/path/to/video.mp4\");\n *\n * **Source Object (or element):** A javascript object containing information\n * about the source file. Use this method if you want the player to determine if\n * it can support the file using the type information.\n *\n *     myPlayer.src({ type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" });\n *\n * **Array of Source Objects:** To provide multiple versions of the source so\n * that it can be played using HTML5 across browsers you can use an array of\n * source objects. Video.js will detect which version is supported and load that\n * file.\n *\n *     myPlayer.src([\n *       { type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" },\n *       { type: \"video/webm\", src: \"http://www.example.com/path/to/video.webm\" },\n *       { type: \"video/ogg\", src: \"http://www.example.com/path/to/video.ogv\" }\n *     ]);\n *\n * @param  {String|Object|Array=} source The source URL, object, or array of sources\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.src = function(source){\n  // Case: Array of source objects to choose from and pick the best to play\n  if (source instanceof Array) {\n\n    var sourceTech = this.selectSource(source),\n        techName;\n\n    if (sourceTech) {\n        source = sourceTech.source;\n        techName = sourceTech.tech;\n\n      // If this technology is already loaded, set source\n      if (techName == this.techName) {\n        this.src(source); // Passing the source object\n      // Otherwise load this technology with chosen source\n      } else {\n        this.loadTech(techName, source);\n      }\n    } else {\n      this.el_.appendChild(vjs.createEl('p', {\n        innerHTML: this.options()['notSupportedMessage']\n      }));\n    }\n\n  // Case: Source object { src: '', type: '' ... }\n  } else if (source instanceof Object) {\n\n    if (window['videojs'][this.techName]['canPlaySource'](source)) {\n      this.src(source.src);\n    } else {\n      // Send through tech loop to check for a compatible technology.\n      this.src([source]);\n    }\n\n  // Case: URL String (http://myvideo...)\n  } else {\n    // Cache for getting last set source\n    this.cache_.src = source;\n\n    if (!this.isReady_) {\n      this.ready(function(){\n        this.src(source);\n      });\n    } else {\n      this.techCall('src', source);\n      if (this.options_['preload'] == 'auto') {\n        this.load();\n      }\n      if (this.options_['autoplay']) {\n        this.play();\n      }\n    }\n  }\n  return this;\n};\n\n// Begin loading the src data\n// http://dev.w3.org/html5/spec/video.html#dom-media-load\nvjs.Player.prototype.load = function(){\n  this.techCall('load');\n  return this;\n};\n\n// http://dev.w3.org/html5/spec/video.html#dom-media-currentsrc\nvjs.Player.prototype.currentSrc = function(){\n  return this.techGet('currentSrc') || this.cache_.src || '';\n};\n\n// Attributes/Options\nvjs.Player.prototype.preload = function(value){\n  if (value !== undefined) {\n    this.techCall('setPreload', value);\n    this.options_['preload'] = value;\n    return this;\n  }\n  return this.techGet('preload');\n};\nvjs.Player.prototype.autoplay = function(value){\n  if (value !== undefined) {\n    this.techCall('setAutoplay', value);\n    this.options_['autoplay'] = value;\n    return this;\n  }\n  return this.techGet('autoplay', value);\n};\nvjs.Player.prototype.loop = function(value){\n  if (value !== undefined) {\n    this.techCall('setLoop', value);\n    this.options_['loop'] = value;\n    return this;\n  }\n  return this.techGet('loop');\n};\n\n/**\n * the url of the poster image source\n * @type {String}\n * @private\n */\nvjs.Player.prototype.poster_;\n\n/**\n * get or set the poster image source url\n *\n * ##### EXAMPLE:\n *\n *     // getting\n *     var currentPoster = myPlayer.poster();\n *\n *     // setting\n *     myPlayer.poster('http://example.com/myImage.jpg');\n *\n * @param  {String=} [src] Poster image source URL\n * @return {String} poster URL when getting\n * @return {vjs.Player} self when setting\n */\nvjs.Player.prototype.poster = function(src){\n  if (src !== undefined) {\n    this.poster_ = src;\n    return this;\n  }\n  return this.poster_;\n};\n\n/**\n * Whether or not the controls are showing\n * @type {Boolean}\n * @private\n */\nvjs.Player.prototype.controls_;\n\n/**\n * Get or set whether or not the controls are showing.\n * @param  {Boolean} controls Set controls to showing or not\n * @return {Boolean}    Controls are showing\n */\nvjs.Player.prototype.controls = function(bool){\n  if (bool !== undefined) {\n    bool = !!bool; // force boolean\n    // Don't trigger a change event unless it actually changed\n    if (this.controls_ !== bool) {\n      this.controls_ = bool;\n      if (bool) {\n        this.removeClass('vjs-controls-disabled');\n        this.addClass('vjs-controls-enabled');\n        this.trigger('controlsenabled');\n      } else {\n        this.removeClass('vjs-controls-enabled');\n        this.addClass('vjs-controls-disabled');\n        this.trigger('controlsdisabled');\n      }\n    }\n    return this;\n  }\n  return this.controls_;\n};\n\nvjs.Player.prototype.usingNativeControls_;\n\n/**\n * Toggle native controls on/off. Native controls are the controls built into\n * devices (e.g. default iPhone controls), Flash, or other techs\n * (e.g. Vimeo Controls)\n *\n * **This should only be set by the current tech, because only the tech knows\n * if it can support native controls**\n *\n * @param  {Boolean} bool    True signals that native controls are on\n * @return {vjs.Player}      Returns the player\n * @private\n */\nvjs.Player.prototype.usingNativeControls = function(bool){\n  if (bool !== undefined) {\n    bool = !!bool; // force boolean\n    // Don't trigger a change event unless it actually changed\n    if (this.usingNativeControls_ !== bool) {\n      this.usingNativeControls_ = bool;\n      if (bool) {\n        this.addClass('vjs-using-native-controls');\n\n        /**\n         * player is using the native device controls\n         *\n         * @event usingnativecontrols\n         * @memberof vjs.Player\n         * @instance\n         * @private\n         */\n        this.trigger('usingnativecontrols');\n      } else {\n        this.removeClass('vjs-using-native-controls');\n\n        /**\n         * player is using the custom HTML controls\n         *\n         * @event usingcustomcontrols\n         * @memberof vjs.Player\n         * @instance\n         * @private\n         */\n        this.trigger('usingcustomcontrols');\n      }\n    }\n    return this;\n  }\n  return this.usingNativeControls_;\n};\n\nvjs.Player.prototype.error = function(){ return this.techGet('error'); };\nvjs.Player.prototype.ended = function(){ return this.techGet('ended'); };\nvjs.Player.prototype.seeking = function(){ return this.techGet('seeking'); };\n\n// When the player is first initialized, trigger activity so components\n// like the control bar show themselves if needed\nvjs.Player.prototype.userActivity_ = true;\nvjs.Player.prototype.reportUserActivity = function(event){\n  this.userActivity_ = true;\n};\n\nvjs.Player.prototype.userActive_ = true;\nvjs.Player.prototype.userActive = function(bool){\n  if (bool !== undefined) {\n    bool = !!bool;\n    if (bool !== this.userActive_) {\n      this.userActive_ = bool;\n      if (bool) {\n        // If the user was inactive and is now active we want to reset the\n        // inactivity timer\n        this.userActivity_ = true;\n        this.removeClass('vjs-user-inactive');\n        this.addClass('vjs-user-active');\n        this.trigger('useractive');\n      } else {\n        // We're switching the state to inactive manually, so erase any other\n        // activity\n        this.userActivity_ = false;\n\n        // Chrome/Safari/IE have bugs where when you change the cursor it can\n        // trigger a mousemove event. This causes an issue when you're hiding\n        // the cursor when the user is inactive, and a mousemove signals user\n        // activity. Making it impossible to go into inactive mode. Specifically\n        // this happens in fullscreen when we really need to hide the cursor.\n        //\n        // When this gets resolved in ALL browsers it can be removed\n        // https://code.google.com/p/chromium/issues/detail?id=103041\n        this.tech.one('mousemove', function(e){\n          e.stopPropagation();\n          e.preventDefault();\n        });\n        this.removeClass('vjs-user-active');\n        this.addClass('vjs-user-inactive');\n        this.trigger('userinactive');\n      }\n    }\n    return this;\n  }\n  return this.userActive_;\n};\n\nvjs.Player.prototype.listenForUserActivity = function(){\n  var onMouseActivity, onMouseDown, mouseInProgress, onMouseUp,\n      activityCheck, inactivityTimeout;\n\n  onMouseActivity = this.reportUserActivity;\n\n  onMouseDown = function() {\n    onMouseActivity();\n    // For as long as the they are touching the device or have their mouse down,\n    // we consider them active even if they're not moving their finger or mouse.\n    // So we want to continue to update that they are active\n    clearInterval(mouseInProgress);\n    // Setting userActivity=true now and setting the interval to the same time\n    // as the activityCheck interval (250) should ensure we never miss the\n    // next activityCheck\n    mouseInProgress = setInterval(vjs.bind(this, onMouseActivity), 250);\n  };\n\n  onMouseUp = function(event) {\n    onMouseActivity();\n    // Stop the interval that maintains activity if the mouse/touch is down\n    clearInterval(mouseInProgress);\n  };\n\n  // Any mouse movement will be considered user activity\n  this.on('mousedown', onMouseDown);\n  this.on('mousemove', onMouseActivity);\n  this.on('mouseup', onMouseUp);\n\n  // Listen for keyboard navigation\n  // Shouldn't need to use inProgress interval because of key repeat\n  this.on('keydown', onMouseActivity);\n  this.on('keyup', onMouseActivity);\n\n  // Consider any touch events that bubble up to be activity\n  // Certain touches on the tech will be blocked from bubbling because they\n  // toggle controls\n  this.on('touchstart', onMouseDown);\n  this.on('touchmove', onMouseActivity);\n  this.on('touchend', onMouseUp);\n  this.on('touchcancel', onMouseUp);\n\n  // Run an interval every 250 milliseconds instead of stuffing everything into\n  // the mousemove/touchmove function itself, to prevent performance degradation.\n  // `this.reportUserActivity` simply sets this.userActivity_ to true, which\n  // then gets picked up by this loop\n  // http://ejohn.org/blog/learning-from-twitter/\n  activityCheck = setInterval(vjs.bind(this, function() {\n    // Check to see if mouse/touch activity has happened\n    if (this.userActivity_) {\n      // Reset the activity tracker\n      this.userActivity_ = false;\n\n      // If the user state was inactive, set the state to active\n      this.userActive(true);\n\n      // Clear any existing inactivity timeout to start the timer over\n      clearTimeout(inactivityTimeout);\n\n      // In X seconds, if no more activity has occurred the user will be\n      // considered inactive\n      inactivityTimeout = setTimeout(vjs.bind(this, function() {\n        // Protect against the case where the inactivityTimeout can trigger just\n        // before the next user activity is picked up by the activityCheck loop\n        // causing a flicker\n        if (!this.userActivity_) {\n          this.userActive(false);\n        }\n      }), 2000);\n    }\n  }), 250);\n\n  // Clean up the intervals when we kill the player\n  this.on('dispose', function(){\n    clearInterval(activityCheck);\n    clearTimeout(inactivityTimeout);\n  });\n};\n\n// Methods to add support for\n// networkState: function(){ return this.techCall('networkState'); },\n// readyState: function(){ return this.techCall('readyState'); },\n// seeking: function(){ return this.techCall('seeking'); },\n// initialTime: function(){ return this.techCall('initialTime'); },\n// startOffsetTime: function(){ return this.techCall('startOffsetTime'); },\n// played: function(){ return this.techCall('played'); },\n// seekable: function(){ return this.techCall('seekable'); },\n// videoTracks: function(){ return this.techCall('videoTracks'); },\n// audioTracks: function(){ return this.techCall('audioTracks'); },\n// videoWidth: function(){ return this.techCall('videoWidth'); },\n// videoHeight: function(){ return this.techCall('videoHeight'); },\n// defaultPlaybackRate: function(){ return this.techCall('defaultPlaybackRate'); },\n// playbackRate: function(){ return this.techCall('playbackRate'); },\n// mediaGroup: function(){ return this.techCall('mediaGroup'); },\n// controller: function(){ return this.techCall('controller'); },\n// defaultMuted: function(){ return this.techCall('defaultMuted'); }\n\n// TODO\n// currentSrcList: the array of sources including other formats and bitrates\n// playList: array of source lists in order of playback\n\n// RequestFullscreen API\n(function(){\n  var prefix, requestFS, div;\n\n  div = document.createElement('div');\n\n  requestFS = {};\n\n  // Current W3C Spec\n  // http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#api\n  // Mozilla Draft: https://wiki.mozilla.org/Gecko:FullScreenAPI#fullscreenchange_event\n  // New: https://dvcs.w3.org/hg/fullscreen/raw-file/529a67b8d9f3/Overview.html\n  if (div.cancelFullscreen !== undefined) {\n    requestFS.requestFn = 'requestFullscreen';\n    requestFS.cancelFn = 'exitFullscreen';\n    requestFS.eventName = 'fullscreenchange';\n    requestFS.isFullScreen = 'fullScreen';\n\n  // Webkit (Chrome/Safari) and Mozilla (Firefox) have working implementations\n  // that use prefixes and vary slightly from the new W3C spec. Specifically,\n  // using 'exit' instead of 'cancel', and lowercasing the 'S' in Fullscreen.\n  // Other browsers don't have any hints of which version they might follow yet,\n  // so not going to try to predict by looping through all prefixes.\n  } else {\n\n    if (document.mozCancelFullScreen) {\n      prefix = 'moz';\n      requestFS.isFullScreen = prefix + 'FullScreen';\n    } else {\n      prefix = 'webkit';\n      requestFS.isFullScreen = prefix + 'IsFullScreen';\n    }\n\n    if (div[prefix + 'RequestFullScreen']) {\n      requestFS.requestFn = prefix + 'RequestFullScreen';\n      requestFS.cancelFn = prefix + 'CancelFullScreen';\n    }\n    requestFS.eventName = prefix + 'fullscreenchange';\n  }\n\n  if (document[requestFS.cancelFn]) {\n    vjs.support.requestFullScreen = requestFS;\n  }\n\n})();\n\n\n/**\n * Container of main controls\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n * @extends vjs.Component\n */\nvjs.ControlBar = vjs.Component.extend();\n\nvjs.ControlBar.prototype.options_ = {\n  loadEvent: 'play',\n  children: {\n    'playToggle': {},\n    'currentTimeDisplay': {},\n    'timeDivider': {},\n    'durationDisplay': {},\n    'remainingTimeDisplay': {},\n    'progressControl': {},\n    'fullscreenToggle': {},\n    'volumeControl': {},\n    'muteToggle': {}\n    // 'volumeMenuButton': {}\n  }\n};\n\nvjs.ControlBar.prototype.createEl = function(){\n  return vjs.createEl('div', {\n    className: 'vjs-control-bar'\n  });\n};\n/**\n * Button to toggle between play and pause\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.PlayToggle = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    player.on('play', vjs.bind(this, this.onPlay));\n    player.on('pause', vjs.bind(this, this.onPause));\n  }\n});\n\nvjs.PlayToggle.prototype.buttonText = 'Play';\n\nvjs.PlayToggle.prototype.buildCSSClass = function(){\n  return 'vjs-play-control ' + vjs.Button.prototype.buildCSSClass.call(this);\n};\n\n// OnClick - Toggle between play and pause\nvjs.PlayToggle.prototype.onClick = function(){\n  if (this.player_.paused()) {\n    this.player_.play();\n  } else {\n    this.player_.pause();\n  }\n};\n\n  // OnPlay - Add the vjs-playing class to the element so it can change appearance\nvjs.PlayToggle.prototype.onPlay = function(){\n  vjs.removeClass(this.el_, 'vjs-paused');\n  vjs.addClass(this.el_, 'vjs-playing');\n  this.el_.children[0].children[0].innerHTML = 'Pause'; // change the button text to \"Pause\"\n};\n\n  // OnPause - Add the vjs-paused class to the element so it can change appearance\nvjs.PlayToggle.prototype.onPause = function(){\n  vjs.removeClass(this.el_, 'vjs-playing');\n  vjs.addClass(this.el_, 'vjs-paused');\n  this.el_.children[0].children[0].innerHTML = 'Play'; // change the button text to \"Play\"\n};\n/**\n * Displays the current time\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.CurrentTimeDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('timeupdate', vjs.bind(this, this.updateContent));\n  }\n});\n\nvjs.CurrentTimeDisplay.prototype.createEl = function(){\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-current-time vjs-time-controls vjs-control'\n  });\n\n  this.content = vjs.createEl('div', {\n    className: 'vjs-current-time-display',\n    innerHTML: '<span class=\"vjs-control-text\">Current Time </span>' + '0:00', // label the current time for screen reader users\n    'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n  });\n\n  el.appendChild(vjs.createEl('div').appendChild(this.content));\n  return el;\n};\n\nvjs.CurrentTimeDisplay.prototype.updateContent = function(){\n  // Allows for smooth scrubbing, when player can't keep up.\n  var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n  this.content.innerHTML = '<span class=\"vjs-control-text\">Current Time </span>' + vjs.formatTime(time, this.player_.duration());\n};\n\n/**\n * Displays the duration\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.DurationDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('timeupdate', vjs.bind(this, this.updateContent)); // this might need to be changes to 'durationchange' instead of 'timeupdate' eventually, however the durationchange event fires before this.player_.duration() is set, so the value cannot be written out using this method. Once the order of durationchange and this.player_.duration() being set is figured out, this can be updated.\n  }\n});\n\nvjs.DurationDisplay.prototype.createEl = function(){\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-duration vjs-time-controls vjs-control'\n  });\n\n  this.content = vjs.createEl('div', {\n    className: 'vjs-duration-display',\n    innerHTML: '<span class=\"vjs-control-text\">Duration Time </span>' + '0:00', // label the duration time for screen reader users\n    'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n  });\n\n  el.appendChild(vjs.createEl('div').appendChild(this.content));\n  return el;\n};\n\nvjs.DurationDisplay.prototype.updateContent = function(){\n  var duration = this.player_.duration();\n  if (duration) {\n      this.content.innerHTML = '<span class=\"vjs-control-text\">Duration Time </span>' + vjs.formatTime(duration); // label the duration time for screen reader users\n  }\n};\n\n/**\n * The separator between the current time and duration\n *\n * Can be hidden if it's not needed in the design.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.TimeDivider = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.TimeDivider.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-time-divider',\n    innerHTML: '<div><span>/</span></div>'\n  });\n};\n\n/**\n * Displays the time left in the video\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.RemainingTimeDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('timeupdate', vjs.bind(this, this.updateContent));\n  }\n});\n\nvjs.RemainingTimeDisplay.prototype.createEl = function(){\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-remaining-time vjs-time-controls vjs-control'\n  });\n\n  this.content = vjs.createEl('div', {\n    className: 'vjs-remaining-time-display',\n    innerHTML: '<span class=\"vjs-control-text\">Remaining Time </span>' + '-0:00', // label the remaining time for screen reader users\n    'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n  });\n\n  el.appendChild(vjs.createEl('div').appendChild(this.content));\n  return el;\n};\n\nvjs.RemainingTimeDisplay.prototype.updateContent = function(){\n  if (this.player_.duration()) {\n    this.content.innerHTML = '<span class=\"vjs-control-text\">Remaining Time </span>' + '-'+ vjs.formatTime(this.player_.remainingTime());\n  }\n\n  // Allows for smooth scrubbing, when player can't keep up.\n  // var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n  // this.content.innerHTML = vjs.formatTime(time, this.player_.duration());\n};\n/**\n * Toggle fullscreen video\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @extends vjs.Button\n */\nvjs.FullscreenToggle = vjs.Button.extend({\n  /**\n   * @constructor\n   * @memberof vjs.FullscreenToggle\n   * @instance\n   */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n  }\n});\n\nvjs.FullscreenToggle.prototype.buttonText = 'Fullscreen';\n\nvjs.FullscreenToggle.prototype.buildCSSClass = function(){\n  return 'vjs-fullscreen-control ' + vjs.Button.prototype.buildCSSClass.call(this);\n};\n\nvjs.FullscreenToggle.prototype.onClick = function(){\n  if (!this.player_.isFullScreen) {\n    this.player_.requestFullScreen();\n    this.el_.children[0].children[0].innerHTML = 'Non-Fullscreen'; // change the button text to \"Non-Fullscreen\"\n  } else {\n    this.player_.cancelFullScreen();\n    this.el_.children[0].children[0].innerHTML = 'Fullscreen'; // change the button to \"Fullscreen\"\n  }\n};\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.ProgressControl = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.ProgressControl.prototype.options_ = {\n  children: {\n    'seekBar': {}\n  }\n};\n\nvjs.ProgressControl.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-progress-control vjs-control'\n  });\n};\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.SeekBar = vjs.Slider.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Slider.call(this, player, options);\n    player.on('timeupdate', vjs.bind(this, this.updateARIAAttributes));\n    player.ready(vjs.bind(this, this.updateARIAAttributes));\n  }\n});\n\nvjs.SeekBar.prototype.options_ = {\n  children: {\n    'loadProgressBar': {},\n    'playProgressBar': {},\n    'seekHandle': {}\n  },\n  'barName': 'playProgressBar',\n  'handleName': 'seekHandle'\n};\n\nvjs.SeekBar.prototype.playerEvent = 'timeupdate';\n\nvjs.SeekBar.prototype.createEl = function(){\n  return vjs.Slider.prototype.createEl.call(this, 'div', {\n    className: 'vjs-progress-holder',\n    'aria-label': 'video progress bar'\n  });\n};\n\nvjs.SeekBar.prototype.updateARIAAttributes = function(){\n    // Allows for smooth scrubbing, when player can't keep up.\n    var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    this.el_.setAttribute('aria-valuenow',vjs.round(this.getPercent()*100, 2)); // machine readable value of progress bar (percentage complete)\n    this.el_.setAttribute('aria-valuetext',vjs.formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n};\n\nvjs.SeekBar.prototype.getPercent = function(){\n  var currentTime;\n  // Flash RTMP provider will not report the correct time\n  // immediately after a seek. This isn't noticeable if you're\n  // seeking while the video is playing, but it is if you seek\n  // while the video is paused.\n  if (this.player_.techName === 'Flash' && this.player_.seeking()) {\n    var cache = this.player_.getCache();\n    if (cache.lastSetCurrentTime) {\n      currentTime = cache.lastSetCurrentTime;\n    }\n    else {\n      currentTime = this.player_.currentTime();\n    }\n  }\n  else {\n    currentTime = this.player_.currentTime();\n  }\n\n  return currentTime / this.player_.duration();\n};\n\nvjs.SeekBar.prototype.onMouseDown = function(event){\n  vjs.Slider.prototype.onMouseDown.call(this, event);\n\n  this.player_.scrubbing = true;\n\n  this.videoWasPlaying = !this.player_.paused();\n  this.player_.pause();\n};\n\nvjs.SeekBar.prototype.onMouseMove = function(event){\n  var newTime = this.calculateDistance(event) * this.player_.duration();\n\n  // Don't let video end while scrubbing.\n  if (newTime == this.player_.duration()) { newTime = newTime - 0.1; }\n\n  // Set new time (tell player to seek to new time)\n  this.player_.currentTime(newTime);\n};\n\nvjs.SeekBar.prototype.onMouseUp = function(event){\n    debugger\n  vjs.Slider.prototype.onMouseUp.call(this, event);\n\n  this.player_.scrubbing = false;\n  if (this.videoWasPlaying) {\n      debugger\n    this.player_.play();\n  }\n};\n\nvjs.SeekBar.prototype.stepForward = function(){\n  this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n};\n\nvjs.SeekBar.prototype.stepBack = function(){\n  this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n};\n\n\n/**\n * Shows load progress\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.LoadProgressBar = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n    player.on('progress', vjs.bind(this, this.update));\n  }\n});\n\nvjs.LoadProgressBar.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-load-progress',\n    innerHTML: '<span class=\"vjs-control-text\">Loaded: 0%</span>'\n  });\n};\n\nvjs.LoadProgressBar.prototype.update = function(){\n  if (this.el_.style) { this.el_.style.width = vjs.round(this.player_.bufferedPercent() * 100, 2) + '%'; }\n};\n\n\n/**\n * Shows play progress\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.PlayProgressBar = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.PlayProgressBar.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-play-progress',\n    innerHTML: '<span class=\"vjs-control-text\">Progress: 0%</span>'\n  });\n};\n\n/**\n * The Seek Handle shows the current position of the playhead during playback,\n * and can be dragged to adjust the playhead.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.SeekHandle = vjs.SliderHandle.extend();\n\n/**\n * The default value for the handle content, which may be read by screen readers\n *\n * @type {String}\n * @private\n */\nvjs.SeekHandle.prototype.defaultValue = '00:00';\n\n/** @inheritDoc */\nvjs.SeekHandle.prototype.createEl = function(){\n  return vjs.SliderHandle.prototype.createEl.call(this, 'div', {\n    className: 'vjs-seek-handle'\n  });\n};\n/**\n * The component for controlling the volume level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.VolumeControl = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    // hide volume controls when they're not supported by the current tech\n    if (player.tech && player.tech.features && player.tech.features['volumeControl'] === false) {\n      this.addClass('vjs-hidden');\n    }\n    player.on('loadstart', vjs.bind(this, function(){\n      if (player.tech.features && player.tech.features['volumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    }));\n  }\n});\n\nvjs.VolumeControl.prototype.options_ = {\n  children: {\n    'volumeBar': {}\n  }\n};\n\nvjs.VolumeControl.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-control vjs-control'\n  });\n};\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.VolumeBar = vjs.Slider.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Slider.call(this, player, options);\n    player.on('volumechange', vjs.bind(this, this.updateARIAAttributes));\n    player.ready(vjs.bind(this, this.updateARIAAttributes));\n    setTimeout(vjs.bind(this, this.update), 0); // update when elements is in DOM\n  }\n});\n\nvjs.VolumeBar.prototype.updateARIAAttributes = function(){\n  // Current value of volume bar as a percentage\n  this.el_.setAttribute('aria-valuenow',vjs.round(this.player_.volume()*100, 2));\n  this.el_.setAttribute('aria-valuetext',vjs.round(this.player_.volume()*100, 2)+'%');\n};\n\nvjs.VolumeBar.prototype.options_ = {\n  children: {\n    'volumeLevel': {},\n    'volumeHandle': {}\n  },\n  'barName': 'volumeLevel',\n  'handleName': 'volumeHandle'\n};\n\nvjs.VolumeBar.prototype.playerEvent = 'volumechange';\n\nvjs.VolumeBar.prototype.createEl = function(){\n  return vjs.Slider.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-bar',\n    'aria-label': 'volume level'\n  });\n};\n\nvjs.VolumeBar.prototype.onMouseMove = function(event) {\n  if (this.player_.muted()) {\n    this.player_.muted(false);\n  }\n\n  this.player_.volume(this.calculateDistance(event));\n};\n\nvjs.VolumeBar.prototype.getPercent = function(){\n  if (this.player_.muted()) {\n    return 0;\n  } else {\n    return this.player_.volume();\n  }\n};\n\nvjs.VolumeBar.prototype.stepForward = function(){\n  this.player_.volume(this.player_.volume() + 0.1);\n};\n\nvjs.VolumeBar.prototype.stepBack = function(){\n  this.player_.volume(this.player_.volume() - 0.1);\n};\n\n/**\n * Shows volume level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.VolumeLevel = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.VolumeLevel.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-level',\n    innerHTML: '<span class=\"vjs-control-text\"></span>'\n  });\n};\n\n/**\n * The volume handle can be dragged to adjust the volume level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\n vjs.VolumeHandle = vjs.SliderHandle.extend();\n\n vjs.VolumeHandle.prototype.defaultValue = '00:00';\n\n /** @inheritDoc */\n vjs.VolumeHandle.prototype.createEl = function(){\n   return vjs.SliderHandle.prototype.createEl.call(this, 'div', {\n     className: 'vjs-volume-handle'\n   });\n };\n/**\n * A button component for muting the audio\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.MuteToggle = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    player.on('volumechange', vjs.bind(this, this.update));\n\n    // hide mute toggle if the current tech doesn't support volume control\n    if (player.tech && player.tech.features && player.tech.features['volumeControl'] === false) {\n      this.addClass('vjs-hidden');\n    }\n    player.on('loadstart', vjs.bind(this, function(){\n      if (player.tech.features && player.tech.features['volumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    }));\n  }\n});\n\nvjs.MuteToggle.prototype.createEl = function(){\n  return vjs.Button.prototype.createEl.call(this, 'div', {\n    className: 'vjs-mute-control vjs-control',\n    innerHTML: '<div><span class=\"vjs-control-text\">Mute</span></div>'\n  });\n};\n\nvjs.MuteToggle.prototype.onClick = function(){\n  this.player_.muted( this.player_.muted() ? false : true );\n};\n\nvjs.MuteToggle.prototype.update = function(){\n  var vol = this.player_.volume(),\n      level = 3;\n\n  if (vol === 0 || this.player_.muted()) {\n    level = 0;\n  } else if (vol < 0.33) {\n    level = 1;\n  } else if (vol < 0.67) {\n    level = 2;\n  }\n\n  // Don't rewrite the button text if the actual text doesn't change.\n  // This causes unnecessary and confusing information for screen reader users.\n  // This check is needed because this function gets called every time the volume level is changed.\n  if(this.player_.muted()){\n      if(this.el_.children[0].children[0].innerHTML!='Unmute'){\n          this.el_.children[0].children[0].innerHTML = 'Unmute'; // change the button text to \"Unmute\"\n      }\n  } else {\n      if(this.el_.children[0].children[0].innerHTML!='Mute'){\n          this.el_.children[0].children[0].innerHTML = 'Mute'; // change the button text to \"Mute\"\n      }\n  }\n\n  /* TODO improve muted icon classes */\n  for (var i = 0; i < 4; i++) {\n    vjs.removeClass(this.el_, 'vjs-vol-'+i);\n  }\n  vjs.addClass(this.el_, 'vjs-vol-'+level);\n};\n/**\n * Menu button with a popup for showing the volume slider.\n * @constructor\n */\nvjs.VolumeMenuButton = vjs.MenuButton.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.MenuButton.call(this, player, options);\n\n    // Same listeners as MuteToggle\n    player.on('volumechange', vjs.bind(this, this.update));\n\n    // hide mute toggle if the current tech doesn't support volume control\n    if (player.tech && player.tech.features && player.tech.features.volumeControl === false) {\n      this.addClass('vjs-hidden');\n    }\n    player.on('loadstart', vjs.bind(this, function(){\n      if (player.tech.features && player.tech.features.volumeControl === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    }));\n    this.addClass('vjs-menu-button');\n  }\n});\n\nvjs.VolumeMenuButton.prototype.createMenu = function(){\n  var menu = new vjs.Menu(this.player_, {\n    contentElType: 'div'\n  });\n  var vc = new vjs.VolumeBar(this.player_, vjs.obj.merge({vertical: true}, this.options_.volumeBar));\n  menu.addChild(vc);\n  return menu;\n};\n\nvjs.VolumeMenuButton.prototype.onClick = function(){\n  vjs.MuteToggle.prototype.onClick.call(this);\n  vjs.MenuButton.prototype.onClick.call(this);\n};\n\nvjs.VolumeMenuButton.prototype.createEl = function(){\n  return vjs.Button.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-menu-button vjs-menu-button vjs-control',\n    innerHTML: '<div><span class=\"vjs-control-text\">Mute</span></div>'\n  });\n};\nvjs.VolumeMenuButton.prototype.update = vjs.MuteToggle.prototype.update;\n/* Poster Image\n================================================================================ */\n/**\n * The component that handles showing the poster image.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.PosterImage = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    if (!player.poster() || !player.controls()) {\n      this.hide();\n    }\n\n    player.on('play', vjs.bind(this, this.hide));\n  }\n});\n\nvjs.PosterImage.prototype.createEl = function(){\n  var el = vjs.createEl('div', {\n        className: 'vjs-poster',\n\n        // Don't want poster to be tabbable.\n        tabIndex: -1\n      }),\n      poster = this.player_.poster();\n\n  if (poster) {\n    if ('backgroundSize' in el.style) {\n      el.style.backgroundImage = 'url(\"' + poster + '\")';\n    } else {\n      el.appendChild(vjs.createEl('img', { src: poster }));\n    }\n  }\n\n  return el;\n};\n\nvjs.PosterImage.prototype.onClick = function(){\n  // Only accept clicks when controls are enabled\n  if (this.player().controls()) {\n    this.player_.play();\n  }\n};\n/* Loading Spinner\n================================================================================ */\n/**\n * Loading spinner for waiting events\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.LoadingSpinner = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('canplay', vjs.bind(this, this.hide));\n    player.on('canplaythrough', vjs.bind(this, this.hide));\n    player.on('playing', vjs.bind(this, this.hide));\n    player.on('seeked', vjs.bind(this, this.hide));\n\n    player.on('seeking', vjs.bind(this, this.show));\n\n    // in some browsers seeking does not trigger the 'playing' event,\n    // so we also need to trap 'seeked' if we are going to set a\n    // 'seeking' event\n    player.on('seeked', vjs.bind(this, this.hide));\n\n    player.on('error', vjs.bind(this, this.show));\n\n    // Not showing spinner on stalled any more. Browsers may stall and then not trigger any events that would remove the spinner.\n    // Checked in Chrome 16 and Safari 5.1.2. http://help.videojs.com/discussions/problems/883-why-is-the-download-progress-showing\n    // player.on('stalled', vjs.bind(this, this.show));\n\n    player.on('waiting', vjs.bind(this, this.show));\n  }\n});\n\nvjs.LoadingSpinner.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-loading-spinner'\n  });\n};\n/* Big Play Button\n================================================================================ */\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.BigPlayButton = vjs.Button.extend();\n\nvjs.BigPlayButton.prototype.createEl = function(){\n  return vjs.Button.prototype.createEl.call(this, 'div', {\n    className: 'vjs-big-play-button',\n    innerHTML: '<span aria-hidden=\"true\"></span>',\n    'aria-label': 'play video'\n  });\n};\n\nvjs.BigPlayButton.prototype.onClick = function(){\n  this.player_.play();\n};\n/**\n * @fileoverview Media Technology Controller - Base class for media playback\n * technology controllers like Flash and HTML5\n */\n\n/**\n * Base class for media (HTML5 Video, Flash) controllers\n * @param {vjs.Player|Object} player  Central player instance\n * @param {Object=} options Options object\n * @constructor\n */\nvjs.MediaTechController = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.Component.call(this, player, options, ready);\n\n    this.initControlsListeners();\n  }\n});\n\n/**\n * Set up click and touch listeners for the playback element\n * On desktops, a click on the video itself will toggle playback,\n * on a mobile device a click on the video toggles controls.\n * (toggling controls is done by toggling the user state between active and\n * inactive)\n *\n * A tap can signal that a user has become active, or has become inactive\n * e.g. a quick tap on an iPhone movie should reveal the controls. Another\n * quick tap should hide them again (signaling the user is in an inactive\n * viewing state)\n *\n * In addition to this, we still want the user to be considered inactive after\n * a few seconds of inactivity.\n *\n * Note: the only part of iOS interaction we can't mimic with this setup\n * is a touch and hold on the video element counting as activity in order to\n * keep the controls showing, but that shouldn't be an issue. A touch and hold on\n * any controls will still keep the user active\n */\nvjs.MediaTechController.prototype.initControlsListeners = function(){\n  var player, tech, activateControls, deactivateControls;\n\n  tech = this;\n  player = this.player();\n\n  var activateControls = function(){\n    if (player.controls() && !player.usingNativeControls()) {\n      tech.addControlsListeners();\n    }\n  };\n\n  deactivateControls = vjs.bind(tech, tech.removeControlsListeners);\n\n  // Set up event listeners once the tech is ready and has an element to apply\n  // listeners to\n  this.ready(activateControls);\n  player.on('controlsenabled', activateControls);\n  player.on('controlsdisabled', deactivateControls);\n};\n\nvjs.MediaTechController.prototype.addControlsListeners = function(){\n  var preventBubble, userWasActive;\n\n  // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n  // trigger mousedown/up.\n  // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n  // Any touch events are set to block the mousedown event from happening\n  this.on('mousedown', this.onClick);\n\n  // We need to block touch events on the video element from bubbling up,\n  // otherwise they'll signal activity prematurely. The specific use case is\n  // when the video is playing and the controls have faded out. In this case\n  // only a tap (fast touch) should toggle the user active state and turn the\n  // controls back on. A touch and move or touch and hold should not trigger\n  // the controls (per iOS as an example at least)\n  //\n  // We always want to stop propagation on touchstart because touchstart\n  // at the player level starts the touchInProgress interval. We can still\n  // report activity on the other events, but won't let them bubble for\n  // consistency. We don't want to bubble a touchend without a touchstart.\n  this.on('touchstart', function(event) {\n    // Stop the mouse events from also happening\n    event.preventDefault();\n    event.stopPropagation();\n    // Record if the user was active now so we don't have to keep polling it\n    userWasActive = this.player_.userActive();\n  });\n\n  preventBubble = function(event){\n    event.stopPropagation();\n    if (userWasActive) {\n      this.player_.reportUserActivity();\n    }\n  };\n\n  // Treat all touch events the same for consistency\n  this.on('touchmove', preventBubble);\n  this.on('touchleave', preventBubble);\n  this.on('touchcancel', preventBubble);\n  this.on('touchend', preventBubble);\n\n  // Turn on component tap events\n  this.emitTapEvents();\n\n  // The tap listener needs to come after the touchend listener because the tap\n  // listener cancels out any reportedUserActivity when setting userActive(false)\n  this.on('tap', this.onTap);\n};\n\n/**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n */\nvjs.MediaTechController.prototype.removeControlsListeners = function(){\n  // We don't want to just use `this.off()` because there might be other needed\n  // listeners added by techs that extend this.\n  this.off('tap');\n  this.off('touchstart');\n  this.off('touchmove');\n  this.off('touchleave');\n  this.off('touchcancel');\n  this.off('touchend');\n  this.off('click');\n  this.off('mousedown');\n};\n\n/**\n * Handle a click on the media element. By default will play/pause the media.\n */\nvjs.MediaTechController.prototype.onClick = function(event){\n  // We're using mousedown to detect clicks thanks to Flash, but mousedown\n  // will also be triggered with right-clicks, so we need to prevent that\n  if (event.button !== 0) return;\n\n  // When controls are disabled a click should not toggle playback because\n  // the click is considered a control\n  if (this.player().controls()) {\n    if (this.player().paused()) {\n      this.player().play();\n    } else {\n      this.player().pause();\n    }\n  }\n};\n\n/**\n * Handle a tap on the media element. By default it will toggle the user\n * activity state, which hides and shows the controls.\n */\n\nvjs.MediaTechController.prototype.onTap = function(){\n  this.player().userActive(!this.player().userActive());\n};\n\nvjs.MediaTechController.prototype.features = {\n  'volumeControl': true,\n\n  // Resizing plugins using request fullscreen reloads the plugin\n  'fullscreenResize': false,\n\n  // Optional events that we can manually mimic with timers\n  // currently not triggered by video-js-swf\n  'progressEvents': false,\n  'timeupdateEvents': false\n};\n\nvjs.media = {};\n\n/**\n * List of default API methods for any MediaTechController\n * @type {String}\n */\nvjs.media.ApiMethods = 'play,pause,paused,currentTime,setCurrentTime,duration,buffered,volume,setVolume,muted,setMuted,width,height,supportsFullScreen,enterFullScreen,src,load,currentSrc,preload,setPreload,autoplay,setAutoplay,loop,setLoop,error,networkState,readyState,seeking,initialTime,startOffsetTime,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks,defaultPlaybackRate,playbackRate,mediaGroup,controller,controls,defaultMuted'.split(',');\n// Create placeholder methods for each that warn when a method isn't supported by the current playback technology\n\nfunction createMethod(methodName){\n  return function(){\n    throw new Error('The \"'+methodName+'\" method is not available on the playback technology\\'s API');\n  };\n}\n\nfor (var i = vjs.media.ApiMethods.length - 1; i >= 0; i--) {\n  var methodName = vjs.media.ApiMethods[i];\n  vjs.MediaTechController.prototype[vjs.media.ApiMethods[i]] = createMethod(methodName);\n}\n/**\n * @fileoverview HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @param {Function=} ready\n * @constructor\n */\nvjs.Html5 = vjs.MediaTechController.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    // volume cannot be changed from 1 on iOS\n    this.features['volumeControl'] = vjs.Html5.canControlVolume();\n\n    // In iOS, if you move a video element in the DOM, it breaks video playback.\n    this.features['movingMediaElementInDOM'] = !vjs.IS_IOS;\n\n    // HTML video is able to automatically resize when going to fullscreen\n    this.features['fullscreenResize'] = true;\n\n    vjs.MediaTechController.call(this, player, options, ready);\n\n    var source = options['source'];\n\n    // If the element source is already set, we may have missed the loadstart event, and want to trigger it.\n    // We don't want to set the source again and interrupt playback.\n    if (source && this.el_.currentSrc === source.src && this.el_.networkState > 0) {\n      player.trigger('loadstart');\n\n    // Otherwise set the source if one was provided.\n    } else if (source) {\n      this.el_.src = source.src;\n    }\n\n    // Determine if native controls should be used\n    // Our goal should be to get the custom controls on mobile solid everywhere\n    // so we can remove this all together. Right now this will block custom\n    // controls on touch enabled laptops like the Chrome Pixel\n    if (vjs.TOUCH_ENABLED && player.options()['nativeControlsForTouch'] !== false) {\n      this.useNativeControls();\n    }\n\n    // Chrome and Safari both have issues with autoplay.\n    // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n    // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n    // This fixes both issues. Need to wait for API, so it updates displays correctly\n    player.ready(function(){\n      if (this.tag && this.options_['autoplay'] && this.paused()) {\n        delete this.tag['poster']; // Chrome Fix. Fixed in Chrome v16.\n        this.play();\n      }\n    });\n\n    this.setupTriggers();\n    this.triggerReady();\n  }\n});\n\nvjs.Html5.prototype.dispose = function(){\n  vjs.MediaTechController.prototype.dispose.call(this);\n};\n\nvjs.Html5.prototype.createEl = function(){\n  var player = this.player_,\n      // If possible, reuse original tag for HTML5 playback technology element\n      el = player.tag,\n      newEl,\n      clone;\n\n  // Check if this browser supports moving the element into the box.\n  // On the iPhone video will break if you move the element,\n  // So we have to create a brand new element.\n  if (!el || this.features['movingMediaElementInDOM'] === false) {\n\n    // If the original tag is still there, clone and remove it.\n    if (el) {\n      clone = el.cloneNode(false);\n      vjs.Html5.disposeMediaElement(el);\n      el = clone;\n      player.tag = null;\n    } else {\n      el = vjs.createEl('video', {\n        id:player.id() + '_html5_api',\n        className:'vjs-tech'\n      });\n    }\n    // associate the player with the new tag\n    el['player'] = player;\n\n    vjs.insertFirst(el, player.el());\n  }\n\n  // Update specific tag settings, in case they were overridden\n  var attrs = ['autoplay','preload','loop','muted'];\n  for (var i = attrs.length - 1; i >= 0; i--) {\n    var attr = attrs[i];\n    if (player.options_[attr] !== null) {\n      el[attr] = player.options_[attr];\n    }\n  }\n\n  return el;\n  // jenniisawesome = true;\n};\n\n// Make video events trigger player events\n// May seem verbose here, but makes other APIs possible.\nvjs.Html5.prototype.setupTriggers = function(){\n  for (var i = vjs.Html5.Events.length - 1; i >= 0; i--) {\n    vjs.on(this.el_, vjs.Html5.Events[i], vjs.bind(this.player_, this.eventHandler));\n  }\n};\n// Triggers removed using this.off when disposed\n\nvjs.Html5.prototype.eventHandler = function(e){\n  this.trigger(e);\n\n  // No need for media events to bubble up.\n  e.stopPropagation();\n};\n\nvjs.Html5.prototype.useNativeControls = function(){\n  var tech, player, controlsOn, controlsOff, cleanUp;\n\n  tech = this;\n  player = this.player();\n\n  // If the player controls are enabled turn on the native controls\n  tech.setControls(player.controls());\n\n  // Update the native controls when player controls state is updated\n  controlsOn = function(){\n    tech.setControls(true);\n  };\n  controlsOff = function(){\n    tech.setControls(false);\n  };\n  player.on('controlsenabled', controlsOn);\n  player.on('controlsdisabled', controlsOff);\n\n  // Clean up when not using native controls anymore\n  cleanUp = function(){\n    player.off('controlsenabled', controlsOn);\n    player.off('controlsdisabled', controlsOff);\n  };\n  tech.on('dispose', cleanUp);\n  player.on('usingcustomcontrols', cleanUp);\n\n  // Update the state of the player to using native controls\n  player.usingNativeControls(true);\n};\n\n\nvjs.Html5.prototype.play = function(){ this.el_.play(); };\nvjs.Html5.prototype.pause = function(){ this.el_.pause(); };\nvjs.Html5.prototype.paused = function(){ return this.el_.paused; };\n\nvjs.Html5.prototype.currentTime = function(){ return this.el_.currentTime; };\nvjs.Html5.prototype.setCurrentTime = function(seconds){\n  try {\n    this.el_.currentTime = seconds;\n  } catch(e) {\n    vjs.log(e, 'Video is not ready. (Video.js)');\n    // this.warning(VideoJS.warnings.videoNotReady);\n  }\n};\n\nvjs.Html5.prototype.duration = function(){ return this.el_.duration || 0; };\nvjs.Html5.prototype.buffered = function(){ return this.el_.buffered; };\n\nvjs.Html5.prototype.volume = function(){ return this.el_.volume; };\nvjs.Html5.prototype.setVolume = function(percentAsDecimal){ this.el_.volume = percentAsDecimal; };\nvjs.Html5.prototype.muted = function(){ return this.el_.muted; };\nvjs.Html5.prototype.setMuted = function(muted){ this.el_.muted = muted; };\n\nvjs.Html5.prototype.width = function(){ return this.el_.offsetWidth; };\nvjs.Html5.prototype.height = function(){ return this.el_.offsetHeight; };\n\nvjs.Html5.prototype.supportsFullScreen = function(){\n  if (typeof this.el_.webkitEnterFullScreen == 'function') {\n\n    // Seems to be broken in Chromium/Chrome && Safari in Leopard\n    if (/Android/.test(vjs.USER_AGENT) || !/Chrome|Mac OS X 10.5/.test(vjs.USER_AGENT)) {\n      return true;\n    }\n  }\n  return false;\n};\n\nvjs.Html5.prototype.enterFullScreen = function(){\n  var video = this.el_;\n  if (video.paused && video.networkState <= video.HAVE_METADATA) {\n    // attempt to prime the video element for programmatic access\n    // this isn't necessary on the desktop but shouldn't hurt\n    this.el_.play();\n\n    // playing and pausing synchronously during the transition to fullscreen\n    // can get iOS ~6.1 devices into a play/pause loop\n    setTimeout(function(){\n      video.pause();\n      video.webkitEnterFullScreen();\n    }, 0);\n  } else {\n    video.webkitEnterFullScreen();\n  }\n};\nvjs.Html5.prototype.exitFullScreen = function(){\n  this.el_.webkitExitFullScreen();\n};\nvjs.Html5.prototype.src = function(src){ this.el_.src = src; };\nvjs.Html5.prototype.load = function(){ this.el_.load(); };\nvjs.Html5.prototype.currentSrc = function(){ return this.el_.currentSrc; };\n\nvjs.Html5.prototype.preload = function(){ return this.el_.preload; };\nvjs.Html5.prototype.setPreload = function(val){ this.el_.preload = val; };\n\nvjs.Html5.prototype.autoplay = function(){ return this.el_.autoplay; };\nvjs.Html5.prototype.setAutoplay = function(val){ this.el_.autoplay = val; };\n\nvjs.Html5.prototype.controls = function(){ return this.el_.controls; }\nvjs.Html5.prototype.setControls = function(val){ this.el_.controls = !!val; }\n\nvjs.Html5.prototype.loop = function(){ return this.el_.loop; };\nvjs.Html5.prototype.setLoop = function(val){ this.el_.loop = val; };\n\nvjs.Html5.prototype.error = function(){ return this.el_.error; };\nvjs.Html5.prototype.seeking = function(){ return this.el_.seeking; };\nvjs.Html5.prototype.ended = function(){ return this.el_.ended; };\nvjs.Html5.prototype.defaultMuted = function(){ return this.el_.defaultMuted; };\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\nvjs.Html5.isSupported = function(){\n  return !!vjs.TEST_VID.canPlayType;\n};\n\nvjs.Html5.canPlaySource = function(srcObj){\n  // IE9 on Windows 7 without MediaPlayer throws an error here\n  // https://github.com/videojs/video.js/issues/519\n  try {\n    return !!vjs.TEST_VID.canPlayType(srcObj.type);\n  } catch(e) {\n    return '';\n  }\n  // TODO: Check Type\n  // If no Type, check ext\n  // Check Media Type\n};\n\nvjs.Html5.canControlVolume = function(){\n  var volume =  vjs.TEST_VID.volume;\n  vjs.TEST_VID.volume = (volume / 2) + 0.1;\n  return volume !== vjs.TEST_VID.volume;\n};\n\n// List of all HTML5 events (various uses).\nvjs.Html5.Events = 'loadstart,suspend,abort,error,emptied,stalled,loadedmetadata,loadeddata,canplay,canplaythrough,playing,waiting,seeking,seeked,ended,durationchange,timeupdate,progress,play,pause,ratechange,volumechange'.split(',');\n\nvjs.Html5.disposeMediaElement = function(el){\n  if (!el) { return; }\n\n  el['player'] = null;\n\n  if (el.parentNode) {\n    el.parentNode.removeChild(el);\n  }\n\n  // remove any child track or source nodes to prevent their loading\n  while(el.hasChildNodes()) {\n    el.removeChild(el.firstChild);\n  }\n\n  // remove any src reference. not setting `src=''` because that causes a warning\n  // in firefox\n  el.removeAttribute('src');\n\n  // force the media element to update its loading state by calling load()\n  if (typeof el.load === 'function') {\n    el.load();\n  }\n};\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\n\n  // Override Android 2.2 and less canPlayType method which is broken\nif (vjs.IS_OLD_ANDROID) {\n  document.createElement('video').constructor.prototype.canPlayType = function(type){\n    return (type && type.toLowerCase().indexOf('video/mp4') != -1) ? 'maybe' : '';\n  };\n}\n/**\n * @fileoverview VideoJS-SWF - Custom Flash Player with HTML5-ish API\n * https://github.com/zencoder/video-js-swf\n * Not using setupTriggers. Using global onEvent func to distribute events\n */\n\n/**\n * Flash Media Controller - Wrapper for fallback SWF API\n *\n * @param {vjs.Player} player\n * @param {Object=} options\n * @param {Function=} ready\n * @constructor\n */\nvjs.Flash = vjs.MediaTechController.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.MediaTechController.call(this, player, options, ready);\n\n    var source = options['source'],\n\n        // Which element to embed in\n        parentEl = options['parentEl'],\n\n        // Create a temporary element to be replaced by swf object\n        placeHolder = this.el_ = vjs.createEl('div', { id: player.id() + '_temp_flash' }),\n\n        // Generate ID for swf object\n        objId = player.id()+'_flash_api',\n\n        // Store player options in local var for optimization\n        // TODO: switch to using player methods instead of options\n        // e.g. player.autoplay();\n        playerOptions = player.options_,\n\n        // Merge default flashvars with ones passed in to init\n        flashVars = vjs.obj.merge({\n\n          // SWF Callback Functions\n          'readyFunction': 'videojs.Flash.onReady',\n          'eventProxyFunction': 'videojs.Flash.onEvent',\n          'errorEventProxyFunction': 'videojs.Flash.onError',\n\n          // Player Settings\n          'autoplay': playerOptions.autoplay,\n          'preload': playerOptions.preload,\n          'loop': playerOptions.loop,\n          'muted': playerOptions.muted\n\n        }, options['flashVars']),\n\n        // Merge default parames with ones passed in\n        params = vjs.obj.merge({\n          'wmode': 'opaque', // Opaque is needed to overlay controls, but can affect playback performance\n          'bgcolor': '#000000' // Using bgcolor prevents a white flash when the object is loading\n        }, options['params']),\n\n        // Merge default attributes with ones passed in\n        attributes = vjs.obj.merge({\n          'id': objId,\n          'name': objId, // Both ID and Name needed or swf to identifty itself\n          'class': 'vjs-tech'\n        }, options['attributes'])\n    ;\n\n    // If source was supplied pass as a flash var.\n    if (source) {\n      if (source.type && vjs.Flash.isStreamingType(source.type)) {\n        var parts = vjs.Flash.streamToParts(source.src);\n        flashVars['rtmpConnection'] = encodeURIComponent(parts.connection);\n        flashVars['rtmpStream'] = encodeURIComponent(parts.stream);\n      }\n      else {\n        flashVars['src'] = encodeURIComponent(vjs.getAbsoluteURL(source.src));\n      }\n    }\n\n    // Add placeholder to player div\n    vjs.insertFirst(placeHolder, parentEl);\n\n    // Having issues with Flash reloading on certain page actions (hide/resize/fullscreen) in certain browsers\n    // This allows resetting the playhead when we catch the reload\n    if (options['startTime']) {\n      this.ready(function(){\n        this.load();\n        this.play();\n        this.currentTime(options['startTime']);\n      });\n    }\n\n    // Flash iFrame Mode\n    // In web browsers there are multiple instances where changing the parent element or visibility of a plugin causes the plugin to reload.\n    // - Firefox just about always. https://bugzilla.mozilla.org/show_bug.cgi?id=90268 (might be fixed by version 13)\n    // - Webkit when hiding the plugin\n    // - Webkit and Firefox when using requestFullScreen on a parent element\n    // Loading the flash plugin into a dynamically generated iFrame gets around most of these issues.\n    // Issues that remain include hiding the element and requestFullScreen in Firefox specifically\n\n    // There's on particularly annoying issue with this method which is that Firefox throws a security error on an offsite Flash object loaded into a dynamically created iFrame.\n    // Even though the iframe was inserted into a page on the web, Firefox + Flash considers it a local app trying to access an internet file.\n    // I tried mulitple ways of setting the iframe src attribute but couldn't find a src that worked well. Tried a real/fake source, in/out of domain.\n    // Also tried a method from stackoverflow that caused a security error in all browsers. http://stackoverflow.com/questions/2486901/how-to-set-document-domain-for-a-dynamically-generated-iframe\n    // In the end the solution I found to work was setting the iframe window.location.href right before doing a document.write of the Flash object.\n    // The only downside of this it seems to trigger another http request to the original page (no matter what's put in the href). Not sure why that is.\n\n    // NOTE (2012-01-29): Cannot get Firefox to load the remote hosted SWF into a dynamically created iFrame\n    // Firefox 9 throws a security error, unleess you call location.href right before doc.write.\n    //    Not sure why that even works, but it causes the browser to look like it's continuously trying to load the page.\n    // Firefox 3.6 keeps calling the iframe onload function anytime I write to it, causing an endless loop.\n\n    if (options['iFrameMode'] === true && !vjs.IS_FIREFOX) {\n\n      // Create iFrame with vjs-tech class so it's 100% width/height\n      var iFrm = vjs.createEl('iframe', {\n        'id': objId + '_iframe',\n        'name': objId + '_iframe',\n        'className': 'vjs-tech',\n        'scrolling': 'no',\n        'marginWidth': 0,\n        'marginHeight': 0,\n        'frameBorder': 0\n      });\n\n      // Update ready function names in flash vars for iframe window\n      flashVars['readyFunction'] = 'ready';\n      flashVars['eventProxyFunction'] = 'events';\n      flashVars['errorEventProxyFunction'] = 'errors';\n\n      // Tried multiple methods to get this to work in all browsers\n\n      // Tried embedding the flash object in the page first, and then adding a place holder to the iframe, then replacing the placeholder with the page object.\n      // The goal here was to try to load the swf URL in the parent page first and hope that got around the firefox security error\n      // var newObj = vjs.Flash.embed(options['swf'], placeHolder, flashVars, params, attributes);\n      // (in onload)\n      //  var temp = vjs.createEl('a', { id:'asdf', innerHTML: 'asdf' } );\n      //  iDoc.body.appendChild(temp);\n\n      // Tried embedding the flash object through javascript in the iframe source.\n      // This works in webkit but still triggers the firefox security error\n      // iFrm.src = 'javascript: document.write('\"+vjs.Flash.getEmbedCode(options['swf'], flashVars, params, attributes)+\"');\";\n\n      // Tried an actual local iframe just to make sure that works, but it kills the easiness of the CDN version if you require the user to host an iframe\n      // We should add an option to host the iframe locally though, because it could help a lot of issues.\n      // iFrm.src = \"iframe.html\";\n\n      // Wait until iFrame has loaded to write into it.\n      vjs.on(iFrm, 'load', vjs.bind(this, function(){\n\n        var iDoc,\n            iWin = iFrm.contentWindow;\n\n        // The one working method I found was to use the iframe's document.write() to create the swf object\n        // This got around the security issue in all browsers except firefox.\n        // I did find a hack where if I call the iframe's window.location.href='', it would get around the security error\n        // However, the main page would look like it was loading indefinitely (URL bar loading spinner would never stop)\n        // Plus Firefox 3.6 didn't work no matter what I tried.\n        // if (vjs.USER_AGENT.match('Firefox')) {\n        //   iWin.location.href = '';\n        // }\n\n        // Get the iFrame's document depending on what the browser supports\n        iDoc = iFrm.contentDocument ? iFrm.contentDocument : iFrm.contentWindow.document;\n\n        // Tried ensuring both document domains were the same, but they already were, so that wasn't the issue.\n        // Even tried adding /. that was mentioned in a browser security writeup\n        // document.domain = document.domain+'/.';\n        // iDoc.domain = document.domain+'/.';\n\n        // Tried adding the object to the iframe doc's innerHTML. Security error in all browsers.\n        // iDoc.body.innerHTML = swfObjectHTML;\n\n        // Tried appending the object to the iframe doc's body. Security error in all browsers.\n        // iDoc.body.appendChild(swfObject);\n\n        // Using document.write actually got around the security error that browsers were throwing.\n        // Again, it's a dynamically generated (same domain) iframe, loading an external Flash swf.\n        // Not sure why that's a security issue, but apparently it is.\n        iDoc.write(vjs.Flash.getEmbedCode(options['swf'], flashVars, params, attributes));\n\n        // Setting variables on the window needs to come after the doc write because otherwise they can get reset in some browsers\n        // So far no issues with swf ready event being called before it's set on the window.\n        iWin['player'] = this.player_;\n\n        // Create swf ready function for iFrame window\n        iWin['ready'] = vjs.bind(this.player_, function(currSwf){\n          var el = iDoc.getElementById(currSwf),\n              player = this,\n              tech = player.tech;\n\n          // Update reference to playback technology element\n          tech.el_ = el;\n\n          // Make sure swf is actually ready. Sometimes the API isn't actually yet.\n          vjs.Flash.checkReady(tech);\n        });\n\n        // Create event listener for all swf events\n        iWin['events'] = vjs.bind(this.player_, function(swfID, eventName){\n          var player = this;\n          if (player && player.techName === 'flash') {\n            player.trigger(eventName);\n          }\n        });\n\n        // Create error listener for all swf errors\n        iWin['errors'] = vjs.bind(this.player_, function(swfID, eventName){\n          vjs.log('Flash Error', eventName);\n        });\n\n      }));\n\n      // Replace placeholder with iFrame (it will load now)\n      placeHolder.parentNode.replaceChild(iFrm, placeHolder);\n\n    // If not using iFrame mode, embed as normal object\n    } else {\n      vjs.Flash.embed(options['swf'], placeHolder, flashVars, params, attributes);\n    }\n  }\n});\n\nvjs.Flash.prototype.dispose = function(){\n  vjs.MediaTechController.prototype.dispose.call(this);\n};\n\nvjs.Flash.prototype.play = function(){\n  this.el_.vjs_play();\n};\n\nvjs.Flash.prototype.pause = function(){\n  this.el_.vjs_pause();\n};\n\nvjs.Flash.prototype.src = function(src){\n  if (vjs.Flash.isStreamingSrc(src)) {\n    src = vjs.Flash.streamToParts(src);\n    this.setRtmpConnection(src.connection);\n    this.setRtmpStream(src.stream);\n  }\n  else {\n    // Make sure source URL is abosolute.\n    src = vjs.getAbsoluteURL(src);\n    this.el_.vjs_src(src);\n  }\n\n  // Currently the SWF doesn't autoplay if you load a source later.\n  // e.g. Load player w/ no source, wait 2s, set src.\n  if (this.player_.autoplay()) {\n    var tech = this;\n    setTimeout(function(){ tech.play(); }, 0);\n  }\n};\n\nvjs.Flash.prototype.currentSrc = function(){\n  var src = this.el_.vjs_getProperty('currentSrc');\n  // no src, check and see if RTMP\n  if (src == null) {\n    var connection = this.rtmpConnection(),\n        stream = this.rtmpStream();\n\n    if (connection && stream) {\n      src = vjs.Flash.streamFromParts(connection, stream);\n    }\n  }\n  return src;\n};\n\nvjs.Flash.prototype.load = function(){\n  this.el_.vjs_load();\n};\n\nvjs.Flash.prototype.poster = function(){\n  this.el_.vjs_getProperty('poster');\n};\n\nvjs.Flash.prototype.buffered = function(){\n  return vjs.createTimeRange(0, this.el_.vjs_getProperty('buffered'));\n};\n\nvjs.Flash.prototype.supportsFullScreen = function(){\n  return false; // Flash does not allow fullscreen through javascript\n};\n\nvjs.Flash.prototype.enterFullScreen = function(){\n  return false;\n};\n\n\n// Create setters and getters for attributes\nvar api = vjs.Flash.prototype,\n    readWrite = 'rtmpConnection,rtmpStream,preload,currentTime,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(','),\n    readOnly = 'error,currentSrc,networkState,readyState,seeking,initialTime,duration,startOffsetTime,paused,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks'.split(',');\n    // Overridden: buffered\n\n/**\n * @this {*}\n * @private\n */\nvar createSetter = function(attr){\n  var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n  api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n};\n\n/**\n * @this {*}\n * @private\n */\nvar createGetter = function(attr){\n  api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n};\n\n(function(){\n  var i;\n  // Create getter and setters for all read/write attributes\n  for (i = 0; i < readWrite.length; i++) {\n    createGetter(readWrite[i]);\n    createSetter(readWrite[i]);\n  }\n\n  // Create getters for read-only attributes\n  for (i = 0; i < readOnly.length; i++) {\n    createGetter(readOnly[i]);\n  }\n})();\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nvjs.Flash.isSupported = function(){\n  return vjs.Flash.version()[0] >= 10;\n  // return swfobject.hasFlashPlayerVersion('10');\n};\n\nvjs.Flash.canPlaySource = function(srcObj){\n  var type;\n\n  if (!srcObj.type) {\n    return '';\n  }\n\n  type = srcObj.type.replace(/;.*/,'').toLowerCase();\n  if (type in vjs.Flash.formats || type in vjs.Flash.streamingFormats) {\n    return 'maybe';\n  }\n};\n\nvjs.Flash.formats = {\n  'video/flv': 'FLV',\n  'video/x-flv': 'FLV',\n  'video/mp4': 'MP4',\n  'video/m4v': 'MP4'\n};\n\nvjs.Flash.streamingFormats = {\n  'rtmp/mp4': 'MP4',\n  'rtmp/flv': 'FLV'\n};\n\nvjs.Flash['onReady'] = function(currSwf){\n  var el = vjs.el(currSwf);\n\n  // Get player from box\n  // On firefox reloads, el might already have a player\n  var player = el['player'] || el.parentNode['player'],\n      tech = player.tech;\n\n  // Reference player on tech element\n  el['player'] = player;\n\n  // Update reference to playback technology element\n  tech.el_ = el;\n\n  vjs.Flash.checkReady(tech);\n};\n\n// The SWF isn't alwasy ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nvjs.Flash.checkReady = function(tech){\n\n  // Check if API property exists\n  if (tech.el().vjs_getProperty) {\n\n    // If so, tell tech it's ready\n    tech.triggerReady();\n\n  // Otherwise wait longer.\n  } else {\n\n    setTimeout(function(){\n      vjs.Flash.checkReady(tech);\n    }, 50);\n\n  }\n};\n\n// Trigger events from the swf on the player\nvjs.Flash['onEvent'] = function(swfID, eventName){\n  var player = vjs.el(swfID)['player'];\n  player.trigger(eventName);\n};\n\n// Log errors from the swf\nvjs.Flash['onError'] = function(swfID, err){\n  var player = vjs.el(swfID)['player'];\n  player.trigger('error');\n  vjs.log('Flash Error', err, swfID);\n};\n\n// Flash Version Check\nvjs.Flash.version = function(){\n  var version = '0,0,0';\n\n  // IE\n  try {\n    version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n  // other browsers\n  } catch(e) {\n    try {\n      if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n        version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n      }\n    } catch(err) {}\n  }\n  return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nvjs.Flash.embed = function(swf, placeHolder, flashVars, params, attributes){\n  var code = vjs.Flash.getEmbedCode(swf, flashVars, params, attributes),\n\n      // Get element by embedding code and retrieving created element\n      obj = vjs.createEl('div', { innerHTML: code }).childNodes[0],\n\n      par = placeHolder.parentNode\n  ;\n\n  placeHolder.parentNode.replaceChild(obj, placeHolder);\n\n  // IE6 seems to have an issue where it won't initialize the swf object after injecting it.\n  // This is a dumb fix\n  var newObj = par.childNodes[0];\n  setTimeout(function(){\n    newObj.style.display = 'block';\n  }, 1000);\n\n  return obj;\n\n};\n\nvjs.Flash.getEmbedCode = function(swf, flashVars, params, attributes){\n\n  var objTag = '<object type=\"application/x-shockwave-flash\"',\n      flashVarsString = '',\n      paramsString = '',\n      attrsString = '';\n\n  // Convert flash vars to string\n  if (flashVars) {\n    vjs.obj.each(flashVars, function(key, val){\n      flashVarsString += (key + '=' + val + '&amp;');\n    });\n  }\n\n  // Add swf, flashVars, and other default params\n  params = vjs.obj.merge({\n    'movie': swf,\n    'flashvars': flashVarsString,\n    'allowScriptAccess': 'always', // Required to talk to swf\n    'allowNetworking': 'all' // All should be default, but having security issues.\n  }, params);\n\n  // Create param tags string\n  vjs.obj.each(params, function(key, val){\n    paramsString += '<param name=\"'+key+'\" value=\"'+val+'\" />';\n  });\n\n  attributes = vjs.obj.merge({\n    // Add swf to attributes (need both for IE and Others to work)\n    'data': swf,\n\n    // Default to 100% width/height\n    'width': '100%',\n    'height': '100%'\n\n  }, attributes);\n\n  // Create Attributes string\n  vjs.obj.each(attributes, function(key, val){\n    attrsString += (key + '=\"' + val + '\" ');\n  });\n\n  return objTag + attrsString + '>' + paramsString + '</object>';\n};\n\nvjs.Flash.streamFromParts = function(connection, stream) {\n  return connection + '&' + stream;\n};\n\nvjs.Flash.streamToParts = function(src) {\n  var parts = {\n    connection: '',\n    stream: ''\n  };\n\n  if (! src) {\n    return parts;\n  }\n\n  // Look for the normal URL separator we expect, '&'.\n  // If found, we split the URL into two pieces around the\n  // first '&'.\n  var connEnd = src.indexOf('&');\n  var streamBegin;\n  if (connEnd !== -1) {\n    streamBegin = connEnd + 1;\n  }\n  else {\n    // If there's not a '&', we use the last '/' as the delimiter.\n    connEnd = streamBegin = src.lastIndexOf('/') + 1;\n    if (connEnd === 0) {\n      // really, there's not a '/'?\n      connEnd = streamBegin = src.length;\n    }\n  }\n  parts.connection = src.substring(0, connEnd);\n  parts.stream = src.substring(streamBegin, src.length);\n\n  return parts;\n};\n\nvjs.Flash.isStreamingType = function(srcType) {\n  return srcType in vjs.Flash.streamingFormats;\n};\n\n// RTMP has four variations, any string starting\n// with one of these protocols should be valid\nvjs.Flash.RTMP_RE = /^rtmp[set]?:\\/\\//i;\n\nvjs.Flash.isStreamingSrc = function(src) {\n  return vjs.Flash.RTMP_RE.test(src);\n};\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @constructor\n */\nvjs.MediaLoader = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.Component.call(this, player, options, ready);\n\n    // If there are no sources when the player is initialized,\n    // load the first supported playback technology.\n    if (!player.options_['sources'] || player.options_['sources'].length === 0) {\n      for (var i=0,j=player.options_['techOrder']; i<j.length; i++) {\n        var techName = vjs.capitalize(j[i]),\n            tech = window['videojs'][techName];\n\n        // Check if the browser supports this technology\n        if (tech && tech.isSupported()) {\n          player.loadTech(techName);\n          break;\n        }\n      }\n    } else {\n      // // Loop through playback technologies (HTML5, Flash) and check for support.\n      // // Then load the best source.\n      // // A few assumptions here:\n      // //   All playback technologies respect preload false.\n      player.src(player.options_['sources']);\n    }\n  }\n});\n/**\n * @fileoverview Text Tracks\n * Text tracks are tracks of timed text events.\n * Captions - text displayed over the video for the hearing impared\n * Subtitles - text displayed over the video for those who don't understand langauge in the video\n * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n */\n\n// Player Additions - Functions add to the player object for easier access to tracks\n\n/**\n * List of associated text tracks\n * @type {Array}\n * @private\n */\nvjs.Player.prototype.textTracks_;\n\n/**\n * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n * @return {Array}           Array of track objects\n * @private\n */\nvjs.Player.prototype.textTracks = function(){\n  this.textTracks_ = this.textTracks_ || [];\n  return this.textTracks_;\n};\n\n/**\n * Add a text track\n * In addition to the W3C settings we allow adding additional info through options.\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n * @param {String}  kind        Captions, subtitles, chapters, descriptions, or metadata\n * @param {String=} label       Optional label\n * @param {String=} language    Optional language\n * @param {Object=} options     Additional track options, like src\n * @private\n */\nvjs.Player.prototype.addTextTrack = function(kind, label, language, options){\n  var tracks = this.textTracks_ = this.textTracks_ || [];\n  options = options || {};\n\n  options['kind'] = kind;\n  options['label'] = label;\n  options['language'] = language;\n\n  // HTML5 Spec says default to subtitles.\n  // Uppercase first letter to match class names\n  var Kind = vjs.capitalize(kind || 'subtitles');\n\n  // Create correct texttrack class. CaptionsTrack, etc.\n  var track = new window['videojs'][Kind + 'Track'](this, options);\n\n  tracks.push(track);\n\n  // If track.dflt() is set, start showing immediately\n  // TODO: Add a process to deterime the best track to show for the specific kind\n  // Incase there are mulitple defaulted tracks of the same kind\n  // Or the user has a set preference of a specific language that should override the default\n  // if (track.dflt()) {\n  //   this.ready(vjs.bind(track, track.show));\n  // }\n\n  return track;\n};\n\n/**\n * Add an array of text tracks. captions, subtitles, chapters, descriptions\n * Track objects will be stored in the player.textTracks() array\n * @param {Array} trackList Array of track elements or objects (fake track elements)\n * @private\n */\nvjs.Player.prototype.addTextTracks = function(trackList){\n  var trackObj;\n\n  for (var i = 0; i < trackList.length; i++) {\n    trackObj = trackList[i];\n    this.addTextTrack(trackObj['kind'], trackObj['label'], trackObj['language'], trackObj);\n  }\n\n  return this;\n};\n\n// Show a text track\n// disableSameKind: disable all other tracks of the same kind. Value should be a track kind (captions, etc.)\nvjs.Player.prototype.showTextTrack = function(id, disableSameKind){\n  var tracks = this.textTracks_,\n      i = 0,\n      j = tracks.length,\n      track, showTrack, kind;\n\n  // Find Track with same ID\n  for (;i<j;i++) {\n    track = tracks[i];\n    if (track.id() === id) {\n      track.show();\n      showTrack = track;\n\n    // Disable tracks of the same kind\n    } else if (disableSameKind && track.kind() == disableSameKind && track.mode() > 0) {\n      track.disable();\n    }\n  }\n\n  // Get track kind from shown track or disableSameKind\n  kind = (showTrack) ? showTrack.kind() : ((disableSameKind) ? disableSameKind : false);\n\n  // Trigger trackchange event, captionstrackchange, subtitlestrackchange, etc.\n  if (kind) {\n    this.trigger(kind+'trackchange');\n  }\n\n  return this;\n};\n\n/**\n * The base class for all text tracks\n *\n * Handles the parsing, hiding, and showing of text track cues\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.TextTrack = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    // Apply track info to track object\n    // Options will often be a track element\n\n    // Build ID if one doesn't exist\n    this.id_ = options['id'] || ('vjs_' + options['kind'] + '_' + options['language'] + '_' + vjs.guid++);\n    this.src_ = options['src'];\n    // 'default' is a reserved keyword in js so we use an abbreviated version\n    this.dflt_ = options['default'] || options['dflt'];\n    this.title_ = options['title'];\n    this.language_ = options['srclang'];\n    this.label_ = options['label'];\n    this.cues_ = [];\n    this.activeCues_ = [];\n    this.readyState_ = 0;\n    this.mode_ = 0;\n\n    this.player_.on('fullscreenchange', vjs.bind(this, this.adjustFontSize));\n  }\n});\n\n/**\n * Track kind value. Captions, subtitles, etc.\n * @private\n */\nvjs.TextTrack.prototype.kind_;\n\n/**\n * Get the track kind value\n * @return {String}\n */\nvjs.TextTrack.prototype.kind = function(){\n  return this.kind_;\n};\n\n/**\n * Track src value\n * @private\n */\nvjs.TextTrack.prototype.src_;\n\n/**\n * Get the track src value\n * @return {String}\n */\nvjs.TextTrack.prototype.src = function(){\n  return this.src_;\n};\n\n/**\n * Track default value\n * If default is used, subtitles/captions to start showing\n * @private\n */\nvjs.TextTrack.prototype.dflt_;\n\n/**\n * Get the track default value. ('default' is a reserved keyword)\n * @return {Boolean}\n */\nvjs.TextTrack.prototype.dflt = function(){\n  return this.dflt_;\n};\n\n/**\n * Track title value\n * @private\n */\nvjs.TextTrack.prototype.title_;\n\n/**\n * Get the track title value\n * @return {String}\n */\nvjs.TextTrack.prototype.title = function(){\n  return this.title_;\n};\n\n/**\n * Language - two letter string to represent track language, e.g. 'en' for English\n * Spec def: readonly attribute DOMString language;\n * @private\n */\nvjs.TextTrack.prototype.language_;\n\n/**\n * Get the track language value\n * @return {String}\n */\nvjs.TextTrack.prototype.language = function(){\n  return this.language_;\n};\n\n/**\n * Track label e.g. 'English'\n * Spec def: readonly attribute DOMString label;\n * @private\n */\nvjs.TextTrack.prototype.label_;\n\n/**\n * Get the track label value\n * @return {String}\n */\nvjs.TextTrack.prototype.label = function(){\n  return this.label_;\n};\n\n/**\n * All cues of the track. Cues have a startTime, endTime, text, and other properties.\n * Spec def: readonly attribute TextTrackCueList cues;\n * @private\n */\nvjs.TextTrack.prototype.cues_;\n\n/**\n * Get the track cues\n * @return {Array}\n */\nvjs.TextTrack.prototype.cues = function(){\n  return this.cues_;\n};\n\n/**\n * ActiveCues is all cues that are currently showing\n * Spec def: readonly attribute TextTrackCueList activeCues;\n * @private\n */\nvjs.TextTrack.prototype.activeCues_;\n\n/**\n * Get the track active cues\n * @return {Array}\n */\nvjs.TextTrack.prototype.activeCues = function(){\n  return this.activeCues_;\n};\n\n/**\n * ReadyState describes if the text file has been loaded\n * const unsigned short NONE = 0;\n * const unsigned short LOADING = 1;\n * const unsigned short LOADED = 2;\n * const unsigned short ERROR = 3;\n * readonly attribute unsigned short readyState;\n * @private\n */\nvjs.TextTrack.prototype.readyState_;\n\n/**\n * Get the track readyState\n * @return {Number}\n */\nvjs.TextTrack.prototype.readyState = function(){\n  return this.readyState_;\n};\n\n/**\n * Mode describes if the track is showing, hidden, or disabled\n * const unsigned short OFF = 0;\n * const unsigned short HIDDEN = 1; (still triggering cuechange events, but not visible)\n * const unsigned short SHOWING = 2;\n * attribute unsigned short mode;\n * @private\n */\nvjs.TextTrack.prototype.mode_;\n\n/**\n * Get the track mode\n * @return {Number}\n */\nvjs.TextTrack.prototype.mode = function(){\n  return this.mode_;\n};\n\n/**\n * Change the font size of the text track to make it larger when playing in fullscreen mode\n * and restore it to its normal size when not in fullscreen mode.\n */\nvjs.TextTrack.prototype.adjustFontSize = function(){\n    if (this.player_.isFullScreen) {\n        // Scale the font by the same factor as increasing the video width to the full screen window width.\n        // Additionally, multiply that factor by 1.4, which is the default font size for\n        // the caption track (from the CSS)\n        this.el_.style.fontSize = screen.width / this.player_.width() * 1.4 * 100 + '%';\n    } else {\n        // Change the font size of the text track back to its original non-fullscreen size\n        this.el_.style.fontSize = '';\n    }\n};\n\n/**\n * Create basic div to hold cue text\n * @return {Element}\n */\nvjs.TextTrack.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-' + this.kind_ + ' vjs-text-track'\n  });\n};\n\n/**\n * Show: Mode Showing (2)\n * Indicates that the text track is active. If no attempt has yet been made to obtain the track's cues, the user agent will perform such an attempt momentarily.\n * The user agent is maintaining a list of which cues are active, and events are being fired accordingly.\n * In addition, for text tracks whose kind is subtitles or captions, the cues are being displayed over the video as appropriate;\n * for text tracks whose kind is descriptions, the user agent is making the cues available to the user in a non-visual fashion;\n * and for text tracks whose kind is chapters, the user agent is making available to the user a mechanism by which the user can navigate to any point in the media resource by selecting a cue.\n * The showing by default state is used in conjunction with the default attribute on track elements to indicate that the text track was enabled due to that attribute.\n * This allows the user agent to override the state if a later track is discovered that is more appropriate per the user's preferences.\n */\nvjs.TextTrack.prototype.show = function(){\n  this.activate();\n\n  this.mode_ = 2;\n\n  // Show element.\n  vjs.Component.prototype.show.call(this);\n};\n\n/**\n * Hide: Mode Hidden (1)\n * Indicates that the text track is active, but that the user agent is not actively displaying the cues.\n * If no attempt has yet been made to obtain the track's cues, the user agent will perform such an attempt momentarily.\n * The user agent is maintaining a list of which cues are active, and events are being fired accordingly.\n */\nvjs.TextTrack.prototype.hide = function(){\n  // When hidden, cues are still triggered. Disable to stop triggering.\n  this.activate();\n\n  this.mode_ = 1;\n\n  // Hide element.\n  vjs.Component.prototype.hide.call(this);\n};\n\n/**\n * Disable: Mode Off/Disable (0)\n * Indicates that the text track is not active. Other than for the purposes of exposing the track in the DOM, the user agent is ignoring the text track.\n * No cues are active, no events are fired, and the user agent will not attempt to obtain the track's cues.\n */\nvjs.TextTrack.prototype.disable = function(){\n  // If showing, hide.\n  if (this.mode_ == 2) { this.hide(); }\n\n  // Stop triggering cues\n  this.deactivate();\n\n  // Switch Mode to Off\n  this.mode_ = 0;\n};\n\n/**\n * Turn on cue tracking. Tracks that are showing OR hidden are active.\n */\nvjs.TextTrack.prototype.activate = function(){\n  // Load text file if it hasn't been yet.\n  if (this.readyState_ === 0) { this.load(); }\n\n  // Only activate if not already active.\n  if (this.mode_ === 0) {\n    // Update current cue on timeupdate\n    // Using unique ID for bind function so other tracks don't remove listener\n    this.player_.on('timeupdate', vjs.bind(this, this.update, this.id_));\n\n    // Reset cue time on media end\n    this.player_.on('ended', vjs.bind(this, this.reset, this.id_));\n\n    // Add to display\n    if (this.kind_ === 'captions' || this.kind_ === 'subtitles') {\n      this.player_.getChild('textTrackDisplay').addChild(this);\n    }\n  }\n};\n\n/**\n * Turn off cue tracking.\n */\nvjs.TextTrack.prototype.deactivate = function(){\n  // Using unique ID for bind function so other tracks don't remove listener\n  this.player_.off('timeupdate', vjs.bind(this, this.update, this.id_));\n  this.player_.off('ended', vjs.bind(this, this.reset, this.id_));\n  this.reset(); // Reset\n\n  // Remove from display\n  this.player_.getChild('textTrackDisplay').removeChild(this);\n};\n\n// A readiness state\n// One of the following:\n//\n// Not loaded\n// Indicates that the text track is known to exist (e.g. it has been declared with a track element), but its cues have not been obtained.\n//\n// Loading\n// Indicates that the text track is loading and there have been no fatal errors encountered so far. Further cues might still be added to the track.\n//\n// Loaded\n// Indicates that the text track has been loaded with no fatal errors. No new cues will be added to the track except if the text track corresponds to a MutableTextTrack object.\n//\n// Failed to load\n// Indicates that the text track was enabled, but when the user agent attempted to obtain it, this failed in some way (e.g. URL could not be resolved, network error, unknown text track format). Some or all of the cues are likely missing and will not be obtained.\nvjs.TextTrack.prototype.load = function(){\n\n  // Only load if not loaded yet.\n  if (this.readyState_ === 0) {\n    this.readyState_ = 1;\n    vjs.get(this.src_, vjs.bind(this, this.parseCues), vjs.bind(this, this.onError));\n  }\n\n};\n\nvjs.TextTrack.prototype.onError = function(err){\n  this.error = err;\n  this.readyState_ = 3;\n  this.trigger('error');\n};\n\n// Parse the WebVTT text format for cue times.\n// TODO: Separate parser into own class so alternative timed text formats can be used. (TTML, DFXP)\nvjs.TextTrack.prototype.parseCues = function(srcContent) {\n  var cue, time, text,\n      lines = srcContent.split('\\n'),\n      line = '', id;\n\n  for (var i=1, j=lines.length; i<j; i++) {\n    // Line 0 should be 'WEBVTT', so skipping i=0\n\n    line = vjs.trim(lines[i]); // Trim whitespace and linebreaks\n\n    if (line) { // Loop until a line with content\n\n      // First line could be an optional cue ID\n      // Check if line has the time separator\n      if (line.indexOf('-->') == -1) {\n        id = line;\n        // Advance to next line for timing.\n        line = vjs.trim(lines[++i]);\n      } else {\n        id = this.cues_.length;\n      }\n\n      // First line - Number\n      cue = {\n        id: id, // Cue Number\n        index: this.cues_.length // Position in Array\n      };\n\n      // Timing line\n      time = line.split(' --> ');\n      cue.startTime = this.parseCueTime(time[0]);\n      cue.endTime = this.parseCueTime(time[1]);\n\n      // Additional lines - Cue Text\n      text = [];\n\n      // Loop until a blank line or end of lines\n      // Assumeing trim('') returns false for blank lines\n      while (lines[++i] && (line = vjs.trim(lines[i]))) {\n        text.push(line);\n      }\n\n      cue.text = text.join('<br/>');\n\n      // Add this cue\n      this.cues_.push(cue);\n    }\n  }\n\n  this.readyState_ = 2;\n  this.trigger('loaded');\n};\n\n\nvjs.TextTrack.prototype.parseCueTime = function(timeText) {\n  var parts = timeText.split(':'),\n      time = 0,\n      hours, minutes, other, seconds, ms;\n\n  // Check if optional hours place is included\n  // 00:00:00.000 vs. 00:00.000\n  if (parts.length == 3) {\n    hours = parts[0];\n    minutes = parts[1];\n    other = parts[2];\n  } else {\n    hours = 0;\n    minutes = parts[0];\n    other = parts[1];\n  }\n\n  // Break other (seconds, milliseconds, and flags) by spaces\n  // TODO: Make additional cue layout settings work with flags\n  other = other.split(/\\s+/);\n  // Remove seconds. Seconds is the first part before any spaces.\n  seconds = other.splice(0,1)[0];\n  // Could use either . or , for decimal\n  seconds = seconds.split(/\\.|,/);\n  // Get milliseconds\n  ms = parseFloat(seconds[1]);\n  seconds = seconds[0];\n\n  // hours => seconds\n  time += parseFloat(hours) * 3600;\n  // minutes => seconds\n  time += parseFloat(minutes) * 60;\n  // Add seconds\n  time += parseFloat(seconds);\n  // Add milliseconds\n  if (ms) { time += ms/1000; }\n\n  return time;\n};\n\n// Update active cues whenever timeupdate events are triggered on the player.\nvjs.TextTrack.prototype.update = function(){\n  if (this.cues_.length > 0) {\n\n    // Get curent player time\n    var time = this.player_.currentTime();\n\n    // Check if the new time is outside the time box created by the the last update.\n    if (this.prevChange === undefined || time < this.prevChange || this.nextChange <= time) {\n      var cues = this.cues_,\n\n          // Create a new time box for this state.\n          newNextChange = this.player_.duration(), // Start at beginning of the timeline\n          newPrevChange = 0, // Start at end\n\n          reverse = false, // Set the direction of the loop through the cues. Optimized the cue check.\n          newCues = [], // Store new active cues.\n\n          // Store where in the loop the current active cues are, to provide a smart starting point for the next loop.\n          firstActiveIndex, lastActiveIndex,\n          cue, i; // Loop vars\n\n      // Check if time is going forwards or backwards (scrubbing/rewinding)\n      // If we know the direction we can optimize the starting position and direction of the loop through the cues array.\n      if (time >= this.nextChange || this.nextChange === undefined) { // NextChange should happen\n        // Forwards, so start at the index of the first active cue and loop forward\n        i = (this.firstActiveIndex !== undefined) ? this.firstActiveIndex : 0;\n      } else {\n        // Backwards, so start at the index of the last active cue and loop backward\n        reverse = true;\n        i = (this.lastActiveIndex !== undefined) ? this.lastActiveIndex : cues.length - 1;\n      }\n\n      while (true) { // Loop until broken\n        cue = cues[i];\n\n        // Cue ended at this point\n        if (cue.endTime <= time) {\n          newPrevChange = Math.max(newPrevChange, cue.endTime);\n\n          if (cue.active) {\n            cue.active = false;\n          }\n\n          // No earlier cues should have an active start time.\n          // Nevermind. Assume first cue could have a duration the same as the video.\n          // In that case we need to loop all the way back to the beginning.\n          // if (reverse && cue.startTime) { break; }\n\n        // Cue hasn't started\n        } else if (time < cue.startTime) {\n          newNextChange = Math.min(newNextChange, cue.startTime);\n\n          if (cue.active) {\n            cue.active = false;\n          }\n\n          // No later cues should have an active start time.\n          if (!reverse) { break; }\n\n        // Cue is current\n        } else {\n\n          if (reverse) {\n            // Add cue to front of array to keep in time order\n            newCues.splice(0,0,cue);\n\n            // If in reverse, the first current cue is our lastActiveCue\n            if (lastActiveIndex === undefined) { lastActiveIndex = i; }\n            firstActiveIndex = i;\n          } else {\n            // Add cue to end of array\n            newCues.push(cue);\n\n            // If forward, the first current cue is our firstActiveIndex\n            if (firstActiveIndex === undefined) { firstActiveIndex = i; }\n            lastActiveIndex = i;\n          }\n\n          newNextChange = Math.min(newNextChange, cue.endTime);\n          newPrevChange = Math.max(newPrevChange, cue.startTime);\n\n          cue.active = true;\n        }\n\n        if (reverse) {\n          // Reverse down the array of cues, break if at first\n          if (i === 0) { break; } else { i--; }\n        } else {\n          // Walk up the array fo cues, break if at last\n          if (i === cues.length - 1) { break; } else { i++; }\n        }\n\n      }\n\n      this.activeCues_ = newCues;\n      this.nextChange = newNextChange;\n      this.prevChange = newPrevChange;\n      this.firstActiveIndex = firstActiveIndex;\n      this.lastActiveIndex = lastActiveIndex;\n\n      this.updateDisplay();\n\n      this.trigger('cuechange');\n    }\n  }\n};\n\n// Add cue HTML to display\nvjs.TextTrack.prototype.updateDisplay = function(){\n  var cues = this.activeCues_,\n      html = '',\n      i=0,j=cues.length;\n\n  for (;i<j;i++) {\n    html += '<span class=\"vjs-tt-cue\">'+cues[i].text+'</span>';\n  }\n\n  this.el_.innerHTML = html;\n};\n\n// Set all loop helper values back\nvjs.TextTrack.prototype.reset = function(){\n  this.nextChange = 0;\n  this.prevChange = this.player_.duration();\n  this.firstActiveIndex = 0;\n  this.lastActiveIndex = 0;\n};\n\n// Create specific track types\n/**\n * The track component for managing the hiding and showing of captions\n *\n * @constructor\n */\nvjs.CaptionsTrack = vjs.TextTrack.extend();\nvjs.CaptionsTrack.prototype.kind_ = 'captions';\n// Exporting here because Track creation requires the track kind\n// to be available on global object. e.g. new window['videojs'][Kind + 'Track']\n\n/**\n * The track component for managing the hiding and showing of subtitles\n *\n * @constructor\n */\nvjs.SubtitlesTrack = vjs.TextTrack.extend();\nvjs.SubtitlesTrack.prototype.kind_ = 'subtitles';\n\n/**\n * The track component for managing the hiding and showing of chapters\n *\n * @constructor\n */\nvjs.ChaptersTrack = vjs.TextTrack.extend();\nvjs.ChaptersTrack.prototype.kind_ = 'chapters';\n\n\n/* Text Track Display\n============================================================================= */\n// Global container for both subtitle and captions text. Simple div container.\n\n/**\n * The component for displaying text track cues\n *\n * @constructor\n */\nvjs.TextTrackDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.Component.call(this, player, options, ready);\n\n    // This used to be called during player init, but was causing an error\n    // if a track should show by default and the display hadn't loaded yet.\n    // Should probably be moved to an external track loader when we support\n    // tracks that don't need a display.\n    if (player.options_['tracks'] && player.options_['tracks'].length > 0) {\n      this.player_.addTextTracks(player.options_['tracks']);\n    }\n  }\n});\n\nvjs.TextTrackDisplay.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-text-track-display'\n  });\n};\n\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @constructor\n */\nvjs.TextTrackMenuItem = vjs.MenuItem.extend({\n  /** @constructor */\n  init: function(player, options){\n    var track = this.track = options['track'];\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = track.label();\n    options['selected'] = track.dflt();\n    vjs.MenuItem.call(this, player, options);\n\n    this.player_.on(track.kind() + 'trackchange', vjs.bind(this, this.update));\n  }\n});\n\nvjs.TextTrackMenuItem.prototype.onClick = function(){\n  vjs.MenuItem.prototype.onClick.call(this);\n  this.player_.showTextTrack(this.track.id_, this.track.kind());\n};\n\nvjs.TextTrackMenuItem.prototype.update = function(){\n  this.selected(this.track.mode() == 2);\n};\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @constructor\n */\nvjs.OffTextTrackMenuItem = vjs.TextTrackMenuItem.extend({\n  /** @constructor */\n  init: function(player, options){\n    // Create pseudo track info\n    // Requires options['kind']\n    options['track'] = {\n      kind: function() { return options['kind']; },\n      player: player,\n      label: function(){ return options['kind'] + ' off'; },\n      dflt: function(){ return false; },\n      mode: function(){ return false; }\n    };\n    vjs.TextTrackMenuItem.call(this, player, options);\n    this.selected(true);\n  }\n});\n\nvjs.OffTextTrackMenuItem.prototype.onClick = function(){\n  vjs.TextTrackMenuItem.prototype.onClick.call(this);\n  this.player_.showTextTrack(this.track.id_, this.track.kind());\n};\n\nvjs.OffTextTrackMenuItem.prototype.update = function(){\n  var tracks = this.player_.textTracks(),\n      i=0, j=tracks.length, track,\n      off = true;\n\n  for (;i<j;i++) {\n    track = tracks[i];\n    if (track.kind() == this.track.kind() && track.mode() == 2) {\n      off = false;\n    }\n  }\n\n  this.selected(off);\n};\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @constructor\n */\nvjs.TextTrackButton = vjs.MenuButton.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.MenuButton.call(this, player, options);\n\n    if (this.items.length <= 1) {\n      this.hide();\n    }\n  }\n});\n\n// vjs.TextTrackButton.prototype.buttonPressed = false;\n\n// vjs.TextTrackButton.prototype.createMenu = function(){\n//   var menu = new vjs.Menu(this.player_);\n\n//   // Add a title list item to the top\n//   // menu.el().appendChild(vjs.createEl('li', {\n//   //   className: 'vjs-menu-title',\n//   //   innerHTML: vjs.capitalize(this.kind_),\n//   //   tabindex: -1\n//   // }));\n\n//   this.items = this.createItems();\n\n//   // Add menu items to the menu\n//   for (var i = 0; i < this.items.length; i++) {\n//     menu.addItem(this.items[i]);\n//   }\n\n//   // Add list to element\n//   this.addChild(menu);\n\n//   return menu;\n// };\n\n// Create a menu item for each text track\nvjs.TextTrackButton.prototype.createItems = function(){\n  var items = [], track;\n\n  // Add an OFF menu item to turn all tracks off\n  items.push(new vjs.OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));\n\n  for (var i = 0; i < this.player_.textTracks().length; i++) {\n    track = this.player_.textTracks()[i];\n    if (track.kind() === this.kind_) {\n      items.push(new vjs.TextTrackMenuItem(this.player_, {\n        'track': track\n      }));\n    }\n  }\n\n  return items;\n};\n\n/**\n * The button component for toggling and selecting captions\n *\n * @constructor\n */\nvjs.CaptionsButton = vjs.TextTrackButton.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.TextTrackButton.call(this, player, options, ready);\n    this.el_.setAttribute('aria-label','Captions Menu');\n  }\n});\nvjs.CaptionsButton.prototype.kind_ = 'captions';\nvjs.CaptionsButton.prototype.buttonText = 'Captions';\nvjs.CaptionsButton.prototype.className = 'vjs-captions-button';\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @constructor\n */\nvjs.SubtitlesButton = vjs.TextTrackButton.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.TextTrackButton.call(this, player, options, ready);\n    this.el_.setAttribute('aria-label','Subtitles Menu');\n  }\n});\nvjs.SubtitlesButton.prototype.kind_ = 'subtitles';\nvjs.SubtitlesButton.prototype.buttonText = 'Subtitles';\nvjs.SubtitlesButton.prototype.className = 'vjs-subtitles-button';\n\n// Chapters act much differently than other text tracks\n// Cues are navigation vs. other tracks of alternative languages\n/**\n * The button component for toggling and selecting chapters\n *\n * @constructor\n */\nvjs.ChaptersButton = vjs.TextTrackButton.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.TextTrackButton.call(this, player, options, ready);\n    this.el_.setAttribute('aria-label','Chapters Menu');\n  }\n});\nvjs.ChaptersButton.prototype.kind_ = 'chapters';\nvjs.ChaptersButton.prototype.buttonText = 'Chapters';\nvjs.ChaptersButton.prototype.className = 'vjs-chapters-button';\n\n// Create a menu item for each text track\nvjs.ChaptersButton.prototype.createItems = function(){\n  var items = [], track;\n\n  for (var i = 0; i < this.player_.textTracks().length; i++) {\n    track = this.player_.textTracks()[i];\n    if (track.kind() === this.kind_) {\n      items.push(new vjs.TextTrackMenuItem(this.player_, {\n        'track': track\n      }));\n    }\n  }\n\n  return items;\n};\n\nvjs.ChaptersButton.prototype.createMenu = function(){\n  var tracks = this.player_.textTracks(),\n      i = 0,\n      j = tracks.length,\n      track, chaptersTrack,\n      items = this.items = [];\n\n  for (;i<j;i++) {\n    track = tracks[i];\n    if (track.kind() == this.kind_ && track.dflt()) {\n      if (track.readyState() < 2) {\n        this.chaptersTrack = track;\n        track.on('loaded', vjs.bind(this, this.createMenu));\n        return;\n      } else {\n        chaptersTrack = track;\n        break;\n      }\n    }\n  }\n\n  var menu = this.menu = new vjs.Menu(this.player_);\n\n  menu.el_.appendChild(vjs.createEl('li', {\n    className: 'vjs-menu-title',\n    innerHTML: vjs.capitalize(this.kind_),\n    tabindex: -1\n  }));\n\n  if (chaptersTrack) {\n    var cues = chaptersTrack.cues_, cue, mi;\n    i = 0;\n    j = cues.length;\n\n    for (;i<j;i++) {\n      cue = cues[i];\n\n      mi = new vjs.ChaptersTrackMenuItem(this.player_, {\n        'track': chaptersTrack,\n        'cue': cue\n      });\n\n      items.push(mi);\n\n      menu.addChild(mi);\n    }\n  }\n\n  if (this.items.length > 0) {\n    this.show();\n  }\n\n  return menu;\n};\n\n\n/**\n * @constructor\n */\nvjs.ChaptersTrackMenuItem = vjs.MenuItem.extend({\n  /** @constructor */\n  init: function(player, options){\n    var track = this.track = options['track'],\n        cue = this.cue = options['cue'],\n        currentTime = player.currentTime();\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = cue.text;\n    options['selected'] = (cue.startTime <= currentTime && currentTime < cue.endTime);\n    vjs.MenuItem.call(this, player, options);\n\n    track.on('cuechange', vjs.bind(this, this.update));\n  }\n});\n\nvjs.ChaptersTrackMenuItem.prototype.onClick = function(){\n  vjs.MenuItem.prototype.onClick.call(this);\n  this.player_.currentTime(this.cue.startTime);\n  this.update(this.cue.startTime);\n};\n\nvjs.ChaptersTrackMenuItem.prototype.update = function(){\n  var cue = this.cue,\n      currentTime = this.player_.currentTime();\n\n  // vjs.log(currentTime, cue.startTime);\n  this.selected(cue.startTime <= currentTime && currentTime < cue.endTime);\n};\n\n// Add Buttons to controlBar\nvjs.obj.merge(vjs.ControlBar.prototype.options_['children'], {\n  'subtitlesButton': {},\n  'captionsButton': {},\n  'chaptersButton': {}\n});\n\n// vjs.Cue = vjs.Component.extend({\n//   /** @constructor */\n//   init: function(player, options){\n//     vjs.Component.call(this, player, options);\n//   }\n// });\n/**\n * @fileoverview Add JSON support\n * @suppress {undefinedVars}\n * (Compiler doesn't like JSON not being declared)\n */\n\n/**\n * Javascript JSON implementation\n * (Parse Method Only)\n * https://github.com/douglascrockford/JSON-js/blob/master/json2.js\n * Only using for parse method when parsing data-setup attribute JSON.\n * @suppress {undefinedVars}\n * @namespace\n * @private\n */\nvjs.JSON;\n\nif (typeof window.JSON !== 'undefined' && window.JSON.parse === 'function') {\n  vjs.JSON = window.JSON;\n\n} else {\n  vjs.JSON = {};\n\n  var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n  /**\n   * parse the json\n   *\n   * @memberof vjs.JSON\n   * @return {Object|Array} The parsed JSON\n   */\n  vjs.JSON.parse = function (text, reviver) {\n      var j;\n\n      function walk(holder, key) {\n          var k, v, value = holder[key];\n          if (value && typeof value === 'object') {\n              for (k in value) {\n                  if (Object.prototype.hasOwnProperty.call(value, k)) {\n                      v = walk(value, k);\n                      if (v !== undefined) {\n                          value[k] = v;\n                      } else {\n                          delete value[k];\n                      }\n                  }\n              }\n          }\n          return reviver.call(holder, key, value);\n      }\n      text = String(text);\n      cx.lastIndex = 0;\n      if (cx.test(text)) {\n          text = text.replace(cx, function (a) {\n              return '\\\\u' +\n                  ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n          });\n      }\n\n      if (/^[\\],:{}\\s]*$/\n              .test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')\n                  .replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']')\n                  .replace(/(?:^|:|,)(?:\\s*\\[)+/g, ''))) {\n\n          j = eval('(' + text + ')');\n\n          return typeof reviver === 'function' ?\n              walk({'': j}, '') : j;\n      }\n\n      throw new SyntaxError('JSON.parse(): invalid or malformed JSON data');\n  };\n}\n/**\n * @fileoverview Functions for automatically setting up a player\n * based on the data-setup attribute of the video tag\n */\n\n// Automatically set up any tags that have a data-setup attribute\nvjs.autoSetup = function(){\n  var options, vid, player,\n      vids = document.getElementsByTagName('video');\n\n  // Check if any media elements exist\n  if (vids && vids.length > 0) {\n\n    for (var i=0,j=vids.length; i<j; i++) {\n      vid = vids[i];\n\n      // Check if element exists, has getAttribute func.\n      // IE seems to consider typeof el.getAttribute == 'object' instead of 'function' like expected, at least when loading the player immediately.\n      if (vid && vid.getAttribute) {\n\n        // Make sure this player hasn't already been set up.\n        if (vid['player'] === undefined) {\n          options = vid.getAttribute('data-setup');\n\n          // Check if data-setup attr exists.\n          // We only auto-setup if they've added the data-setup attr.\n          if (options !== null) {\n\n            // Parse options JSON\n            // If empty string, make it a parsable json object.\n            options = vjs.JSON.parse(options || '{}');\n\n            // Create new video.js instance.\n            player = videojs(vid, options);\n          }\n        }\n\n      // If getAttribute isn't defined, we need to wait for the DOM.\n      } else {\n        vjs.autoSetupTimeout(1);\n        break;\n      }\n    }\n\n  // No videos were found, so keep looping unless page is finisehd loading.\n  } else if (!vjs.windowLoaded) {\n    vjs.autoSetupTimeout(1);\n  }\n};\n\n// Pause to let the DOM keep processing\nvjs.autoSetupTimeout = function(wait){\n  setTimeout(vjs.autoSetup, wait);\n};\n\nif (document.readyState === 'complete') {\n  vjs.windowLoaded = true;\n} else {\n  vjs.one(window, 'load', function(){\n    vjs.windowLoaded = true;\n  });\n}\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nvjs.autoSetupTimeout(1);\n/**\n * the method for registering a video.js plugin\n *\n * @param  {String} name The name of the plugin\n * @param  {Function} init The function that is run when the player inits\n */\nvjs.plugin = function(name, init){\n  vjs.Player.prototype[name] = init;\n};\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/video-js/video.js",
    "content": "/*! Video.js v4.3.0 Copyright 2013 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE */ (function() {var b=void 0,f=!0,h=null,l=!1;function m(){return function(){}}function p(a){return function(){return this[a]}}function s(a){return function(){return a}}var t;document.createElement(\"video\");document.createElement(\"audio\");document.createElement(\"track\");function u(a,c,d){if(\"string\"===typeof a){0===a.indexOf(\"#\")&&(a=a.slice(1));if(u.xa[a])return u.xa[a];a=u.w(a)}if(!a||!a.nodeName)throw new TypeError(\"The element or ID supplied is not valid. (videojs)\");return a.player||new u.s(a,c,d)}var v=u;\nwindow.Td=window.Ud=u;u.Tb=\"4.3\";u.Fc=\"https:\"==document.location.protocol?\"https://\":\"http://\";u.options={techOrder:[\"html5\",\"flash\"],html5:{},flash:{},width:300,height:150,defaultVolume:0,children:{mediaLoader:{},posterImage:{},textTrackDisplay:{},loadingSpinner:{},bigPlayButton:{},controlBar:{}},notSupportedMessage:'Sorry, no compatible source and playback technology were found for this video. Try using another browser like <a href=\"http://bit.ly/ccMUEC\">Chrome</a> or download the latest <a href=\"http://adobe.ly/mwfN1\">Adobe Flash Player</a>.'};\n\"GENERATED_CDN_VSN\"!==u.Tb&&(v.options.flash.swf=u.Fc+\"vjs.zencdn.net/\"+u.Tb+\"/video-js.swf\");u.xa={};u.la=u.CoreObject=m();u.la.extend=function(a){var c,d;a=a||{};c=a.init||a.i||this.prototype.init||this.prototype.i||m();d=function(){c.apply(this,arguments)};d.prototype=u.k.create(this.prototype);d.prototype.constructor=d;d.extend=u.la.extend;d.create=u.la.create;for(var e in a)a.hasOwnProperty(e)&&(d.prototype[e]=a[e]);return d};\nu.la.create=function(){var a=u.k.create(this.prototype);this.apply(a,arguments);return a};u.d=function(a,c,d){var e=u.getData(a);e.z||(e.z={});e.z[c]||(e.z[c]=[]);d.t||(d.t=u.t++);e.z[c].push(d);e.W||(e.disabled=l,e.W=function(c){if(!e.disabled){c=u.kc(c);var d=e.z[c.type];if(d)for(var d=d.slice(0),k=0,q=d.length;k<q&&!c.pc();k++)d[k].call(a,c)}});1==e.z[c].length&&(document.addEventListener?a.addEventListener(c,e.W,l):document.attachEvent&&a.attachEvent(\"on\"+c,e.W))};\nu.o=function(a,c,d){if(u.oc(a)){var e=u.getData(a);if(e.z)if(c){var g=e.z[c];if(g){if(d){if(d.t)for(e=0;e<g.length;e++)g[e].t===d.t&&g.splice(e--,1)}else e.z[c]=[];u.gc(a,c)}}else for(g in e.z)c=g,e.z[c]=[],u.gc(a,c)}};u.gc=function(a,c){var d=u.getData(a);0===d.z[c].length&&(delete d.z[c],document.removeEventListener?a.removeEventListener(c,d.W,l):document.detachEvent&&a.detachEvent(\"on\"+c,d.W));u.Bb(d.z)&&(delete d.z,delete d.W,delete d.disabled);u.Bb(d)&&u.vc(a)};\nu.kc=function(a){function c(){return f}function d(){return l}if(!a||!a.Cb){var e=a||window.event;a={};for(var g in e)\"layerX\"!==g&&\"layerY\"!==g&&(a[g]=e[g]);a.target||(a.target=a.srcElement||document);a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;a.preventDefault=function(){e.preventDefault&&e.preventDefault();a.returnValue=l;a.Ab=c};a.Ab=d;a.stopPropagation=function(){e.stopPropagation&&e.stopPropagation();a.cancelBubble=f;a.Cb=c};a.Cb=d;a.stopImmediatePropagation=function(){e.stopImmediatePropagation&&\ne.stopImmediatePropagation();a.pc=c;a.stopPropagation()};a.pc=d;if(a.clientX!=h){g=document.documentElement;var j=document.body;a.pageX=a.clientX+(g&&g.scrollLeft||j&&j.scrollLeft||0)-(g&&g.clientLeft||j&&j.clientLeft||0);a.pageY=a.clientY+(g&&g.scrollTop||j&&j.scrollTop||0)-(g&&g.clientTop||j&&j.clientTop||0)}a.which=a.charCode||a.keyCode;a.button!=h&&(a.button=a.button&1?0:a.button&4?1:a.button&2?2:0)}return a};\nu.j=function(a,c){var d=u.oc(a)?u.getData(a):{},e=a.parentNode||a.ownerDocument;\"string\"===typeof c&&(c={type:c,target:a});c=u.kc(c);d.W&&d.W.call(a,c);if(e&&!c.Cb()&&c.bubbles!==l)u.j(e,c);else if(!e&&!c.Ab()&&(d=u.getData(c.target),c.target[c.type])){d.disabled=f;if(\"function\"===typeof c.target[c.type])c.target[c.type]();d.disabled=l}return!c.Ab()};u.U=function(a,c,d){function e(){u.o(a,c,e);d.apply(this,arguments)}e.t=d.t=d.t||u.t++;u.d(a,c,e)};var w=Object.prototype.hasOwnProperty;\nu.e=function(a,c){var d,e;d=document.createElement(a||\"div\");for(e in c)w.call(c,e)&&(-1!==e.indexOf(\"aria-\")||\"role\"==e?d.setAttribute(e,c[e]):d[e]=c[e]);return d};u.$=function(a){return a.charAt(0).toUpperCase()+a.slice(1)};u.k={};u.k.create=Object.create||function(a){function c(){}c.prototype=a;return new c};u.k.ua=function(a,c,d){for(var e in a)w.call(a,e)&&c.call(d||this,e,a[e])};u.k.B=function(a,c){if(!c)return a;for(var d in c)w.call(c,d)&&(a[d]=c[d]);return a};\nu.k.ic=function(a,c){var d,e,g;a=u.k.copy(a);for(d in c)w.call(c,d)&&(e=a[d],g=c[d],a[d]=u.k.qc(e)&&u.k.qc(g)?u.k.ic(e,g):c[d]);return a};u.k.copy=function(a){return u.k.B({},a)};u.k.qc=function(a){return!!a&&\"object\"===typeof a&&\"[object Object]\"===a.toString()&&a.constructor===Object};u.bind=function(a,c,d){function e(){return c.apply(a,arguments)}c.t||(c.t=u.t++);e.t=d?d+\"_\"+c.t:c.t;return e};u.ra={};u.t=1;u.expando=\"vdata\"+(new Date).getTime();\nu.getData=function(a){var c=a[u.expando];c||(c=a[u.expando]=u.t++,u.ra[c]={});return u.ra[c]};u.oc=function(a){a=a[u.expando];return!(!a||u.Bb(u.ra[a]))};u.vc=function(a){var c=a[u.expando];if(c){delete u.ra[c];try{delete a[u.expando]}catch(d){a.removeAttribute?a.removeAttribute(u.expando):a[u.expando]=h}}};u.Bb=function(a){for(var c in a)if(a[c]!==h)return l;return f};u.n=function(a,c){-1==(\" \"+a.className+\" \").indexOf(\" \"+c+\" \")&&(a.className=\"\"===a.className?c:a.className+\" \"+c)};\nu.u=function(a,c){var d,e;if(-1!=a.className.indexOf(c)){d=a.className.split(\" \");for(e=d.length-1;0<=e;e--)d[e]===c&&d.splice(e,1);a.className=d.join(\" \")}};u.na=u.e(\"video\");u.F=navigator.userAgent;u.Mc=/iPhone/i.test(u.F);u.Lc=/iPad/i.test(u.F);u.Nc=/iPod/i.test(u.F);u.Kc=u.Mc||u.Lc||u.Nc;var aa=u,x;var y=u.F.match(/OS (\\d+)_/i);x=y&&y[1]?y[1]:b;aa.Fd=x;u.Ic=/Android/i.test(u.F);var ba=u,z;var A=u.F.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),B,C;\nA?(B=A[1]&&parseFloat(A[1]),C=A[2]&&parseFloat(A[2]),z=B&&C?parseFloat(A[1]+\".\"+A[2]):B?B:h):z=h;ba.Gc=z;u.Oc=u.Ic&&/webkit/i.test(u.F)&&2.3>u.Gc;u.Jc=/Firefox/i.test(u.F);u.Gd=/Chrome/i.test(u.F);u.ac=!!(\"ontouchstart\"in window||window.Hc&&document instanceof window.Hc);\nu.xb=function(a){var c,d,e,g;c={};if(a&&a.attributes&&0<a.attributes.length){d=a.attributes;for(var j=d.length-1;0<=j;j--){e=d[j].name;g=d[j].value;if(\"boolean\"===typeof a[e]||-1!==\",autoplay,controls,loop,muted,default,\".indexOf(\",\"+e+\",\"))g=g!==h?f:l;c[e]=g}}return c};\nu.Kd=function(a,c){var d=\"\";document.defaultView&&document.defaultView.getComputedStyle?d=document.defaultView.getComputedStyle(a,\"\").getPropertyValue(c):a.currentStyle&&(d=a[\"client\"+c.substr(0,1).toUpperCase()+c.substr(1)]+\"px\");return d};u.zb=function(a,c){c.firstChild?c.insertBefore(a,c.firstChild):c.appendChild(a)};u.Pb={};u.w=function(a){0===a.indexOf(\"#\")&&(a=a.slice(1));return document.getElementById(a)};\nu.La=function(a,c){c=c||a;var d=Math.floor(a%60),e=Math.floor(a/60%60),g=Math.floor(a/3600),j=Math.floor(c/60%60),k=Math.floor(c/3600);if(isNaN(a)||Infinity===a)g=e=d=\"-\";g=0<g||0<k?g+\":\":\"\";return g+(((g||10<=j)&&10>e?\"0\"+e:e)+\":\")+(10>d?\"0\"+d:d)};u.Tc=function(){document.body.focus();document.onselectstart=s(l)};u.Bd=function(){document.onselectstart=s(f)};u.trim=function(a){return(a+\"\").replace(/^\\s+|\\s+$/g,\"\")};u.round=function(a,c){c||(c=0);return Math.round(a*Math.pow(10,c))/Math.pow(10,c)};\nu.tb=function(a,c){return{length:1,start:function(){return a},end:function(){return c}}};\nu.get=function(a,c,d){var e,g;\"undefined\"===typeof XMLHttpRequest&&(window.XMLHttpRequest=function(){try{return new window.ActiveXObject(\"Msxml2.XMLHTTP.6.0\")}catch(a){}try{return new window.ActiveXObject(\"Msxml2.XMLHTTP.3.0\")}catch(c){}try{return new window.ActiveXObject(\"Msxml2.XMLHTTP\")}catch(d){}throw Error(\"This browser does not support XMLHttpRequest.\");});g=new XMLHttpRequest;try{g.open(\"GET\",a)}catch(j){d(j)}e=0===a.indexOf(\"file:\")||0===window.location.href.indexOf(\"file:\")&&-1===a.indexOf(\"http\");\ng.onreadystatechange=function(){4===g.readyState&&(200===g.status||e&&0===g.status?c(g.responseText):d&&d())};try{g.send()}catch(k){d&&d(k)}};u.td=function(a){try{var c=window.localStorage||l;c&&(c.volume=a)}catch(d){22==d.code||1014==d.code?u.log(\"LocalStorage Full (VideoJS)\",d):18==d.code?u.log(\"LocalStorage not allowed (VideoJS)\",d):u.log(\"LocalStorage Error (VideoJS)\",d)}};u.mc=function(a){a.match(/^https?:\\/\\//)||(a=u.e(\"div\",{innerHTML:'<a href=\"'+a+'\">x</a>'}).firstChild.href);return a};\nu.log=function(){u.log.history=u.log.history||[];u.log.history.push(arguments);window.console&&window.console.log(Array.prototype.slice.call(arguments))};u.ad=function(a){var c,d;a.getBoundingClientRect&&a.parentNode&&(c=a.getBoundingClientRect());if(!c)return{left:0,top:0};a=document.documentElement;d=document.body;return{left:c.left+(window.pageXOffset||d.scrollLeft)-(a.clientLeft||d.clientLeft||0),top:c.top+(window.pageYOffset||d.scrollTop)-(a.clientTop||d.clientTop||0)}};\nu.c=u.la.extend({i:function(a,c,d){this.b=a;this.g=u.k.copy(this.g);c=this.options(c);this.Q=c.id||(c.el&&c.el.id?c.el.id:a.id()+\"_component_\"+u.t++);this.gd=c.name||h;this.a=c.el||this.e();this.G=[];this.qb={};this.V={};if((a=this.g)&&a.children){var e=this;u.k.ua(a.children,function(a,c){c!==l&&!c.loadEvent&&(e[a]=e.Z(a,c))})}this.L(d)}});t=u.c.prototype;\nt.D=function(){this.j(\"dispose\");if(this.G)for(var a=this.G.length-1;0<=a;a--)this.G[a].D&&this.G[a].D();this.V=this.qb=this.G=h;this.o();this.a.parentNode&&this.a.parentNode.removeChild(this.a);u.vc(this.a);this.a=h};t.b=f;t.K=p(\"b\");t.options=function(a){return a===b?this.g:this.g=u.k.ic(this.g,a)};t.e=function(a,c){return u.e(a,c)};t.w=p(\"a\");t.id=p(\"Q\");t.name=p(\"gd\");t.children=p(\"G\");\nt.Z=function(a,c){var d,e;\"string\"===typeof a?(e=a,c=c||{},d=c.componentClass||u.$(e),c.name=e,d=new window.videojs[d](this.b||this,c)):d=a;this.G.push(d);\"function\"===typeof d.id&&(this.qb[d.id()]=d);(e=e||d.name&&d.name())&&(this.V[e]=d);\"function\"===typeof d.el&&d.el()&&(this.sa||this.a).appendChild(d.el());return d};\nt.removeChild=function(a){\"string\"===typeof a&&(a=this.V[a]);if(a&&this.G){for(var c=l,d=this.G.length-1;0<=d;d--)if(this.G[d]===a){c=f;this.G.splice(d,1);break}c&&(this.qb[a.id]=h,this.V[a.name]=h,(c=a.w())&&c.parentNode===(this.sa||this.a)&&(this.sa||this.a).removeChild(a.w()))}};t.T=s(\"\");t.d=function(a,c){u.d(this.a,a,u.bind(this,c));return this};t.o=function(a,c){u.o(this.a,a,c);return this};t.U=function(a,c){u.U(this.a,a,u.bind(this,c));return this};t.j=function(a,c){u.j(this.a,a,c);return this};\nt.L=function(a){a&&(this.aa?a.call(this):(this.Sa===b&&(this.Sa=[]),this.Sa.push(a)));return this};t.Ua=function(){this.aa=f;var a=this.Sa;if(a&&0<a.length){for(var c=0,d=a.length;c<d;c++)a[c].call(this);this.Sa=[];this.j(\"ready\")}};t.n=function(a){u.n(this.a,a);return this};t.u=function(a){u.u(this.a,a);return this};t.show=function(){this.a.style.display=\"block\";return this};t.C=function(){this.a.style.display=\"none\";return this};function D(a){a.u(\"vjs-lock-showing\")}\nt.disable=function(){this.C();this.show=m()};t.width=function(a,c){return E(this,\"width\",a,c)};t.height=function(a,c){return E(this,\"height\",a,c)};t.Xc=function(a,c){return this.width(a,f).height(c)};function E(a,c,d,e){if(d!==b)return a.a.style[c]=-1!==(\"\"+d).indexOf(\"%\")||-1!==(\"\"+d).indexOf(\"px\")?d:\"auto\"===d?\"\":d+\"px\",e||a.j(\"resize\"),a;if(!a.a)return 0;d=a.a.style[c];e=d.indexOf(\"px\");return-1!==e?parseInt(d.slice(0,e),10):parseInt(a.a[\"offset\"+u.$(c)],10)}\nu.q=u.c.extend({i:function(a,c){u.c.call(this,a,c);var d=l;this.d(\"touchstart\",function(a){a.preventDefault();d=f});this.d(\"touchmove\",function(){d=l});var e=this;this.d(\"touchend\",function(a){d&&e.p(a);a.preventDefault()});this.d(\"click\",this.p);this.d(\"focus\",this.Oa);this.d(\"blur\",this.Na)}});t=u.q.prototype;\nt.e=function(a,c){c=u.k.B({className:this.T(),innerHTML:'<div class=\"vjs-control-content\"><span class=\"vjs-control-text\">'+(this.qa||\"Need Text\")+\"</span></div>\",qd:\"button\",\"aria-live\":\"polite\",tabIndex:0},c);return u.c.prototype.e.call(this,a,c)};t.T=function(){return\"vjs-control \"+u.c.prototype.T.call(this)};t.p=m();t.Oa=function(){u.d(document,\"keyup\",u.bind(this,this.ba))};t.ba=function(a){if(32==a.which||13==a.which)a.preventDefault(),this.p()};\nt.Na=function(){u.o(document,\"keyup\",u.bind(this,this.ba))};u.O=u.c.extend({i:function(a,c){u.c.call(this,a,c);this.Sc=this.V[this.g.barName];this.handle=this.V[this.g.handleName];a.d(this.tc,u.bind(this,this.update));this.d(\"mousedown\",this.Pa);this.d(\"touchstart\",this.Pa);this.d(\"focus\",this.Oa);this.d(\"blur\",this.Na);this.d(\"click\",this.p);this.b.d(\"controlsvisible\",u.bind(this,this.update));a.L(u.bind(this,this.update));this.P={}}});t=u.O.prototype;\nt.e=function(a,c){c=c||{};c.className+=\" vjs-slider\";c=u.k.B({qd:\"slider\",\"aria-valuenow\":0,\"aria-valuemin\":0,\"aria-valuemax\":100,tabIndex:0},c);return u.c.prototype.e.call(this,a,c)};t.Pa=function(a){a.preventDefault();u.Tc();this.P.move=u.bind(this,this.Hb);this.P.end=u.bind(this,this.Ib);u.d(document,\"mousemove\",this.P.move);u.d(document,\"mouseup\",this.P.end);u.d(document,\"touchmove\",this.P.move);u.d(document,\"touchend\",this.P.end);this.Hb(a)};\nt.Ib=function(){u.Bd();u.o(document,\"mousemove\",this.P.move,l);u.o(document,\"mouseup\",this.P.end,l);u.o(document,\"touchmove\",this.P.move,l);u.o(document,\"touchend\",this.P.end,l);this.update()};t.update=function(){if(this.a){var a,c=this.yb(),d=this.handle,e=this.Sc;isNaN(c)&&(c=0);a=c;if(d){a=this.a.offsetWidth;var g=d.w().offsetWidth;a=g?g/a:0;c*=1-a;a=c+a/2;d.w().style.left=u.round(100*c,2)+\"%\"}e.w().style.width=u.round(100*a,2)+\"%\"}};\nfunction F(a,c){var d,e,g,j;d=a.a;e=u.ad(d);j=g=d.offsetWidth;d=a.handle;if(a.g.Cd)return j=e.top,e=c.changedTouches?c.changedTouches[0].pageY:c.pageY,d&&(d=d.w().offsetHeight,j+=d/2,g-=d),Math.max(0,Math.min(1,(j-e+g)/g));g=e.left;e=c.changedTouches?c.changedTouches[0].pageX:c.pageX;d&&(d=d.w().offsetWidth,g+=d/2,j-=d);return Math.max(0,Math.min(1,(e-g)/j))}t.Oa=function(){u.d(document,\"keyup\",u.bind(this,this.ba))};\nt.ba=function(a){37==a.which?(a.preventDefault(),this.yc()):39==a.which&&(a.preventDefault(),this.zc())};t.Na=function(){u.o(document,\"keyup\",u.bind(this,this.ba))};t.p=function(a){a.stopImmediatePropagation();a.preventDefault()};u.ea=u.c.extend();u.ea.prototype.defaultValue=0;u.ea.prototype.e=function(a,c){c=c||{};c.className+=\" vjs-slider-handle\";c=u.k.B({innerHTML:'<span class=\"vjs-control-text\">'+this.defaultValue+\"</span>\"},c);return u.c.prototype.e.call(this,\"div\",c)};u.ma=u.c.extend();\nfunction ca(a,c){a.Z(c);c.d(\"click\",u.bind(a,function(){D(this)}))}u.ma.prototype.e=function(){var a=this.options().Vc||\"ul\";this.sa=u.e(a,{className:\"vjs-menu-content\"});a=u.c.prototype.e.call(this,\"div\",{append:this.sa,className:\"vjs-menu\"});a.appendChild(this.sa);u.d(a,\"click\",function(a){a.preventDefault();a.stopImmediatePropagation()});return a};u.N=u.q.extend({i:function(a,c){u.q.call(this,a,c);this.selected(c.selected)}});\nu.N.prototype.e=function(a,c){return u.q.prototype.e.call(this,\"li\",u.k.B({className:\"vjs-menu-item\",innerHTML:this.g.label},c))};u.N.prototype.p=function(){this.selected(f)};u.N.prototype.selected=function(a){a?(this.n(\"vjs-selected\"),this.a.setAttribute(\"aria-selected\",f)):(this.u(\"vjs-selected\"),this.a.setAttribute(\"aria-selected\",l))};\nu.R=u.q.extend({i:function(a,c){u.q.call(this,a,c);this.wa=this.Ka();this.Z(this.wa);this.I&&0===this.I.length&&this.C();this.d(\"keyup\",this.ba);this.a.setAttribute(\"aria-haspopup\",f);this.a.setAttribute(\"role\",\"button\")}});t=u.R.prototype;t.pa=l;t.Ka=function(){var a=new u.ma(this.b);this.options().title&&a.w().appendChild(u.e(\"li\",{className:\"vjs-menu-title\",innerHTML:u.$(this.A),zd:-1}));if(this.I=this.createItems())for(var c=0;c<this.I.length;c++)ca(a,this.I[c]);return a};t.ta=m();\nt.T=function(){return this.className+\" vjs-menu-button \"+u.q.prototype.T.call(this)};t.Oa=m();t.Na=m();t.p=function(){this.U(\"mouseout\",u.bind(this,function(){D(this.wa);this.a.blur()}));this.pa?G(this):H(this)};t.ba=function(a){a.preventDefault();32==a.which||13==a.which?this.pa?G(this):H(this):27==a.which&&this.pa&&G(this)};function H(a){a.pa=f;a.wa.n(\"vjs-lock-showing\");a.a.setAttribute(\"aria-pressed\",f);a.I&&0<a.I.length&&a.I[0].w().focus()}\nfunction G(a){a.pa=l;D(a.wa);a.a.setAttribute(\"aria-pressed\",l)}\nu.s=u.c.extend({i:function(a,c,d){this.M=a;c=u.k.B(da(a),c);this.v={};this.uc=c.poster;this.sb=c.controls;a.controls=l;u.c.call(this,this,c,d);this.controls()?this.n(\"vjs-controls-enabled\"):this.n(\"vjs-controls-disabled\");this.U(\"play\",function(a){u.j(this.a,{type:\"firstplay\",target:this.a})||(a.preventDefault(),a.stopPropagation(),a.stopImmediatePropagation())});this.d(\"ended\",this.hd);this.d(\"play\",this.Kb);this.d(\"firstplay\",this.jd);this.d(\"pause\",this.Jb);this.d(\"progress\",this.ld);this.d(\"durationchange\",\nthis.sc);this.d(\"error\",this.Gb);this.d(\"fullscreenchange\",this.kd);u.xa[this.Q]=this;c.plugins&&u.k.ua(c.plugins,function(a,c){this[a](c)},this);var e,g,j,k;e=this.Mb;a=function(){e();clearInterval(g);g=setInterval(u.bind(this,e),250)};c=function(){e();clearInterval(g)};this.d(\"mousedown\",a);this.d(\"mousemove\",e);this.d(\"mouseup\",c);this.d(\"keydown\",e);this.d(\"keyup\",e);this.d(\"touchstart\",a);this.d(\"touchmove\",e);this.d(\"touchend\",c);this.d(\"touchcancel\",c);j=setInterval(u.bind(this,function(){this.ka&&\n(this.ka=l,this.ja(f),clearTimeout(k),k=setTimeout(u.bind(this,function(){this.ka||this.ja(l)}),2E3))}),250);this.d(\"dispose\",function(){clearInterval(j);clearTimeout(k)})}});t=u.s.prototype;t.g=u.options;t.D=function(){this.j(\"dispose\");this.o(\"dispose\");u.xa[this.Q]=h;this.M&&this.M.player&&(this.M.player=h);this.a&&this.a.player&&(this.a.player=h);clearInterval(this.Ra);this.za();this.h&&this.h.D();u.c.prototype.D.call(this)};\nfunction da(a){var c={sources:[],tracks:[]};u.k.B(c,u.xb(a));if(a.hasChildNodes()){var d,e,g,j;a=a.childNodes;g=0;for(j=a.length;g<j;g++)d=a[g],e=d.nodeName.toLowerCase(),\"source\"===e?c.sources.push(u.xb(d)):\"track\"===e&&c.tracks.push(u.xb(d))}return c}\nt.e=function(){var a=this.a=u.c.prototype.e.call(this,\"div\"),c=this.M;c.removeAttribute(\"width\");c.removeAttribute(\"height\");if(c.hasChildNodes()){var d,e,g,j,k;d=c.childNodes;e=d.length;for(k=[];e--;)g=d[e],j=g.nodeName.toLowerCase(),\"track\"===j&&k.push(g);for(d=0;d<k.length;d++)c.removeChild(k[d])}c.id=c.id||\"vjs_video_\"+u.t++;a.id=c.id;a.className=c.className;c.id+=\"_html5_api\";c.className=\"vjs-tech\";c.player=a.player=this;this.n(\"vjs-paused\");this.width(this.g.width,f);this.height(this.g.height,\nf);c.parentNode&&c.parentNode.insertBefore(a,c);u.zb(c,a);return a};\nfunction I(a,c,d){a.h?(a.aa=l,a.h.D(),a.Eb&&(a.Eb=l,clearInterval(a.Ra)),a.Fb&&J(a),a.h=l):\"Html5\"!==c&&a.M&&(u.l.jc(a.M),a.M=h);a.ia=c;a.aa=l;var e=u.k.B({source:d,parentEl:a.a},a.g[c.toLowerCase()]);d&&(d.src==a.v.src&&0<a.v.currentTime&&(e.startTime=a.v.currentTime),a.v.src=d.src);a.h=new window.videojs[c](a,e);a.h.L(function(){this.b.Ua();if(!this.m.progressEvents){var a=this.b;a.Eb=f;a.Ra=setInterval(u.bind(a,function(){this.v.lb<this.buffered().end(0)?this.j(\"progress\"):1==this.Ja()&&(clearInterval(this.Ra),\nthis.j(\"progress\"))}),500);a.h.U(\"progress\",function(){this.m.progressEvents=f;var a=this.b;a.Eb=l;clearInterval(a.Ra)})}this.m.timeupdateEvents||(a=this.b,a.Fb=f,a.d(\"play\",a.Cc),a.d(\"pause\",a.za),a.h.U(\"timeupdate\",function(){this.m.timeupdateEvents=f;J(this.b)}))})}function J(a){a.Fb=l;a.za();a.o(\"play\",a.Cc);a.o(\"pause\",a.za)}t.Cc=function(){this.hc&&this.za();this.hc=setInterval(u.bind(this,function(){this.j(\"timeupdate\")}),250)};t.za=function(){clearInterval(this.hc)};\nt.Kb=function(){u.u(this.a,\"vjs-paused\");u.n(this.a,\"vjs-playing\")};t.jd=function(){this.g.starttime&&this.currentTime(this.g.starttime);this.n(\"vjs-has-started\")};t.Jb=function(){u.u(this.a,\"vjs-playing\");u.n(this.a,\"vjs-paused\")};t.ld=function(){1==this.Ja()&&this.j(\"loadedalldata\")};t.hd=function(){this.g.loop&&(this.currentTime(0),this.play())};t.sc=function(){this.duration(K(this,\"duration\"))};t.kd=function(){this.H?this.n(\"vjs-fullscreen\"):this.u(\"vjs-fullscreen\")};\nt.Gb=function(a){u.log(\"Video Error\",a)};function L(a,c,d){if(a.h&&!a.h.aa)a.h.L(function(){this[c](d)});else try{a.h[c](d)}catch(e){throw u.log(e),e;}}function K(a,c){if(a.h&&a.h.aa)try{return a.h[c]()}catch(d){throw a.h[c]===b?u.log(\"Video.js: \"+c+\" method not defined for \"+a.ia+\" playback technology.\",d):\"TypeError\"==d.name?(u.log(\"Video.js: \"+c+\" unavailable on \"+a.ia+\" playback technology element.\",d),a.h.aa=l):u.log(d),d;}}t.play=function(){L(this,\"play\");return this};\nt.pause=function(){L(this,\"pause\");return this};t.paused=function(){return K(this,\"paused\")===l?l:f};t.currentTime=function(a){return a!==b?(this.v.rc=a,L(this,\"setCurrentTime\",a),this.Fb&&this.j(\"timeupdate\"),this):this.v.currentTime=K(this,\"currentTime\")||0};t.duration=function(a){if(a!==b)return this.v.duration=parseFloat(a),this;this.v.duration===b&&this.sc();return this.v.duration};\nt.buffered=function(){var a=K(this,\"buffered\"),c=a.length-1,d=this.v.lb=this.v.lb||0;a&&(0<=c&&a.end(c)!==d)&&(d=a.end(c),this.v.lb=d);return u.tb(0,d)};t.Ja=function(){return this.duration()?this.buffered().end(0)/this.duration():0};t.volume=function(a){if(a!==b)return a=Math.max(0,Math.min(1,parseFloat(a))),this.v.volume=a,L(this,\"setVolume\",a),u.td(a),this;a=parseFloat(K(this,\"volume\"));return isNaN(a)?1:a};t.muted=function(a){return a!==b?(L(this,\"setMuted\",a),this):K(this,\"muted\")||l};\nt.Ta=function(){return K(this,\"supportsFullScreen\")||l};\nt.ya=function(){var a=u.Pb.ya;this.H=f;a?(u.d(document,a.vb,u.bind(this,function(c){this.H=document[a.H];this.H===l&&u.o(document,a.vb,arguments.callee);this.j(\"fullscreenchange\")})),this.a[a.wc]()):this.h.Ta()?L(this,\"enterFullScreen\"):(this.cd=f,this.Yc=document.documentElement.style.overflow,u.d(document,\"keydown\",u.bind(this,this.lc)),document.documentElement.style.overflow=\"hidden\",u.n(document.body,\"vjs-full-window\"),this.j(\"enterFullWindow\"),this.j(\"fullscreenchange\"));return this};\nt.ob=function(){var a=u.Pb.ya;this.H=l;if(a)document[a.nb]();else this.h.Ta()?L(this,\"exitFullScreen\"):(M(this),this.j(\"fullscreenchange\"));return this};t.lc=function(a){27===a.keyCode&&(this.H===f?this.ob():M(this))};function M(a){a.cd=l;u.o(document,\"keydown\",a.lc);document.documentElement.style.overflow=a.Yc;u.u(document.body,\"vjs-full-window\");a.j(\"exitFullWindow\")}\nt.src=function(a){if(a instanceof Array){var c;a:{c=a;for(var d=0,e=this.g.techOrder;d<e.length;d++){var g=u.$(e[d]),j=window.videojs[g];if(j.isSupported())for(var k=0,q=c;k<q.length;k++){var n=q[k];if(j.canPlaySource(n)){c={source:n,h:g};break a}}}c=l}c?(a=c.source,c=c.h,c==this.ia?this.src(a):I(this,c,a)):this.a.appendChild(u.e(\"p\",{innerHTML:this.options().notSupportedMessage}))}else a instanceof Object?window.videojs[this.ia].canPlaySource(a)?this.src(a.src):this.src([a]):(this.v.src=a,this.aa?\n(L(this,\"src\",a),\"auto\"==this.g.preload&&this.load(),this.g.autoplay&&this.play()):this.L(function(){this.src(a)}));return this};t.load=function(){L(this,\"load\");return this};t.currentSrc=function(){return K(this,\"currentSrc\")||this.v.src||\"\"};t.Qa=function(a){return a!==b?(L(this,\"setPreload\",a),this.g.preload=a,this):K(this,\"preload\")};t.autoplay=function(a){return a!==b?(L(this,\"setAutoplay\",a),this.g.autoplay=a,this):K(this,\"autoplay\")};\nt.loop=function(a){return a!==b?(L(this,\"setLoop\",a),this.g.loop=a,this):K(this,\"loop\")};t.poster=function(a){return a!==b?(this.uc=a,this):this.uc};t.controls=function(a){return a!==b?(a=!!a,this.sb!==a&&((this.sb=a)?(this.u(\"vjs-controls-disabled\"),this.n(\"vjs-controls-enabled\"),this.j(\"controlsenabled\")):(this.u(\"vjs-controls-enabled\"),this.n(\"vjs-controls-disabled\"),this.j(\"controlsdisabled\"))),this):this.sb};u.s.prototype.Sb;t=u.s.prototype;\nt.Rb=function(a){return a!==b?(a=!!a,this.Sb!==a&&((this.Sb=a)?(this.n(\"vjs-using-native-controls\"),this.j(\"usingnativecontrols\")):(this.u(\"vjs-using-native-controls\"),this.j(\"usingcustomcontrols\"))),this):this.Sb};t.error=function(){return K(this,\"error\")};t.seeking=function(){return K(this,\"seeking\")};t.ka=f;t.Mb=function(){this.ka=f};t.Qb=f;\nt.ja=function(a){return a!==b?(a=!!a,a!==this.Qb&&((this.Qb=a)?(this.ka=f,this.u(\"vjs-user-inactive\"),this.n(\"vjs-user-active\"),this.j(\"useractive\")):(this.ka=l,this.h.U(\"mousemove\",function(a){a.stopPropagation();a.preventDefault()}),this.u(\"vjs-user-active\"),this.n(\"vjs-user-inactive\"),this.j(\"userinactive\"))),this):this.Qb};var N,O,P;P=document.createElement(\"div\");O={};\nP.Hd!==b?(O.wc=\"requestFullscreen\",O.nb=\"exitFullscreen\",O.vb=\"fullscreenchange\",O.H=\"fullScreen\"):(document.mozCancelFullScreen?(N=\"moz\",O.H=N+\"FullScreen\"):(N=\"webkit\",O.H=N+\"IsFullScreen\"),P[N+\"RequestFullScreen\"]&&(O.wc=N+\"RequestFullScreen\",O.nb=N+\"CancelFullScreen\"),O.vb=N+\"fullscreenchange\");document[O.nb]&&(u.Pb.ya=O);u.Fa=u.c.extend();\nu.Fa.prototype.g={Md:\"play\",children:{playToggle:{},currentTimeDisplay:{},timeDivider:{},durationDisplay:{},remainingTimeDisplay:{},progressControl:{},fullscreenToggle:{},volumeControl:{},muteToggle:{}}};u.Fa.prototype.e=function(){return u.e(\"div\",{className:\"vjs-control-bar\"})};u.Yb=u.q.extend({i:function(a,c){u.q.call(this,a,c);a.d(\"play\",u.bind(this,this.Kb));a.d(\"pause\",u.bind(this,this.Jb))}});t=u.Yb.prototype;t.qa=\"Play\";t.T=function(){return\"vjs-play-control \"+u.q.prototype.T.call(this)};\nt.p=function(){this.b.paused()?this.b.play():this.b.pause()};t.Kb=function(){u.u(this.a,\"vjs-paused\");u.n(this.a,\"vjs-playing\");this.a.children[0].children[0].innerHTML=\"Pause\"};t.Jb=function(){u.u(this.a,\"vjs-playing\");u.n(this.a,\"vjs-paused\");this.a.children[0].children[0].innerHTML=\"Play\"};u.Ya=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ca))}});\nu.Ya.prototype.e=function(){var a=u.c.prototype.e.call(this,\"div\",{className:\"vjs-current-time vjs-time-controls vjs-control\"});this.content=u.e(\"div\",{className:\"vjs-current-time-display\",innerHTML:'<span class=\"vjs-control-text\">Current Time </span>0:00',\"aria-live\":\"off\"});a.appendChild(u.e(\"div\").appendChild(this.content));return a};\nu.Ya.prototype.Ca=function(){var a=this.b.Nb?this.b.v.currentTime:this.b.currentTime();this.content.innerHTML='<span class=\"vjs-control-text\">Current Time </span>'+u.La(a,this.b.duration())};u.Za=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ca))}});\nu.Za.prototype.e=function(){var a=u.c.prototype.e.call(this,\"div\",{className:\"vjs-duration vjs-time-controls vjs-control\"});this.content=u.e(\"div\",{className:\"vjs-duration-display\",innerHTML:'<span class=\"vjs-control-text\">Duration Time </span>0:00',\"aria-live\":\"off\"});a.appendChild(u.e(\"div\").appendChild(this.content));return a};u.Za.prototype.Ca=function(){var a=this.b.duration();a&&(this.content.innerHTML='<span class=\"vjs-control-text\">Duration Time </span>'+u.La(a))};\nu.cc=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.cc.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-time-divider\",innerHTML:\"<div><span>/</span></div>\"})};u.fb=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ca))}});\nu.fb.prototype.e=function(){var a=u.c.prototype.e.call(this,\"div\",{className:\"vjs-remaining-time vjs-time-controls vjs-control\"});this.content=u.e(\"div\",{className:\"vjs-remaining-time-display\",innerHTML:'<span class=\"vjs-control-text\">Remaining Time </span>-0:00',\"aria-live\":\"off\"});a.appendChild(u.e(\"div\").appendChild(this.content));return a};u.fb.prototype.Ca=function(){this.b.duration()&&(this.content.innerHTML='<span class=\"vjs-control-text\">Remaining Time </span>-'+u.La(this.b.duration()-this.b.currentTime()))};\nu.Ga=u.q.extend({i:function(a,c){u.q.call(this,a,c)}});u.Ga.prototype.qa=\"Fullscreen\";u.Ga.prototype.T=function(){return\"vjs-fullscreen-control \"+u.q.prototype.T.call(this)};u.Ga.prototype.p=function(){this.b.H?(this.b.ob(),this.a.children[0].children[0].innerHTML=\"Fullscreen\"):(this.b.ya(),this.a.children[0].children[0].innerHTML=\"Non-Fullscreen\")};u.eb=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.eb.prototype.g={children:{seekBar:{}}};\nu.eb.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-progress-control vjs-control\"})};u.Zb=u.O.extend({i:function(a,c){u.O.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ba));a.L(u.bind(this,this.Ba))}});t=u.Zb.prototype;t.g={children:{loadProgressBar:{},playProgressBar:{},seekHandle:{}},barName:\"playProgressBar\",handleName:\"seekHandle\"};t.tc=\"timeupdate\";t.e=function(){return u.O.prototype.e.call(this,\"div\",{className:\"vjs-progress-holder\",\"aria-label\":\"video progress bar\"})};\nt.Ba=function(){var a=this.b.Nb?this.b.v.currentTime:this.b.currentTime();this.a.setAttribute(\"aria-valuenow\",u.round(100*this.yb(),2));this.a.setAttribute(\"aria-valuetext\",u.La(a,this.b.duration()))};t.yb=function(){var a;\"Flash\"===this.b.ia&&this.b.seeking()?(a=this.b.v,a=a.rc?a.rc:this.b.currentTime()):a=this.b.currentTime();return a/this.b.duration()};t.Pa=function(a){u.O.prototype.Pa.call(this,a);this.b.Nb=f;this.Dd=!this.b.paused();this.b.pause()};\nt.Hb=function(a){a=F(this,a)*this.b.duration();a==this.b.duration()&&(a-=0.1);this.b.currentTime(a)};t.Ib=function(a){u.O.prototype.Ib.call(this,a);this.b.Nb=l;this.Dd&&this.b.play()};t.zc=function(){this.b.currentTime(this.b.currentTime()+5)};t.yc=function(){this.b.currentTime(this.b.currentTime()-5)};u.ab=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"progress\",u.bind(this,this.update))}});u.ab.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-load-progress\",innerHTML:'<span class=\"vjs-control-text\">Loaded: 0%</span>'})};\nu.ab.prototype.update=function(){this.a.style&&(this.a.style.width=u.round(100*this.b.Ja(),2)+\"%\")};u.Xb=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.Xb.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-play-progress\",innerHTML:'<span class=\"vjs-control-text\">Progress: 0%</span>'})};u.gb=u.ea.extend();u.gb.prototype.defaultValue=\"00:00\";u.gb.prototype.e=function(){return u.ea.prototype.e.call(this,\"div\",{className:\"vjs-seek-handle\"})};\nu.ib=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.h&&(a.h.m&&a.h.m.volumeControl===l)&&this.n(\"vjs-hidden\");a.d(\"loadstart\",u.bind(this,function(){a.h.m&&a.h.m.volumeControl===l?this.n(\"vjs-hidden\"):this.u(\"vjs-hidden\")}))}});u.ib.prototype.g={children:{volumeBar:{}}};u.ib.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-volume-control vjs-control\"})};\nu.hb=u.O.extend({i:function(a,c){u.O.call(this,a,c);a.d(\"volumechange\",u.bind(this,this.Ba));a.L(u.bind(this,this.Ba));setTimeout(u.bind(this,this.update),0)}});t=u.hb.prototype;t.Ba=function(){this.a.setAttribute(\"aria-valuenow\",u.round(100*this.b.volume(),2));this.a.setAttribute(\"aria-valuetext\",u.round(100*this.b.volume(),2)+\"%\")};t.g={children:{volumeLevel:{},volumeHandle:{}},barName:\"volumeLevel\",handleName:\"volumeHandle\"};t.tc=\"volumechange\";\nt.e=function(){return u.O.prototype.e.call(this,\"div\",{className:\"vjs-volume-bar\",\"aria-label\":\"volume level\"})};t.Hb=function(a){this.b.muted()&&this.b.muted(l);this.b.volume(F(this,a))};t.yb=function(){return this.b.muted()?0:this.b.volume()};t.zc=function(){this.b.volume(this.b.volume()+0.1)};t.yc=function(){this.b.volume(this.b.volume()-0.1)};u.dc=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});\nu.dc.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-volume-level\",innerHTML:'<span class=\"vjs-control-text\"></span>'})};u.jb=u.ea.extend();u.jb.prototype.defaultValue=\"00:00\";u.jb.prototype.e=function(){return u.ea.prototype.e.call(this,\"div\",{className:\"vjs-volume-handle\"})};\nu.da=u.q.extend({i:function(a,c){u.q.call(this,a,c);a.d(\"volumechange\",u.bind(this,this.update));a.h&&(a.h.m&&a.h.m.volumeControl===l)&&this.n(\"vjs-hidden\");a.d(\"loadstart\",u.bind(this,function(){a.h.m&&a.h.m.volumeControl===l?this.n(\"vjs-hidden\"):this.u(\"vjs-hidden\")}))}});u.da.prototype.e=function(){return u.q.prototype.e.call(this,\"div\",{className:\"vjs-mute-control vjs-control\",innerHTML:'<div><span class=\"vjs-control-text\">Mute</span></div>'})};\nu.da.prototype.p=function(){this.b.muted(this.b.muted()?l:f)};u.da.prototype.update=function(){var a=this.b.volume(),c=3;0===a||this.b.muted()?c=0:0.33>a?c=1:0.67>a&&(c=2);this.b.muted()?\"Unmute\"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML=\"Unmute\"):\"Mute\"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML=\"Mute\");for(a=0;4>a;a++)u.u(this.a,\"vjs-vol-\"+a);u.n(this.a,\"vjs-vol-\"+c)};\nu.oa=u.R.extend({i:function(a,c){u.R.call(this,a,c);a.d(\"volumechange\",u.bind(this,this.update));a.h&&(a.h.m&&a.h.m.Dc===l)&&this.n(\"vjs-hidden\");a.d(\"loadstart\",u.bind(this,function(){a.h.m&&a.h.m.Dc===l?this.n(\"vjs-hidden\"):this.u(\"vjs-hidden\")}));this.n(\"vjs-menu-button\")}});u.oa.prototype.Ka=function(){var a=new u.ma(this.b,{Vc:\"div\"}),c=new u.hb(this.b,u.k.B({Cd:f},this.g.Vd));a.Z(c);return a};u.oa.prototype.p=function(){u.da.prototype.p.call(this);u.R.prototype.p.call(this)};\nu.oa.prototype.e=function(){return u.q.prototype.e.call(this,\"div\",{className:\"vjs-volume-menu-button vjs-menu-button vjs-control\",innerHTML:'<div><span class=\"vjs-control-text\">Mute</span></div>'})};u.oa.prototype.update=u.da.prototype.update;u.cb=u.q.extend({i:function(a,c){u.q.call(this,a,c);(!a.poster()||!a.controls())&&this.C();a.d(\"play\",u.bind(this,this.C))}});\nu.cb.prototype.e=function(){var a=u.e(\"div\",{className:\"vjs-poster\",tabIndex:-1}),c=this.b.poster();c&&(\"backgroundSize\"in a.style?a.style.backgroundImage='url(\"'+c+'\")':a.appendChild(u.e(\"img\",{src:c})));return a};u.cb.prototype.p=function(){this.K().controls()&&this.b.play()};\nu.Wb=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"canplay\",u.bind(this,this.C));a.d(\"canplaythrough\",u.bind(this,this.C));a.d(\"playing\",u.bind(this,this.C));a.d(\"seeked\",u.bind(this,this.C));a.d(\"seeking\",u.bind(this,this.show));a.d(\"seeked\",u.bind(this,this.C));a.d(\"error\",u.bind(this,this.show));a.d(\"waiting\",u.bind(this,this.show))}});u.Wb.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-loading-spinner\"})};u.Wa=u.q.extend();\nu.Wa.prototype.e=function(){return u.q.prototype.e.call(this,\"div\",{className:\"vjs-big-play-button\",innerHTML:'<span aria-hidden=\"true\"></span>',\"aria-label\":\"play video\"})};u.Wa.prototype.p=function(){this.b.play()};\nu.r=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);var e,g;g=this;e=this.K();a=function(){if(e.controls()&&!e.Rb()){var a,c;g.d(\"mousedown\",g.p);g.d(\"touchstart\",function(a){a.preventDefault();a.stopPropagation();c=this.b.ja()});a=function(a){a.stopPropagation();c&&this.b.Mb()};g.d(\"touchmove\",a);g.d(\"touchleave\",a);g.d(\"touchcancel\",a);g.d(\"touchend\",a);var d,n,r;d=0;g.d(\"touchstart\",function(){d=(new Date).getTime();r=f});a=function(){r=l};g.d(\"touchmove\",a);g.d(\"touchleave\",a);g.d(\"touchcancel\",\na);g.d(\"touchend\",function(){r===f&&(n=(new Date).getTime()-d,250>n&&this.j(\"tap\"))});g.d(\"tap\",g.md)}};c=u.bind(g,g.pd);this.L(a);e.d(\"controlsenabled\",a);e.d(\"controlsdisabled\",c)}});u.r.prototype.pd=function(){this.o(\"tap\");this.o(\"touchstart\");this.o(\"touchmove\");this.o(\"touchleave\");this.o(\"touchcancel\");this.o(\"touchend\");this.o(\"click\");this.o(\"mousedown\")};u.r.prototype.p=function(a){0===a.button&&this.K().controls()&&(this.K().paused()?this.K().play():this.K().pause())};\nu.r.prototype.md=function(){this.K().ja(!this.K().ja())};u.r.prototype.m={volumeControl:f,fullscreenResize:l,progressEvents:l,timeupdateEvents:l};u.media={};u.media.Va=\"play pause paused currentTime setCurrentTime duration buffered volume setVolume muted setMuted width height supportsFullScreen enterFullScreen src load currentSrc preload setPreload autoplay setAutoplay loop setLoop error networkState readyState seeking initialTime startOffsetTime played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks defaultPlaybackRate playbackRate mediaGroup controller controls defaultMuted\".split(\" \");\nfunction ea(){var a=u.media.Va[i];return function(){throw Error('The \"'+a+\"\\\" method is not available on the playback technology's API\");}}for(var i=u.media.Va.length-1;0<=i;i--)u.r.prototype[u.media.Va[i]]=ea();\nu.l=u.r.extend({i:function(a,c,d){this.m.volumeControl=u.l.Uc();this.m.movingMediaElementInDOM=!u.Kc;this.m.fullscreenResize=f;u.r.call(this,a,c,d);(c=c.source)&&this.a.currentSrc===c.src&&0<this.a.networkState?a.j(\"loadstart\"):c&&(this.a.src=c.src);if(u.ac&&a.options().nativeControlsForTouch!==l){var e,g,j,k;e=this;g=this.K();c=g.controls();e.a.controls=!!c;j=function(){e.a.controls=f};k=function(){e.a.controls=l};g.d(\"controlsenabled\",j);g.d(\"controlsdisabled\",k);c=function(){g.o(\"controlsenabled\",\nj);g.o(\"controlsdisabled\",k)};e.d(\"dispose\",c);g.d(\"usingcustomcontrols\",c);g.Rb(f)}a.L(function(){this.M&&(this.g.autoplay&&this.paused())&&(delete this.M.poster,this.play())});for(a=u.l.$a.length-1;0<=a;a--)u.d(this.a,u.l.$a[a],u.bind(this.b,this.$c));this.Ua()}});t=u.l.prototype;t.D=function(){u.r.prototype.D.call(this)};\nt.e=function(){var a=this.b,c=a.M,d;if(!c||this.m.movingMediaElementInDOM===l)c?(d=c.cloneNode(l),u.l.jc(c),c=d,a.M=h):c=u.e(\"video\",{id:a.id()+\"_html5_api\",className:\"vjs-tech\"}),c.player=a,u.zb(c,a.w());d=[\"autoplay\",\"preload\",\"loop\",\"muted\"];for(var e=d.length-1;0<=e;e--){var g=d[e];a.g[g]!==h&&(c[g]=a.g[g])}return c};t.$c=function(a){this.j(a);a.stopPropagation()};t.play=function(){this.a.play()};t.pause=function(){this.a.pause()};t.paused=function(){return this.a.paused};t.currentTime=function(){return this.a.currentTime};\nt.sd=function(a){try{this.a.currentTime=a}catch(c){u.log(c,\"Video is not ready. (Video.js)\")}};t.duration=function(){return this.a.duration||0};t.buffered=function(){return this.a.buffered};t.volume=function(){return this.a.volume};t.xd=function(a){this.a.volume=a};t.muted=function(){return this.a.muted};t.vd=function(a){this.a.muted=a};t.width=function(){return this.a.offsetWidth};t.height=function(){return this.a.offsetHeight};\nt.Ta=function(){return\"function\"==typeof this.a.webkitEnterFullScreen&&(/Android/.test(u.F)||!/Chrome|Mac OS X 10.5/.test(u.F))?f:l};t.src=function(a){this.a.src=a};t.load=function(){this.a.load()};t.currentSrc=function(){return this.a.currentSrc};t.Qa=function(){return this.a.Qa};t.wd=function(a){this.a.Qa=a};t.autoplay=function(){return this.a.autoplay};t.rd=function(a){this.a.autoplay=a};t.controls=function(){return this.a.controls};t.loop=function(){return this.a.loop};\nt.ud=function(a){this.a.loop=a};t.error=function(){return this.a.error};t.seeking=function(){return this.a.seeking};u.l.isSupported=function(){return!!u.na.canPlayType};u.l.mb=function(a){try{return!!u.na.canPlayType(a.type)}catch(c){return\"\"}};u.l.Uc=function(){var a=u.na.volume;u.na.volume=a/2+0.1;return a!==u.na.volume};u.l.$a=\"loadstart suspend abort error emptied stalled loadedmetadata loadeddata canplay canplaythrough playing waiting seeking seeked ended durationchange timeupdate progress play pause ratechange volumechange\".split(\" \");\nu.l.jc=function(a){if(a){a.player=h;for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute(\"src\");\"function\"===typeof a.load&&a.load()}};u.Oc&&(document.createElement(\"video\").constructor.prototype.canPlayType=function(a){return a&&-1!=a.toLowerCase().indexOf(\"video/mp4\")?\"maybe\":\"\"});\nu.f=u.r.extend({i:function(a,c,d){u.r.call(this,a,c,d);var e=c.source;d=c.parentEl;var g=this.a=u.e(\"div\",{id:a.id()+\"_temp_flash\"}),j=a.id()+\"_flash_api\";a=a.g;var k=u.k.B({readyFunction:\"videojs.Flash.onReady\",eventProxyFunction:\"videojs.Flash.onEvent\",errorEventProxyFunction:\"videojs.Flash.onError\",autoplay:a.autoplay,preload:a.Qa,loop:a.loop,muted:a.muted},c.flashVars),q=u.k.B({wmode:\"opaque\",bgcolor:\"#000000\"},c.params),n=u.k.B({id:j,name:j,\"class\":\"vjs-tech\"},c.attributes);e&&(e.type&&u.f.ed(e.type)?\n(a=u.f.Ac(e.src),k.rtmpConnection=encodeURIComponent(a.rb),k.rtmpStream=encodeURIComponent(a.Ob)):k.src=encodeURIComponent(u.mc(e.src)));u.zb(g,d);c.startTime&&this.L(function(){this.load();this.play();this.currentTime(c.startTime)});if(c.iFrameMode===f&&!u.Jc){var r=u.e(\"iframe\",{id:j+\"_iframe\",name:j+\"_iframe\",className:\"vjs-tech\",scrolling:\"no\",marginWidth:0,marginHeight:0,frameBorder:0});k.readyFunction=\"ready\";k.eventProxyFunction=\"events\";k.errorEventProxyFunction=\"errors\";u.d(r,\"load\",u.bind(this,\nfunction(){var a,d=r.contentWindow;a=r.contentDocument?r.contentDocument:r.contentWindow.document;a.write(u.f.nc(c.swf,k,q,n));d.player=this.b;d.ready=u.bind(this.b,function(c){var d=this.h;d.a=a.getElementById(c);u.f.pb(d)});d.events=u.bind(this.b,function(a,c){this&&\"flash\"===this.ia&&this.j(c)});d.errors=u.bind(this.b,function(a,c){u.log(\"Flash Error\",c)})}));g.parentNode.replaceChild(r,g)}else u.f.Zc(c.swf,g,k,q,n)}});t=u.f.prototype;t.D=function(){u.r.prototype.D.call(this)};t.play=function(){this.a.vjs_play()};\nt.pause=function(){this.a.vjs_pause()};t.src=function(a){u.f.dd(a)?(a=u.f.Ac(a),this.Qd(a.rb),this.Rd(a.Ob)):(a=u.mc(a),this.a.vjs_src(a));if(this.b.autoplay()){var c=this;setTimeout(function(){c.play()},0)}};t.currentSrc=function(){var a=this.a.vjs_getProperty(\"currentSrc\");if(a==h){var c=this.Od(),d=this.Pd();c&&d&&(a=u.f.yd(c,d))}return a};t.load=function(){this.a.vjs_load()};t.poster=function(){this.a.vjs_getProperty(\"poster\")};t.buffered=function(){return u.tb(0,this.a.vjs_getProperty(\"buffered\"))};\nt.Ta=s(l);var Q=u.f.prototype,R=\"rtmpConnection rtmpStream preload currentTime defaultPlaybackRate playbackRate autoplay loop mediaGroup controller controls volume muted defaultMuted\".split(\" \"),S=\"error currentSrc networkState readyState seeking initialTime duration startOffsetTime paused played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks\".split(\" \");\nfunction fa(){var a=R[T],c=a.charAt(0).toUpperCase()+a.slice(1);Q[\"set\"+c]=function(c){return this.a.vjs_setProperty(a,c)}}function U(a){Q[a]=function(){return this.a.vjs_getProperty(a)}}var T;for(T=0;T<R.length;T++)U(R[T]),fa();for(T=0;T<S.length;T++)U(S[T]);u.f.isSupported=function(){return 10<=u.f.version()[0]};u.f.mb=function(a){if(!a.type)return\"\";a=a.type.replace(/;.*/,\"\").toLowerCase();if(a in u.f.bd||a in u.f.Bc)return\"maybe\"};\nu.f.bd={\"video/flv\":\"FLV\",\"video/x-flv\":\"FLV\",\"video/mp4\":\"MP4\",\"video/m4v\":\"MP4\"};u.f.Bc={\"rtmp/mp4\":\"MP4\",\"rtmp/flv\":\"FLV\"};u.f.onReady=function(a){a=u.w(a);var c=a.player||a.parentNode.player,d=c.h;a.player=c;d.a=a;u.f.pb(d)};u.f.pb=function(a){a.w().vjs_getProperty?a.Ua():setTimeout(function(){u.f.pb(a)},50)};u.f.onEvent=function(a,c){u.w(a).player.j(c)};u.f.onError=function(a,c){u.w(a).player.j(\"error\");u.log(\"Flash Error\",c,a)};\nu.f.version=function(){var a=\"0,0,0\";try{a=(new window.ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\")).GetVariable(\"$version\").replace(/\\D+/g,\",\").match(/^,?(.+),?$/)[1]}catch(c){try{navigator.mimeTypes[\"application/x-shockwave-flash\"].enabledPlugin&&(a=(navigator.plugins[\"Shockwave Flash 2.0\"]||navigator.plugins[\"Shockwave Flash\"]).description.replace(/\\D+/g,\",\").match(/^,?(.+),?$/)[1])}catch(d){}}return a.split(\",\")};\nu.f.Zc=function(a,c,d,e,g){a=u.f.nc(a,d,e,g);a=u.e(\"div\",{innerHTML:a}).childNodes[0];d=c.parentNode;c.parentNode.replaceChild(a,c);var j=d.childNodes[0];setTimeout(function(){j.style.display=\"block\"},1E3)};\nu.f.nc=function(a,c,d,e){var g=\"\",j=\"\",k=\"\";c&&u.k.ua(c,function(a,c){g+=a+\"=\"+c+\"&amp;\"});d=u.k.B({movie:a,flashvars:g,allowScriptAccess:\"always\",allowNetworking:\"all\"},d);u.k.ua(d,function(a,c){j+='<param name=\"'+a+'\" value=\"'+c+'\" />'});e=u.k.B({data:a,width:\"100%\",height:\"100%\"},e);u.k.ua(e,function(a,c){k+=a+'=\"'+c+'\" '});return'<object type=\"application/x-shockwave-flash\"'+k+\">\"+j+\"</object>\"};u.f.yd=function(a,c){return a+\"&\"+c};\nu.f.Ac=function(a){var c={rb:\"\",Ob:\"\"};if(!a)return c;var d=a.indexOf(\"&\"),e;-1!==d?e=d+1:(d=e=a.lastIndexOf(\"/\")+1,0===d&&(d=e=a.length));c.rb=a.substring(0,d);c.Ob=a.substring(e,a.length);return c};u.f.ed=function(a){return a in u.f.Bc};u.f.Qc=/^rtmp[set]?:\\/\\//i;u.f.dd=function(a){return u.f.Qc.test(a)};\nu.Pc=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);if(!a.g.sources||0===a.g.sources.length){c=0;for(d=a.g.techOrder;c<d.length;c++){var e=u.$(d[c]),g=window.videojs[e];if(g&&g.isSupported()){I(a,e);break}}}else a.src(a.g.sources)}});function V(a){a.Aa=a.Aa||[];return a.Aa}function W(a,c,d){for(var e=a.Aa,g=0,j=e.length,k,q;g<j;g++)k=e[g],k.id()===c?(k.show(),q=k):d&&(k.J()==d&&0<k.mode())&&k.disable();(c=q?q.J():d?d:l)&&a.j(c+\"trackchange\")}\nu.X=u.c.extend({i:function(a,c){u.c.call(this,a,c);this.Q=c.id||\"vjs_\"+c.kind+\"_\"+c.language+\"_\"+u.t++;this.xc=c.src;this.Wc=c[\"default\"]||c.dflt;this.Ad=c.title;this.Ld=c.srclang;this.fd=c.label;this.fa=[];this.ec=[];this.ga=this.ha=0;this.b.d(\"fullscreenchange\",u.bind(this,this.Rc))}});t=u.X.prototype;t.J=p(\"A\");t.src=p(\"xc\");t.ub=p(\"Wc\");t.title=p(\"Ad\");t.label=p(\"fd\");t.readyState=p(\"ha\");t.mode=p(\"ga\");t.Rc=function(){this.a.style.fontSize=this.b.H?140*(screen.width/this.b.width())+\"%\":\"\"};\nt.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-\"+this.A+\" vjs-text-track\"})};t.show=function(){X(this);this.ga=2;u.c.prototype.show.call(this)};t.C=function(){X(this);this.ga=1;u.c.prototype.C.call(this)};t.disable=function(){2==this.ga&&this.C();this.b.o(\"timeupdate\",u.bind(this,this.update,this.Q));this.b.o(\"ended\",u.bind(this,this.reset,this.Q));this.reset();this.b.V.textTrackDisplay.removeChild(this);this.ga=0};\nfunction X(a){0===a.ha&&a.load();0===a.ga&&(a.b.d(\"timeupdate\",u.bind(a,a.update,a.Q)),a.b.d(\"ended\",u.bind(a,a.reset,a.Q)),(\"captions\"===a.A||\"subtitles\"===a.A)&&a.b.V.textTrackDisplay.Z(a))}t.load=function(){0===this.ha&&(this.ha=1,u.get(this.xc,u.bind(this,this.nd),u.bind(this,this.Gb)))};t.Gb=function(a){this.error=a;this.ha=3;this.j(\"error\")};\nt.nd=function(a){var c,d;a=a.split(\"\\n\");for(var e=\"\",g=1,j=a.length;g<j;g++)if(e=u.trim(a[g])){-1==e.indexOf(\"--\\x3e\")?(c=e,e=u.trim(a[++g])):c=this.fa.length;c={id:c,index:this.fa.length};d=e.split(\" --\\x3e \");c.startTime=Y(d[0]);c.va=Y(d[1]);for(d=[];a[++g]&&(e=u.trim(a[g]));)d.push(e);c.text=d.join(\"<br/>\");this.fa.push(c)}this.ha=2;this.j(\"loaded\")};\nfunction Y(a){var c=a.split(\":\");a=0;var d,e,g;3==c.length?(d=c[0],e=c[1],c=c[2]):(d=0,e=c[0],c=c[1]);c=c.split(/\\s+/);c=c.splice(0,1)[0];c=c.split(/\\.|,/);g=parseFloat(c[1]);c=c[0];a+=3600*parseFloat(d);a+=60*parseFloat(e);a+=parseFloat(c);g&&(a+=g/1E3);return a}\nt.update=function(){if(0<this.fa.length){var a=this.b.currentTime();if(this.Lb===b||a<this.Lb||this.Ma<=a){var c=this.fa,d=this.b.duration(),e=0,g=l,j=[],k,q,n,r;a>=this.Ma||this.Ma===b?r=this.wb!==b?this.wb:0:(g=f,r=this.Db!==b?this.Db:c.length-1);for(;;){n=c[r];if(n.va<=a)e=Math.max(e,n.va),n.Ia&&(n.Ia=l);else if(a<n.startTime){if(d=Math.min(d,n.startTime),n.Ia&&(n.Ia=l),!g)break}else g?(j.splice(0,0,n),q===b&&(q=r),k=r):(j.push(n),k===b&&(k=r),q=r),d=Math.min(d,n.va),e=Math.max(e,n.startTime),\nn.Ia=f;if(g)if(0===r)break;else r--;else if(r===c.length-1)break;else r++}this.ec=j;this.Ma=d;this.Lb=e;this.wb=k;this.Db=q;a=this.ec;c=\"\";d=0;for(e=a.length;d<e;d++)c+='<span class=\"vjs-tt-cue\">'+a[d].text+\"</span>\";this.a.innerHTML=c;this.j(\"cuechange\")}}};t.reset=function(){this.Ma=0;this.Lb=this.b.duration();this.Db=this.wb=0};u.Ub=u.X.extend();u.Ub.prototype.A=\"captions\";u.$b=u.X.extend();u.$b.prototype.A=\"subtitles\";u.Vb=u.X.extend();u.Vb.prototype.A=\"chapters\";\nu.bc=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);if(a.g.tracks&&0<a.g.tracks.length){c=this.b;a=a.g.tracks;var e;for(d=0;d<a.length;d++){e=a[d];var g=c,j=e.kind,k=e.label,q=e.language,n=e;e=g.Aa=g.Aa||[];n=n||{};n.kind=j;n.label=k;n.language=q;j=u.$(j||\"subtitles\");g=new window.videojs[j+\"Track\"](g,n);e.push(g)}}}});u.bc.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-text-track-display\"})};\nu.Y=u.N.extend({i:function(a,c){var d=this.ca=c.track;c.label=d.label();c.selected=d.ub();u.N.call(this,a,c);this.b.d(d.J()+\"trackchange\",u.bind(this,this.update))}});u.Y.prototype.p=function(){u.N.prototype.p.call(this);W(this.b,this.ca.Q,this.ca.J())};u.Y.prototype.update=function(){this.selected(2==this.ca.mode())};u.bb=u.Y.extend({i:function(a,c){c.track={J:function(){return c.kind},K:a,label:function(){return c.kind+\" off\"},ub:s(l),mode:s(l)};u.Y.call(this,a,c);this.selected(f)}});\nu.bb.prototype.p=function(){u.Y.prototype.p.call(this);W(this.b,this.ca.Q,this.ca.J())};u.bb.prototype.update=function(){for(var a=V(this.b),c=0,d=a.length,e,g=f;c<d;c++)e=a[c],e.J()==this.ca.J()&&2==e.mode()&&(g=l);this.selected(g)};u.S=u.R.extend({i:function(a,c){u.R.call(this,a,c);1>=this.I.length&&this.C()}});u.S.prototype.ta=function(){var a=[],c;a.push(new u.bb(this.b,{kind:this.A}));for(var d=0;d<V(this.b).length;d++)c=V(this.b)[d],c.J()===this.A&&a.push(new u.Y(this.b,{track:c}));return a};\nu.Da=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute(\"aria-label\",\"Captions Menu\")}});u.Da.prototype.A=\"captions\";u.Da.prototype.qa=\"Captions\";u.Da.prototype.className=\"vjs-captions-button\";u.Ha=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute(\"aria-label\",\"Subtitles Menu\")}});u.Ha.prototype.A=\"subtitles\";u.Ha.prototype.qa=\"Subtitles\";u.Ha.prototype.className=\"vjs-subtitles-button\";\nu.Ea=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute(\"aria-label\",\"Chapters Menu\")}});t=u.Ea.prototype;t.A=\"chapters\";t.qa=\"Chapters\";t.className=\"vjs-chapters-button\";t.ta=function(){for(var a=[],c,d=0;d<V(this.b).length;d++)c=V(this.b)[d],c.J()===this.A&&a.push(new u.Y(this.b,{track:c}));return a};\nt.Ka=function(){for(var a=V(this.b),c=0,d=a.length,e,g,j=this.I=[];c<d;c++)if(e=a[c],e.J()==this.A&&e.ub()){if(2>e.readyState()){this.Id=e;e.d(\"loaded\",u.bind(this,this.Ka));return}g=e;break}a=this.wa=new u.ma(this.b);a.a.appendChild(u.e(\"li\",{className:\"vjs-menu-title\",innerHTML:u.$(this.A),zd:-1}));if(g){e=g.fa;for(var k,c=0,d=e.length;c<d;c++)k=e[c],k=new u.Xa(this.b,{track:g,cue:k}),j.push(k),a.Z(k)}0<this.I.length&&this.show();return a};\nu.Xa=u.N.extend({i:function(a,c){var d=this.ca=c.track,e=this.cue=c.cue,g=a.currentTime();c.label=e.text;c.selected=e.startTime<=g&&g<e.va;u.N.call(this,a,c);d.d(\"cuechange\",u.bind(this,this.update))}});u.Xa.prototype.p=function(){u.N.prototype.p.call(this);this.b.currentTime(this.cue.startTime);this.update(this.cue.startTime)};u.Xa.prototype.update=function(){var a=this.cue,c=this.b.currentTime();this.selected(a.startTime<=c&&c<a.va)};\nu.k.B(u.Fa.prototype.g.children,{subtitlesButton:{},captionsButton:{},chaptersButton:{}});\nif(\"undefined\"!==typeof window.JSON&&\"function\"===window.JSON.parse)u.JSON=window.JSON;else{u.JSON={};var Z=/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;u.JSON.parse=function(a,c){function d(a,e){var k,q,n=a[e];if(n&&\"object\"===typeof n)for(k in n)Object.prototype.hasOwnProperty.call(n,k)&&(q=d(n,k),q!==b?n[k]=q:delete n[k]);return c.call(a,e,n)}var e;a=String(a);Z.lastIndex=0;Z.test(a)&&(a=a.replace(Z,function(a){return\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)}));\nif(/^[\\],:{}\\s]*$/.test(a.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g,\"\")))return e=eval(\"(\"+a+\")\"),\"function\"===typeof c?d({\"\":e},\"\"):e;throw new SyntaxError(\"JSON.parse(): invalid or malformed JSON data\");}}\nu.fc=function(){var a,c,d=document.getElementsByTagName(\"video\");if(d&&0<d.length)for(var e=0,g=d.length;e<g;e++)if((c=d[e])&&c.getAttribute)c.player===b&&(a=c.getAttribute(\"data-setup\"),a!==h&&(a=u.JSON.parse(a||\"{}\"),v(c,a)));else{u.kb();break}else u.Ec||u.kb()};u.kb=function(){setTimeout(u.fc,1)};\"complete\"===document.readyState?u.Ec=f:u.U(window,\"load\",function(){u.Ec=f});u.kb();u.od=function(a,c){u.s.prototype[a]=c};var ga=this;ga.Ed=f;function $(a,c){var d=a.split(\".\"),e=ga;!(d[0]in e)&&e.execScript&&e.execScript(\"var \"+d[0]);for(var g;d.length&&(g=d.shift());)!d.length&&c!==b?e[g]=c:e=e[g]?e[g]:e[g]={}};$(\"videojs\",u);$(\"_V_\",u);$(\"videojs.options\",u.options);$(\"videojs.players\",u.xa);$(\"videojs.TOUCH_ENABLED\",u.ac);$(\"videojs.cache\",u.ra);$(\"videojs.Component\",u.c);u.c.prototype.player=u.c.prototype.K;u.c.prototype.dispose=u.c.prototype.D;u.c.prototype.createEl=u.c.prototype.e;u.c.prototype.el=u.c.prototype.w;u.c.prototype.addChild=u.c.prototype.Z;u.c.prototype.children=u.c.prototype.children;u.c.prototype.on=u.c.prototype.d;u.c.prototype.off=u.c.prototype.o;u.c.prototype.one=u.c.prototype.U;\nu.c.prototype.trigger=u.c.prototype.j;u.c.prototype.triggerReady=u.c.prototype.Ua;u.c.prototype.show=u.c.prototype.show;u.c.prototype.hide=u.c.prototype.C;u.c.prototype.width=u.c.prototype.width;u.c.prototype.height=u.c.prototype.height;u.c.prototype.dimensions=u.c.prototype.Xc;u.c.prototype.ready=u.c.prototype.L;u.c.prototype.addClass=u.c.prototype.n;u.c.prototype.removeClass=u.c.prototype.u;$(\"videojs.Player\",u.s);u.s.prototype.dispose=u.s.prototype.D;u.s.prototype.requestFullScreen=u.s.prototype.ya;\nu.s.prototype.cancelFullScreen=u.s.prototype.ob;u.s.prototype.bufferedPercent=u.s.prototype.Ja;u.s.prototype.usingNativeControls=u.s.prototype.Rb;u.s.prototype.reportUserActivity=u.s.prototype.Mb;u.s.prototype.userActive=u.s.prototype.ja;$(\"videojs.MediaLoader\",u.Pc);$(\"videojs.TextTrackDisplay\",u.bc);$(\"videojs.ControlBar\",u.Fa);$(\"videojs.Button\",u.q);$(\"videojs.PlayToggle\",u.Yb);$(\"videojs.FullscreenToggle\",u.Ga);$(\"videojs.BigPlayButton\",u.Wa);$(\"videojs.LoadingSpinner\",u.Wb);\n$(\"videojs.CurrentTimeDisplay\",u.Ya);$(\"videojs.DurationDisplay\",u.Za);$(\"videojs.TimeDivider\",u.cc);$(\"videojs.RemainingTimeDisplay\",u.fb);$(\"videojs.Slider\",u.O);$(\"videojs.ProgressControl\",u.eb);$(\"videojs.SeekBar\",u.Zb);$(\"videojs.LoadProgressBar\",u.ab);$(\"videojs.PlayProgressBar\",u.Xb);$(\"videojs.SeekHandle\",u.gb);$(\"videojs.VolumeControl\",u.ib);$(\"videojs.VolumeBar\",u.hb);$(\"videojs.VolumeLevel\",u.dc);$(\"videojs.VolumeMenuButton\",u.oa);$(\"videojs.VolumeHandle\",u.jb);$(\"videojs.MuteToggle\",u.da);\n$(\"videojs.PosterImage\",u.cb);$(\"videojs.Menu\",u.ma);$(\"videojs.MenuItem\",u.N);$(\"videojs.MenuButton\",u.R);u.R.prototype.createItems=u.R.prototype.ta;u.S.prototype.createItems=u.S.prototype.ta;u.Ea.prototype.createItems=u.Ea.prototype.ta;$(\"videojs.SubtitlesButton\",u.Ha);$(\"videojs.CaptionsButton\",u.Da);$(\"videojs.ChaptersButton\",u.Ea);$(\"videojs.MediaTechController\",u.r);u.r.prototype.features=u.r.prototype.m;u.r.prototype.m.volumeControl=u.r.prototype.m.Dc;u.r.prototype.m.fullscreenResize=u.r.prototype.m.Jd;\nu.r.prototype.m.progressEvents=u.r.prototype.m.Nd;u.r.prototype.m.timeupdateEvents=u.r.prototype.m.Sd;$(\"videojs.Html5\",u.l);u.l.Events=u.l.$a;u.l.isSupported=u.l.isSupported;u.l.canPlaySource=u.l.mb;u.l.prototype.setCurrentTime=u.l.prototype.sd;u.l.prototype.setVolume=u.l.prototype.xd;u.l.prototype.setMuted=u.l.prototype.vd;u.l.prototype.setPreload=u.l.prototype.wd;u.l.prototype.setAutoplay=u.l.prototype.rd;u.l.prototype.setLoop=u.l.prototype.ud;$(\"videojs.Flash\",u.f);u.f.isSupported=u.f.isSupported;\nu.f.canPlaySource=u.f.mb;u.f.onReady=u.f.onReady;$(\"videojs.TextTrack\",u.X);u.X.prototype.label=u.X.prototype.label;$(\"videojs.CaptionsTrack\",u.Ub);$(\"videojs.SubtitlesTrack\",u.$b);$(\"videojs.ChaptersTrack\",u.Vb);$(\"videojs.autoSetup\",u.fc);$(\"videojs.plugin\",u.od);$(\"videojs.createTimeRange\",u.tb);})();\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/webuploader/webuploader.css",
    "content": ".webuploader-container {\n\tposition: relative;\n}\n.webuploader-element-invisible {\n\tposition: absolute !important;\n\tclip: rect(1px 1px 1px 1px); /* IE6, IE7 */\n    clip: rect(1px,1px,1px,1px);\n}\n.webuploader-pick {\n\tposition: relative;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tbackground: #00b7ee;\n\tpadding: 10px 15px;\n\tcolor: #fff;\n\ttext-align: center;\n\tborder-radius: 3px;\n\toverflow: hidden;\n}\n.webuploader-pick-hover {\n\tbackground: #00a2d4;\n}\n\n.webuploader-pick-disable {\n\topacity: 0.6;\n\tpointer-events:none;\n}\n\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/webuploader/webuploader.custom.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: true,\n    \n            // 是否允许放大。\n            allowMagnify: true\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: false,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n            'make-thumb': 'makeThumb',\n            'before-send-file': 'compressImage'\n        }, {\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             *\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function() {\n                    cb( true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            compressImage: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 300 * 1024,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( opts.width, opts.height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destory = this.destory;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/html5/filepicker',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var $ = Base.$;\n    \n        return Html5Runtime.register( 'FilePicker', {\n            init: function() {\n                var container = this.getRuntime().getContainer(),\n                    me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    lable = $( document.createElement('label') ),\n                    input = $( document.createElement('input') ),\n                    arr, i, len, mouseHandler;\n    \n                input.attr( 'type', 'file' );\n                input.attr( 'name', opts.name );\n                input.addClass('webuploader-element-invisible');\n    \n                lable.on( 'click', function() {\n                    input.trigger('click');\n                });\n    \n                lable.css({\n                    opacity: 0,\n                    width: '100%',\n                    height: '100%',\n                    display: 'block',\n                    cursor: 'pointer',\n                    background: '#ffffff'\n                });\n    \n                if ( opts.multiple ) {\n                    input.attr( 'multiple', 'multiple' );\n                }\n    \n                // @todo Firefox不支持单独指定后缀\n                if ( opts.accept && opts.accept.length > 0 ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        arr.push( opts.accept[ i ].mimeTypes );\n                    }\n    \n                    input.attr( 'accept', arr.join(',') );\n                }\n    \n                container.append( input );\n                container.append( lable );\n    \n                mouseHandler = function( e ) {\n                    owner.trigger( e.type );\n                };\n    \n                input.on( 'change', function( e ) {\n                    var fn = arguments.callee,\n                        clone;\n    \n                    me.files = e.target.files;\n    \n                    // reset input\n                    clone = this.cloneNode( true );\n                    this.parentNode.replaceChild( clone, this );\n    \n                    input.off();\n                    input = $( clone ).on( 'change', fn )\n                            .on( 'mouseenter mouseleave', mouseHandler );\n    \n                    owner.trigger('change');\n                });\n    \n                lable.on( 'mouseenter mouseleave', mouseHandler );\n    \n            },\n    \n    \n            getFiles: function() {\n                return this.files;\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger('complete');\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, 'image/jpeg',\n                                opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        canvas.getContext('2d').drawImage( img, x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                            iw * vertSquashRatio, ih * vertSquashRatio,\n                            x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * 这个方式性能不行，但是可以解决android里面的toDataUrl的bug\n     * android里面toDataUrl('image/jpege')得到的结果却是png.\n     *\n     * 所以这里没辙，只能借助这个工具\n     * @fileOverview jpeg encoder\n     */\n    define('runtime/html5/jpegencoder',[], function( require, exports, module ) {\n    \n        /*\n          Copyright (c) 2008, Adobe Systems Incorporated\n          All rights reserved.\n    \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are\n          met:\n    \n          * Redistributions of source code must retain the above copyright notice,\n            this list of conditions and the following disclaimer.\n    \n          * Redistributions in binary form must reproduce the above copyright\n            notice, this list of conditions and the following disclaimer in the\n            documentation and/or other materials provided with the distribution.\n    \n          * Neither the name of Adobe Systems Incorporated nor the names of its\n            contributors may be used to endorse or promote products derived from\n            this software without specific prior written permission.\n    \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n          IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n          THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n          PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n          CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n          EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n          PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n          PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n          LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n          NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n          SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n        /*\n        JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n    \n        Basic GUI blocking jpeg encoder\n        */\n    \n        function JPEGEncoder(quality) {\n          var self = this;\n            var fround = Math.round;\n            var ffloor = Math.floor;\n            var YTable = new Array(64);\n            var UVTable = new Array(64);\n            var fdtbl_Y = new Array(64);\n            var fdtbl_UV = new Array(64);\n            var YDC_HT;\n            var UVDC_HT;\n            var YAC_HT;\n            var UVAC_HT;\n    \n            var bitcode = new Array(65535);\n            var category = new Array(65535);\n            var outputfDCTQuant = new Array(64);\n            var DU = new Array(64);\n            var byteout = [];\n            var bytenew = 0;\n            var bytepos = 7;\n    \n            var YDU = new Array(64);\n            var UDU = new Array(64);\n            var VDU = new Array(64);\n            var clt = new Array(256);\n            var RGB_YUV_TABLE = new Array(2048);\n            var currentQuality;\n    \n            var ZigZag = [\n                     0, 1, 5, 6,14,15,27,28,\n                     2, 4, 7,13,16,26,29,42,\n                     3, 8,12,17,25,30,41,43,\n                     9,11,18,24,31,40,44,53,\n                    10,19,23,32,39,45,52,54,\n                    20,22,33,38,46,51,55,60,\n                    21,34,37,47,50,56,59,61,\n                    35,36,48,49,57,58,62,63\n                ];\n    \n            var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n            var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n            var std_ac_luminance_values = [\n                    0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n                    0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n                    0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n                    0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n                    0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n                    0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n                    0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n                    0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n                    0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n                    0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n                    0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n                    0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n                    0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n                    0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n                    0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n                    0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n                    0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n                    0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n                    0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n                    0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n            var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n            var std_ac_chrominance_values = [\n                    0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n                    0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n                    0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n                    0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n                    0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n                    0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n                    0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n                    0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n                    0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n                    0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n                    0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n                    0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n                    0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n                    0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n                    0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n                    0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n                    0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n                    0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n                    0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n                    0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            function initQuantTables(sf){\n                    var YQT = [\n                        16, 11, 10, 16, 24, 40, 51, 61,\n                        12, 12, 14, 19, 26, 58, 60, 55,\n                        14, 13, 16, 24, 40, 57, 69, 56,\n                        14, 17, 22, 29, 51, 87, 80, 62,\n                        18, 22, 37, 56, 68,109,103, 77,\n                        24, 35, 55, 64, 81,104,113, 92,\n                        49, 64, 78, 87,103,121,120,101,\n                        72, 92, 95, 98,112,100,103, 99\n                    ];\n    \n                    for (var i = 0; i < 64; i++) {\n                        var t = ffloor((YQT[i]*sf+50)/100);\n                        if (t < 1) {\n                            t = 1;\n                        } else if (t > 255) {\n                            t = 255;\n                        }\n                        YTable[ZigZag[i]] = t;\n                    }\n                    var UVQT = [\n                        17, 18, 24, 47, 99, 99, 99, 99,\n                        18, 21, 26, 66, 99, 99, 99, 99,\n                        24, 26, 56, 99, 99, 99, 99, 99,\n                        47, 66, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99\n                    ];\n                    for (var j = 0; j < 64; j++) {\n                        var u = ffloor((UVQT[j]*sf+50)/100);\n                        if (u < 1) {\n                            u = 1;\n                        } else if (u > 255) {\n                            u = 255;\n                        }\n                        UVTable[ZigZag[j]] = u;\n                    }\n                    var aasf = [\n                        1.0, 1.387039845, 1.306562965, 1.175875602,\n                        1.0, 0.785694958, 0.541196100, 0.275899379\n                    ];\n                    var k = 0;\n                    for (var row = 0; row < 8; row++)\n                    {\n                        for (var col = 0; col < 8; col++)\n                        {\n                            fdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            k++;\n                        }\n                    }\n                }\n    \n                function computeHuffmanTbl(nrcodes, std_table){\n                    var codevalue = 0;\n                    var pos_in_table = 0;\n                    var HT = new Array();\n                    for (var k = 1; k <= 16; k++) {\n                        for (var j = 1; j <= nrcodes[k]; j++) {\n                            HT[std_table[pos_in_table]] = [];\n                            HT[std_table[pos_in_table]][0] = codevalue;\n                            HT[std_table[pos_in_table]][1] = k;\n                            pos_in_table++;\n                            codevalue++;\n                        }\n                        codevalue*=2;\n                    }\n                    return HT;\n                }\n    \n                function initHuffmanTbl()\n                {\n                    YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n                    UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n                    YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n                    UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n                }\n    \n                function initCategoryNumber()\n                {\n                    var nrlower = 1;\n                    var nrupper = 2;\n                    for (var cat = 1; cat <= 15; cat++) {\n                        //Positive numbers\n                        for (var nr = nrlower; nr<nrupper; nr++) {\n                            category[32767+nr] = cat;\n                            bitcode[32767+nr] = [];\n                            bitcode[32767+nr][1] = cat;\n                            bitcode[32767+nr][0] = nr;\n                        }\n                        //Negative numbers\n                        for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n                            category[32767+nrneg] = cat;\n                            bitcode[32767+nrneg] = [];\n                            bitcode[32767+nrneg][1] = cat;\n                            bitcode[32767+nrneg][0] = nrupper-1+nrneg;\n                        }\n                        nrlower <<= 1;\n                        nrupper <<= 1;\n                    }\n                }\n    \n                function initRGBYUVTable() {\n                    for(var i = 0; i < 256;i++) {\n                        RGB_YUV_TABLE[i]            =  19595 * i;\n                        RGB_YUV_TABLE[(i+ 256)>>0]  =  38470 * i;\n                        RGB_YUV_TABLE[(i+ 512)>>0]  =   7471 * i + 0x8000;\n                        RGB_YUV_TABLE[(i+ 768)>>0]  = -11059 * i;\n                        RGB_YUV_TABLE[(i+1024)>>0]  = -21709 * i;\n                        RGB_YUV_TABLE[(i+1280)>>0]  =  32768 * i + 0x807FFF;\n                        RGB_YUV_TABLE[(i+1536)>>0]  = -27439 * i;\n                        RGB_YUV_TABLE[(i+1792)>>0]  = - 5329 * i;\n                    }\n                }\n    \n                // IO functions\n                function writeBits(bs)\n                {\n                    var value = bs[0];\n                    var posval = bs[1]-1;\n                    while ( posval >= 0 ) {\n                        if (value & (1 << posval) ) {\n                            bytenew |= (1 << bytepos);\n                        }\n                        posval--;\n                        bytepos--;\n                        if (bytepos < 0) {\n                            if (bytenew == 0xFF) {\n                                writeByte(0xFF);\n                                writeByte(0);\n                            }\n                            else {\n                                writeByte(bytenew);\n                            }\n                            bytepos=7;\n                            bytenew=0;\n                        }\n                    }\n                }\n    \n                function writeByte(value)\n                {\n                    byteout.push(clt[value]); // write char directly instead of converting later\n                }\n    \n                function writeWord(value)\n                {\n                    writeByte((value>>8)&0xFF);\n                    writeByte((value   )&0xFF);\n                }\n    \n                // DCT & quantization core\n                function fDCTQuant(data, fdtbl)\n                {\n                    var d0, d1, d2, d3, d4, d5, d6, d7;\n                    /* Pass 1: process rows. */\n                    var dataOff=0;\n                    var i;\n                    var I8 = 8;\n                    var I64 = 64;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff+1];\n                        d2 = data[dataOff+2];\n                        d3 = data[dataOff+3];\n                        d4 = data[dataOff+4];\n                        d5 = data[dataOff+5];\n                        d6 = data[dataOff+6];\n                        d7 = data[dataOff+7];\n    \n                        var tmp0 = d0 + d7;\n                        var tmp7 = d0 - d7;\n                        var tmp1 = d1 + d6;\n                        var tmp6 = d1 - d6;\n                        var tmp2 = d2 + d5;\n                        var tmp5 = d2 - d5;\n                        var tmp3 = d3 + d4;\n                        var tmp4 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10 = tmp0 + tmp3;    /* phase 2 */\n                        var tmp13 = tmp0 - tmp3;\n                        var tmp11 = tmp1 + tmp2;\n                        var tmp12 = tmp1 - tmp2;\n    \n                        data[dataOff] = tmp10 + tmp11; /* phase 3 */\n                        data[dataOff+4] = tmp10 - tmp11;\n    \n                        var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n                        data[dataOff+2] = tmp13 + z1; /* phase 5 */\n                        data[dataOff+6] = tmp13 - z1;\n    \n                        /* Odd part */\n                        tmp10 = tmp4 + tmp5; /* phase 2 */\n                        tmp11 = tmp5 + tmp6;\n                        tmp12 = tmp6 + tmp7;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n                        var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n                        var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n                        var z3 = tmp11 * 0.707106781; /* c4 */\n    \n                        var z11 = tmp7 + z3;    /* phase 5 */\n                        var z13 = tmp7 - z3;\n    \n                        data[dataOff+5] = z13 + z2; /* phase 6 */\n                        data[dataOff+3] = z13 - z2;\n                        data[dataOff+1] = z11 + z4;\n                        data[dataOff+7] = z11 - z4;\n    \n                        dataOff += 8; /* advance pointer to next row */\n                    }\n    \n                    /* Pass 2: process columns. */\n                    dataOff = 0;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff + 8];\n                        d2 = data[dataOff + 16];\n                        d3 = data[dataOff + 24];\n                        d4 = data[dataOff + 32];\n                        d5 = data[dataOff + 40];\n                        d6 = data[dataOff + 48];\n                        d7 = data[dataOff + 56];\n    \n                        var tmp0p2 = d0 + d7;\n                        var tmp7p2 = d0 - d7;\n                        var tmp1p2 = d1 + d6;\n                        var tmp6p2 = d1 - d6;\n                        var tmp2p2 = d2 + d5;\n                        var tmp5p2 = d2 - d5;\n                        var tmp3p2 = d3 + d4;\n                        var tmp4p2 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10p2 = tmp0p2 + tmp3p2;  /* phase 2 */\n                        var tmp13p2 = tmp0p2 - tmp3p2;\n                        var tmp11p2 = tmp1p2 + tmp2p2;\n                        var tmp12p2 = tmp1p2 - tmp2p2;\n    \n                        data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n                        data[dataOff+32] = tmp10p2 - tmp11p2;\n    \n                        var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n                        data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n                        data[dataOff+48] = tmp13p2 - z1p2;\n    \n                        /* Odd part */\n                        tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n                        tmp11p2 = tmp5p2 + tmp6p2;\n                        tmp12p2 = tmp6p2 + tmp7p2;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n                        var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n                        var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n                        var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n    \n                        var z11p2 = tmp7p2 + z3p2;  /* phase 5 */\n                        var z13p2 = tmp7p2 - z3p2;\n    \n                        data[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n                        data[dataOff+24] = z13p2 - z2p2;\n                        data[dataOff+ 8] = z11p2 + z4p2;\n                        data[dataOff+56] = z11p2 - z4p2;\n    \n                        dataOff++; /* advance pointer to next column */\n                    }\n    \n                    // Quantize/descale the coefficients\n                    var fDCTQuant;\n                    for (i=0; i<I64; ++i)\n                    {\n                        // Apply the quantization and scaling factor & Round to nearest integer\n                        fDCTQuant = data[i]*fdtbl[i];\n                        outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n                        //outputfDCTQuant[i] = fround(fDCTQuant);\n    \n                    }\n                    return outputfDCTQuant;\n                }\n    \n                function writeAPP0()\n                {\n                    writeWord(0xFFE0); // marker\n                    writeWord(16); // length\n                    writeByte(0x4A); // J\n                    writeByte(0x46); // F\n                    writeByte(0x49); // I\n                    writeByte(0x46); // F\n                    writeByte(0); // = \"JFIF\",'\\0'\n                    writeByte(1); // versionhi\n                    writeByte(1); // versionlo\n                    writeByte(0); // xyunits\n                    writeWord(1); // xdensity\n                    writeWord(1); // ydensity\n                    writeByte(0); // thumbnwidth\n                    writeByte(0); // thumbnheight\n                }\n    \n                function writeSOF0(width, height)\n                {\n                    writeWord(0xFFC0); // marker\n                    writeWord(17);   // length, truecolor YUV JPG\n                    writeByte(8);    // precision\n                    writeWord(height);\n                    writeWord(width);\n                    writeByte(3);    // nrofcomponents\n                    writeByte(1);    // IdY\n                    writeByte(0x11); // HVY\n                    writeByte(0);    // QTY\n                    writeByte(2);    // IdU\n                    writeByte(0x11); // HVU\n                    writeByte(1);    // QTU\n                    writeByte(3);    // IdV\n                    writeByte(0x11); // HVV\n                    writeByte(1);    // QTV\n                }\n    \n                function writeDQT()\n                {\n                    writeWord(0xFFDB); // marker\n                    writeWord(132);    // length\n                    writeByte(0);\n                    for (var i=0; i<64; i++) {\n                        writeByte(YTable[i]);\n                    }\n                    writeByte(1);\n                    for (var j=0; j<64; j++) {\n                        writeByte(UVTable[j]);\n                    }\n                }\n    \n                function writeDHT()\n                {\n                    writeWord(0xFFC4); // marker\n                    writeWord(0x01A2); // length\n    \n                    writeByte(0); // HTYDCinfo\n                    for (var i=0; i<16; i++) {\n                        writeByte(std_dc_luminance_nrcodes[i+1]);\n                    }\n                    for (var j=0; j<=11; j++) {\n                        writeByte(std_dc_luminance_values[j]);\n                    }\n    \n                    writeByte(0x10); // HTYACinfo\n                    for (var k=0; k<16; k++) {\n                        writeByte(std_ac_luminance_nrcodes[k+1]);\n                    }\n                    for (var l=0; l<=161; l++) {\n                        writeByte(std_ac_luminance_values[l]);\n                    }\n    \n                    writeByte(1); // HTUDCinfo\n                    for (var m=0; m<16; m++) {\n                        writeByte(std_dc_chrominance_nrcodes[m+1]);\n                    }\n                    for (var n=0; n<=11; n++) {\n                        writeByte(std_dc_chrominance_values[n]);\n                    }\n    \n                    writeByte(0x11); // HTUACinfo\n                    for (var o=0; o<16; o++) {\n                        writeByte(std_ac_chrominance_nrcodes[o+1]);\n                    }\n                    for (var p=0; p<=161; p++) {\n                        writeByte(std_ac_chrominance_values[p]);\n                    }\n                }\n    \n                function writeSOS()\n                {\n                    writeWord(0xFFDA); // marker\n                    writeWord(12); // length\n                    writeByte(3); // nrofcomponents\n                    writeByte(1); // IdY\n                    writeByte(0); // HTY\n                    writeByte(2); // IdU\n                    writeByte(0x11); // HTU\n                    writeByte(3); // IdV\n                    writeByte(0x11); // HTV\n                    writeByte(0); // Ss\n                    writeByte(0x3f); // Se\n                    writeByte(0); // Bf\n                }\n    \n                function processDU(CDU, fdtbl, DC, HTDC, HTAC){\n                    var EOB = HTAC[0x00];\n                    var M16zeroes = HTAC[0xF0];\n                    var pos;\n                    var I16 = 16;\n                    var I63 = 63;\n                    var I64 = 64;\n                    var DU_DCT = fDCTQuant(CDU, fdtbl);\n                    //ZigZag reorder\n                    for (var j=0;j<I64;++j) {\n                        DU[ZigZag[j]]=DU_DCT[j];\n                    }\n                    var Diff = DU[0] - DC; DC = DU[0];\n                    //Encode DC\n                    if (Diff==0) {\n                        writeBits(HTDC[0]); // Diff might be 0\n                    } else {\n                        pos = 32767+Diff;\n                        writeBits(HTDC[category[pos]]);\n                        writeBits(bitcode[pos]);\n                    }\n                    //Encode ACs\n                    var end0pos = 63; // was const... which is crazy\n                    for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n                    //end0pos = first element in reverse order !=0\n                    if ( end0pos == 0) {\n                        writeBits(EOB);\n                        return DC;\n                    }\n                    var i = 1;\n                    var lng;\n                    while ( i <= end0pos ) {\n                        var startpos = i;\n                        for (; (DU[i]==0) && (i<=end0pos); ++i) {}\n                        var nrzeroes = i-startpos;\n                        if ( nrzeroes >= I16 ) {\n                            lng = nrzeroes>>4;\n                            for (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n                                writeBits(M16zeroes);\n                            nrzeroes = nrzeroes&0xF;\n                        }\n                        pos = 32767+DU[i];\n                        writeBits(HTAC[(nrzeroes<<4)+category[pos]]);\n                        writeBits(bitcode[pos]);\n                        i++;\n                    }\n                    if ( end0pos != I63 ) {\n                        writeBits(EOB);\n                    }\n                    return DC;\n                }\n    \n                function initCharLookupTable(){\n                    var sfcc = String.fromCharCode;\n                    for(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n                        clt[i] = sfcc(i);\n                    }\n                }\n    \n                this.encode = function(image,quality) // image data object\n                {\n                    // var time_start = new Date().getTime();\n    \n                    if(quality) setQuality(quality);\n    \n                    // Initialize bit writer\n                    byteout = new Array();\n                    bytenew=0;\n                    bytepos=7;\n    \n                    // Add JPEG headers\n                    writeWord(0xFFD8); // SOI\n                    writeAPP0();\n                    writeDQT();\n                    writeSOF0(image.width,image.height);\n                    writeDHT();\n                    writeSOS();\n    \n    \n                    // Encode 8x8 macroblocks\n                    var DCY=0;\n                    var DCU=0;\n                    var DCV=0;\n    \n                    bytenew=0;\n                    bytepos=7;\n    \n    \n                    this.encode.displayName = \"_encode_\";\n    \n                    var imageData = image.data;\n                    var width = image.width;\n                    var height = image.height;\n    \n                    var quadWidth = width*4;\n                    var tripleWidth = width*3;\n    \n                    var x, y = 0;\n                    var r, g, b;\n                    var start,p, col,row,pos;\n                    while(y < height){\n                        x = 0;\n                        while(x < quadWidth){\n                        start = quadWidth * y + x;\n                        p = start;\n                        col = -1;\n                        row = 0;\n    \n                        for(pos=0; pos < 64; pos++){\n                            row = pos >> 3;// /8\n                            col = ( pos & 7 ) * 4; // %8\n                            p = start + ( row * quadWidth ) + col;\n    \n                            if(y+row >= height){ // padding bottom\n                                p-= (quadWidth*(y+1+row-height));\n                            }\n    \n                            if(x+col >= quadWidth){ // padding right\n                                p-= ((x+col) - quadWidth +4)\n                            }\n    \n                            r = imageData[ p++ ];\n                            g = imageData[ p++ ];\n                            b = imageData[ p++ ];\n    \n    \n                            /* // calculate YUV values dynamically\n                            YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n                            UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n                            VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n                            */\n    \n                            // use lookup table (slightly faster)\n                            YDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n                            UDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n                            VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n    \n                        }\n    \n                        DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n                        DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n                        DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n                        x+=32;\n                        }\n                        y+=8;\n                    }\n    \n    \n                    ////////////////////////////////////////////////////////////////\n    \n                    // Do the bit alignment of the EOI marker\n                    if ( bytepos >= 0 ) {\n                        var fillbits = [];\n                        fillbits[1] = bytepos+1;\n                        fillbits[0] = (1<<(bytepos+1))-1;\n                        writeBits(fillbits);\n                    }\n    \n                    writeWord(0xFFD9); //EOI\n    \n                    var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n    \n                    byteout = [];\n    \n                    // benchmarking\n                    // var duration = new Date().getTime() - time_start;\n                    // console.log('Encoding time: '+ currentQuality + 'ms');\n                    //\n    \n                    return jpegDataUri\n            }\n    \n            function setQuality(quality){\n                if (quality <= 0) {\n                    quality = 1;\n                }\n                if (quality > 100) {\n                    quality = 100;\n                }\n    \n                if(currentQuality == quality) return // don't recalc if unchanged\n    \n                var sf = 0;\n                if (quality < 50) {\n                    sf = Math.floor(5000 / quality);\n                } else {\n                    sf = Math.floor(200 - quality*2);\n                }\n    \n                initQuantTables(sf);\n                currentQuality = quality;\n                // console.log('Quality set to: '+quality +'%');\n            }\n    \n            function init(){\n                // var time_start = new Date().getTime();\n                if(!quality) quality = 50;\n                // Create tables\n                initCharLookupTable()\n                initHuffmanTbl();\n                initCategoryNumber();\n                initRGBYUVTable();\n    \n                setQuality(quality);\n                // var duration = new Date().getTime() - time_start;\n                // console.log('Initialization '+ duration + 'ms');\n            }\n    \n            init();\n    \n        };\n    \n        JPEGEncoder.encode = function( data, quality ) {\n            var encoder = new JPEGEncoder( quality );\n    \n            return encoder.encode( data );\n        }\n    \n        return JPEGEncoder;\n    });\n    /**\n     * @fileOverview Fix android canvas.toDataUrl bug.\n     */\n    define('runtime/html5/androidpatch',[\n        'runtime/html5/util',\n        'runtime/html5/jpegencoder',\n        'base'\n    ], function( Util, encoder, Base ) {\n        var origin = Util.canvasToDataUrl,\n            supportJpeg;\n    \n        Util.canvasToDataUrl = function( canvas, type, quality ) {\n            var ctx, w, h, fragement, parts;\n    \n            // 非android手机直接跳过。\n            if ( !Base.os.android ) {\n                return origin.apply( null, arguments );\n            }\n    \n            // 检测是否canvas支持jpeg导出，根据数据格式来判断。\n            // JPEG 前两位分别是：255, 216\n            if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) {\n                fragement = origin.apply( null, arguments );\n    \n                parts = fragement.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    fragement = atob( parts[ 1 ] );\n                } else {\n                    fragement = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                fragement = fragement.substring( 0, 2 );\n    \n                supportJpeg = fragement.charCodeAt( 0 ) === 255 &&\n                        fragement.charCodeAt( 1 ) === 216;\n            }\n    \n            // 只有在android环境下才修复\n            if ( type === 'image/jpeg' && !supportJpeg ) {\n                w = canvas.width;\n                h = canvas.height;\n                ctx = canvas.getContext('2d');\n    \n                return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality );\n            }\n    \n            return origin.apply( null, arguments );\n        };\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    define('webuploader',[\n        'base',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'runtime/html5/blob',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/image',\n        'runtime/html5/androidpatch',\n        'runtime/html5/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/webuploader/webuploader.flashonly.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: true,\n    \n            // 是否允许放大。\n            allowMagnify: true\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: false,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n            'make-thumb': 'makeThumb',\n            'before-send-file': 'compressImage'\n        }, {\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             *\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function() {\n                    cb( true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            compressImage: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 300 * 1024,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( opts.width, opts.height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            init: function() {\n                var me = this;\n                $.each( validators, function() {\n                    this.call( me.owner );\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileNumLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileSizeLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {int} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destory = this.destory,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * @fileOverview 图片压缩\n     */\n    define('runtime/flash/image',[\n        'runtime/flash/runtime'\n    ], function( FlashRuntime ) {\n    \n        return FlashRuntime.register( 'Image', {\n            // init: function( options ) {\n            //     var owner = this.owner;\n    \n            //     this.flashExec( 'Image', 'init', options );\n            //     owner.on( 'load', function() {\n            //         debugger;\n            //     });\n            // },\n    \n            loadFromBlob: function( blob ) {\n                var owner = this.owner;\n    \n                owner.info() && this.flashExec( 'Image', 'info', owner.info() );\n                owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() );\n    \n                this.flashExec( 'Image', 'loadFromBlob', blob.uid );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    return me.trigger( 'progress', e.loaded / e.total );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        err = '';\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                    } else if ( status >= 500 && status < 600 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 只有flash实现的文件版本。\n     */\n    define('preset/flashonly',[\n        'base',\n    \n        // widgets\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/image',\n        'runtime/flash/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/flashonly'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/webuploader/webuploader.html5only.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.disconnectRuntime();\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.exec('destroy');\n                this.disconnectRuntime();\n                this.off();\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: true,\n    \n            // 是否允许放大。\n            allowMagnify: true\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: false,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n            'make-thumb': 'makeThumb',\n            'before-send-file': 'compressImage'\n        }, {\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             *\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function() {\n                    cb( true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            compressImage: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 300 * 1024,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( opts.width, opts.height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            init: function() {\n                var me = this;\n                $.each( validators, function() {\n                    this.call( me.owner );\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileNumLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileSizeLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {int} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destory = this.destory;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/dnd',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        var $ = Base.$,\n            prefix = 'webuploader-dnd-';\n    \n        return Html5Runtime.register( 'DragAndDrop', {\n            init: function() {\n                var elem = this.elem = this.options.container;\n    \n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\n                this.dndOver = false;\n    \n                elem.on( 'dragenter', this.dragEnterHandler );\n                elem.on( 'dragover', this.dragOverHandler );\n                elem.on( 'dragleave', this.dragLeaveHandler );\n                elem.on( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).on( 'dragover', this.dragOverHandler );\n                    $( document ).on( 'drop', this.dropHandler );\n                }\n            },\n    \n            _dragEnterHandler: function( e ) {\n                var me = this,\n                    denied = me._denied || false,\n                    items;\n    \n                e = e.originalEvent || e;\n    \n                if ( !me.dndOver ) {\n                    me.dndOver = true;\n    \n                    // 注意只有 chrome 支持。\n                    items = e.dataTransfer.items;\n    \n                    if ( items && items.length ) {\n                        me._denied = denied = !me.trigger( 'accept', items );\n                    }\n    \n                    me.elem.addClass( prefix + 'over' );\n                    me.elem[ denied ? 'addClass' :\n                            'removeClass' ]( prefix + 'denied' );\n                }\n    \n    \n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\n    \n                return false;\n            },\n    \n            _dragOverHandler: function( e ) {\n                // 只处理框内的。\n                var parentElem = this.elem.parent().get( 0 );\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                clearTimeout( this._leaveTimer );\n                this._dragEnterHandler.call( this, e );\n    \n                return false;\n            },\n    \n            _dragLeaveHandler: function() {\n                var me = this,\n                    handler;\n    \n                handler = function() {\n                    me.dndOver = false;\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\n                };\n    \n                clearTimeout( me._leaveTimer );\n                me._leaveTimer = setTimeout( handler, 100 );\n                return false;\n            },\n    \n            _dropHandler: function( e ) {\n                var me = this,\n                    ruid = me.getRuid(),\n                    parentElem = me.elem.parent().get( 0 );\n    \n                // 只处理框内的。\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                me._getTansferFiles( e, function( results ) {\n                    me.trigger( 'drop', $.map( results, function( file ) {\n                        return new File( ruid, file );\n                    }) );\n                });\n    \n                me.dndOver = false;\n                me.elem.removeClass( prefix + 'over' );\n                return false;\n            },\n    \n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\n            _getTansferFiles: function( e, callback ) {\n                var results  = [],\n                    promises = [],\n                    items, files, dataTransfer, file, item, i, len, canAccessFolder;\n    \n                e = e.originalEvent || e;\n    \n                dataTransfer = e.dataTransfer;\n                items = dataTransfer.items;\n                files = dataTransfer.files;\n    \n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\n    \n                for ( i = 0, len = files.length; i < len; i++ ) {\n                    file = files[ i ];\n                    item = items && items[ i ];\n    \n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\n    \n                        promises.push( this._traverseDirectoryTree(\n                                item.webkitGetAsEntry(), results ) );\n                    } else {\n                        results.push( file );\n                    }\n                }\n    \n                Base.when.apply( Base, promises ).done(function() {\n    \n                    if ( !results.length ) {\n                        return;\n                    }\n    \n                    callback( results );\n                });\n            },\n    \n            _traverseDirectoryTree: function( entry, results ) {\n                var deferred = Base.Deferred(),\n                    me = this;\n    \n                if ( entry.isFile ) {\n                    entry.file(function( file ) {\n                        results.push( file );\n                        deferred.resolve();\n                    });\n                } else if ( entry.isDirectory ) {\n                    entry.createReader().readEntries(function( entries ) {\n                        var len = entries.length,\n                            promises = [],\n                            arr = [],    // 为了保证顺序。\n                            i;\n    \n                        for ( i = 0; i < len; i++ ) {\n                            promises.push( me._traverseDirectoryTree(\n                                    entries[ i ], arr ) );\n                        }\n    \n                        Base.when.apply( Base, promises ).then(function() {\n                            results.push.apply( results, arr );\n                            deferred.resolve();\n                        }, deferred.reject );\n                    });\n                }\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                var elem = this.elem;\n    \n                elem.off( 'dragenter', this.dragEnterHandler );\n                elem.off( 'dragover', this.dragEnterHandler );\n                elem.off( 'dragleave', this.dragLeaveHandler );\n                elem.off( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).off( 'dragover', this.dragOverHandler );\n                    $( document ).off( 'drop', this.dropHandler );\n                }\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/filepaste',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        return Html5Runtime.register( 'FilePaste', {\n            init: function() {\n                var opts = this.options,\n                    elem = this.elem = opts.container,\n                    accept = '.*',\n                    arr, i, len, item;\n    \n                // accetp的mimeTypes中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].mimeTypes;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = arr.join(',');\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\n                    }\n                }\n                this.accept = accept = new RegExp( accept, 'i' );\n                this.hander = Base.bindFn( this._pasteHander, this );\n                elem.on( 'paste', this.hander );\n            },\n    \n            _pasteHander: function( e ) {\n                var allowed = [],\n                    ruid = this.getRuid(),\n                    items, item, blob, i, len;\n    \n                e = e.originalEvent || e;\n                items = e.clipboardData.items;\n    \n                for ( i = 0, len = items.length; i < len; i++ ) {\n                    item = items[ i ];\n    \n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\n                        continue;\n                    }\n    \n                    allowed.push( new File( ruid, blob ) );\n                }\n    \n                if ( allowed.length ) {\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\n                    e.preventDefault();\n                    e.stopPropagation();\n                    this.trigger( 'paste', allowed );\n                }\n            },\n    \n            destroy: function() {\n                this.elem.off( 'paste', this.hander );\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/html5/filepicker',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var $ = Base.$;\n    \n        return Html5Runtime.register( 'FilePicker', {\n            init: function() {\n                var container = this.getRuntime().getContainer(),\n                    me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    lable = $( document.createElement('label') ),\n                    input = $( document.createElement('input') ),\n                    arr, i, len, mouseHandler;\n    \n                input.attr( 'type', 'file' );\n                input.attr( 'name', opts.name );\n                input.addClass('webuploader-element-invisible');\n    \n                lable.on( 'click', function() {\n                    input.trigger('click');\n                });\n    \n                lable.css({\n                    opacity: 0,\n                    width: '100%',\n                    height: '100%',\n                    display: 'block',\n                    cursor: 'pointer',\n                    background: '#ffffff'\n                });\n    \n                if ( opts.multiple ) {\n                    input.attr( 'multiple', 'multiple' );\n                }\n    \n                // @todo Firefox不支持单独指定后缀\n                if ( opts.accept && opts.accept.length > 0 ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        arr.push( opts.accept[ i ].mimeTypes );\n                    }\n    \n                    input.attr( 'accept', arr.join(',') );\n                }\n    \n                container.append( input );\n                container.append( lable );\n    \n                mouseHandler = function( e ) {\n                    owner.trigger( e.type );\n                };\n    \n                input.on( 'change', function( e ) {\n                    var fn = arguments.callee,\n                        clone;\n    \n                    me.files = e.target.files;\n    \n                    // reset input\n                    clone = this.cloneNode( true );\n                    this.parentNode.replaceChild( clone, this );\n    \n                    input.off();\n                    input = $( clone ).on( 'change', fn )\n                            .on( 'mouseenter mouseleave', mouseHandler );\n    \n                    owner.trigger('change');\n                });\n    \n                lable.on( 'mouseenter mouseleave', mouseHandler );\n    \n            },\n    \n    \n            getFiles: function() {\n                return this.files;\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger('complete');\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, 'image/jpeg',\n                                opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        canvas.getContext('2d').drawImage( img, x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                            iw * vertSquashRatio, ih * vertSquashRatio,\n                            x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview 只有html5实现的文件版本。\n     */\n    define('preset/html5only',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/image',\n        'runtime/html5/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/html5only'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/webuploader/webuploader.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.disconnectRuntime();\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.exec('destroy');\n                this.disconnectRuntime();\n                this.off();\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: true,\n    \n            // 是否允许放大。\n            allowMagnify: true\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: false,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n            'make-thumb': 'makeThumb',\n            'before-send-file': 'compressImage'\n        }, {\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             *\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function() {\n                    cb( true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            compressImage: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 300 * 1024,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( opts.width, opts.height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            init: function() {\n                var me = this;\n                $.each( validators, function() {\n                    this.call( me.owner );\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileNumLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileSizeLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {int} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destory = this.destory;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/dnd',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        var $ = Base.$,\n            prefix = 'webuploader-dnd-';\n    \n        return Html5Runtime.register( 'DragAndDrop', {\n            init: function() {\n                var elem = this.elem = this.options.container;\n    \n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\n                this.dndOver = false;\n    \n                elem.on( 'dragenter', this.dragEnterHandler );\n                elem.on( 'dragover', this.dragOverHandler );\n                elem.on( 'dragleave', this.dragLeaveHandler );\n                elem.on( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).on( 'dragover', this.dragOverHandler );\n                    $( document ).on( 'drop', this.dropHandler );\n                }\n            },\n    \n            _dragEnterHandler: function( e ) {\n                var me = this,\n                    denied = me._denied || false,\n                    items;\n    \n                e = e.originalEvent || e;\n    \n                if ( !me.dndOver ) {\n                    me.dndOver = true;\n    \n                    // 注意只有 chrome 支持。\n                    items = e.dataTransfer.items;\n    \n                    if ( items && items.length ) {\n                        me._denied = denied = !me.trigger( 'accept', items );\n                    }\n    \n                    me.elem.addClass( prefix + 'over' );\n                    me.elem[ denied ? 'addClass' :\n                            'removeClass' ]( prefix + 'denied' );\n                }\n    \n    \n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\n    \n                return false;\n            },\n    \n            _dragOverHandler: function( e ) {\n                // 只处理框内的。\n                var parentElem = this.elem.parent().get( 0 );\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                clearTimeout( this._leaveTimer );\n                this._dragEnterHandler.call( this, e );\n    \n                return false;\n            },\n    \n            _dragLeaveHandler: function() {\n                var me = this,\n                    handler;\n    \n                handler = function() {\n                    me.dndOver = false;\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\n                };\n    \n                clearTimeout( me._leaveTimer );\n                me._leaveTimer = setTimeout( handler, 100 );\n                return false;\n            },\n    \n            _dropHandler: function( e ) {\n                var me = this,\n                    ruid = me.getRuid(),\n                    parentElem = me.elem.parent().get( 0 );\n    \n                // 只处理框内的。\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                me._getTansferFiles( e, function( results ) {\n                    me.trigger( 'drop', $.map( results, function( file ) {\n                        return new File( ruid, file );\n                    }) );\n                });\n    \n                me.dndOver = false;\n                me.elem.removeClass( prefix + 'over' );\n                return false;\n            },\n    \n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\n            _getTansferFiles: function( e, callback ) {\n                var results  = [],\n                    promises = [],\n                    items, files, dataTransfer, file, item, i, len, canAccessFolder;\n    \n                e = e.originalEvent || e;\n    \n                dataTransfer = e.dataTransfer;\n                items = dataTransfer.items;\n                files = dataTransfer.files;\n    \n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\n    \n                for ( i = 0, len = files.length; i < len; i++ ) {\n                    file = files[ i ];\n                    item = items && items[ i ];\n    \n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\n    \n                        promises.push( this._traverseDirectoryTree(\n                                item.webkitGetAsEntry(), results ) );\n                    } else {\n                        results.push( file );\n                    }\n                }\n    \n                Base.when.apply( Base, promises ).done(function() {\n    \n                    if ( !results.length ) {\n                        return;\n                    }\n    \n                    callback( results );\n                });\n            },\n    \n            _traverseDirectoryTree: function( entry, results ) {\n                var deferred = Base.Deferred(),\n                    me = this;\n    \n                if ( entry.isFile ) {\n                    entry.file(function( file ) {\n                        results.push( file );\n                        deferred.resolve();\n                    });\n                } else if ( entry.isDirectory ) {\n                    entry.createReader().readEntries(function( entries ) {\n                        var len = entries.length,\n                            promises = [],\n                            arr = [],    // 为了保证顺序。\n                            i;\n    \n                        for ( i = 0; i < len; i++ ) {\n                            promises.push( me._traverseDirectoryTree(\n                                    entries[ i ], arr ) );\n                        }\n    \n                        Base.when.apply( Base, promises ).then(function() {\n                            results.push.apply( results, arr );\n                            deferred.resolve();\n                        }, deferred.reject );\n                    });\n                }\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                var elem = this.elem;\n    \n                elem.off( 'dragenter', this.dragEnterHandler );\n                elem.off( 'dragover', this.dragEnterHandler );\n                elem.off( 'dragleave', this.dragLeaveHandler );\n                elem.off( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).off( 'dragover', this.dragOverHandler );\n                    $( document ).off( 'drop', this.dropHandler );\n                }\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/filepaste',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        return Html5Runtime.register( 'FilePaste', {\n            init: function() {\n                var opts = this.options,\n                    elem = this.elem = opts.container,\n                    accept = '.*',\n                    arr, i, len, item;\n    \n                // accetp的mimeTypes中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].mimeTypes;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = arr.join(',');\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\n                    }\n                }\n                this.accept = accept = new RegExp( accept, 'i' );\n                this.hander = Base.bindFn( this._pasteHander, this );\n                elem.on( 'paste', this.hander );\n            },\n    \n            _pasteHander: function( e ) {\n                var allowed = [],\n                    ruid = this.getRuid(),\n                    items, item, blob, i, len;\n    \n                e = e.originalEvent || e;\n                items = e.clipboardData.items;\n    \n                for ( i = 0, len = items.length; i < len; i++ ) {\n                    item = items[ i ];\n    \n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\n                        continue;\n                    }\n    \n                    allowed.push( new File( ruid, blob ) );\n                }\n    \n                if ( allowed.length ) {\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\n                    e.preventDefault();\n                    e.stopPropagation();\n                    this.trigger( 'paste', allowed );\n                }\n            },\n    \n            destroy: function() {\n                this.elem.off( 'paste', this.hander );\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/html5/filepicker',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var $ = Base.$;\n    \n        return Html5Runtime.register( 'FilePicker', {\n            init: function() {\n                var container = this.getRuntime().getContainer(),\n                    me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    lable = $( document.createElement('label') ),\n                    input = $( document.createElement('input') ),\n                    arr, i, len, mouseHandler;\n    \n                input.attr( 'type', 'file' );\n                input.attr( 'name', opts.name );\n                input.addClass('webuploader-element-invisible');\n    \n                lable.on( 'click', function() {\n                    input.trigger('click');\n                });\n    \n                lable.css({\n                    opacity: 0,\n                    width: '100%',\n                    height: '100%',\n                    display: 'block',\n                    cursor: 'pointer',\n                    background: '#ffffff'\n                });\n    \n                if ( opts.multiple ) {\n                    input.attr( 'multiple', 'multiple' );\n                }\n    \n                // @todo Firefox不支持单独指定后缀\n                if ( opts.accept && opts.accept.length > 0 ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        arr.push( opts.accept[ i ].mimeTypes );\n                    }\n    \n                    input.attr( 'accept', arr.join(',') );\n                }\n    \n                container.append( input );\n                container.append( lable );\n    \n                mouseHandler = function( e ) {\n                    owner.trigger( e.type );\n                };\n    \n                input.on( 'change', function( e ) {\n                    var fn = arguments.callee,\n                        clone;\n    \n                    me.files = e.target.files;\n    \n                    // reset input\n                    clone = this.cloneNode( true );\n                    this.parentNode.replaceChild( clone, this );\n    \n                    input.off();\n                    input = $( clone ).on( 'change', fn )\n                            .on( 'mouseenter mouseleave', mouseHandler );\n    \n                    owner.trigger('change');\n                });\n    \n                lable.on( 'mouseenter mouseleave', mouseHandler );\n    \n            },\n    \n    \n            getFiles: function() {\n                return this.files;\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * 这个方式性能不行，但是可以解决android里面的toDataUrl的bug\n     * android里面toDataUrl('image/jpege')得到的结果却是png.\n     *\n     * 所以这里没辙，只能借助这个工具\n     * @fileOverview jpeg encoder\n     */\n    define('runtime/html5/jpegencoder',[], function( require, exports, module ) {\n    \n        /*\n          Copyright (c) 2008, Adobe Systems Incorporated\n          All rights reserved.\n    \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are\n          met:\n    \n          * Redistributions of source code must retain the above copyright notice,\n            this list of conditions and the following disclaimer.\n    \n          * Redistributions in binary form must reproduce the above copyright\n            notice, this list of conditions and the following disclaimer in the\n            documentation and/or other materials provided with the distribution.\n    \n          * Neither the name of Adobe Systems Incorporated nor the names of its\n            contributors may be used to endorse or promote products derived from\n            this software without specific prior written permission.\n    \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n          IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n          THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n          PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n          CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n          EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n          PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n          PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n          LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n          NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n          SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n        /*\n        JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n    \n        Basic GUI blocking jpeg encoder\n        */\n    \n        function JPEGEncoder(quality) {\n          var self = this;\n            var fround = Math.round;\n            var ffloor = Math.floor;\n            var YTable = new Array(64);\n            var UVTable = new Array(64);\n            var fdtbl_Y = new Array(64);\n            var fdtbl_UV = new Array(64);\n            var YDC_HT;\n            var UVDC_HT;\n            var YAC_HT;\n            var UVAC_HT;\n    \n            var bitcode = new Array(65535);\n            var category = new Array(65535);\n            var outputfDCTQuant = new Array(64);\n            var DU = new Array(64);\n            var byteout = [];\n            var bytenew = 0;\n            var bytepos = 7;\n    \n            var YDU = new Array(64);\n            var UDU = new Array(64);\n            var VDU = new Array(64);\n            var clt = new Array(256);\n            var RGB_YUV_TABLE = new Array(2048);\n            var currentQuality;\n    \n            var ZigZag = [\n                     0, 1, 5, 6,14,15,27,28,\n                     2, 4, 7,13,16,26,29,42,\n                     3, 8,12,17,25,30,41,43,\n                     9,11,18,24,31,40,44,53,\n                    10,19,23,32,39,45,52,54,\n                    20,22,33,38,46,51,55,60,\n                    21,34,37,47,50,56,59,61,\n                    35,36,48,49,57,58,62,63\n                ];\n    \n            var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n            var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n            var std_ac_luminance_values = [\n                    0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n                    0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n                    0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n                    0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n                    0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n                    0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n                    0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n                    0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n                    0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n                    0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n                    0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n                    0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n                    0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n                    0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n                    0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n                    0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n                    0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n                    0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n                    0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n                    0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n            var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n            var std_ac_chrominance_values = [\n                    0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n                    0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n                    0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n                    0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n                    0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n                    0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n                    0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n                    0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n                    0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n                    0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n                    0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n                    0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n                    0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n                    0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n                    0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n                    0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n                    0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n                    0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n                    0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n                    0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            function initQuantTables(sf){\n                    var YQT = [\n                        16, 11, 10, 16, 24, 40, 51, 61,\n                        12, 12, 14, 19, 26, 58, 60, 55,\n                        14, 13, 16, 24, 40, 57, 69, 56,\n                        14, 17, 22, 29, 51, 87, 80, 62,\n                        18, 22, 37, 56, 68,109,103, 77,\n                        24, 35, 55, 64, 81,104,113, 92,\n                        49, 64, 78, 87,103,121,120,101,\n                        72, 92, 95, 98,112,100,103, 99\n                    ];\n    \n                    for (var i = 0; i < 64; i++) {\n                        var t = ffloor((YQT[i]*sf+50)/100);\n                        if (t < 1) {\n                            t = 1;\n                        } else if (t > 255) {\n                            t = 255;\n                        }\n                        YTable[ZigZag[i]] = t;\n                    }\n                    var UVQT = [\n                        17, 18, 24, 47, 99, 99, 99, 99,\n                        18, 21, 26, 66, 99, 99, 99, 99,\n                        24, 26, 56, 99, 99, 99, 99, 99,\n                        47, 66, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99\n                    ];\n                    for (var j = 0; j < 64; j++) {\n                        var u = ffloor((UVQT[j]*sf+50)/100);\n                        if (u < 1) {\n                            u = 1;\n                        } else if (u > 255) {\n                            u = 255;\n                        }\n                        UVTable[ZigZag[j]] = u;\n                    }\n                    var aasf = [\n                        1.0, 1.387039845, 1.306562965, 1.175875602,\n                        1.0, 0.785694958, 0.541196100, 0.275899379\n                    ];\n                    var k = 0;\n                    for (var row = 0; row < 8; row++)\n                    {\n                        for (var col = 0; col < 8; col++)\n                        {\n                            fdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            k++;\n                        }\n                    }\n                }\n    \n                function computeHuffmanTbl(nrcodes, std_table){\n                    var codevalue = 0;\n                    var pos_in_table = 0;\n                    var HT = new Array();\n                    for (var k = 1; k <= 16; k++) {\n                        for (var j = 1; j <= nrcodes[k]; j++) {\n                            HT[std_table[pos_in_table]] = [];\n                            HT[std_table[pos_in_table]][0] = codevalue;\n                            HT[std_table[pos_in_table]][1] = k;\n                            pos_in_table++;\n                            codevalue++;\n                        }\n                        codevalue*=2;\n                    }\n                    return HT;\n                }\n    \n                function initHuffmanTbl()\n                {\n                    YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n                    UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n                    YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n                    UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n                }\n    \n                function initCategoryNumber()\n                {\n                    var nrlower = 1;\n                    var nrupper = 2;\n                    for (var cat = 1; cat <= 15; cat++) {\n                        //Positive numbers\n                        for (var nr = nrlower; nr<nrupper; nr++) {\n                            category[32767+nr] = cat;\n                            bitcode[32767+nr] = [];\n                            bitcode[32767+nr][1] = cat;\n                            bitcode[32767+nr][0] = nr;\n                        }\n                        //Negative numbers\n                        for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n                            category[32767+nrneg] = cat;\n                            bitcode[32767+nrneg] = [];\n                            bitcode[32767+nrneg][1] = cat;\n                            bitcode[32767+nrneg][0] = nrupper-1+nrneg;\n                        }\n                        nrlower <<= 1;\n                        nrupper <<= 1;\n                    }\n                }\n    \n                function initRGBYUVTable() {\n                    for(var i = 0; i < 256;i++) {\n                        RGB_YUV_TABLE[i]            =  19595 * i;\n                        RGB_YUV_TABLE[(i+ 256)>>0]  =  38470 * i;\n                        RGB_YUV_TABLE[(i+ 512)>>0]  =   7471 * i + 0x8000;\n                        RGB_YUV_TABLE[(i+ 768)>>0]  = -11059 * i;\n                        RGB_YUV_TABLE[(i+1024)>>0]  = -21709 * i;\n                        RGB_YUV_TABLE[(i+1280)>>0]  =  32768 * i + 0x807FFF;\n                        RGB_YUV_TABLE[(i+1536)>>0]  = -27439 * i;\n                        RGB_YUV_TABLE[(i+1792)>>0]  = - 5329 * i;\n                    }\n                }\n    \n                // IO functions\n                function writeBits(bs)\n                {\n                    var value = bs[0];\n                    var posval = bs[1]-1;\n                    while ( posval >= 0 ) {\n                        if (value & (1 << posval) ) {\n                            bytenew |= (1 << bytepos);\n                        }\n                        posval--;\n                        bytepos--;\n                        if (bytepos < 0) {\n                            if (bytenew == 0xFF) {\n                                writeByte(0xFF);\n                                writeByte(0);\n                            }\n                            else {\n                                writeByte(bytenew);\n                            }\n                            bytepos=7;\n                            bytenew=0;\n                        }\n                    }\n                }\n    \n                function writeByte(value)\n                {\n                    byteout.push(clt[value]); // write char directly instead of converting later\n                }\n    \n                function writeWord(value)\n                {\n                    writeByte((value>>8)&0xFF);\n                    writeByte((value   )&0xFF);\n                }\n    \n                // DCT & quantization core\n                function fDCTQuant(data, fdtbl)\n                {\n                    var d0, d1, d2, d3, d4, d5, d6, d7;\n                    /* Pass 1: process rows. */\n                    var dataOff=0;\n                    var i;\n                    var I8 = 8;\n                    var I64 = 64;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff+1];\n                        d2 = data[dataOff+2];\n                        d3 = data[dataOff+3];\n                        d4 = data[dataOff+4];\n                        d5 = data[dataOff+5];\n                        d6 = data[dataOff+6];\n                        d7 = data[dataOff+7];\n    \n                        var tmp0 = d0 + d7;\n                        var tmp7 = d0 - d7;\n                        var tmp1 = d1 + d6;\n                        var tmp6 = d1 - d6;\n                        var tmp2 = d2 + d5;\n                        var tmp5 = d2 - d5;\n                        var tmp3 = d3 + d4;\n                        var tmp4 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10 = tmp0 + tmp3;    /* phase 2 */\n                        var tmp13 = tmp0 - tmp3;\n                        var tmp11 = tmp1 + tmp2;\n                        var tmp12 = tmp1 - tmp2;\n    \n                        data[dataOff] = tmp10 + tmp11; /* phase 3 */\n                        data[dataOff+4] = tmp10 - tmp11;\n    \n                        var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n                        data[dataOff+2] = tmp13 + z1; /* phase 5 */\n                        data[dataOff+6] = tmp13 - z1;\n    \n                        /* Odd part */\n                        tmp10 = tmp4 + tmp5; /* phase 2 */\n                        tmp11 = tmp5 + tmp6;\n                        tmp12 = tmp6 + tmp7;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n                        var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n                        var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n                        var z3 = tmp11 * 0.707106781; /* c4 */\n    \n                        var z11 = tmp7 + z3;    /* phase 5 */\n                        var z13 = tmp7 - z3;\n    \n                        data[dataOff+5] = z13 + z2; /* phase 6 */\n                        data[dataOff+3] = z13 - z2;\n                        data[dataOff+1] = z11 + z4;\n                        data[dataOff+7] = z11 - z4;\n    \n                        dataOff += 8; /* advance pointer to next row */\n                    }\n    \n                    /* Pass 2: process columns. */\n                    dataOff = 0;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff + 8];\n                        d2 = data[dataOff + 16];\n                        d3 = data[dataOff + 24];\n                        d4 = data[dataOff + 32];\n                        d5 = data[dataOff + 40];\n                        d6 = data[dataOff + 48];\n                        d7 = data[dataOff + 56];\n    \n                        var tmp0p2 = d0 + d7;\n                        var tmp7p2 = d0 - d7;\n                        var tmp1p2 = d1 + d6;\n                        var tmp6p2 = d1 - d6;\n                        var tmp2p2 = d2 + d5;\n                        var tmp5p2 = d2 - d5;\n                        var tmp3p2 = d3 + d4;\n                        var tmp4p2 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10p2 = tmp0p2 + tmp3p2;  /* phase 2 */\n                        var tmp13p2 = tmp0p2 - tmp3p2;\n                        var tmp11p2 = tmp1p2 + tmp2p2;\n                        var tmp12p2 = tmp1p2 - tmp2p2;\n    \n                        data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n                        data[dataOff+32] = tmp10p2 - tmp11p2;\n    \n                        var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n                        data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n                        data[dataOff+48] = tmp13p2 - z1p2;\n    \n                        /* Odd part */\n                        tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n                        tmp11p2 = tmp5p2 + tmp6p2;\n                        tmp12p2 = tmp6p2 + tmp7p2;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n                        var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n                        var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n                        var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n    \n                        var z11p2 = tmp7p2 + z3p2;  /* phase 5 */\n                        var z13p2 = tmp7p2 - z3p2;\n    \n                        data[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n                        data[dataOff+24] = z13p2 - z2p2;\n                        data[dataOff+ 8] = z11p2 + z4p2;\n                        data[dataOff+56] = z11p2 - z4p2;\n    \n                        dataOff++; /* advance pointer to next column */\n                    }\n    \n                    // Quantize/descale the coefficients\n                    var fDCTQuant;\n                    for (i=0; i<I64; ++i)\n                    {\n                        // Apply the quantization and scaling factor & Round to nearest integer\n                        fDCTQuant = data[i]*fdtbl[i];\n                        outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n                        //outputfDCTQuant[i] = fround(fDCTQuant);\n    \n                    }\n                    return outputfDCTQuant;\n                }\n    \n                function writeAPP0()\n                {\n                    writeWord(0xFFE0); // marker\n                    writeWord(16); // length\n                    writeByte(0x4A); // J\n                    writeByte(0x46); // F\n                    writeByte(0x49); // I\n                    writeByte(0x46); // F\n                    writeByte(0); // = \"JFIF\",'\\0'\n                    writeByte(1); // versionhi\n                    writeByte(1); // versionlo\n                    writeByte(0); // xyunits\n                    writeWord(1); // xdensity\n                    writeWord(1); // ydensity\n                    writeByte(0); // thumbnwidth\n                    writeByte(0); // thumbnheight\n                }\n    \n                function writeSOF0(width, height)\n                {\n                    writeWord(0xFFC0); // marker\n                    writeWord(17);   // length, truecolor YUV JPG\n                    writeByte(8);    // precision\n                    writeWord(height);\n                    writeWord(width);\n                    writeByte(3);    // nrofcomponents\n                    writeByte(1);    // IdY\n                    writeByte(0x11); // HVY\n                    writeByte(0);    // QTY\n                    writeByte(2);    // IdU\n                    writeByte(0x11); // HVU\n                    writeByte(1);    // QTU\n                    writeByte(3);    // IdV\n                    writeByte(0x11); // HVV\n                    writeByte(1);    // QTV\n                }\n    \n                function writeDQT()\n                {\n                    writeWord(0xFFDB); // marker\n                    writeWord(132);    // length\n                    writeByte(0);\n                    for (var i=0; i<64; i++) {\n                        writeByte(YTable[i]);\n                    }\n                    writeByte(1);\n                    for (var j=0; j<64; j++) {\n                        writeByte(UVTable[j]);\n                    }\n                }\n    \n                function writeDHT()\n                {\n                    writeWord(0xFFC4); // marker\n                    writeWord(0x01A2); // length\n    \n                    writeByte(0); // HTYDCinfo\n                    for (var i=0; i<16; i++) {\n                        writeByte(std_dc_luminance_nrcodes[i+1]);\n                    }\n                    for (var j=0; j<=11; j++) {\n                        writeByte(std_dc_luminance_values[j]);\n                    }\n    \n                    writeByte(0x10); // HTYACinfo\n                    for (var k=0; k<16; k++) {\n                        writeByte(std_ac_luminance_nrcodes[k+1]);\n                    }\n                    for (var l=0; l<=161; l++) {\n                        writeByte(std_ac_luminance_values[l]);\n                    }\n    \n                    writeByte(1); // HTUDCinfo\n                    for (var m=0; m<16; m++) {\n                        writeByte(std_dc_chrominance_nrcodes[m+1]);\n                    }\n                    for (var n=0; n<=11; n++) {\n                        writeByte(std_dc_chrominance_values[n]);\n                    }\n    \n                    writeByte(0x11); // HTUACinfo\n                    for (var o=0; o<16; o++) {\n                        writeByte(std_ac_chrominance_nrcodes[o+1]);\n                    }\n                    for (var p=0; p<=161; p++) {\n                        writeByte(std_ac_chrominance_values[p]);\n                    }\n                }\n    \n                function writeSOS()\n                {\n                    writeWord(0xFFDA); // marker\n                    writeWord(12); // length\n                    writeByte(3); // nrofcomponents\n                    writeByte(1); // IdY\n                    writeByte(0); // HTY\n                    writeByte(2); // IdU\n                    writeByte(0x11); // HTU\n                    writeByte(3); // IdV\n                    writeByte(0x11); // HTV\n                    writeByte(0); // Ss\n                    writeByte(0x3f); // Se\n                    writeByte(0); // Bf\n                }\n    \n                function processDU(CDU, fdtbl, DC, HTDC, HTAC){\n                    var EOB = HTAC[0x00];\n                    var M16zeroes = HTAC[0xF0];\n                    var pos;\n                    var I16 = 16;\n                    var I63 = 63;\n                    var I64 = 64;\n                    var DU_DCT = fDCTQuant(CDU, fdtbl);\n                    //ZigZag reorder\n                    for (var j=0;j<I64;++j) {\n                        DU[ZigZag[j]]=DU_DCT[j];\n                    }\n                    var Diff = DU[0] - DC; DC = DU[0];\n                    //Encode DC\n                    if (Diff==0) {\n                        writeBits(HTDC[0]); // Diff might be 0\n                    } else {\n                        pos = 32767+Diff;\n                        writeBits(HTDC[category[pos]]);\n                        writeBits(bitcode[pos]);\n                    }\n                    //Encode ACs\n                    var end0pos = 63; // was const... which is crazy\n                    for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n                    //end0pos = first element in reverse order !=0\n                    if ( end0pos == 0) {\n                        writeBits(EOB);\n                        return DC;\n                    }\n                    var i = 1;\n                    var lng;\n                    while ( i <= end0pos ) {\n                        var startpos = i;\n                        for (; (DU[i]==0) && (i<=end0pos); ++i) {}\n                        var nrzeroes = i-startpos;\n                        if ( nrzeroes >= I16 ) {\n                            lng = nrzeroes>>4;\n                            for (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n                                writeBits(M16zeroes);\n                            nrzeroes = nrzeroes&0xF;\n                        }\n                        pos = 32767+DU[i];\n                        writeBits(HTAC[(nrzeroes<<4)+category[pos]]);\n                        writeBits(bitcode[pos]);\n                        i++;\n                    }\n                    if ( end0pos != I63 ) {\n                        writeBits(EOB);\n                    }\n                    return DC;\n                }\n    \n                function initCharLookupTable(){\n                    var sfcc = String.fromCharCode;\n                    for(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n                        clt[i] = sfcc(i);\n                    }\n                }\n    \n                this.encode = function(image,quality) // image data object\n                {\n                    // var time_start = new Date().getTime();\n    \n                    if(quality) setQuality(quality);\n    \n                    // Initialize bit writer\n                    byteout = new Array();\n                    bytenew=0;\n                    bytepos=7;\n    \n                    // Add JPEG headers\n                    writeWord(0xFFD8); // SOI\n                    writeAPP0();\n                    writeDQT();\n                    writeSOF0(image.width,image.height);\n                    writeDHT();\n                    writeSOS();\n    \n    \n                    // Encode 8x8 macroblocks\n                    var DCY=0;\n                    var DCU=0;\n                    var DCV=0;\n    \n                    bytenew=0;\n                    bytepos=7;\n    \n    \n                    this.encode.displayName = \"_encode_\";\n    \n                    var imageData = image.data;\n                    var width = image.width;\n                    var height = image.height;\n    \n                    var quadWidth = width*4;\n                    var tripleWidth = width*3;\n    \n                    var x, y = 0;\n                    var r, g, b;\n                    var start,p, col,row,pos;\n                    while(y < height){\n                        x = 0;\n                        while(x < quadWidth){\n                        start = quadWidth * y + x;\n                        p = start;\n                        col = -1;\n                        row = 0;\n    \n                        for(pos=0; pos < 64; pos++){\n                            row = pos >> 3;// /8\n                            col = ( pos & 7 ) * 4; // %8\n                            p = start + ( row * quadWidth ) + col;\n    \n                            if(y+row >= height){ // padding bottom\n                                p-= (quadWidth*(y+1+row-height));\n                            }\n    \n                            if(x+col >= quadWidth){ // padding right\n                                p-= ((x+col) - quadWidth +4)\n                            }\n    \n                            r = imageData[ p++ ];\n                            g = imageData[ p++ ];\n                            b = imageData[ p++ ];\n    \n    \n                            /* // calculate YUV values dynamically\n                            YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n                            UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n                            VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n                            */\n    \n                            // use lookup table (slightly faster)\n                            YDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n                            UDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n                            VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n    \n                        }\n    \n                        DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n                        DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n                        DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n                        x+=32;\n                        }\n                        y+=8;\n                    }\n    \n    \n                    ////////////////////////////////////////////////////////////////\n    \n                    // Do the bit alignment of the EOI marker\n                    if ( bytepos >= 0 ) {\n                        var fillbits = [];\n                        fillbits[1] = bytepos+1;\n                        fillbits[0] = (1<<(bytepos+1))-1;\n                        writeBits(fillbits);\n                    }\n    \n                    writeWord(0xFFD9); //EOI\n    \n                    var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n    \n                    byteout = [];\n    \n                    // benchmarking\n                    // var duration = new Date().getTime() - time_start;\n                    // console.log('Encoding time: '+ currentQuality + 'ms');\n                    //\n    \n                    return jpegDataUri\n            }\n    \n            function setQuality(quality){\n                if (quality <= 0) {\n                    quality = 1;\n                }\n                if (quality > 100) {\n                    quality = 100;\n                }\n    \n                if(currentQuality == quality) return // don't recalc if unchanged\n    \n                var sf = 0;\n                if (quality < 50) {\n                    sf = Math.floor(5000 / quality);\n                } else {\n                    sf = Math.floor(200 - quality*2);\n                }\n    \n                initQuantTables(sf);\n                currentQuality = quality;\n                // console.log('Quality set to: '+quality +'%');\n            }\n    \n            function init(){\n                // var time_start = new Date().getTime();\n                if(!quality) quality = 50;\n                // Create tables\n                initCharLookupTable()\n                initHuffmanTbl();\n                initCategoryNumber();\n                initRGBYUVTable();\n    \n                setQuality(quality);\n                // var duration = new Date().getTime() - time_start;\n                // console.log('Initialization '+ duration + 'ms');\n            }\n    \n            init();\n    \n        };\n    \n        JPEGEncoder.encode = function( data, quality ) {\n            var encoder = new JPEGEncoder( quality );\n    \n            return encoder.encode( data );\n        }\n    \n        return JPEGEncoder;\n    });\n    /**\n     * @fileOverview Fix android canvas.toDataUrl bug.\n     */\n    define('runtime/html5/androidpatch',[\n        'runtime/html5/util',\n        'runtime/html5/jpegencoder',\n        'base'\n    ], function( Util, encoder, Base ) {\n        var origin = Util.canvasToDataUrl,\n            supportJpeg;\n    \n        Util.canvasToDataUrl = function( canvas, type, quality ) {\n            var ctx, w, h, fragement, parts;\n    \n            // 非android手机直接跳过。\n            if ( !Base.os.android ) {\n                return origin.apply( null, arguments );\n            }\n    \n            // 检测是否canvas支持jpeg导出，根据数据格式来判断。\n            // JPEG 前两位分别是：255, 216\n            if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) {\n                fragement = origin.apply( null, arguments );\n    \n                parts = fragement.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    fragement = atob( parts[ 1 ] );\n                } else {\n                    fragement = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                fragement = fragement.substring( 0, 2 );\n    \n                supportJpeg = fragement.charCodeAt( 0 ) === 255 &&\n                        fragement.charCodeAt( 1 ) === 216;\n            }\n    \n            // 只有在android环境下才修复\n            if ( type === 'image/jpeg' && !supportJpeg ) {\n                w = canvas.width;\n                h = canvas.height;\n                ctx = canvas.getContext('2d');\n    \n                return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality );\n            }\n    \n            return origin.apply( null, arguments );\n        };\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger('complete');\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, 'image/jpeg',\n                                opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        canvas.getContext('2d').drawImage( img, x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                            iw * vertSquashRatio, ih * vertSquashRatio,\n                            x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destory = this.destory,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * @fileOverview 图片压缩\n     */\n    define('runtime/flash/image',[\n        'runtime/flash/runtime'\n    ], function( FlashRuntime ) {\n    \n        return FlashRuntime.register( 'Image', {\n            // init: function( options ) {\n            //     var owner = this.owner;\n    \n            //     this.flashExec( 'Image', 'init', options );\n            //     owner.on( 'load', function() {\n            //         debugger;\n            //     });\n            // },\n    \n            loadFromBlob: function( blob ) {\n                var owner = this.owner;\n    \n                owner.info() && this.flashExec( 'Image', 'info', owner.info() );\n                owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() );\n    \n                this.flashExec( 'Image', 'loadFromBlob', blob.uid );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    return me.trigger( 'progress', e.loaded / e.total );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        err = '';\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                    } else if ( status >= 500 && status < 600 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 完全版本。\n     */\n    define('preset/all',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/androidpatch',\n        'runtime/html5/image',\n        'runtime/html5/transport',\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/image',\n        'runtime/flash/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/all'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/webuploader/webuploader.withoutimage.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.disconnectRuntime();\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.exec('destroy');\n                this.disconnectRuntime();\n                this.off();\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            init: function() {\n                var me = this;\n                $.each( validators, function() {\n                    this.call( me.owner );\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileNumLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileSizeLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {int} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destory = this.destory;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/dnd',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        var $ = Base.$,\n            prefix = 'webuploader-dnd-';\n    \n        return Html5Runtime.register( 'DragAndDrop', {\n            init: function() {\n                var elem = this.elem = this.options.container;\n    \n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\n                this.dndOver = false;\n    \n                elem.on( 'dragenter', this.dragEnterHandler );\n                elem.on( 'dragover', this.dragOverHandler );\n                elem.on( 'dragleave', this.dragLeaveHandler );\n                elem.on( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).on( 'dragover', this.dragOverHandler );\n                    $( document ).on( 'drop', this.dropHandler );\n                }\n            },\n    \n            _dragEnterHandler: function( e ) {\n                var me = this,\n                    denied = me._denied || false,\n                    items;\n    \n                e = e.originalEvent || e;\n    \n                if ( !me.dndOver ) {\n                    me.dndOver = true;\n    \n                    // 注意只有 chrome 支持。\n                    items = e.dataTransfer.items;\n    \n                    if ( items && items.length ) {\n                        me._denied = denied = !me.trigger( 'accept', items );\n                    }\n    \n                    me.elem.addClass( prefix + 'over' );\n                    me.elem[ denied ? 'addClass' :\n                            'removeClass' ]( prefix + 'denied' );\n                }\n    \n    \n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\n    \n                return false;\n            },\n    \n            _dragOverHandler: function( e ) {\n                // 只处理框内的。\n                var parentElem = this.elem.parent().get( 0 );\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                clearTimeout( this._leaveTimer );\n                this._dragEnterHandler.call( this, e );\n    \n                return false;\n            },\n    \n            _dragLeaveHandler: function() {\n                var me = this,\n                    handler;\n    \n                handler = function() {\n                    me.dndOver = false;\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\n                };\n    \n                clearTimeout( me._leaveTimer );\n                me._leaveTimer = setTimeout( handler, 100 );\n                return false;\n            },\n    \n            _dropHandler: function( e ) {\n                var me = this,\n                    ruid = me.getRuid(),\n                    parentElem = me.elem.parent().get( 0 );\n    \n                // 只处理框内的。\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                me._getTansferFiles( e, function( results ) {\n                    me.trigger( 'drop', $.map( results, function( file ) {\n                        return new File( ruid, file );\n                    }) );\n                });\n    \n                me.dndOver = false;\n                me.elem.removeClass( prefix + 'over' );\n                return false;\n            },\n    \n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\n            _getTansferFiles: function( e, callback ) {\n                var results  = [],\n                    promises = [],\n                    items, files, dataTransfer, file, item, i, len, canAccessFolder;\n    \n                e = e.originalEvent || e;\n    \n                dataTransfer = e.dataTransfer;\n                items = dataTransfer.items;\n                files = dataTransfer.files;\n    \n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\n    \n                for ( i = 0, len = files.length; i < len; i++ ) {\n                    file = files[ i ];\n                    item = items && items[ i ];\n    \n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\n    \n                        promises.push( this._traverseDirectoryTree(\n                                item.webkitGetAsEntry(), results ) );\n                    } else {\n                        results.push( file );\n                    }\n                }\n    \n                Base.when.apply( Base, promises ).done(function() {\n    \n                    if ( !results.length ) {\n                        return;\n                    }\n    \n                    callback( results );\n                });\n            },\n    \n            _traverseDirectoryTree: function( entry, results ) {\n                var deferred = Base.Deferred(),\n                    me = this;\n    \n                if ( entry.isFile ) {\n                    entry.file(function( file ) {\n                        results.push( file );\n                        deferred.resolve();\n                    });\n                } else if ( entry.isDirectory ) {\n                    entry.createReader().readEntries(function( entries ) {\n                        var len = entries.length,\n                            promises = [],\n                            arr = [],    // 为了保证顺序。\n                            i;\n    \n                        for ( i = 0; i < len; i++ ) {\n                            promises.push( me._traverseDirectoryTree(\n                                    entries[ i ], arr ) );\n                        }\n    \n                        Base.when.apply( Base, promises ).then(function() {\n                            results.push.apply( results, arr );\n                            deferred.resolve();\n                        }, deferred.reject );\n                    });\n                }\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                var elem = this.elem;\n    \n                elem.off( 'dragenter', this.dragEnterHandler );\n                elem.off( 'dragover', this.dragEnterHandler );\n                elem.off( 'dragleave', this.dragLeaveHandler );\n                elem.off( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).off( 'dragover', this.dragOverHandler );\n                    $( document ).off( 'drop', this.dropHandler );\n                }\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/filepaste',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        return Html5Runtime.register( 'FilePaste', {\n            init: function() {\n                var opts = this.options,\n                    elem = this.elem = opts.container,\n                    accept = '.*',\n                    arr, i, len, item;\n    \n                // accetp的mimeTypes中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].mimeTypes;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = arr.join(',');\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\n                    }\n                }\n                this.accept = accept = new RegExp( accept, 'i' );\n                this.hander = Base.bindFn( this._pasteHander, this );\n                elem.on( 'paste', this.hander );\n            },\n    \n            _pasteHander: function( e ) {\n                var allowed = [],\n                    ruid = this.getRuid(),\n                    items, item, blob, i, len;\n    \n                e = e.originalEvent || e;\n                items = e.clipboardData.items;\n    \n                for ( i = 0, len = items.length; i < len; i++ ) {\n                    item = items[ i ];\n    \n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\n                        continue;\n                    }\n    \n                    allowed.push( new File( ruid, blob ) );\n                }\n    \n                if ( allowed.length ) {\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\n                    e.preventDefault();\n                    e.stopPropagation();\n                    this.trigger( 'paste', allowed );\n                }\n            },\n    \n            destroy: function() {\n                this.elem.off( 'paste', this.hander );\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/html5/filepicker',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var $ = Base.$;\n    \n        return Html5Runtime.register( 'FilePicker', {\n            init: function() {\n                var container = this.getRuntime().getContainer(),\n                    me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    lable = $( document.createElement('label') ),\n                    input = $( document.createElement('input') ),\n                    arr, i, len, mouseHandler;\n    \n                input.attr( 'type', 'file' );\n                input.attr( 'name', opts.name );\n                input.addClass('webuploader-element-invisible');\n    \n                lable.on( 'click', function() {\n                    input.trigger('click');\n                });\n    \n                lable.css({\n                    opacity: 0,\n                    width: '100%',\n                    height: '100%',\n                    display: 'block',\n                    cursor: 'pointer',\n                    background: '#ffffff'\n                });\n    \n                if ( opts.multiple ) {\n                    input.attr( 'multiple', 'multiple' );\n                }\n    \n                // @todo Firefox不支持单独指定后缀\n                if ( opts.accept && opts.accept.length > 0 ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        arr.push( opts.accept[ i ].mimeTypes );\n                    }\n    \n                    input.attr( 'accept', arr.join(',') );\n                }\n    \n                container.append( input );\n                container.append( lable );\n    \n                mouseHandler = function( e ) {\n                    owner.trigger( e.type );\n                };\n    \n                input.on( 'change', function( e ) {\n                    var fn = arguments.callee,\n                        clone;\n    \n                    me.files = e.target.files;\n    \n                    // reset input\n                    clone = this.cloneNode( true );\n                    this.parentNode.replaceChild( clone, this );\n    \n                    input.off();\n                    input = $( clone ).on( 'change', fn )\n                            .on( 'mouseenter mouseleave', mouseHandler );\n    \n                    owner.trigger('change');\n                });\n    \n                lable.on( 'mouseenter mouseleave', mouseHandler );\n    \n            },\n    \n    \n            getFiles: function() {\n                return this.files;\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destory = this.destory,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    return me.trigger( 'progress', e.loaded / e.total );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        err = '';\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                    } else if ( status >= 500 && status < 600 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 没有图像处理的版本。\n     */\n    define('preset/withoutimage',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/transport',\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/withoutimage'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/third-party/zeroclipboard/ZeroClipboard.js",
    "content": "/*!\n* ZeroClipboard\n* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n* Copyright (c) 2014 Jon Rohan, James M. Greene\n* Licensed MIT\n* http://zeroclipboard.org/\n* v2.0.0-beta.5\n*/\n(function(window) {\n  \"use strict\";\n  var _currentElement;\n  var _flashState = {\n    bridge: null,\n    version: \"0.0.0\",\n    pluginType: \"unknown\",\n    disabled: null,\n    outdated: null,\n    unavailable: null,\n    deactivated: null,\n    overdue: null,\n    ready: null\n  };\n  var _clipData = {};\n  var _clipDataFormatMap = null;\n  var _clientIdCounter = 0;\n  var _clientMeta = {};\n  var _elementIdCounter = 0;\n  var _elementMeta = {};\n  var _swfPath = function() {\n    var i, jsDir, tmpJsPath, jsPath, swfPath = \"ZeroClipboard.swf\";\n    if (!(document.currentScript && (jsPath = document.currentScript.src))) {\n      var scripts = document.getElementsByTagName(\"script\");\n      if (\"readyState\" in scripts[0]) {\n        for (i = scripts.length; i--; ) {\n          if (scripts[i].readyState === \"interactive\" && (jsPath = scripts[i].src)) {\n            break;\n          }\n        }\n      } else if (document.readyState === \"loading\") {\n        jsPath = scripts[scripts.length - 1].src;\n      } else {\n        for (i = scripts.length; i--; ) {\n          tmpJsPath = scripts[i].src;\n          if (!tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n          tmpJsPath = tmpJsPath.split(\"#\")[0].split(\"?\")[0];\n          tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf(\"/\") + 1);\n          if (jsDir == null) {\n            jsDir = tmpJsPath;\n          } else if (jsDir !== tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n        }\n        if (jsDir !== null) {\n          jsPath = jsDir;\n        }\n      }\n    }\n    if (jsPath) {\n      jsPath = jsPath.split(\"#\")[0].split(\"?\")[0];\n      swfPath = jsPath.slice(0, jsPath.lastIndexOf(\"/\") + 1) + swfPath;\n    }\n    return swfPath;\n  }();\n  var _camelizeCssPropName = function() {\n    var matcherRegex = /\\-([a-z])/g, replacerFn = function(match, group) {\n      return group.toUpperCase();\n    };\n    return function(prop) {\n      return prop.replace(matcherRegex, replacerFn);\n    };\n  }();\n  var _getStyle = function(el, prop) {\n    var value, camelProp, tagName;\n    if (window.getComputedStyle) {\n      value = window.getComputedStyle(el, null).getPropertyValue(prop);\n    } else {\n      camelProp = _camelizeCssPropName(prop);\n      if (el.currentStyle) {\n        value = el.currentStyle[camelProp];\n      } else {\n        value = el.style[camelProp];\n      }\n    }\n    if (prop === \"cursor\") {\n      if (!value || value === \"auto\") {\n        tagName = el.tagName.toLowerCase();\n        if (tagName === \"a\") {\n          return \"pointer\";\n        }\n      }\n    }\n    return value;\n  };\n  var _elementMouseOver = function(event) {\n    if (!event) {\n      event = window.event;\n    }\n    var target;\n    if (this !== window) {\n      target = this;\n    } else if (event.target) {\n      target = event.target;\n    } else if (event.srcElement) {\n      target = event.srcElement;\n    }\n    ZeroClipboard.activate(target);\n  };\n  var _addEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.addEventListener) {\n      element.addEventListener(method, func, false);\n    } else if (element.attachEvent) {\n      element.attachEvent(\"on\" + method, func);\n    }\n  };\n  var _removeEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.removeEventListener) {\n      element.removeEventListener(method, func, false);\n    } else if (element.detachEvent) {\n      element.detachEvent(\"on\" + method, func);\n    }\n  };\n  var _addClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (!element.classList.contains(value)) {\n        element.classList.add(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\") {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1) {\n        if (!element.className) {\n          element.className = value;\n        } else {\n          var className = \" \" + element.className + \" \", setClass = element.className;\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            if (className.indexOf(\" \" + classNames[c] + \" \") < 0) {\n              setClass += \" \" + classNames[c];\n            }\n          }\n          element.className = setClass.replace(/^\\s+|\\s+$/g, \"\");\n        }\n      }\n    }\n    return element;\n  };\n  var _removeClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (element.classList.contains(value)) {\n        element.classList.remove(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\" || value === undefined) {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1 && element.className) {\n        if (value) {\n          var className = (\" \" + element.className + \" \").replace(/[\\n\\t]/g, \" \");\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            className = className.replace(\" \" + classNames[c] + \" \", \" \");\n          }\n          element.className = className.replace(/^\\s+|\\s+$/g, \"\");\n        } else {\n          element.className = \"\";\n        }\n      }\n    }\n    return element;\n  };\n  var _getZoomFactor = function() {\n    var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n    if (typeof document.body.getBoundingClientRect === \"function\") {\n      rect = document.body.getBoundingClientRect();\n      physicalWidth = rect.right - rect.left;\n      logicalWidth = document.body.offsetWidth;\n      zoomFactor = Math.round(physicalWidth / logicalWidth * 100) / 100;\n    }\n    return zoomFactor;\n  };\n  var _getDOMObjectPosition = function(obj, defaultZIndex) {\n    var info = {\n      left: 0,\n      top: 0,\n      width: 0,\n      height: 0,\n      zIndex: _getSafeZIndex(defaultZIndex) - 1\n    };\n    if (obj.getBoundingClientRect) {\n      var rect = obj.getBoundingClientRect();\n      var pageXOffset, pageYOffset, zoomFactor;\n      if (\"pageXOffset\" in window && \"pageYOffset\" in window) {\n        pageXOffset = window.pageXOffset;\n        pageYOffset = window.pageYOffset;\n      } else {\n        zoomFactor = _getZoomFactor();\n        pageXOffset = Math.round(document.documentElement.scrollLeft / zoomFactor);\n        pageYOffset = Math.round(document.documentElement.scrollTop / zoomFactor);\n      }\n      var leftBorderWidth = document.documentElement.clientLeft || 0;\n      var topBorderWidth = document.documentElement.clientTop || 0;\n      info.left = rect.left + pageXOffset - leftBorderWidth;\n      info.top = rect.top + pageYOffset - topBorderWidth;\n      info.width = \"width\" in rect ? rect.width : rect.right - rect.left;\n      info.height = \"height\" in rect ? rect.height : rect.bottom - rect.top;\n    }\n    return info;\n  };\n  var _cacheBust = function(path, options) {\n    var cacheBust = options == null || options && options.cacheBust === true;\n    if (cacheBust) {\n      return (path.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"noCache=\" + new Date().getTime();\n    } else {\n      return \"\";\n    }\n  };\n  var _vars = function(options) {\n    var i, len, domain, domains, str = \"\", trustedOriginsExpanded = [];\n    if (options.trustedDomains) {\n      if (typeof options.trustedDomains === \"string\") {\n        domains = [ options.trustedDomains ];\n      } else if (typeof options.trustedDomains === \"object\" && \"length\" in options.trustedDomains) {\n        domains = options.trustedDomains;\n      }\n    }\n    if (domains && domains.length) {\n      for (i = 0, len = domains.length; i < len; i++) {\n        if (domains.hasOwnProperty(i) && domains[i] && typeof domains[i] === \"string\") {\n          domain = _extractDomain(domains[i]);\n          if (!domain) {\n            continue;\n          }\n          if (domain === \"*\") {\n            trustedOriginsExpanded = [ domain ];\n            break;\n          }\n          trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \"//\" + domain, window.location.protocol + \"//\" + domain ]);\n        }\n      }\n    }\n    if (trustedOriginsExpanded.length) {\n      str += \"trustedOrigins=\" + encodeURIComponent(trustedOriginsExpanded.join(\",\"));\n    }\n    if (options.forceEnhancedClipboard === true) {\n      str += (str ? \"&\" : \"\") + \"forceEnhancedClipboard=true\";\n    }\n    return str;\n  };\n  var _inArray = function(elem, array, fromIndex) {\n    if (typeof array.indexOf === \"function\") {\n      return array.indexOf(elem, fromIndex);\n    }\n    var i, len = array.length;\n    if (typeof fromIndex === \"undefined\") {\n      fromIndex = 0;\n    } else if (fromIndex < 0) {\n      fromIndex = len + fromIndex;\n    }\n    for (i = fromIndex; i < len; i++) {\n      if (array.hasOwnProperty(i) && array[i] === elem) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  var _prepClip = function(elements) {\n    if (typeof elements === \"string\") {\n      throw new TypeError(\"ZeroClipboard doesn't accept query strings.\");\n    }\n    return typeof elements.length !== \"number\" ? [ elements ] : elements;\n  };\n  var _dispatchCallback = function(func, context, args, async) {\n    if (async) {\n      window.setTimeout(function() {\n        func.apply(context, args);\n      }, 0);\n    } else {\n      func.apply(context, args);\n    }\n  };\n  var _getSafeZIndex = function(val) {\n    var zIndex, tmp;\n    if (val) {\n      if (typeof val === \"number\" && val > 0) {\n        zIndex = val;\n      } else if (typeof val === \"string\" && (tmp = parseInt(val, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    if (!zIndex) {\n      if (typeof _globalConfig.zIndex === \"number\" && _globalConfig.zIndex > 0) {\n        zIndex = _globalConfig.zIndex;\n      } else if (typeof _globalConfig.zIndex === \"string\" && (tmp = parseInt(_globalConfig.zIndex, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    return zIndex || 0;\n  };\n  var _extend = function() {\n    var i, len, arg, prop, src, copy, target = arguments[0] || {};\n    for (i = 1, len = arguments.length; i < len; i++) {\n      if ((arg = arguments[i]) != null) {\n        for (prop in arg) {\n          if (arg.hasOwnProperty(prop)) {\n            src = target[prop];\n            copy = arg[prop];\n            if (target === copy) {\n              continue;\n            }\n            if (copy !== undefined) {\n              target[prop] = copy;\n            }\n          }\n        }\n      }\n    }\n    return target;\n  };\n  var _extractDomain = function(originOrUrl) {\n    if (originOrUrl == null || originOrUrl === \"\") {\n      return null;\n    }\n    originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \"\");\n    if (originOrUrl === \"\") {\n      return null;\n    }\n    var protocolIndex = originOrUrl.indexOf(\"//\");\n    originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n    var pathIndex = originOrUrl.indexOf(\"/\");\n    originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n    if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \".swf\") {\n      return null;\n    }\n    return originOrUrl || null;\n  };\n  var _determineScriptAccess = function() {\n    var _extractAllDomains = function(origins, resultsArray) {\n      var i, len, tmp;\n      if (origins == null || resultsArray[0] === \"*\") {\n        return;\n      }\n      if (typeof origins === \"string\") {\n        origins = [ origins ];\n      }\n      if (!(typeof origins === \"object\" && typeof origins.length === \"number\")) {\n        return;\n      }\n      for (i = 0, len = origins.length; i < len; i++) {\n        if (origins.hasOwnProperty(i) && (tmp = _extractDomain(origins[i]))) {\n          if (tmp === \"*\") {\n            resultsArray.length = 0;\n            resultsArray.push(\"*\");\n            break;\n          }\n          if (_inArray(tmp, resultsArray) === -1) {\n            resultsArray.push(tmp);\n          }\n        }\n      }\n    };\n    return function(currentDomain, configOptions) {\n      var swfDomain = _extractDomain(configOptions.swfPath);\n      if (swfDomain === null) {\n        swfDomain = currentDomain;\n      }\n      var trustedDomains = [];\n      _extractAllDomains(configOptions.trustedOrigins, trustedDomains);\n      _extractAllDomains(configOptions.trustedDomains, trustedDomains);\n      var len = trustedDomains.length;\n      if (len > 0) {\n        if (len === 1 && trustedDomains[0] === \"*\") {\n          return \"always\";\n        }\n        if (_inArray(currentDomain, trustedDomains) !== -1) {\n          if (len === 1 && currentDomain === swfDomain) {\n            return \"sameDomain\";\n          }\n          return \"always\";\n        }\n      }\n      return \"never\";\n    };\n  }();\n  var _objectKeys = function(obj) {\n    if (obj == null) {\n      return [];\n    }\n    if (Object.keys) {\n      return Object.keys(obj);\n    }\n    var keys = [];\n    for (var prop in obj) {\n      if (obj.hasOwnProperty(prop)) {\n        keys.push(prop);\n      }\n    }\n    return keys;\n  };\n  var _deleteOwnProperties = function(obj) {\n    if (obj) {\n      for (var prop in obj) {\n        if (obj.hasOwnProperty(prop)) {\n          delete obj[prop];\n        }\n      }\n    }\n    return obj;\n  };\n  var _safeActiveElement = function() {\n    try {\n      return document.activeElement;\n    } catch (err) {}\n    return null;\n  };\n  var _pick = function(obj, keys) {\n    var newObj = {};\n    for (var i = 0, len = keys.length; i < len; i++) {\n      if (keys[i] in obj) {\n        newObj[keys[i]] = obj[keys[i]];\n      }\n    }\n    return newObj;\n  };\n  var _omit = function(obj, keys) {\n    var newObj = {};\n    for (var prop in obj) {\n      if (_inArray(prop, keys) === -1) {\n        newObj[prop] = obj[prop];\n      }\n    }\n    return newObj;\n  };\n  var _mapClipDataToFlash = function(clipData) {\n    var newClipData = {}, formatMap = {};\n    if (!(typeof clipData === \"object\" && clipData)) {\n      return;\n    }\n    for (var dataFormat in clipData) {\n      if (dataFormat && clipData.hasOwnProperty(dataFormat) && typeof clipData[dataFormat] === \"string\" && clipData[dataFormat]) {\n        switch (dataFormat.toLowerCase()) {\n         case \"text/plain\":\n         case \"text\":\n         case \"air:text\":\n         case \"flash:text\":\n          newClipData.text = clipData[dataFormat];\n          formatMap.text = dataFormat;\n          break;\n\n         case \"text/html\":\n         case \"html\":\n         case \"air:html\":\n         case \"flash:html\":\n          newClipData.html = clipData[dataFormat];\n          formatMap.html = dataFormat;\n          break;\n\n         case \"application/rtf\":\n         case \"text/rtf\":\n         case \"rtf\":\n         case \"richtext\":\n         case \"air:rtf\":\n         case \"flash:rtf\":\n          newClipData.rtf = clipData[dataFormat];\n          formatMap.rtf = dataFormat;\n          break;\n\n         default:\n          break;\n        }\n      }\n    }\n    return {\n      data: newClipData,\n      formatMap: formatMap\n    };\n  };\n  var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n    if (!(typeof clipResults === \"object\" && clipResults && typeof formatMap === \"object\" && formatMap)) {\n      return clipResults;\n    }\n    var newResults = {};\n    for (var prop in clipResults) {\n      if (clipResults.hasOwnProperty(prop)) {\n        if (prop !== \"success\" && prop !== \"data\") {\n          newResults[prop] = clipResults[prop];\n          continue;\n        }\n        newResults[prop] = {};\n        var tmpHash = clipResults[prop];\n        for (var dataFormat in tmpHash) {\n          if (dataFormat && tmpHash.hasOwnProperty(dataFormat) && formatMap.hasOwnProperty(dataFormat)) {\n            newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n          }\n        }\n      }\n    }\n    return newResults;\n  };\n  var _args = function(arraySlice) {\n    return function(args) {\n      return arraySlice.call(args, 0);\n    };\n  }(window.Array.prototype.slice);\n  var _detectFlashSupport = function() {\n    var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \"\";\n    function parseFlashVersion(desc) {\n      var matches = desc.match(/[\\d]+/g);\n      matches.length = 3;\n      return matches.join(\".\");\n    }\n    function isPepperFlash(flashPlayerFileName) {\n      return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \"chrome.plugin\");\n    }\n    function inspectPlugin(plugin) {\n      if (plugin) {\n        hasFlash = true;\n        if (plugin.version) {\n          flashVersion = parseFlashVersion(plugin.version);\n        }\n        if (!flashVersion && plugin.description) {\n          flashVersion = parseFlashVersion(plugin.description);\n        }\n        if (plugin.filename) {\n          isPPAPI = isPepperFlash(plugin.filename);\n        }\n      }\n    }\n    if (navigator.plugins && navigator.plugins.length) {\n      plugin = navigator.plugins[\"Shockwave Flash\"];\n      inspectPlugin(plugin);\n      if (navigator.plugins[\"Shockwave Flash 2.0\"]) {\n        hasFlash = true;\n        flashVersion = \"2.0.0.11\";\n      }\n    } else if (navigator.mimeTypes && navigator.mimeTypes.length) {\n      mimeType = navigator.mimeTypes[\"application/x-shockwave-flash\"];\n      plugin = mimeType && mimeType.enabledPlugin;\n      inspectPlugin(plugin);\n    } else if (typeof ActiveXObject !== \"undefined\") {\n      isActiveX = true;\n      try {\n        ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");\n        hasFlash = true;\n        flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n      } catch (e1) {\n        try {\n          ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\");\n          hasFlash = true;\n          flashVersion = \"6.0.21\";\n        } catch (e2) {\n          try {\n            ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");\n            hasFlash = true;\n            flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n          } catch (e3) {\n            isActiveX = false;\n          }\n        }\n      }\n    }\n    _flashState.disabled = hasFlash !== true;\n    _flashState.outdated = flashVersion && parseFloat(flashVersion) < 11;\n    _flashState.version = flashVersion || \"0.0.0\";\n    _flashState.pluginType = isPPAPI ? \"pepper\" : isActiveX ? \"activex\" : hasFlash ? \"netscape\" : \"unknown\";\n  };\n  _detectFlashSupport();\n  var ZeroClipboard = function(elements) {\n    if (!(this instanceof ZeroClipboard)) {\n      return new ZeroClipboard(elements);\n    }\n    this.id = \"\" + _clientIdCounter++;\n    _clientMeta[this.id] = {\n      instance: this,\n      elements: [],\n      handlers: {}\n    };\n    if (elements) {\n      this.clip(elements);\n    }\n    if (typeof _flashState.ready !== \"boolean\") {\n      _flashState.ready = false;\n    }\n    if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n      var _client = this;\n      var maxWait = _globalConfig.flashLoadTimeout;\n      if (typeof maxWait === \"number\" && maxWait >= 0) {\n        setTimeout(function() {\n          if (typeof _flashState.deactivated !== \"boolean\") {\n            _flashState.deactivated = true;\n          }\n          if (_flashState.deactivated === true) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-deactivated\",\n              client: _client\n            });\n          }\n        }, maxWait);\n      }\n      _flashState.overdue = false;\n      _bridge();\n    }\n  };\n  ZeroClipboard.prototype.setText = function(text) {\n    ZeroClipboard.setData(\"text/plain\", text);\n    return this;\n  };\n  ZeroClipboard.prototype.setHtml = function(html) {\n    ZeroClipboard.setData(\"text/html\", html);\n    return this;\n  };\n  ZeroClipboard.prototype.setRichText = function(richText) {\n    ZeroClipboard.setData(\"application/rtf\", richText);\n    return this;\n  };\n  ZeroClipboard.prototype.setData = function() {\n    ZeroClipboard.setData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.clearData = function() {\n    ZeroClipboard.clearData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.setSize = function(width, height) {\n    _setSize(width, height);\n    return this;\n  };\n  var _setHandCursor = function(enabled) {\n    if (_flashState.ready === true && _flashState.bridge && typeof _flashState.bridge.setHandCursor === \"function\") {\n      _flashState.bridge.setHandCursor(enabled);\n    } else {\n      _flashState.ready = false;\n    }\n  };\n  ZeroClipboard.prototype.destroy = function() {\n    this.unclip();\n    this.off();\n    delete _clientMeta[this.id];\n  };\n  var _getAllClients = function() {\n    var i, len, client, clients = [], clientIds = _objectKeys(_clientMeta);\n    for (i = 0, len = clientIds.length; i < len; i++) {\n      client = _clientMeta[clientIds[i]].instance;\n      if (client && client instanceof ZeroClipboard) {\n        clients.push(client);\n      }\n    }\n    return clients;\n  };\n  ZeroClipboard.version = \"2.0.0-beta.5\";\n  var _globalConfig = {\n    swfPath: _swfPath,\n    trustedDomains: window.location.host ? [ window.location.host ] : [],\n    cacheBust: true,\n    forceHandCursor: false,\n    forceEnhancedClipboard: false,\n    zIndex: 999999999,\n    debug: false,\n    title: null,\n    autoActivate: true,\n    flashLoadTimeout: 3e4\n  };\n  ZeroClipboard.isFlashUnusable = function() {\n    return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n  };\n  ZeroClipboard.config = function(options) {\n    if (typeof options === \"object\" && options !== null) {\n      _extend(_globalConfig, options);\n    }\n    if (typeof options === \"string\" && options) {\n      if (_globalConfig.hasOwnProperty(options)) {\n        return _globalConfig[options];\n      }\n      return;\n    }\n    var copy = {};\n    for (var prop in _globalConfig) {\n      if (_globalConfig.hasOwnProperty(prop)) {\n        if (typeof _globalConfig[prop] === \"object\" && _globalConfig[prop] !== null) {\n          if (\"length\" in _globalConfig[prop]) {\n            copy[prop] = _globalConfig[prop].slice(0);\n          } else {\n            copy[prop] = _extend({}, _globalConfig[prop]);\n          }\n        } else {\n          copy[prop] = _globalConfig[prop];\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.destroy = function() {\n    ZeroClipboard.deactivate();\n    for (var clientId in _clientMeta) {\n      if (_clientMeta.hasOwnProperty(clientId) && _clientMeta[clientId]) {\n        var client = _clientMeta[clientId].instance;\n        if (client && typeof client.destroy === \"function\") {\n          client.destroy();\n        }\n      }\n    }\n    var flashBridge = _flashState.bridge;\n    if (flashBridge) {\n      var htmlBridge = _getHtmlBridge(flashBridge);\n      if (htmlBridge) {\n        if (_flashState.pluginType === \"activex\" && \"readyState\" in flashBridge) {\n          flashBridge.style.display = \"none\";\n          (function removeSwfFromIE() {\n            if (flashBridge.readyState === 4) {\n              for (var prop in flashBridge) {\n                if (typeof flashBridge[prop] === \"function\") {\n                  flashBridge[prop] = null;\n                }\n              }\n              flashBridge.parentNode.removeChild(flashBridge);\n              if (htmlBridge.parentNode) {\n                htmlBridge.parentNode.removeChild(htmlBridge);\n              }\n            } else {\n              setTimeout(removeSwfFromIE, 10);\n            }\n          })();\n        } else {\n          flashBridge.parentNode.removeChild(flashBridge);\n          if (htmlBridge.parentNode) {\n            htmlBridge.parentNode.removeChild(htmlBridge);\n          }\n        }\n      }\n      _flashState.ready = null;\n      _flashState.bridge = null;\n      _flashState.deactivated = null;\n    }\n    ZeroClipboard.clearData();\n  };\n  ZeroClipboard.activate = function(element) {\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n    }\n    _currentElement = element;\n    _addClass(element, _globalConfig.hoverClass);\n    _reposition();\n    var newTitle = _globalConfig.title || element.getAttribute(\"title\");\n    if (newTitle) {\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.setAttribute(\"title\", newTitle);\n      }\n    }\n    var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \"cursor\") === \"pointer\";\n    _setHandCursor(useHandCursor);\n  };\n  ZeroClipboard.deactivate = function() {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.removeAttribute(\"title\");\n      htmlBridge.style.left = \"0px\";\n      htmlBridge.style.top = \"-9999px\";\n      _setSize(1, 1);\n    }\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n      _currentElement = null;\n    }\n  };\n  ZeroClipboard.state = function() {\n    return {\n      browser: _pick(window.navigator, [ \"userAgent\", \"platform\", \"appName\" ]),\n      flash: _omit(_flashState, [ \"bridge\" ]),\n      zeroclipboard: {\n        version: ZeroClipboard.version,\n        config: ZeroClipboard.config()\n      }\n    };\n  };\n  ZeroClipboard.setData = function(format, data) {\n    var dataObj;\n    if (typeof format === \"object\" && format && typeof data === \"undefined\") {\n      dataObj = format;\n      ZeroClipboard.clearData();\n    } else if (typeof format === \"string\" && format) {\n      dataObj = {};\n      dataObj[format] = data;\n    } else {\n      return;\n    }\n    for (var dataFormat in dataObj) {\n      if (dataFormat && dataObj.hasOwnProperty(dataFormat) && typeof dataObj[dataFormat] === \"string\" && dataObj[dataFormat]) {\n        _clipData[dataFormat] = dataObj[dataFormat];\n      }\n    }\n  };\n  ZeroClipboard.clearData = function(format) {\n    if (typeof format === \"undefined\") {\n      _deleteOwnProperties(_clipData);\n      _clipDataFormatMap = null;\n    } else if (typeof format === \"string\" && _clipData.hasOwnProperty(format)) {\n      delete _clipData[format];\n    }\n  };\n  var _bridge = function() {\n    var flashBridge, len;\n    var container = document.getElementById(\"global-zeroclipboard-html-bridge\");\n    if (!container) {\n      var allowScriptAccess = _determineScriptAccess(window.location.host, _globalConfig);\n      var allowNetworking = allowScriptAccess === \"never\" ? \"none\" : \"all\";\n      var flashvars = _vars(_globalConfig);\n      var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n      container = _createHtmlBridge();\n      var divToBeReplaced = document.createElement(\"div\");\n      container.appendChild(divToBeReplaced);\n      document.body.appendChild(container);\n      var tmpDiv = document.createElement(\"div\");\n      var oldIE = _flashState.pluginType === \"activex\";\n      tmpDiv.innerHTML = '<object id=\"global-zeroclipboard-flash-bridge\" name=\"global-zeroclipboard-flash-bridge\" ' + 'width=\"100%\" height=\"100%\" ' + (oldIE ? 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\"' : 'type=\"application/x-shockwave-flash\" data=\"' + swfUrl + '\"') + \">\" + (oldIE ? '<param name=\"movie\" value=\"' + swfUrl + '\"/>' : \"\") + '<param name=\"allowScriptAccess\" value=\"' + allowScriptAccess + '\"/>' + '<param name=\"allowNetworking\" value=\"' + allowNetworking + '\"/>' + '<param name=\"menu\" value=\"false\"/>' + '<param name=\"wmode\" value=\"transparent\"/>' + '<param name=\"flashvars\" value=\"' + flashvars + '\"/>' + \"</object>\";\n      flashBridge = tmpDiv.firstChild;\n      tmpDiv = null;\n      flashBridge.ZeroClipboard = ZeroClipboard;\n      container.replaceChild(flashBridge, divToBeReplaced);\n    }\n    if (!flashBridge) {\n      flashBridge = document[\"global-zeroclipboard-flash-bridge\"];\n      if (flashBridge && (len = flashBridge.length)) {\n        flashBridge = flashBridge[len - 1];\n      }\n      if (!flashBridge) {\n        flashBridge = container.firstChild;\n      }\n    }\n    _flashState.bridge = flashBridge || null;\n  };\n  var _createHtmlBridge = function() {\n    var container = document.createElement(\"div\");\n    container.id = \"global-zeroclipboard-html-bridge\";\n    container.className = \"global-zeroclipboard-container\";\n    container.style.position = \"absolute\";\n    container.style.left = \"0px\";\n    container.style.top = \"-9999px\";\n    container.style.width = \"1px\";\n    container.style.height = \"1px\";\n    container.style.zIndex = \"\" + _getSafeZIndex(_globalConfig.zIndex);\n    return container;\n  };\n  var _getHtmlBridge = function(flashBridge) {\n    var htmlBridge = flashBridge && flashBridge.parentNode;\n    while (htmlBridge && htmlBridge.nodeName === \"OBJECT\" && htmlBridge.parentNode) {\n      htmlBridge = htmlBridge.parentNode;\n    }\n    return htmlBridge || null;\n  };\n  var _reposition = function() {\n    if (_currentElement) {\n      var pos = _getDOMObjectPosition(_currentElement, _globalConfig.zIndex);\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.style.top = pos.top + \"px\";\n        htmlBridge.style.left = pos.left + \"px\";\n        htmlBridge.style.width = pos.width + \"px\";\n        htmlBridge.style.height = pos.height + \"px\";\n        htmlBridge.style.zIndex = pos.zIndex + 1;\n      }\n      _setSize(pos.width, pos.height);\n    }\n  };\n  var _setSize = function(width, height) {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.style.width = width + \"px\";\n      htmlBridge.style.height = height + \"px\";\n    }\n  };\n  ZeroClipboard.emit = function(event) {\n    var eventType, eventObj, performCallbackAsync, clients, i, len, eventCopy, returnVal, tmp;\n    if (typeof event === \"string\" && event) {\n      eventType = event;\n    }\n    if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n      eventType = event.type;\n      eventObj = event;\n    }\n    if (!eventType) {\n      return;\n    }\n    event = _createEvent(eventType, eventObj);\n    _preprocessEvent(event);\n    if (event.type === \"ready\" && _flashState.overdue === true) {\n      return ZeroClipboard.emit({\n        type: \"error\",\n        name: \"flash-overdue\"\n      });\n    }\n    performCallbackAsync = !/^(before)?copy$/.test(event.type);\n    if (event.client) {\n      _dispatchClientCallbacks.call(event.client, event, performCallbackAsync);\n    } else {\n      clients = event.target && event.target !== window && _globalConfig.autoActivate === true ? _getAllClientsClippedToElement(event.target) : _getAllClients();\n      for (i = 0, len = clients.length; i < len; i++) {\n        eventCopy = _extend({}, event, {\n          client: clients[i]\n        });\n        _dispatchClientCallbacks.call(clients[i], eventCopy, performCallbackAsync);\n      }\n    }\n    if (event.type === \"copy\") {\n      tmp = _mapClipDataToFlash(_clipData);\n      returnVal = tmp.data;\n      _clipDataFormatMap = tmp.formatMap;\n    }\n    return returnVal;\n  };\n  var _dispatchClientCallbacks = function(event, async) {\n    var handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[event.type];\n    if (handlers && handlers.length) {\n      var i, len, func, context, originalContext = this;\n      for (i = 0, len = handlers.length; i < len; i++) {\n        func = handlers[i];\n        context = originalContext;\n        if (typeof func === \"string\" && typeof window[func] === \"function\") {\n          func = window[func];\n        }\n        if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n          context = func;\n          func = func.handleEvent;\n        }\n        if (typeof func === \"function\") {\n          _dispatchCallback(func, context, [ event ], async);\n        }\n      }\n    }\n    return this;\n  };\n  var _eventMessages = {\n    ready: \"Flash communication is established\",\n    error: {\n      \"flash-disabled\": \"Flash is disabled or not installed\",\n      \"flash-outdated\": \"Flash is too outdated to support ZeroClipboard\",\n      \"flash-unavailable\": \"Flash is unable to communicate bidirectionally with JavaScript\",\n      \"flash-deactivated\": \"Flash is too outdated for your browser and/or is configured as click-to-activate\",\n      \"flash-overdue\": \"Flash communication was established but NOT within the acceptable time limit\"\n    }\n  };\n  var _createEvent = function(eventType, event) {\n    if (!(eventType || event && event.type)) {\n      return;\n    }\n    event = event || {};\n    eventType = (eventType || event.type).toLowerCase();\n    _extend(event, {\n      type: eventType,\n      target: event.target || _currentElement || null,\n      relatedTarget: event.relatedTarget || null,\n      currentTarget: _flashState && _flashState.bridge || null\n    });\n    var msg = _eventMessages[event.type];\n    if (event.type === \"error\" && event.name && msg) {\n      msg = msg[event.name];\n    }\n    if (msg) {\n      event.message = msg;\n    }\n    if (event.type === \"ready\") {\n      _extend(event, {\n        target: null,\n        version: _flashState.version\n      });\n    }\n    if (event.type === \"error\") {\n      event.target = null;\n      if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n        _extend(event, {\n          version: _flashState.version,\n          minimumVersion: \"11.0.0\"\n        });\n      }\n    }\n    if (event.type === \"copy\") {\n      event.clipboardData = {\n        setData: ZeroClipboard.setData,\n        clearData: ZeroClipboard.clearData\n      };\n    }\n    if (event.type === \"aftercopy\") {\n      event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n    }\n    if (event.target && !event.relatedTarget) {\n      event.relatedTarget = _getRelatedTarget(event.target);\n    }\n    return event;\n  };\n  var _getRelatedTarget = function(targetEl) {\n    var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\"data-clipboard-target\");\n    return relatedTargetId ? document.getElementById(relatedTargetId) : null;\n  };\n  var _preprocessEvent = function(event) {\n    var element = event.target || _currentElement;\n    switch (event.type) {\n     case \"error\":\n      if (_inArray(event.name, [ \"flash-disabled\", \"flash-outdated\", \"flash-deactivated\", \"flash-overdue\" ])) {\n        _extend(_flashState, {\n          disabled: event.name === \"flash-disabled\",\n          outdated: event.name === \"flash-outdated\",\n          unavailable: event.name === \"flash-unavailable\",\n          deactivated: event.name === \"flash-deactivated\",\n          overdue: event.name === \"flash-overdue\",\n          ready: false\n        });\n      }\n      break;\n\n     case \"ready\":\n      var wasDeactivated = _flashState.deactivated === true;\n      _extend(_flashState, {\n        disabled: false,\n        outdated: false,\n        unavailable: false,\n        deactivated: false,\n        overdue: wasDeactivated,\n        ready: !wasDeactivated\n      });\n      break;\n\n     case \"copy\":\n      var textContent, htmlContent, targetEl = event.relatedTarget;\n      if (!(_clipData[\"text/html\"] || _clipData[\"text/plain\"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n        if (htmlContent !== textContent) {\n          event.clipboardData.setData(\"text/html\", htmlContent);\n        }\n      } else if (!_clipData[\"text/plain\"] && event.target && (textContent = event.target.getAttribute(\"data-clipboard-text\"))) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n      }\n      break;\n\n     case \"aftercopy\":\n      ZeroClipboard.clearData();\n      if (element && element !== _safeActiveElement() && element.focus) {\n        element.focus();\n      }\n      break;\n\n     case \"mouseover\":\n      _addClass(element, _globalConfig.hoverClass);\n      break;\n\n     case \"mouseout\":\n      if (_globalConfig.autoActivate === true) {\n        ZeroClipboard.deactivate();\n      }\n      break;\n\n     case \"mousedown\":\n      _addClass(element, _globalConfig.activeClass);\n      break;\n\n     case \"mouseup\":\n      _removeClass(element, _globalConfig.activeClass);\n      break;\n    }\n  };\n  ZeroClipboard.prototype.on = function(eventName, func) {\n    var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (typeof eventName === \"string\" && eventName) {\n      events = eventName.toLowerCase().split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.on(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].replace(/^on/, \"\");\n        added[eventName] = true;\n        if (!handlers[eventName]) {\n          handlers[eventName] = [];\n        }\n        handlers[eventName].push(func);\n      }\n      if (added.ready && _flashState.ready) {\n        ZeroClipboard.emit({\n          type: \"ready\",\n          client: this\n        });\n      }\n      if (added.error) {\n        var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n        for (i = 0, len = errorTypes.length; i < len; i++) {\n          if (_flashState[errorTypes[i]]) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-\" + errorTypes[i],\n              client: this\n            });\n            break;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.off = function(eventName, func) {\n    var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (arguments.length === 0) {\n      events = _objectKeys(handlers);\n    } else if (typeof eventName === \"string\" && eventName) {\n      events = eventName.split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.off(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].toLowerCase().replace(/^on/, \"\");\n        perEventHandlers = handlers[eventName];\n        if (perEventHandlers && perEventHandlers.length) {\n          if (func) {\n            foundIndex = _inArray(func, perEventHandlers);\n            while (foundIndex !== -1) {\n              perEventHandlers.splice(foundIndex, 1);\n              foundIndex = _inArray(func, perEventHandlers, foundIndex);\n            }\n          } else {\n            handlers[eventName].length = 0;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.handlers = function(eventName) {\n    var prop, copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (handlers) {\n      if (typeof eventName === \"string\" && eventName) {\n        return handlers[eventName] ? handlers[eventName].slice(0) : null;\n      }\n      copy = {};\n      for (prop in handlers) {\n        if (handlers.hasOwnProperty(prop) && handlers[prop]) {\n          copy[prop] = handlers[prop].slice(0);\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.prototype.clip = function(elements) {\n    elements = _prepClip(elements);\n    for (var i = 0; i < elements.length; i++) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        if (!elements[i].zcClippingId) {\n          elements[i].zcClippingId = \"zcClippingId_\" + _elementIdCounter++;\n          _elementMeta[elements[i].zcClippingId] = [ this.id ];\n          if (_globalConfig.autoActivate === true) {\n            _addEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n          }\n        } else if (_inArray(this.id, _elementMeta[elements[i].zcClippingId]) === -1) {\n          _elementMeta[elements[i].zcClippingId].push(this.id);\n        }\n        var clippedElements = _clientMeta[this.id].elements;\n        if (_inArray(elements[i], clippedElements) === -1) {\n          clippedElements.push(elements[i]);\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.unclip = function(elements) {\n    var meta = _clientMeta[this.id];\n    if (!meta) {\n      return this;\n    }\n    var clippedElements = meta.elements;\n    var arrayIndex;\n    if (typeof elements === \"undefined\") {\n      elements = clippedElements.slice(0);\n    } else {\n      elements = _prepClip(elements);\n    }\n    for (var i = elements.length; i--; ) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        arrayIndex = 0;\n        while ((arrayIndex = _inArray(elements[i], clippedElements, arrayIndex)) !== -1) {\n          clippedElements.splice(arrayIndex, 1);\n        }\n        var clientIds = _elementMeta[elements[i].zcClippingId];\n        if (clientIds) {\n          arrayIndex = 0;\n          while ((arrayIndex = _inArray(this.id, clientIds, arrayIndex)) !== -1) {\n            clientIds.splice(arrayIndex, 1);\n          }\n          if (clientIds.length === 0) {\n            if (_globalConfig.autoActivate === true) {\n              _removeEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n            }\n            delete elements[i].zcClippingId;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.elements = function() {\n    var meta = _clientMeta[this.id];\n    return meta && meta.elements ? meta.elements.slice(0) : [];\n  };\n  var _getAllClientsClippedToElement = function(element) {\n    var elementMetaId, clientIds, i, len, client, clients = [];\n    if (element && element.nodeType === 1 && (elementMetaId = element.zcClippingId) && _elementMeta.hasOwnProperty(elementMetaId)) {\n      clientIds = _elementMeta[elementMetaId];\n      if (clientIds && clientIds.length) {\n        for (i = 0, len = clientIds.length; i < len; i++) {\n          client = _clientMeta[clientIds[i]].instance;\n          if (client && client instanceof ZeroClipboard) {\n            clients.push(client);\n          }\n        }\n      }\n    }\n    return clients;\n  };\n  _globalConfig.hoverClass = \"zeroclipboard-is-hover\";\n  _globalConfig.activeClass = \"zeroclipboard-is-active\";\n  if (typeof define === \"function\" && define.amd) {\n    define(function() {\n      return ZeroClipboard;\n    });\n  } else if (typeof module === \"object\" && module && typeof module.exports === \"object\" && module.exports) {\n    module.exports = ZeroClipboard;\n  } else {\n    window.ZeroClipboard = ZeroClipboard;\n  }\n})(function() {\n  return this;\n}());"
  },
  {
    "path": "static/plugins/ueditor-1.4.3.3/ueditor.config.js",
    "content": "/**\n * ueditor完整配置项\n * 可以在这里配置整个编辑器的特性\n */\n/**************************提示********************************\n * 所有被注释的配置项均为UEditor默认值。\n * 修改默认配置请首先确保已经完全明确该参数的真实用途。\n * 主要有两种修改方案，一种是取消此处注释，然后修改成对应参数；另一种是在实例化编辑器时传入对应参数。\n * 当升级编辑器时，可直接使用旧版配置文件替换新版配置文件,不用担心旧版配置文件中因缺少新功能所需的参数而导致脚本报错。\n **************************提示********************************/\n\n(function () {\n\n    /**\n     * 编辑器资源文件根路径。它所表示的含义是：以编辑器实例化页面为当前路径，指向编辑器资源文件（即dialog等文件夹）的路径。\n     * 鉴于很多同学在使用编辑器的时候出现的种种路径问题，此处强烈建议大家使用\"相对于网站根目录的相对路径\"进行配置。\n     * \"相对于网站根目录的相对路径\"也就是以斜杠开头的形如\"/myProject/ueditor/\"这样的路径。\n     * 如果站点中有多个不在同一层级的页面需要实例化编辑器，且引用了同一UEditor的时候，此处的URL可能不适用于每个页面的编辑器。\n     * 因此，UEditor提供了针对不同页面的编辑器可单独配置的根路径，具体来说，在需要实例化编辑器的页面最顶部写上如下代码即可。当然，需要令此处的URL等于对应的配置。\n     * window.UEDITOR_HOME_URL = \"/xxxx/xxxx/\";\n     */\n    var URL = window.UEDITOR_HOME_URL || getUEBasePath();\n\n    /**\n     * 配置项主体。注意，此处所有涉及到路径的配置别遗漏URL变量。\n     */\n    window.UEDITOR_CONFIG = {\n\n        //为编辑器实例添加一个路径，这个不能被注释\n        UEDITOR_HOME_URL: URL\n\n        // 服务器统一请求接口路径\n        , serverUrl: URL + \"jsp/controller.jsp\"\n\n        //工具栏上的所有的功能按钮和下拉框，可以在new编辑器的实例时选择自己需要的重新定义\n        , toolbars: [[\n            'fullscreen', 'source', '|', 'undo', 'redo', '|',\n            'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|',\n            'rowspacingtop', 'rowspacingbottom', 'lineheight', '|',\n            'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|',\n            'directionalityltr', 'directionalityrtl', 'indent', '|',\n            'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|',\n            'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|',\n            'simpleupload', 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|',\n            'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|',\n            'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|',\n            'print', 'preview', 'searchreplace', 'drafts', 'help'\n        ]]\n        //当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置，否则以配置值为准\n        //,labelMap:{\n        //    'anchor':'', 'undo':''\n        //}\n\n        //语言配置项,默认是zh-cn。有需要的话也可以使用如下这样的方式来自动多语言切换，当然，前提条件是lang文件夹下存在对应的语言文件：\n        //lang值也可以通过自动获取 (navigator.language||navigator.browserLanguage ||navigator.userLanguage).toLowerCase()\n        //,lang:\"zh-cn\"\n        //,langPath:URL +\"lang/\"\n\n        //主题配置项,默认是default。有需要的话也可以使用如下这样的方式来自动多主题切换，当然，前提条件是themes文件夹下存在对应的主题文件：\n        //现有如下皮肤:default\n        //,theme:'default'\n        //,themePath:URL +\"themes/\"\n\n        //,zIndex : 900     //编辑器层级的基数,默认是900\n\n        //针对getAllHtml方法，会在对应的head标签中增加该编码设置。\n        //,charset:\"utf-8\"\n\n        //若实例化编辑器的页面手动修改的domain，此处需要设置为true\n        //,customDomain:false\n\n        //常用配置项目\n        //,isShow : true    //默认显示编辑器\n\n        //,textarea:'editorValue' // 提交表单时，服务器获取编辑器提交内容的所用的参数，多实例时可以给容器name属性，会将name给定的值最为每个实例的键值，不用每次实例化的时候都设置这个值\n\n        //,initialContent:'欢迎使用ueditor!'    //初始化编辑器的内容,也可以通过textarea/script给值，看官网例子\n\n        //,autoClearinitialContent:true //是否自动清除编辑器初始内容，注意：如果focus属性设置为true,这个也为真，那么编辑器一上来就会触发导致初始化的内容看不到了\n\n        //,focus:false //初始化时，是否让编辑器获得焦点true或false\n\n        //如果自定义，最好给p标签如下的行高，要不输入中文时，会有跳动感\n        //,initialStyle:'p{line-height:1em}'//编辑器层级的基数,可以用来改变字体等\n\n        //,iframeCssUrl: URL + '/themes/iframe.css' //给编辑区域的iframe引入一个css文件\n\n        //indentValue\n        //首行缩进距离,默认是2em\n        //,indentValue:'2em'\n\n        //,initialFrameWidth:1000  //初始化编辑器宽度,默认1000\n        //,initialFrameHeight:320  //初始化编辑器高度,默认320\n\n        //,readonly : false //编辑器初始化结束后,编辑区域是否是只读的，默认是false\n\n        //,autoClearEmptyNode : true //getContent时，是否删除空的inlineElement节点（包括嵌套的情况）\n\n        //启用自动保存\n        //,enableAutoSave: true\n        //自动保存间隔时间， 单位ms\n        //,saveInterval: 500\n\n        //,fullscreen : false //是否开启初始化时即全屏，默认关闭\n\n        //,imagePopup:true      //图片操作的浮层开关，默认打开\n\n        //,autoSyncData:true //自动同步编辑器要提交的数据\n        //,emotionLocalization:false //是否开启表情本地化，默认关闭。若要开启请确保emotion文件夹下包含官网提供的images表情文件夹\n\n        //粘贴只保留标签，去除标签所有属性\n        //,retainOnlyLabelPasted: false\n\n        //,pasteplain:false  //是否默认为纯文本粘贴。false为不使用纯文本粘贴，true为使用纯文本粘贴\n        //纯文本粘贴模式下的过滤规则\n        //'filterTxtRules' : function(){\n        //    function transP(node){\n        //        node.tagName = 'p';\n        //        node.setStyle();\n        //    }\n        //    return {\n        //        //直接删除及其字节点内容\n        //        '-' : 'script style object iframe embed input select',\n        //        'p': {$:{}},\n        //        'br':{$:{}},\n        //        'div':{'$':{}},\n        //        'li':{'$':{}},\n        //        'caption':transP,\n        //        'th':transP,\n        //        'tr':transP,\n        //        'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP,\n        //        'td':function(node){\n        //            //没有内容的td直接删掉\n        //            var txt = !!node.innerText();\n        //            if(txt){\n        //                node.parentNode.insertAfter(UE.uNode.createText(' &nbsp; &nbsp;'),node);\n        //            }\n        //            node.parentNode.removeChild(node,node.innerText())\n        //        }\n        //    }\n        //}()\n\n        //,allHtmlEnabled:false //提交到后台的数据是否包含整个html字符串\n\n        //insertorderedlist\n        //有序列表的下拉配置,值留空时支持多语言自动识别，若配置值，则以此值为准\n        //,'insertorderedlist':{\n        //      //自定的样式\n        //        'num':'1,2,3...',\n        //        'num1':'1),2),3)...',\n        //        'num2':'(1),(2),(3)...',\n        //        'cn':'一,二,三....',\n        //        'cn1':'一),二),三)....',\n        //        'cn2':'(一),(二),(三)....',\n        //     //系统自带\n        //     'decimal' : '' ,         //'1,2,3...'\n        //     'lower-alpha' : '' ,    // 'a,b,c...'\n        //     'lower-roman' : '' ,    //'i,ii,iii...'\n        //     'upper-alpha' : '' , lang   //'A,B,C'\n        //     'upper-roman' : ''      //'I,II,III...'\n        //}\n\n        //insertunorderedlist\n        //无序列表的下拉配置，值留空时支持多语言自动识别，若配置值，则以此值为准\n        //,insertunorderedlist : { //自定的样式\n        //    'dash' :'— 破折号', //-破折号\n        //    'dot':' 。 小圆圈', //系统自带\n        //    'circle' : '',  // '○ 小圆圈'\n        //    'disc' : '',    // '● 小圆点'\n        //    'square' : ''   //'■ 小方块'\n        //}\n        //,listDefaultPaddingLeft : '30'//默认的左边缩进的基数倍\n        //,listiconpath : 'http://bs.baidu.com/listicon/'//自定义标号的路径\n        //,maxListLevel : 3 //限制可以tab的级数, 设置-1为不限制\n\n        //,autoTransWordToList:false  //禁止word中粘贴进来的列表自动变成列表标签\n\n        //fontfamily\n        //字体设置 label留空支持多语言自动切换，若配置，则以配置值为准\n        //,'fontfamily':[\n        //    { label:'',name:'songti',val:'宋体,SimSun'},\n        //    { label:'',name:'kaiti',val:'楷体,楷体_GB2312, SimKai'},\n        //    { label:'',name:'yahei',val:'微软雅黑,Microsoft YaHei'},\n        //    { label:'',name:'heiti',val:'黑体, SimHei'},\n        //    { label:'',name:'lishu',val:'隶书, SimLi'},\n        //    { label:'',name:'andaleMono',val:'andale mono'},\n        //    { label:'',name:'arial',val:'arial, helvetica,sans-serif'},\n        //    { label:'',name:'arialBlack',val:'arial black,avant garde'},\n        //    { label:'',name:'comicSansMs',val:'comic sans ms'},\n        //    { label:'',name:'impact',val:'impact,chicago'},\n        //    { label:'',name:'timesNewRoman',val:'times new roman'}\n        //]\n\n        //fontsize\n        //字号\n        //,'fontsize':[10, 11, 12, 14, 16, 18, 20, 24, 36]\n\n        //paragraph\n        //段落格式 值留空时支持多语言自动识别，若配置，则以配置值为准\n        //,'paragraph':{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''}\n\n        //rowspacingtop\n        //段间距 值和显示的名字相同\n        //,'rowspacingtop':['5', '10', '15', '20', '25']\n\n        //rowspacingBottom\n        //段间距 值和显示的名字相同\n        //,'rowspacingbottom':['5', '10', '15', '20', '25']\n\n        //lineheight\n        //行内间距 值和显示的名字相同\n        //,'lineheight':['1', '1.5','1.75','2', '3', '4', '5']\n\n        //customstyle\n        //自定义样式，不支持国际化，此处配置值即可最后显示值\n        //block的元素是依据设置段落的逻辑设置的，inline的元素依据BIU的逻辑设置\n        //尽量使用一些常用的标签\n        //参数说明\n        //tag 使用的标签名字\n        //label 显示的名字也是用来标识不同类型的标识符，注意这个值每个要不同，\n        //style 添加的样式\n        //每一个对象就是一个自定义的样式\n        //,'customstyle':[\n        //    {tag:'h1', name:'tc', label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;'},\n        //    {tag:'h1', name:'tl',label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;margin:0 0 10px 0;'},\n        //    {tag:'span',name:'im', label:'', style:'font-style:italic;font-weight:bold'},\n        //    {tag:'span',name:'hi', label:'', style:'font-style:italic;font-weight:bold;color:rgb(51, 153, 204)'}\n        //]\n\n        //打开右键菜单功能\n        //,enableContextMenu: true\n        //右键菜单的内容，可以参考plugins/contextmenu.js里边的默认菜单的例子，label留空支持国际化，否则以此配置为准\n        //,contextMenu:[\n        //    {\n        //        label:'',       //显示的名称\n        //        cmdName:'selectall',//执行的command命令，当点击这个右键菜单时\n        //        //exec可选，有了exec就会在点击时执行这个function，优先级高于cmdName\n        //        exec:function () {\n        //            //this是当前编辑器的实例\n        //            //this.ui._dialogs['inserttableDialog'].open();\n        //        }\n        //    }\n        //]\n\n        //快捷菜单\n        //,shortcutMenu:[\"fontfamily\", \"fontsize\", \"bold\", \"italic\", \"underline\", \"forecolor\", \"backcolor\", \"insertorderedlist\", \"insertunorderedlist\"]\n\n        //elementPathEnabled\n        //是否启用元素路径，默认是显示\n        //,elementPathEnabled : true\n\n        //wordCount\n        //,wordCount:true          //是否开启字数统计\n        //,maximumWords:10000       //允许的最大字符数\n        //字数统计提示，{#count}代表当前字数，{#leave}代表还可以输入多少字符数,留空支持多语言自动切换，否则按此配置显示\n        //,wordCountMsg:''   //当前已输入 {#count} 个字符，您还可以输入{#leave} 个字符\n        //超出字数限制提示  留空支持多语言自动切换，否则按此配置显示\n        //,wordOverFlowMsg:''    //<span style=\"color:red;\">你输入的字符个数已经超出最大允许值，服务器可能会拒绝保存！</span>\n\n        //tab\n        //点击tab键时移动的距离,tabSize倍数，tabNode什么字符做为单位\n        //,tabSize:4\n        //,tabNode:'&nbsp;'\n\n        //removeFormat\n        //清除格式时可以删除的标签和属性\n        //removeForamtTags标签\n        //,removeFormatTags:'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var'\n        //removeFormatAttributes属性\n        //,removeFormatAttributes:'class,style,lang,width,height,align,hspace,valign'\n\n        //undo\n        //可以最多回退的次数,默认20\n        //,maxUndoCount:20\n        //当输入的字符数超过该值时，保存一次现场\n        //,maxInputCount:1\n\n        //autoHeightEnabled\n        // 是否自动长高,默认true\n        //,autoHeightEnabled:true\n\n        //scaleEnabled\n        //是否可以拉伸长高,默认true(当开启时，自动长高失效)\n        //,scaleEnabled:false\n        //,minFrameWidth:800    //编辑器拖动时最小宽度,默认800\n        //,minFrameHeight:220  //编辑器拖动时最小高度,默认220\n\n        //autoFloatEnabled\n        //是否保持toolbar的位置不动,默认true\n        //,autoFloatEnabled:true\n        //浮动时工具栏距离浏览器顶部的高度，用于某些具有固定头部的页面\n        //,topOffset:30\n        //编辑器底部距离工具栏高度(如果参数大于等于编辑器高度，则设置无效)\n        //,toolbarTopOffset:400\n\n        //设置远程图片是否抓取到本地保存\n        //,catchRemoteImageEnable: true //设置是否抓取远程图片\n\n        //pageBreakTag\n        //分页标识符,默认是_ueditor_page_break_tag_\n        //,pageBreakTag:'_ueditor_page_break_tag_'\n\n        //autotypeset\n        //自动排版参数\n        //,autotypeset: {\n        //    mergeEmptyline: true,           //合并空行\n        //    removeClass: true,              //去掉冗余的class\n        //    removeEmptyline: false,         //去掉空行\n        //    textAlign:\"left\",               //段落的排版方式，可以是 left,right,center,justify 去掉这个属性表示不执行排版\n        //    imageBlockLine: 'center',       //图片的浮动方式，独占一行剧中,左右浮动，默认: center,left,right,none 去掉这个属性表示不执行排版\n        //    pasteFilter: false,             //根据规则过滤没事粘贴进来的内容\n        //    clearFontSize: false,           //去掉所有的内嵌字号，使用编辑器默认的字号\n        //    clearFontFamily: false,         //去掉所有的内嵌字体，使用编辑器默认的字体\n        //    removeEmptyNode: false,         // 去掉空节点\n        //    //可以去掉的标签\n        //    removeTagNames: {标签名字:1},\n        //    indent: false,                  // 行首缩进\n        //    indentValue : '2em',            //行首缩进的大小\n        //    bdc2sb: false,\n        //    tobdc: false\n        //}\n\n        //tableDragable\n        //表格是否可以拖拽\n        //,tableDragable: true\n\n\n\n        //sourceEditor\n        //源码的查看方式,codemirror 是代码高亮，textarea是文本框,默认是codemirror\n        //注意默认codemirror只能在ie8+和非ie中使用\n        //,sourceEditor:\"codemirror\"\n        //如果sourceEditor是codemirror，还用配置一下两个参数\n        //codeMirrorJsUrl js加载的路径，默认是 URL + \"third-party/codemirror/codemirror.js\"\n        //,codeMirrorJsUrl:URL + \"third-party/codemirror/codemirror.js\"\n        //codeMirrorCssUrl css加载的路径，默认是 URL + \"third-party/codemirror/codemirror.css\"\n        //,codeMirrorCssUrl:URL + \"third-party/codemirror/codemirror.css\"\n        //编辑器初始化完成后是否进入源码模式，默认为否。\n        //,sourceEditorFirst:false\n\n        //iframeUrlMap\n        //dialog内容的路径 ～会被替换成URL,垓属性一旦打开，将覆盖所有的dialog的默认路径\n        //,iframeUrlMap:{\n        //    'anchor':'~/dialogs/anchor/anchor.html',\n        //}\n\n        //allowLinkProtocol 允许的链接地址，有这些前缀的链接地址不会自动添加http\n        //, allowLinkProtocols: ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:', 'git:', 'svn:']\n\n        //webAppKey 百度应用的APIkey，每个站长必须首先去百度官网注册一个key后方能正常使用app功能，注册介绍，http://app.baidu.com/static/cms/getapikey.html\n        //, webAppKey: \"\"\n\n        //默认过滤规则相关配置项目\n        //,disabledTableInTable:true  //禁止表格嵌套\n        //,allowDivTransToP:true      //允许进入编辑器的div标签自动变成p标签\n        //,rgb2Hex:true               //默认产出的数据中的color自动从rgb格式变成16进制格式\n\n\t\t// xss 过滤是否开启,inserthtml等操作\n\t\t,xssFilterRules: true\n\t\t//input xss过滤\n\t\t,inputXssFilter: true\n\t\t//output xss过滤\n\t\t,outputXssFilter: true\n\t\t// xss过滤白名单 名单来源: https://raw.githubusercontent.com/leizongmin/js-xss/master/lib/default.js\n\t\t,whitList: {\n\t\t\ta:      ['target', 'href', 'title', 'class', 'style'],\n\t\t\tabbr:   ['title', 'class', 'style'],\n\t\t\taddress: ['class', 'style'],\n\t\t\tarea:   ['shape', 'coords', 'href', 'alt'],\n\t\t\tarticle: [],\n\t\t\taside:  [],\n\t\t\taudio:  ['autoplay', 'controls', 'loop', 'preload', 'src', 'class', 'style'],\n\t\t\tb:      ['class', 'style'],\n\t\t\tbdi:    ['dir'],\n\t\t\tbdo:    ['dir'],\n\t\t\tbig:    [],\n\t\t\tblockquote: ['cite', 'class', 'style'],\n\t\t\tbr:     [],\n\t\t\tcaption: ['class', 'style'],\n\t\t\tcenter: [],\n\t\t\tcite:   [],\n\t\t\tcode:   ['class', 'style'],\n\t\t\tcol:    ['align', 'valign', 'span', 'width', 'class', 'style'],\n\t\t\tcolgroup: ['align', 'valign', 'span', 'width', 'class', 'style'],\n\t\t\tdd:     ['class', 'style'],\n\t\t\tdel:    ['datetime'],\n\t\t\tdetails: ['open'],\n\t\t\tdiv:    ['class', 'style'],\n\t\t\tdl:     ['class', 'style'],\n\t\t\tdt:     ['class', 'style'],\n\t\t\tem:     ['class', 'style'],\n\t\t\tfont:   ['color', 'size', 'face'],\n\t\t\tfooter: [],\n\t\t\th1:     ['class', 'style'],\n\t\t\th2:     ['class', 'style'],\n\t\t\th3:     ['class', 'style'],\n\t\t\th4:     ['class', 'style'],\n\t\t\th5:     ['class', 'style'],\n\t\t\th6:     ['class', 'style'],\n\t\t\theader: [],\n\t\t\thr:     [],\n\t\t\ti:      ['class', 'style'],\n\t\t\timg:    ['src', 'alt', 'title', 'width', 'height', 'id', '_src', 'loadingclass', 'class', 'data-latex'],\n\t\t\tins:    ['datetime'],\n\t\t\tli:     ['class', 'style'],\n\t\t\tmark:   [],\n\t\t\tnav:    [],\n\t\t\tol:     ['class', 'style'],\n\t\t\tp:      ['class', 'style'],\n\t\t\tpre:    ['class', 'style'],\n\t\t\ts:      [],\n\t\t\tsection:[],\n\t\t\tsmall:  [],\n\t\t\tspan:   ['class', 'style'],\n\t\t\tsub:    ['class', 'style'],\n\t\t\tsup:    ['class', 'style'],\n\t\t\tstrong: ['class', 'style'],\n\t\t\ttable:  ['width', 'border', 'align', 'valign', 'class', 'style'],\n\t\t\ttbody:  ['align', 'valign', 'class', 'style'],\n\t\t\ttd:     ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],\n\t\t\ttfoot:  ['align', 'valign', 'class', 'style'],\n\t\t\tth:     ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],\n\t\t\tthead:  ['align', 'valign', 'class', 'style'],\n\t\t\ttr:     ['rowspan', 'align', 'valign', 'class', 'style'],\n\t\t\ttt:     [],\n\t\t\tu:      [],\n\t\t\tul:     ['class', 'style'],\n\t\t\tvideo:  ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width', 'class', 'style']\n\t\t}\n    };\n\n    function getUEBasePath(docUrl, confUrl) {\n\n        return getBasePath(docUrl || self.document.URL || self.location.href, confUrl || getConfigFilePath());\n\n    }\n\n    function getConfigFilePath() {\n\n        var configPath = document.getElementsByTagName('script');\n\n        return configPath[ configPath.length - 1 ].src;\n\n    }\n\n    function getBasePath(docUrl, confUrl) {\n\n        var basePath = confUrl;\n\n\n        if (/^(\\/|\\\\\\\\)/.test(confUrl)) {\n\n            basePath = /^.+?\\w(\\/|\\\\\\\\)/.exec(docUrl)[0] + confUrl.replace(/^(\\/|\\\\\\\\)/, '');\n\n        } else if (!/^[a-z]+:/i.test(confUrl)) {\n\n            docUrl = docUrl.split(\"#\")[0].split(\"?\")[0].replace(/[^\\\\\\/]+$/, '');\n\n            basePath = docUrl + \"\" + confUrl;\n\n        }\n\n        return optimizationPath(basePath);\n\n    }\n\n    function optimizationPath(path) {\n\n        var protocol = /^[a-z]+:\\/\\//.exec(path)[ 0 ],\n            tmp = null,\n            res = [];\n\n        path = path.replace(protocol, \"\").split(\"?\")[0].split(\"#\")[0];\n\n        path = path.replace(/\\\\/g, '/').split(/\\//);\n\n        path[ path.length - 1 ] = \"\";\n\n        while (path.length) {\n\n            if (( tmp = path.shift() ) === \"..\") {\n                res.pop();\n            } else if (tmp !== \".\") {\n                res.push(tmp);\n            }\n\n        }\n\n        return protocol + res.join(\"/\");\n\n    }\n\n    window.UE = {\n        getUEBasePath: getUEBasePath\n    };\n\n})();\n"
  },
  {
    "path": "static/reset.css",
    "content": "html,\nbody,\ndiv,\nspan,\napplet,\nobject,\niframe,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np,\nblockquote,\npre,\na,\nabbr,\nacronym,\naddress,\nbig,\ncite,\ncode,\ndel,\ndfn,\nem,\nimg,\nins,\nkbd,\nq,\ns,\nsamp,\nsmall,\nstrike,\nstrong,\nsub,\nsup,\ntt,\nvar,\nb,\nu,\ni,\ncenter,\ndl,\ndt,\ndd,\nol,\nul,\nli,\nfieldset,\nform,\nlabel,\nlegend,\ntable,\ncaption,\ntbody,\ntfoot,\nthead,\ntr,\nth,\ntd,\narticle,\naside,\ncanvas,\ndetails,\nembed,\nfigure,\nfigcaption,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\noutput,\nruby,\nsection,\nsummary,\ntime,\nmark,\naudio,\nvideo {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  font-size: 100%;\n  font: inherit;\n  vertical-align: baseline;\n}\nol,\nul {\n  list-style: none;\n}\n.clearfix:after {\n  content: \"020\"; \n    display: block; \n    font-size: 0px;\n    line-height: 0px;\n    height: 0; \n    clear: both; \n    visibility: hidden;  \n}\n"
  },
  {
    "path": "test/e2e/custom-assertions/elementCount.js",
    "content": "// A custom Nightwatch assertion.\n// The assertion name is the filename.\n// Example usage:\n//\n//   browser.assert.elementCount(selector, count)\n//\n// For more information on custom assertions see:\n// http://nightwatchjs.org/guide#writing-custom-assertions\n\nexports.assertion = function (selector, count) {\n  this.message = 'Testing if element <' + selector + '> has count: ' + count\n  this.expected = count\n  this.pass = function (val) {\n    return val === this.expected\n  }\n  this.value = function (res) {\n    return res.value\n  }\n  this.command = function (cb) {\n    var self = this\n    return this.api.execute(function (selectorToCount) {\n      return document.querySelectorAll(selectorToCount).length\n    }, [selector], function (res) {\n      cb.call(self, res)\n    })\n  }\n}\n"
  },
  {
    "path": "test/e2e/nightwatch.conf.js",
    "content": "require('babel-register')\nvar config = require('../../config')\n\n// http://nightwatchjs.org/gettingstarted#settings-file\nmodule.exports = {\n  src_folders: ['test/e2e/specs'],\n  output_folder: 'test/e2e/reports',\n  custom_assertions_path: ['test/e2e/custom-assertions'],\n\n  selenium: {\n    start_process: true,\n    server_path: require('selenium-server').path,\n    host: '127.0.0.1',\n    port: 4444,\n    cli_args: {\n      'webdriver.chrome.driver': require('chromedriver').path\n    }\n  },\n\n  test_settings: {\n    default: {\n      selenium_port: 4444,\n      selenium_host: 'localhost',\n      silent: true,\n      globals: {\n        devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)\n      }\n    },\n\n    chrome: {\n      desiredCapabilities: {\n        browserName: 'chrome',\n        javascriptEnabled: true,\n        acceptSslCerts: true\n      }\n    },\n\n    firefox: {\n      desiredCapabilities: {\n        browserName: 'firefox',\n        javascriptEnabled: true,\n        acceptSslCerts: true\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "test/e2e/runner.js",
    "content": "// 1. start the dev server using production config\nprocess.env.NODE_ENV = 'testing'\n\nconst webpack = require('webpack')\nconst DevServer = require('webpack-dev-server')\n\nconst webpackConfig = require('../../build/webpack.prod.conf')\nconst devConfigPromise = require('../../build/webpack.dev.conf')\n\nlet server\n\ndevConfigPromise.then(devConfig => {\n  const devServerOptions = devConfig.devServer\n  const compiler = webpack(webpackConfig)\n  server = new DevServer(compiler, devServerOptions)\n  const port = devServerOptions.port\n  const host = devServerOptions.host\n  return server.listen(port, host)\n})\n.then(() => {\n  // 2. run the nightwatch test suite against it\n  // to run in additional browsers:\n  //    1. add an entry in test/e2e/nightwatch.conf.json under \"test_settings\"\n  //    2. add it to the --env flag below\n  // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`\n  // For more information on Nightwatch's config file, see\n  // http://nightwatchjs.org/guide#settings-file\n  let opts = process.argv.slice(2)\n  if (opts.indexOf('--config') === -1) {\n    opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js'])\n  }\n  if (opts.indexOf('--env') === -1) {\n    opts = opts.concat(['--env', 'chrome'])\n  }\n\n  const spawn = require('cross-spawn')\n  const runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' })\n\n  runner.on('exit', function (code) {\n    server.close()\n    process.exit(code)\n  })\n\n  runner.on('error', function (err) {\n    server.close()\n    throw err\n  })\n})\n"
  },
  {
    "path": "test/e2e/specs/test.js",
    "content": "// For authoring Nightwatch tests, see\n// http://nightwatchjs.org/guide#usage\n\nmodule.exports = {\n  'default e2e tests': function (browser) {\n    // automatically uses dev Server port from /config.index.js\n    // default: http://localhost:8080\n    // see nightwatch.conf.js\n    const devServer = browser.globals.devServerURL\n\n    browser\n      .url(devServer)\n      .waitForElementVisible('#app', 5000)\n      .assert.elementPresent('.hello')\n      .assert.containsText('h1', 'Welcome to Your Vue.js App')\n      .assert.elementCount('img', 1)\n      .end()\n  }\n}\n"
  },
  {
    "path": "test/unit/.eslintrc",
    "content": "{\n  \"env\": { \n    \"jest\": true\n  },\n  \"globals\": { \n  }\n}\n"
  },
  {
    "path": "test/unit/jest.conf.js",
    "content": "const path = require('path')\n\nmodule.exports = {\n  rootDir: path.resolve(__dirname, '../../'),\n  moduleFileExtensions: [\n    'js',\n    'json',\n    'vue'\n  ],\n  moduleNameMapper: {\n    '^@/(.*)$': '<rootDir>/src/$1'\n  },\n  transform: {\n    '^.+\\\\.js$': '<rootDir>/node_modules/babel-jest',\n    '.*\\\\.(vue)$': '<rootDir>/node_modules/vue-jest'\n  },\n  testPathIgnorePatterns: [\n    '<rootDir>/test/e2e'\n  ],\n  snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'],\n  setupFiles: ['<rootDir>/test/unit/setup'],\n  mapCoverage: true,\n  coverageDirectory: '<rootDir>/test/unit/coverage',\n  collectCoverageFrom: [\n    'src/**/*.{js,vue}',\n    '!src/main.js',\n    '!src/router/index.js',\n    '!**/node_modules/**'\n  ]\n}\n"
  },
  {
    "path": "test/unit/setup.js",
    "content": "import Vue from 'vue'\n\nVue.config.productionTip = false\n"
  },
  {
    "path": "test/unit/specs/HelloWorld.spec.js",
    "content": "import Vue from 'vue'\nimport HelloWorld from '@/components/HelloWorld'\n\ndescribe('HelloWorld.vue', () => {\n  it('should render correct contents', () => {\n    const Constructor = Vue.extend(HelloWorld)\n    const vm = new Constructor().$mount()\n    expect(vm.$el.querySelector('.hello h1').textContent)\n    .toEqual('Welcome to Your Vue.js App')\n  })\n})\n"
  }
]