diff --git a/.workbuddy/memory/2026-07-31.md b/.workbuddy/memory/2026-07-31.md index 70111d0..4aae7a3 100644 --- a/.workbuddy/memory/2026-07-31.md +++ b/.workbuddy/memory/2026-07-31.md @@ -65,3 +65,19 @@ - **原因**: cargo-type 用自定义 `#menu` 模板默认左对齐;其他页面用 Avue 内置菜单(viewBtn:true)默认右对齐 - **改动**: 新增 `.avue-crud .el-table td .cell.avue-crud__menu { text-align: left }` - **效果**: 全站操作列统一左对齐 + +## 顶部工具栏工具全部隐藏 + +- **文件**: `src/config/website.js` + `src/page/index/top/index.vue` +- **改动**: ① website.js `setting` 新增/关闭 `theme:false`、`debug:false`、`lang:false`、`settingBtn:false`(原 theme/debug 仍为 true);② index.vue 给 `` 加 `v-if="setting.lang"`、`` 加 `v-if="setting.settingBtn"` +- **效果**: 顶部工具排仅保留用户头像+姓名下拉(含退出登录);语言切换/设置齿轮/日志/皮肤图标均隐藏 +- **默认主题**: `src/store/modules/common.js` 第 21 行 `themeName` 默认改为 `theme-d2`(已登录用户若 localStorage 存过旧主题需手动切一次或清存储) + +## 欢迎页(/wel/index)重设计为 TMS-ERP 业务仪表盘 + +- **文件**: `src/views/wel/index.vue`(整文件重写,移除 Saber 默认营销内容) +- **设计**: 浅色 d2 主题风,纯 SVG/CSS 自绘图表(项目无 echarts,零依赖) +- **模块**: ① 问候横幅(用户名+日期+新建运单按钮) ② 4 张核心指标卡(今日运单/在途运输/待办事项/运力车辆,含环比) ③ 运单趋势(SVG柱状,近7日) ④ 货物类型分布(SVG环形donut) ⑤ 运输方式占比(横向条) ⑥ 预警提醒列表 ⑦ 快捷入口网格(跳真实路由) +- **数据**: 全 mock,data() 中每项标注对应后端接口(如 /blade-business/waybill/count、/trend、/cargoStat 等),后续替换真实接口即可 +- **预览**: `npm run build` 通过;dev server `http://localhost:2889/` +- **注意**: 快捷入口 path 依据 views 目录结构推断(/business/waybill-manage 等),需与后端菜单 path 一致才能跳转 diff --git a/public/img/bg/img-logo.jpg b/public/img/bg/img-logo.jpg new file mode 100644 index 0000000..f696429 Binary files /dev/null and b/public/img/bg/img-logo.jpg differ diff --git a/src/config/website.js b/src/config/website.js index ac5bb96..5172e82 100644 --- a/src/config/website.js +++ b/src/config/website.js @@ -24,14 +24,16 @@ export default { setting: { sidebar: 'vertical', tag: true, - debug: true, + debug: false, collapse: true, - search: true, - color: true, - lock: true, + search: false, + color: false, + lock: false, screenshot: true, - fullscreen: true, + fullscreen: false, theme: true, + lang: false, + settingBtn: false, menu: true, }, //首页配置 diff --git a/src/option/vehicle/mileage-record.js b/src/option/vehicle/mileage-record.js index 280b0c6..6b6480d 100644 --- a/src/option/vehicle/mileage-record.js +++ b/src/option/vehicle/mileage-record.js @@ -47,6 +47,7 @@ export const option = { dicData: vehicleTypeDic, value: '车辆', search: true, + searchSpan: 6, minWidth: 110, rules: [{ required: true, message: '请选择车船类型', trigger: 'change' }], }, @@ -56,6 +57,7 @@ export const option = { slot: true, formslot: true, search: true, + searchSpan: 6, minWidth: 130, rules: [ { required: true, message: '请输入车牌号/船号', trigger: 'blur' }, @@ -175,6 +177,7 @@ export const option = { valueFormat: 'YYYY-MM-DD', searchRange: true, search: true, + searchSpan: 6, hide: true, addDisplay: false, editDisplay: false, @@ -191,6 +194,7 @@ export const option = { }, checkStrictly: true, search: true, + searchSpan: 6, hide: true, addDisplay: false, editDisplay: false, diff --git a/src/page/index/top/index.vue b/src/page/index/top/index.vue index 4deeb59..4e648c0 100644 --- a/src/page/index/top/index.vue +++ b/src/page/index/top/index.vue @@ -23,7 +23,7 @@
-
+
@@ -43,12 +43,12 @@ - + diff --git a/src/store/modules/common.js b/src/store/modules/common.js index a7f5260..440403f 100644 --- a/src/store/modules/common.js +++ b/src/store/modules/common.js @@ -18,7 +18,7 @@ const common = { !storedColorName || LEGACY_PRIMARY_COLORS.includes(String(storedColorName).toUpperCase()) ? DEFAULT_PRIMARY_COLOR : storedColorName, - themeName: getStore({ name: 'themeName' }) || 'theme-go', + themeName: getStore({ name: 'themeName' }) || 'theme-d2', lockPasswd: getStore({ name: 'lockPasswd' }) || '', website: website, setting: website.setting, diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 32a9e22..af59f5a 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -308,7 +308,7 @@ const user = { state.userInfo = { user_name: 'unauth', role_name: 'unauth', authority: 'unauth' }; } else { if (validatenull(userInfo.avatar)) { - userInfo.avatar = '/img/bg/img-logo.png'; + userInfo.avatar = '/img/bg/img-logo.jpg'; } if (!validatenull(userInfo.role_name)) { userInfo.roleName = userInfo.role_name; diff --git a/src/views/wel/index.vue b/src/views/wel/index.vue index 41af1ec..0234db7 100644 --- a/src/views/wel/index.vue +++ b/src/views/wel/index.vue @@ -1,1524 +1,680 @@ - diff --git a/vite.config.mjs.timestamp-1785495818605-52cd260a8753.mjs b/vite.config.mjs.timestamp-1785495818605-52cd260a8753.mjs new file mode 100644 index 0000000..5feb79e --- /dev/null +++ b/vite.config.mjs.timestamp-1785495818605-52cd260a8753.mjs @@ -0,0 +1,147 @@ +// vite.config.mjs +import { + defineConfig, + loadEnv +} from "file:///Users/gxwebsoft/VUE/tms-erp-web-ws/node_modules/.pnpm/vite@5.4.21_sass@1.99.0_terser@5.46.2/node_modules/vite/dist/node/index.js"; +import { resolve } from "path"; + +// vite/plugins/index.js +import vue from "file:///Users/gxwebsoft/VUE/tms-erp-web-ws/node_modules/.pnpm/@vitejs+plugin-vue@5.2.4_vite@5.4.21_sass@1.99.0_terser@5.46.2__vue@3.5.34/node_modules/@vitejs/plugin-vue/dist/index.mjs"; + +// vite/plugins/auto-import.js +import autoImport from "file:///Users/gxwebsoft/VUE/tms-erp-web-ws/node_modules/.pnpm/unplugin-auto-import@0.11.5_@vueuse+core@14.3.0_vue@3.5.34__rollup@4.60.3/node_modules/unplugin-auto-import/dist/vite.js"; +function createAutoImport() { + return autoImport({ + imports: ["vue", "vue-router", "vuex"], + dts: false + }); +} + +// vite/plugins/compression.js +import compression from "file:///Users/gxwebsoft/VUE/tms-erp-web-ws/node_modules/.pnpm/vite-plugin-compression@0.5.1_vite@5.4.21_sass@1.99.0_terser@5.46.2_/node_modules/vite-plugin-compression/dist/index.mjs"; +function createCompression(env) { + const { VITE_BUILD_COMPRESS } = env; + const plugin = []; + if (VITE_BUILD_COMPRESS) { + const compressList = VITE_BUILD_COMPRESS.split(","); + if (compressList.includes("gzip")) { + plugin.push( + compression({ + ext: ".gz", + deleteOriginFile: false + }) + ); + } + if (compressList.includes("brotli")) { + plugin.push( + compression({ + ext: ".br", + algorithm: "brotliCompress", + deleteOriginFile: false + }) + ); + } + } + return plugin; +} + +// vite/plugins/setup-extend.js +import setupExtend from "file:///Users/gxwebsoft/VUE/tms-erp-web-ws/node_modules/.pnpm/vite-plugin-vue-setup-extend@0.4.0_vite@5.4.21_sass@1.99.0_terser@5.46.2_/node_modules/vite-plugin-vue-setup-extend/dist/index.mjs"; +function createSetupExtend() { + return setupExtend(); +} + +// vite/plugins/index.js +function createVitePlugins(viteEnv, isBuild = false) { + const vitePlugins = [vue()]; + vitePlugins.push(createAutoImport()); + vitePlugins.push(createSetupExtend()); + isBuild && vitePlugins.push(...createCompression(viteEnv)); + return vitePlugins; +} + +// vite.config.mjs +var __vite_injected_original_dirname = "/Users/gxwebsoft/VUE/tms-erp-web-ws"; +var vite_config_default = ({ + mode, + command +}) => { + const env = loadEnv(mode, process.cwd()); + const { + VITE_APP_ENV, + VITE_APP_BASE + } = env; + const isProd = VITE_APP_ENV === "production"; + const buildConfig = { + target: "esnext", + minify: isProd ? "terser" : "esbuild" + // 根据环境选择压缩工具 + }; + if (isProd) { + buildConfig.terserOptions = { + compress: { + drop_console: true, + // 删除 console + drop_debugger: true + // 删除 debugger + }, + format: { + comments: false + // 删除所有注释 + } + }; + buildConfig.rollupOptions = { + output: { + manualChunks: { + "element-plus": ["element-plus"], + "@smallwei/avue": ["@smallwei/avue"] + } + } + }; + } + return defineConfig({ + base: VITE_APP_BASE, + define: { + __VUE_I18N_FULL_INSTALL__: true, + __VUE_I18N_LEGACY_API__: true, + __INTLIFY_PROD_DEVTOOLS__: false + }, + server: { + port: 2888, + proxy: { + "/api": { + target: "http://172.16.203.228:8000", + changeOrigin: true + } + } + }, + resolve: { + alias: { + "~": resolve(__vite_injected_original_dirname, "./"), + "@": resolve(__vite_injected_original_dirname, "./src"), + components: resolve(__vite_injected_original_dirname, "./src/components"), + styles: resolve(__vite_injected_original_dirname, "./src/styles"), + utils: resolve(__vite_injected_original_dirname, "./src/utils") + } + }, + css: { + preprocessorOptions: { + scss: { + api: "modern-compiler", + additionalData: `@use "@/styles/variables.scss" as *;` + } + } + }, + plugins: createVitePlugins(env, command === "build"), + build: buildConfig, + optimizeDeps: { + esbuildOptions: { + target: "esnext" + } + } + }); +}; +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcubWpzIiwgInZpdGUvcGx1Z2lucy9pbmRleC5qcyIsICJ2aXRlL3BsdWdpbnMvYXV0by1pbXBvcnQuanMiLCAidml0ZS9wbHVnaW5zL2NvbXByZXNzaW9uLmpzIiwgInZpdGUvcGx1Z2lucy9zZXR1cC1leHRlbmQuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvZ3h3ZWJzb2Z0L1ZVRS90bXMtZXJwLXdlYi13c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL2d4d2Vic29mdC9WVUUvdG1zLWVycC13ZWItd3Mvdml0ZS5jb25maWcubWpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9neHdlYnNvZnQvVlVFL3Rtcy1lcnAtd2ViLXdzL3ZpdGUuY29uZmlnLm1qc1wiO2ltcG9ydCB7XG4gIGRlZmluZUNvbmZpZyxcbiAgbG9hZEVudlxufSBmcm9tICd2aXRlJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJ1xuaW1wb3J0IGNyZWF0ZVZpdGVQbHVnaW5zIGZyb20gJy4vdml0ZS9wbHVnaW5zJztcbi8vIGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXG5leHBvcnQgZGVmYXVsdCAoe1xuICBtb2RlLFxuICBjb21tYW5kXG59KSA9PiB7XG4gIGNvbnN0IGVudiA9IGxvYWRFbnYobW9kZSwgcHJvY2Vzcy5jd2QoKSlcbiAgY29uc3Qge1xuICAgIFZJVEVfQVBQX0VOVixcbiAgICBWSVRFX0FQUF9CQVNFXG4gIH0gPSBlbnZcbiAgLy8gXHU1MjI0XHU2NUFEXHU2NjJGXHU2MjUzXHU3NTFGXHU0RUE3XHU3M0FGXHU1ODgzXHU1MzA1XG4gIGNvbnN0IGlzUHJvZCA9IFZJVEVfQVBQX0VOViA9PT0gJ3Byb2R1Y3Rpb24nXG5cbiAgLy8gXHU2ODM5XHU2MzZFXHU2NjJGXHU1NDI2XHU3NTFGXHU0RUE3XHU3M0FGXHU1ODgzXHVGRjBDXHU1MkE4XHU2MDAxXHU4QkJFXHU3RjZFXHU1MzhCXHU3RjI5XHU5MTREXHU3RjZFXG4gIGNvbnN0IGJ1aWxkQ29uZmlnID0ge1xuICAgIHRhcmdldDogJ2VzbmV4dCcsXG4gICAgbWluaWZ5OiBpc1Byb2QgPyAndGVyc2VyJyA6ICdlc2J1aWxkJywgLy8gXHU2ODM5XHU2MzZFXHU3M0FGXHU1ODgzXHU5MDA5XHU2MkU5XHU1MzhCXHU3RjI5XHU1REU1XHU1MTc3XG4gIH07XG5cbiAgLy8gXHU1OTgyXHU2NzlDXHU2NjJGXHU3NTFGXHU0RUE3XHU3M0FGXHU1ODgzXHVGRjBDXHU2REZCXHU1MkEwVGVyc2VyXHU3Njg0XHU5MTREXHU3RjZFXG4gIGlmIChpc1Byb2QpIHtcbiAgICBidWlsZENvbmZpZy50ZXJzZXJPcHRpb25zID0ge1xuICAgICAgY29tcHJlc3M6IHtcbiAgICAgICAgZHJvcF9jb25zb2xlOiB0cnVlLCAvLyBcdTUyMjBcdTk2NjQgY29uc29sZVxuICAgICAgICBkcm9wX2RlYnVnZ2VyOiB0cnVlLCAvLyBcdTUyMjBcdTk2NjQgZGVidWdnZXJcbiAgICAgIH0sXG4gICAgICBmb3JtYXQ6IHtcbiAgICAgICAgY29tbWVudHM6IGZhbHNlIC8vIFx1NTIyMFx1OTY2NFx1NjI0MFx1NjcwOVx1NkNFOFx1OTFDQVxuICAgICAgfVxuICAgIH07XG4gICAgYnVpbGRDb25maWcucm9sbHVwT3B0aW9ucyA9IHtcbiAgICAgIG91dHB1dDoge1xuICAgICAgICBtYW51YWxDaHVua3M6IHtcbiAgICAgICAgICAnZWxlbWVudC1wbHVzJzogWydlbGVtZW50LXBsdXMnXSxcbiAgICAgICAgICAnQHNtYWxsd2VpL2F2dWUnOiBbJ0BzbWFsbHdlaS9hdnVlJ11cbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyh7XG4gICAgYmFzZTogVklURV9BUFBfQkFTRSxcbiAgICBkZWZpbmU6IHtcbiAgICAgIF9fVlVFX0kxOE5fRlVMTF9JTlNUQUxMX186IHRydWUsXG4gICAgICBfX1ZVRV9JMThOX0xFR0FDWV9BUElfXzogdHJ1ZSxcbiAgICAgIF9fSU5UTElGWV9QUk9EX0RFVlRPT0xTX186IGZhbHNlXG4gICAgfSxcbiAgICBzZXJ2ZXI6IHtcbiAgICAgIHBvcnQ6IDI4ODgsXG4gICAgICBwcm94eToge1xuICAgICAgICAnL2FwaSc6IHtcbiAgICAgICAgICB0YXJnZXQ6ICdodHRwOi8vMTcyLjE2LjIwMy4yMjg6ODAwMCcsXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHJlc29sdmU6IHtcbiAgICAgIGFsaWFzOiB7XG4gICAgICAgICd+JzogcmVzb2x2ZShfX2Rpcm5hbWUsICcuLycpLFxuICAgICAgICAnQCc6IHJlc29sdmUoX19kaXJuYW1lLCAnLi9zcmMnKSxcbiAgICAgICAgY29tcG9uZW50czogcmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYy9jb21wb25lbnRzJyksXG4gICAgICAgIHN0eWxlczogcmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYy9zdHlsZXMnKSxcbiAgICAgICAgdXRpbHM6IHJlc29sdmUoX19kaXJuYW1lLCAnLi9zcmMvdXRpbHMnKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjc3M6IHtcbiAgICAgIHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcbiAgICAgICAgc2Nzczoge1xuICAgICAgICAgIGFwaTogJ21vZGVybi1jb21waWxlcicsXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBAdXNlIFwiQC9zdHlsZXMvdmFyaWFibGVzLnNjc3NcIiBhcyAqO2AsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgcGx1Z2luczogY3JlYXRlVml0ZVBsdWdpbnMoZW52LCBjb21tYW5kID09PSAnYnVpbGQnKSxcbiAgICBidWlsZDogYnVpbGRDb25maWcsXG4gICAgb3B0aW1pemVEZXBzOiB7XG4gICAgICBlc2J1aWxkT3B0aW9uczoge1xuICAgICAgICB0YXJnZXQ6ICdlc25leHQnLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn07XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9neHdlYnNvZnQvVlVFL3Rtcy1lcnAtd2ViLXdzL3ZpdGUvcGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL2d4d2Vic29mdC9WVUUvdG1zLWVycC13ZWItd3Mvdml0ZS9wbHVnaW5zL2luZGV4LmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9neHdlYnNvZnQvVlVFL3Rtcy1lcnAtd2ViLXdzL3ZpdGUvcGx1Z2lucy9pbmRleC5qc1wiO2ltcG9ydCB2dWUgZnJvbSAnQHZpdGVqcy9wbHVnaW4tdnVlJztcblxuaW1wb3J0IGNyZWF0ZUF1dG9JbXBvcnQgZnJvbSAnLi9hdXRvLWltcG9ydCc7XG5pbXBvcnQgY3JlYXRlQ29tcHJlc3Npb24gZnJvbSAnLi9jb21wcmVzc2lvbic7XG5pbXBvcnQgY3JlYXRlU2V0dXBFeHRlbmQgZnJvbSAnLi9zZXR1cC1leHRlbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVWaXRlUGx1Z2lucyh2aXRlRW52LCBpc0J1aWxkID0gZmFsc2UpIHtcbiAgY29uc3Qgdml0ZVBsdWdpbnMgPSBbdnVlKCldO1xuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUF1dG9JbXBvcnQoKSk7XG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlU2V0dXBFeHRlbmQoKSk7XG4gIGlzQnVpbGQgJiYgdml0ZVBsdWdpbnMucHVzaCguLi5jcmVhdGVDb21wcmVzc2lvbih2aXRlRW52KSk7XG4gIHJldHVybiB2aXRlUGx1Z2lucztcbn0iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9neHdlYnNvZnQvVlVFL3Rtcy1lcnAtd2ViLXdzL3ZpdGUvcGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL2d4d2Vic29mdC9WVUUvdG1zLWVycC13ZWItd3Mvdml0ZS9wbHVnaW5zL2F1dG8taW1wb3J0LmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9neHdlYnNvZnQvVlVFL3Rtcy1lcnAtd2ViLXdzL3ZpdGUvcGx1Z2lucy9hdXRvLWltcG9ydC5qc1wiO2ltcG9ydCBhdXRvSW1wb3J0IGZyb20gJ3VucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVBdXRvSW1wb3J0KCkge1xuICByZXR1cm4gYXV0b0ltcG9ydCh7XG4gICAgaW1wb3J0czogWyd2dWUnLCAndnVlLXJvdXRlcicsICd2dWV4J10sXG4gICAgZHRzOiBmYWxzZSxcbiAgfSk7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9neHdlYnNvZnQvVlVFL3Rtcy1lcnAtd2ViLXdzL3ZpdGUvcGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL2d4d2Vic29mdC9WVUUvdG1zLWVycC13ZWItd3Mvdml0ZS9wbHVnaW5zL2NvbXByZXNzaW9uLmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9neHdlYnNvZnQvVlVFL3Rtcy1lcnAtd2ViLXdzL3ZpdGUvcGx1Z2lucy9jb21wcmVzc2lvbi5qc1wiO2ltcG9ydCBjb21wcmVzc2lvbiBmcm9tICd2aXRlLXBsdWdpbi1jb21wcmVzc2lvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUNvbXByZXNzaW9uKGVudikge1xuICBjb25zdCB7IFZJVEVfQlVJTERfQ09NUFJFU1MgfSA9IGVudjtcbiAgY29uc3QgcGx1Z2luID0gW107XG4gIGlmIChWSVRFX0JVSUxEX0NPTVBSRVNTKSB7XG4gICAgY29uc3QgY29tcHJlc3NMaXN0ID0gVklURV9CVUlMRF9DT01QUkVTUy5zcGxpdCgnLCcpO1xuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoJ2d6aXAnKSkge1xuICAgICAgcGx1Z2luLnB1c2goXG4gICAgICAgIGNvbXByZXNzaW9uKHtcbiAgICAgICAgICBleHQ6ICcuZ3onLFxuICAgICAgICAgIGRlbGV0ZU9yaWdpbkZpbGU6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcygnYnJvdGxpJykpIHtcbiAgICAgIHBsdWdpbi5wdXNoKFxuICAgICAgICBjb21wcmVzc2lvbih7XG4gICAgICAgICAgZXh0OiAnLmJyJyxcbiAgICAgICAgICBhbGdvcml0aG06ICdicm90bGlDb21wcmVzcycsXG4gICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGx1Z2luO1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvZ3h3ZWJzb2Z0L1ZVRS90bXMtZXJwLXdlYi13cy92aXRlL3BsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9neHdlYnNvZnQvVlVFL3Rtcy1lcnAtd2ViLXdzL3ZpdGUvcGx1Z2lucy9zZXR1cC1leHRlbmQuanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL2d4d2Vic29mdC9WVUUvdG1zLWVycC13ZWItd3Mvdml0ZS9wbHVnaW5zL3NldHVwLWV4dGVuZC5qc1wiO2ltcG9ydCBzZXR1cEV4dGVuZCBmcm9tICd2aXRlLXBsdWdpbi12dWUtc2V0dXAtZXh0ZW5kJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU2V0dXBFeHRlbmQoKSB7XG4gIHJldHVybiBzZXR1cEV4dGVuZCgpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUE2UjtBQUFBLEVBQzNSO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGVBQWU7OztBQ0o4UixPQUFPLFNBQVM7OztBQ0FKLE9BQU8sZ0JBQWdCO0FBRTFVLFNBQVIsbUJBQW9DO0FBQ3pDLFNBQU8sV0FBVztBQUFBLElBQ2hCLFNBQVMsQ0FBQyxPQUFPLGNBQWMsTUFBTTtBQUFBLElBQ3JDLEtBQUs7QUFBQSxFQUNQLENBQUM7QUFDSDs7O0FDUGtVLE9BQU8saUJBQWlCO0FBRTNVLFNBQVIsa0JBQW1DLEtBQUs7QUFDN0MsUUFBTSxFQUFFLG9CQUFvQixJQUFJO0FBQ2hDLFFBQU0sU0FBUyxDQUFDO0FBQ2hCLE1BQUkscUJBQXFCO0FBQ3ZCLFVBQU0sZUFBZSxvQkFBb0IsTUFBTSxHQUFHO0FBQ2xELFFBQUksYUFBYSxTQUFTLE1BQU0sR0FBRztBQUNqQyxhQUFPO0FBQUEsUUFDTCxZQUFZO0FBQUEsVUFDVixLQUFLO0FBQUEsVUFDTCxrQkFBa0I7QUFBQSxRQUNwQixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFDQSxRQUFJLGFBQWEsU0FBUyxRQUFRLEdBQUc7QUFDbkMsYUFBTztBQUFBLFFBQ0wsWUFBWTtBQUFBLFVBQ1YsS0FBSztBQUFBLFVBQ0wsV0FBVztBQUFBLFVBQ1gsa0JBQWtCO0FBQUEsUUFDcEIsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDs7O0FDMUJvVSxPQUFPLGlCQUFpQjtBQUU3VSxTQUFSLG9CQUFxQztBQUMxQyxTQUFPLFlBQVk7QUFDckI7OztBSEVlLFNBQVIsa0JBQW1DLFNBQVMsVUFBVSxPQUFPO0FBQ2xFLFFBQU0sY0FBYyxDQUFDLElBQUksQ0FBQztBQUMxQixjQUFZLEtBQUssaUJBQWlCLENBQUM7QUFDbkMsY0FBWSxLQUFLLGtCQUFrQixDQUFDO0FBQ3BDLGFBQVcsWUFBWSxLQUFLLEdBQUcsa0JBQWtCLE9BQU8sQ0FBQztBQUN6RCxTQUFPO0FBQ1Q7OztBRFpBLElBQU0sbUNBQW1DO0FBT3pDLElBQU8sc0JBQVEsQ0FBQztBQUFBLEVBQ2Q7QUFBQSxFQUNBO0FBQ0YsTUFBTTtBQUNKLFFBQU0sTUFBTSxRQUFRLE1BQU0sUUFBUSxJQUFJLENBQUM7QUFDdkMsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBRUosUUFBTSxTQUFTLGlCQUFpQjtBQUdoQyxRQUFNLGNBQWM7QUFBQSxJQUNsQixRQUFRO0FBQUEsSUFDUixRQUFRLFNBQVMsV0FBVztBQUFBO0FBQUEsRUFDOUI7QUFHQSxNQUFJLFFBQVE7QUFDVixnQkFBWSxnQkFBZ0I7QUFBQSxNQUMxQixVQUFVO0FBQUEsUUFDUixjQUFjO0FBQUE7QUFBQSxRQUNkLGVBQWU7QUFBQTtBQUFBLE1BQ2pCO0FBQUEsTUFDQSxRQUFRO0FBQUEsUUFDTixVQUFVO0FBQUE7QUFBQSxNQUNaO0FBQUEsSUFDRjtBQUNBLGdCQUFZLGdCQUFnQjtBQUFBLE1BQzFCLFFBQVE7QUFBQSxRQUNOLGNBQWM7QUFBQSxVQUNaLGdCQUFnQixDQUFDLGNBQWM7QUFBQSxVQUMvQixrQkFBa0IsQ0FBQyxnQkFBZ0I7QUFBQSxRQUNyQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sYUFBYTtBQUFBLElBQ2xCLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxNQUNOLDJCQUEyQjtBQUFBLE1BQzNCLHlCQUF5QjtBQUFBLE1BQ3pCLDJCQUEyQjtBQUFBLElBQzdCO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsUUFDTCxRQUFRO0FBQUEsVUFDTixRQUFRO0FBQUEsVUFDUixjQUFjO0FBQUEsUUFDaEI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ1AsT0FBTztBQUFBLFFBQ0wsS0FBSyxRQUFRLGtDQUFXLElBQUk7QUFBQSxRQUM1QixLQUFLLFFBQVEsa0NBQVcsT0FBTztBQUFBLFFBQy9CLFlBQVksUUFBUSxrQ0FBVyxrQkFBa0I7QUFBQSxRQUNqRCxRQUFRLFFBQVEsa0NBQVcsY0FBYztBQUFBLFFBQ3pDLE9BQU8sUUFBUSxrQ0FBVyxhQUFhO0FBQUEsTUFDekM7QUFBQSxJQUNGO0FBQUEsSUFDQSxLQUFLO0FBQUEsTUFDSCxxQkFBcUI7QUFBQSxRQUNuQixNQUFNO0FBQUEsVUFDSixLQUFLO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxTQUFTLGtCQUFrQixLQUFLLFlBQVksT0FBTztBQUFBLElBQ25ELE9BQU87QUFBQSxJQUNQLGNBQWM7QUFBQSxNQUNaLGdCQUFnQjtBQUFBLFFBQ2QsUUFBUTtBQUFBLE1BQ1Y7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==