// vite.config.ts import { loadEnv } from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/vite@5.1.3_@types+node@17.0.45_less@4.1.3_sass@1.53.0/node_modules/vite/dist/node/index.js"; import path, { resolve } from "path"; // build/utils.ts import dotenv from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/dotenv@16.0.1/node_modules/dotenv/lib/main.js"; function isReportMode() { return process.env.REPORT === "true"; } function wrapperEnv(envConf) { const ret = {}; for (const envName of Object.keys(envConf)) { let realName = envConf[envName].replace(/\\n/g, "\n"); realName = realName === "true" ? true : realName === "false" ? false : realName; if (envName === "VITE_PORT") { realName = Number(realName); } if (envName === "VITE_PROXY") { try { realName = JSON.parse(realName); } catch (error) { } } ret[envName] = realName; process.env[envName] = realName; } return ret; } // build/vite/plugin/index.ts import vue from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/@vitejs+plugin-vue@2.3.3_vite@5.1.3_vue@3.3.4/node_modules/@vitejs/plugin-vue/dist/index.js"; import vueJsx from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/@vitejs+plugin-vue-jsx@1.3.10/node_modules/@vitejs/plugin-vue-jsx/index.js"; import VueSetupExtend from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/vite-plugin-vue-setup-extend@0.4.0_vite@5.1.3/node_modules/vite-plugin-vue-setup-extend/dist/index.mjs"; // build/vite/plugin/html.ts import { createHtmlPlugin } from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/vite-plugin-html@3.2.2_vite@5.1.3/node_modules/vite-plugin-html/dist/index.mjs"; // package.json var package_default = { name: "skyeye-admin-fe", version: "1.3.9", private: true, type: "module", scripts: { bootstrap: "pnpm install", serve: "pnpm run dev", dev: "vite", createConfig: "esno ./build/script/postBuild.ts", build: "cross-env NODE_ENV=production vite build", "build:test": "cross-env vite build --mode test && esno ./build/script/postBuild.ts", "build:no-cache": "pnpm clean:cache && pnpm run build", report: "cross-env REPORT=true pnpm run build", "type:check": "vue-tsc --noEmit --skipLibCheck", preview: "pnpm run build && vite preview", "preview:dist": "vite preview", "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite", "clean:lib": "rimraf node_modules", "lint:eslint": 'eslint "{src,mock}/**/*.{vue,ts,tsx}" --fix', "lint:prettier": 'prettier --write --loglevel warn "src/**/*.{js,json,tsx,css,less,scss,vue,html,md}"', "lint:stylelint": 'stylelint --fix "**/*.{vue,less,postcss,css,scss}" --cache --cache-location node_modules/.cache/stylelint/', "lint:lint-staged": "lint-staged -c ./.husky/lintstagedrc.js", "lint:pretty": "pretty-quick --staged", "test prod gzip": "http-server dist --cors --gzip -c-1", reinstall: "rimraf pnpm-lock.yaml && rimraf package.lock.json && rimraf node_modules && pnpm run bootstrap", "build typecheck": "vuedx-typecheck . && vite build", deploy: "gh-pages -d dist", publish: "esno ./build/publish/publish.ts" }, dependencies: { "@element-plus/icons-vue": "2.0.9", "@types/fabric": "5.3.6", "@vicons/antd": "0.12.0", "@vicons/ionicons5": "0.12.0", "@vueup/vue-quill": "1.0.0-beta.8", "@vueuse/core": "8.9.4", "@vueuse/router": "10.6.1", "@wangeditor/editor": "5.1.23", "@wangeditor/editor-for-vue": "5.1.12", "animate.css": "4.1.1", archiver: "^7.0.1", axios: "0.27.2", "blueimp-md5": "2.19.0", canvg: "4.0.1", cropperjs: "1.5.12", dayjs: "1.11.4", echarts: "5.3.3", "element-plus": "2.7.1", "element-resize-detector": "1.2.4", "form-data": "^4.0.0", html2canvas: "1.0.0", konva: "9.3.0", "lodash-es": "4.17.21", mockjs: "1.1.0", "mpegts.js": "1.7.3", nprogress: "0.2.0", "number-precision": "1.6.0", "perfect-scrollbar": "1.5.5", pinia: "2.0.16", "print-js": "1.6.0", qrcode: "1.5.1", qs: "6.11.0", uid: "2.0.2", "url-join": "5.0.0", vue: "3.3.4", "vue-echarts": "^6.6.8", "vue-hooks-plus": "1.8.6", "vue-konva": "3.0.2", "vue-router": "4.1.2", "vue-types": "4.1.1", vuedraggable: "4.1.0", xlsx: "0.18.5" }, devDependencies: { "@commitlint/cli": "17.0.3", "@commitlint/config-conventional": "17.0.3", "@types/element-resize-detector": "1.1.3", "@types/intro.js": "3.0.2", "@types/lodash-es": "4.17.6", "@types/node": "17.0.45", "@types/qrcode": "1.4.2", "@typescript-eslint/eslint-plugin": "5.30.7", "@typescript-eslint/parser": "5.30.7", "@vitejs/plugin-vue": "2.3.3", "@vitejs/plugin-vue-jsx": "1.3.10", "@vue/compiler-sfc": "3.3.4", autoprefixer: "10.4.7", chalk: "5.3.0", colors: "1.4.0", commitizen: "4.2.5", "core-js": "3.23.5", "cross-env": "7.0.3", dotenv: "16.0.1", eslint: "8.20.0", "eslint-config-prettier": "8.5.0", "eslint-define-config": "1.5.1", "eslint-plugin-prettier": "4.2.1", "eslint-plugin-vue": "8.7.1", esno: "0.16.3", "fast-glob": "3.3.1", "fs-extra": "10.1.0", "gh-pages": "4.0.0", husky: "8.0.1", less: "4.1.3", "less-loader": "11.1.3", "lint-staged": "13.0.3", picocolors: "1.0.0", postcss: "8.4.14", "postcss-px-to-viewport": "1.1.1", prettier: "2.7.1", "pretty-quick": "3.1.3", rimraf: "3.0.2", "rollup-plugin-visualizer": "5.8.3", sass: "1.53.0", "simple-git": "3.22.0", stylelint: "14.9.1", "stylelint-config-prettier": "9.0.3", "stylelint-config-standard": "25.0.0", "stylelint-order": "5.0.0", "stylelint-scss": "4.3.0", tailwindcss: "3.3.2", "ts-node": "10.9.1", typescript: "4.7.4", vconsole: "3.15.1", vite: "5.1.3", "vite-plugin-compression": "0.5.1", "vite-plugin-html": "3.2.2", "vite-plugin-mock": "2.9.6", "vite-plugin-style-import": "2.0.0", "vite-plugin-svg-icons": "2.0.1", "vite-plugin-vconsole": "1.3.1", "vite-plugin-vue-setup-extend": "0.4.0", "vue-eslint-parser": "9.0.3", "vue-tsc": "0.35.2" }, "lint-staged": { "*.{vue,js,ts,tsx}": "eslint --fix" }, config: { commitizen: { path: "./node_modules/cz-customizable" } }, keywords: [ "vue", "naive-ui", "naive-ui-admin", "vue3", "ts", "tsx", "admin", "typescript" ], engines: { node: "12 || >=14" }, pnpm: { peerDependencyRules: { ignoreMissing: [ "rollup", "webpack" ] } } }; // build/constant.ts var GLOB_CONFIG_FILE_NAME = "app.config.js"; var OUTPUT_DIR = "dist"; // build/vite/plugin/html.ts import { simpleGit } from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/simple-git@3.22.0/node_modules/simple-git/dist/esm/index.js"; var git = simpleGit(); async function getLatestHash() { const gitLog = await git.log(); const lastStrNum = 8; return gitLog.latest?.hash.substring(-lastStrNum, lastStrNum); } function configHtmlPlugin(env, isBuild) { const { VITE_GLOB_APP_TITLE } = env; const path2 = "./"; const getAppConfigSrc = () => { return `${path2 || "/"}${GLOB_CONFIG_FILE_NAME}?v=${package_default.version}-${(/* @__PURE__ */ new Date()).getTime()}`; }; return new Promise((resolve2) => { getLatestHash().then((hash) => { const htmlPlugin = createHtmlPlugin({ minify: isBuild, inject: { // Inject data into ejs template data: { title: VITE_GLOB_APP_TITLE, hash }, // Embed the generated app.config.js file tags: isBuild ? [ { tag: "script", attrs: { src: getAppConfigSrc() } } ] : [] } }); resolve2(htmlPlugin); }); }); } // build/vite/plugin/mock.ts import { viteMockServe } from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/vite-plugin-mock@2.9.6_mockjs@1.1.0_vite@5.1.3/node_modules/vite-plugin-mock/dist/index.js"; function configMockPlugin(isBuild, prodMock) { return viteMockServe({ ignore: /^\_/, mockPath: "mock", localEnabled: !isBuild, prodEnabled: isBuild && prodMock, injectCode: ` import { setupProdMockServer } from '../mock/_createProductionServer'; setupProdMockServer(); ` }); } // build/vite/plugin/compress.ts import compressPlugin from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/vite-plugin-compression@0.5.1_vite@5.1.3/node_modules/vite-plugin-compression/dist/index.mjs"; function configCompressPlugin(compress, deleteOriginFile = false) { const compressList = compress.split(","); const plugins = []; if (compressList.includes("gzip")) { plugins.push( compressPlugin({ ext: ".gz", deleteOriginFile }) ); } if (compressList.includes("brotli")) { plugins.push( compressPlugin({ ext: ".br", algorithm: "brotliCompress", deleteOriginFile }) ); } return plugins; } // build/vite/plugin/visualizer.ts import { visualizer } from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/rollup-plugin-visualizer@5.8.3/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; function configVisualizerPlugin() { if (isReportMode()) { return visualizer({ filename: "./node_modules/.cache/visualizer/stats.html", open: true, gzipSize: true, brotliSize: true }); } return []; } // build/vite/plugin/index.ts function createVitePlugins(viteEnv, isBuild, prodMock) { const { VITE_USE_MOCK, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; const vitePlugins = [ // have to vue(), // have to vueJsx(), VueSetupExtend() // ElementPlus({ // // 引入的样式的类型,可以是css、sass、less等, // importStyle: 'sass', // useSource: true, // }), // 按需引入element且自动创建组件声明 // AutoImport({ // resolvers: [ElementPlusResolver()], // }), // Components({ // resolvers: [ElementPlusResolver()], // }), ]; vitePlugins.push(configHtmlPlugin(viteEnv, isBuild)); VITE_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild, prodMock)); vitePlugins.push(configVisualizerPlugin()); if (isBuild) { vitePlugins.push( configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE) ); } return vitePlugins; } // build/vite/proxy.ts var httpsRE = /^https:\/\//; function createProxy(list = []) { const ret = {}; for (const [prefix, target] of list) { const isHttps = httpsRE.test(target); ret[prefix] = { target, changeOrigin: true, ws: true, rewrite: (path2) => path2.replace(new RegExp(`^${prefix}`), ""), // https is require secure=false ...isHttps ? { secure: false } : {} }; } return ret; } // src/utils/dateUtil.ts import dayjs from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/dayjs@1.11.4/node_modules/dayjs/dayjs.min.js"; var DATE_TIME_FORMAT = "YYYY-MM-DD HH:mm"; function formatToDateTime(date, formatStr = DATE_TIME_FORMAT) { return dayjs(date).format(formatStr); } // vite.config.ts import { createSvgIconsPlugin } from "file:///C:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/vite-plugin-svg-icons@2.0.1_vite@5.1.3/node_modules/vite-plugin-svg-icons/dist/index.mjs"; var __vite_injected_original_dirname = "C:\\Users\\cheng\\Desktop\\skyeye-admin"; var svg = createSvgIconsPlugin({ // 要缓存的图标文件夹 iconDirs: [path.resolve(__vite_injected_original_dirname, "src/assets/icons")], // 执行 icon name 的格式 symbolId: "icon-[name]" }); var { dependencies, devDependencies, name, version } = package_default; var __APP_INFO__ = { pkg: { dependencies, devDependencies, name, version }, lastBuildTime: formatToDateTime(/* @__PURE__ */ new Date()) }; function pathResolve(dir) { return resolve(process.cwd(), ".", dir); } var vite_config_default = ({ command, mode }) => { const root = process.cwd(); const env = loadEnv(mode, root); const viteEnv = wrapperEnv(env); const { VITE_PORT, VITE_GLOB_PROD_MOCK, VITE_PROXY } = viteEnv; const prodMock = VITE_GLOB_PROD_MOCK; const isBuild = command === "build"; return { base: "./", esbuild: {}, resolve: { alias: [ { find: /\/#\//, replacement: pathResolve("types") + "/" }, { find: "@", replacement: pathResolve("src") + "/" } ], dedupe: ["vue"] }, plugins: [createVitePlugins(viteEnv, isBuild, prodMock), svg], define: { __APP_INFO__: JSON.stringify(__APP_INFO__) }, css: { devSourcemap: true, preprocessorOptions: { scss: { modifyVars: {}, javascriptEnabled: true, additionalData: `@import "src/styles/var.scss";` } } }, server: { host: true, port: VITE_PORT, proxy: createProxy(VITE_PROXY) // proxy: { // '/api': { // target: '', // changeOrigin: true, // rewrite: (path) => path.replace(/^\/api/, '/api/v1') // } // } }, optimizeDeps: { include: ["dayjs", "@vicons/ionicons5", "@vicons/antd", "@element-plus/icons-vue"], exclude: [] }, build: { target: "es2015", outDir: OUTPUT_DIR, minify: "terser", /** * 当 minify 为 minify 或 terser 打开注释 */ terserOptions: { compress: { keep_infinity: true, drop_console: true } }, reportCompressedSize: false, chunkSizeWarningLimit: 2e3 } }; }; export { vite_config_default as default }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvdXRpbHMudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vaW5kZXgudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vaHRtbC50cyIsICJwYWNrYWdlLmpzb24iLCAiYnVpbGQvY29uc3RhbnQudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vbW9jay50cyIsICJidWlsZC92aXRlL3BsdWdpbi9jb21wcmVzcy50cyIsICJidWlsZC92aXRlL3BsdWdpbi92aXN1YWxpemVyLnRzIiwgImJ1aWxkL3ZpdGUvcHJveHkudHMiLCAic3JjL3V0aWxzL2RhdGVVdGlsLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcY2hlbmdcXFxcRGVza3RvcFxcXFxza3lleWUtYWRtaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy9jaGVuZy9EZXNrdG9wL3NreWV5ZS1hZG1pbi92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB0eXBlIHsgVXNlckNvbmZpZywgQ29uZmlnRW52IH0gZnJvbSAndml0ZSc7XHJcbmltcG9ydCB7IGxvYWRFbnYgfSBmcm9tICd2aXRlJztcclxuaW1wb3J0IHBhdGgsIHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyB3cmFwcGVyRW52IH0gZnJvbSAnLi9idWlsZC91dGlscyc7XHJcbmltcG9ydCB7IGNyZWF0ZVZpdGVQbHVnaW5zIH0gZnJvbSAnLi9idWlsZC92aXRlL3BsdWdpbic7XHJcbmltcG9ydCB7IE9VVFBVVF9ESVIgfSBmcm9tICcuL2J1aWxkL2NvbnN0YW50JztcclxuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tICcuL2J1aWxkL3ZpdGUvcHJveHknO1xyXG5pbXBvcnQgcGtnIGZyb20gJy4vcGFja2FnZS5qc29uJztcclxuaW1wb3J0IHsgZm9ybWF0VG9EYXRlVGltZSB9IGZyb20gJy4vc3JjL3V0aWxzL2RhdGVVdGlsJztcclxuaW1wb3J0IHsgY3JlYXRlU3ZnSWNvbnNQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1zdmctaWNvbnMnO1xyXG5cclxuY29uc3Qgc3ZnID0gY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xyXG4gIC8vIFx1ODk4MVx1N0YxM1x1NUI1OFx1NzY4NFx1NTZGRVx1NjgwN1x1NjU4N1x1NEVGNlx1NTkzOVxyXG4gIGljb25EaXJzOiBbcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3NyYy9hc3NldHMvaWNvbnMnKV0sXHJcbiAgLy8gXHU2MjY3XHU4ODRDIGljb24gbmFtZSBcdTc2ODRcdTY4M0NcdTVGMEZcclxuICBzeW1ib2xJZDogJ2ljb24tW25hbWVdJyxcclxufSk7XHJcblxyXG5jb25zdCB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0gPSBwa2c7XHJcblxyXG5jb25zdCBfX0FQUF9JTkZPX18gPSB7XHJcbiAgcGtnOiB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0sXHJcbiAgbGFzdEJ1aWxkVGltZTogZm9ybWF0VG9EYXRlVGltZShuZXcgRGF0ZSgpKSxcclxufTtcclxuXHJcbmZ1bmN0aW9uIHBhdGhSZXNvbHZlKGRpcjogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4nLCBkaXIpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCAoeyBjb21tYW5kLCBtb2RlIH06IENvbmZpZ0Vudik6IFVzZXJDb25maWcgPT4ge1xyXG4gIGNvbnN0IHJvb3QgPSBwcm9jZXNzLmN3ZCgpO1xyXG4gIGNvbnN0IGVudiA9IGxvYWRFbnYobW9kZSwgcm9vdCk7XHJcbiAgY29uc3Qgdml0ZUVudiA9IHdyYXBwZXJFbnYoZW52KTtcclxuICBjb25zdCB7IFZJVEVfUE9SVCwgVklURV9HTE9CX1BST0RfTU9DSywgVklURV9QUk9YWSB9ID0gdml0ZUVudjtcclxuICBjb25zdCBwcm9kTW9jayA9IFZJVEVfR0xPQl9QUk9EX01PQ0s7XHJcbiAgY29uc3QgaXNCdWlsZCA9IGNvbW1hbmQgPT09ICdidWlsZCc7XHJcbiAgcmV0dXJuIHtcclxuICAgIGJhc2U6ICcuLycsXHJcbiAgICBlc2J1aWxkOiB7fSxcclxuICAgIHJlc29sdmU6IHtcclxuICAgICAgYWxpYXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kOiAvXFwvI1xcLy8sXHJcbiAgICAgICAgICByZXBsYWNlbWVudDogcGF0aFJlc29sdmUoJ3R5cGVzJykgKyAnLycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kOiAnQCcsXHJcbiAgICAgICAgICByZXBsYWNlbWVudDogcGF0aFJlc29sdmUoJ3NyYycpICsgJy8nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICAgIGRlZHVwZTogWyd2dWUnXSxcclxuICAgIH0sXHJcbiAgICBwbHVnaW5zOiBbY3JlYXRlVml0ZVBsdWdpbnModml0ZUVudiwgaXNCdWlsZCwgcHJvZE1vY2spLCBzdmddLFxyXG4gICAgZGVmaW5lOiB7XHJcbiAgICAgIF9fQVBQX0lORk9fXzogSlNPTi5zdHJpbmdpZnkoX19BUFBfSU5GT19fKSxcclxuICAgIH0sXHJcbiAgICBjc3M6IHtcclxuICAgICAgZGV2U291cmNlbWFwOiB0cnVlLFxyXG4gICAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XHJcbiAgICAgICAgc2Nzczoge1xyXG4gICAgICAgICAgbW9kaWZ5VmFyczoge30sXHJcbiAgICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiBgQGltcG9ydCBcInNyYy9zdHlsZXMvdmFyLnNjc3NcIjtgLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgc2VydmVyOiB7XHJcbiAgICAgIGhvc3Q6IHRydWUsXHJcbiAgICAgIHBvcnQ6IFZJVEVfUE9SVCxcclxuICAgICAgcHJveHk6IGNyZWF0ZVByb3h5KFZJVEVfUFJPWFkpLFxyXG4gICAgICAvLyBwcm94eToge1xyXG4gICAgICAvLyAgICAgJy9hcGknOiB7XHJcbiAgICAgIC8vICAgICAgICAgdGFyZ2V0OiAnJyxcclxuICAgICAgLy8gICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXHJcbiAgICAgIC8vICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZSgvXlxcL2FwaS8sICcvYXBpL3YxJylcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgfSxcclxuICAgIG9wdGltaXplRGVwczoge1xyXG4gICAgICBpbmNsdWRlOiBbJ2RheWpzJywgJ0B2aWNvbnMvaW9uaWNvbnM1JywgJ0B2aWNvbnMvYW50ZCcsICdAZWxlbWVudC1wbHVzL2ljb25zLXZ1ZSddLFxyXG4gICAgICBleGNsdWRlOiBbXSxcclxuICAgIH0sXHJcbiAgICBidWlsZDoge1xyXG4gICAgICB0YXJnZXQ6ICdlczIwMTUnLFxyXG4gICAgICBvdXREaXI6IE9VVFBVVF9ESVIsXHJcbiAgICAgIG1pbmlmeTogJ3RlcnNlcicsXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBcdTVGNTMgbWluaWZ5IFx1NEUzQSBtaW5pZnkgXHU2MjE2IHRlcnNlciBcdTYyNTNcdTVGMDBcdTZDRThcdTkxQ0FcclxuICAgICAgICovXHJcbiAgICAgIHRlcnNlck9wdGlvbnM6IHtcclxuICAgICAgICBjb21wcmVzczoge1xyXG4gICAgICAgICAga2VlcF9pbmZpbml0eTogdHJ1ZSxcclxuICAgICAgICAgIGRyb3BfY29uc29sZTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICByZXBvcnRDb21wcmVzc2VkU2l6ZTogZmFsc2UsXHJcbiAgICAgIGNodW5rU2l6ZVdhcm5pbmdMaW1pdDogMjAwMCxcclxuICAgIH0sXHJcbiAgfTtcclxufTtcclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcY2hlbmdcXFxcRGVza3RvcFxcXFxza3lleWUtYWRtaW5cXFxcYnVpbGRcXFxcdXRpbHMudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzL2NoZW5nL0Rlc2t0b3Avc2t5ZXllLWFkbWluL2J1aWxkL3V0aWxzLnRzXCI7aW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBkb3RlbnYgZnJvbSAnZG90ZW52JztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RldkZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBtb2RlID09PSAnZGV2ZWxvcG1lbnQnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9kRm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIG1vZGUgPT09ICdwcm9kdWN0aW9uJztcclxufVxyXG5cclxuLyoqXHJcbiAqIFdoZXRoZXIgdG8gZ2VuZXJhdGUgcGFja2FnZSBwcmV2aWV3XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZXBvcnRNb2RlKCk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5SRVBPUlQgPT09ICd0cnVlJztcclxufVxyXG5cclxuLy8gUmVhZCBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBwcm9jZXNzLmVudlxyXG5leHBvcnQgZnVuY3Rpb24gd3JhcHBlckVudihlbnZDb25mOiBSZWNvcmRhYmxlKTogVml0ZUVudiB7XHJcbiAgY29uc3QgcmV0OiBhbnkgPSB7fTtcclxuXHJcbiAgZm9yIChjb25zdCBlbnZOYW1lIG9mIE9iamVjdC5rZXlzKGVudkNvbmYpKSB7XHJcbiAgICBsZXQgcmVhbE5hbWUgPSBlbnZDb25mW2Vudk5hbWVdLnJlcGxhY2UoL1xcXFxuL2csICdcXG4nKTtcclxuICAgIHJlYWxOYW1lID0gcmVhbE5hbWUgPT09ICd0cnVlJyA/IHRydWUgOiByZWFsTmFtZSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogcmVhbE5hbWU7XHJcblxyXG4gICAgaWYgKGVudk5hbWUgPT09ICdWSVRFX1BPUlQnKSB7XHJcbiAgICAgIHJlYWxOYW1lID0gTnVtYmVyKHJlYWxOYW1lKTtcclxuICAgIH1cclxuICAgIGlmIChlbnZOYW1lID09PSAnVklURV9QUk9YWScpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZWFsTmFtZSA9IEpTT04ucGFyc2UocmVhbE5hbWUpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cclxuICAgIH1cclxuICAgIHJldFtlbnZOYW1lXSA9IHJlYWxOYW1lO1xyXG4gICAgcHJvY2Vzcy5lbnZbZW52TmFtZV0gPSByZWFsTmFtZTtcclxuICB9XHJcbiAgcmV0dXJuIHJldDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN0YXJ0aW5nIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXhcclxuICogQHBhcmFtIG1hdGNoIHByZWZpeFxyXG4gKiBAcGFyYW0gY29uZkZpbGVzIGV4dFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudkNvbmZpZyhtYXRjaCA9ICdWSVRFX0dMT0JfJywgY29uZkZpbGVzID0gWycuZW52JywgJy5lbnYucHJvZHVjdGlvbiddKSB7XHJcbiAgbGV0IGVudkNvbmZpZyA9IHt9O1xyXG4gIGNvbmZGaWxlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBlbnYgPSBkb3RlbnYucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBpdGVtKSkpO1xyXG4gICAgICBlbnZDb25maWcgPSB7IC4uLmVudkNvbmZpZywgLi4uZW52IH07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge31cclxuICB9KTtcclxuXHJcbiAgT2JqZWN0LmtleXMoZW52Q29uZmlnKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoYF4oJHttYXRjaH0pYCk7XHJcbiAgICBpZiAoIXJlZy50ZXN0KGtleSkpIHtcclxuICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShlbnZDb25maWcsIGtleSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgcmV0dXJuIGVudkNvbmZpZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB1c2VyIHJvb3QgZGlyZWN0b3J5XHJcbiAqIEBwYXJhbSBkaXIgZmlsZSBwYXRoXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9vdFBhdGgoLi4uZGlyOiBzdHJpbmdbXSkge1xyXG4gIHJldHVybiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgLi4uZGlyKTtcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblxcXFxpbmRleC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvY2hlbmcvRGVza3RvcC9za3lleWUtYWRtaW4vYnVpbGQvdml0ZS9wbHVnaW4vaW5kZXgudHNcIjtpbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbiB9IGZyb20gJ3ZpdGUnO1xyXG5cclxuaW1wb3J0IHZ1ZSBmcm9tICdAdml0ZWpzL3BsdWdpbi12dWUnO1xyXG5pbXBvcnQgdnVlSnN4IGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZS1qc3gnO1xyXG5pbXBvcnQgVnVlU2V0dXBFeHRlbmQgZnJvbSAndml0ZS1wbHVnaW4tdnVlLXNldHVwLWV4dGVuZCc7XHJcbi8vIFx1ODFFQVx1NTJBOFx1NjMwOVx1OTcwMFx1NUJGQ1x1NTE2NVx1RkYwQ1x1NjgzOVx1NjM2RVx1ODFFQVx1OEVBQlx1NjBDNVx1NTFCNVx1OTAwOVx1NjJFOVxyXG4vLyBpbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJztcclxuLy8gaW1wb3J0IENvbXBvbmVudHMgZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvdml0ZSc7XHJcbi8vIGltcG9ydCB7IEVsZW1lbnRQbHVzUmVzb2x2ZXIgfSBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy9yZXNvbHZlcnMnO1xyXG4vLyBpbXBvcnQgQ29tcG9uZW50cyBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy92aXRlJztcclxuLy8gaW1wb3J0IEVsZW1lbnRQbHVzIGZyb20gJ3VucGx1Z2luLWVsZW1lbnQtcGx1cy92aXRlJztcclxuXHJcbmltcG9ydCB7IGNvbmZpZ0h0bWxQbHVnaW4gfSBmcm9tICcuL2h0bWwnO1xyXG5pbXBvcnQgeyBjb25maWdNb2NrUGx1Z2luIH0gZnJvbSAnLi9tb2NrJztcclxuaW1wb3J0IHsgY29uZmlnQ29tcHJlc3NQbHVnaW4gfSBmcm9tICcuL2NvbXByZXNzJztcclxuaW1wb3J0IHsgY29uZmlnVmlzdWFsaXplclBsdWdpbiB9IGZyb20gJy4vdmlzdWFsaXplcic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVml0ZVBsdWdpbnModml0ZUVudjogVml0ZUVudiwgaXNCdWlsZDogYm9vbGVhbiwgcHJvZE1vY2spIHtcclxuICBjb25zdCB7IFZJVEVfVVNFX01PQ0ssIFZJVEVfQlVJTERfQ09NUFJFU1MsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFIH0gPSB2aXRlRW52O1xyXG5cclxuICBjb25zdCB2aXRlUGx1Z2luczogKFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdKVtdID0gW1xyXG4gICAgLy8gaGF2ZSB0b1xyXG4gICAgdnVlKCksXHJcbiAgICAvLyBoYXZlIHRvXHJcbiAgICB2dWVKc3goKSxcclxuICAgIFZ1ZVNldHVwRXh0ZW5kKCksXHJcbiAgICAvLyBFbGVtZW50UGx1cyh7XHJcbiAgICAvLyAgIC8vIFx1NUYxNVx1NTE2NVx1NzY4NFx1NjgzN1x1NUYwRlx1NzY4NFx1N0M3Qlx1NTc4Qlx1RkYwQ1x1NTNFRlx1NEVFNVx1NjYyRmNzc1x1MzAwMXNhc3NcdTMwMDFsZXNzXHU3QjQ5XHVGRjBDXHJcbiAgICAvLyAgIGltcG9ydFN0eWxlOiAnc2FzcycsXHJcbiAgICAvLyAgIHVzZVNvdXJjZTogdHJ1ZSxcclxuICAgIC8vIH0pLFxyXG4gICAgLy8gXHU2MzA5XHU5NzAwXHU1RjE1XHU1MTY1ZWxlbWVudFx1NEUxNFx1ODFFQVx1NTJBOFx1NTIxQlx1NUVGQVx1N0VDNFx1NEVGNlx1NThGMFx1NjYwRVxyXG4gICAgLy8gQXV0b0ltcG9ydCh7XHJcbiAgICAvLyAgIHJlc29sdmVyczogW0VsZW1lbnRQbHVzUmVzb2x2ZXIoKV0sXHJcbiAgICAvLyB9KSxcclxuICAgIC8vIENvbXBvbmVudHMoe1xyXG4gICAgLy8gICByZXNvbHZlcnM6IFtFbGVtZW50UGx1c1Jlc29sdmVyKCldLFxyXG4gICAgLy8gfSksXHJcbiAgXTtcclxuXHJcbiAgLy8gdml0ZS1wbHVnaW4taHRtbFxyXG4gIHZpdGVQbHVnaW5zLnB1c2goY29uZmlnSHRtbFBsdWdpbih2aXRlRW52LCBpc0J1aWxkKSk7XHJcblxyXG4gIC8vIHZpdGUtcGx1Z2luLW1vY2tcclxuICBWSVRFX1VTRV9NT0NLICYmIHZpdGVQbHVnaW5zLnB1c2goY29uZmlnTW9ja1BsdWdpbihpc0J1aWxkLCBwcm9kTW9jaykpO1xyXG5cclxuICAvLyByb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXJcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNvbmZpZ1Zpc3VhbGl6ZXJQbHVnaW4oKSk7XHJcblxyXG4gIGlmIChpc0J1aWxkKSB7XHJcbiAgICAvLyByb2xsdXAtcGx1Z2luLWd6aXBcclxuICAgIHZpdGVQbHVnaW5zLnB1c2goXHJcbiAgICAgIGNvbmZpZ0NvbXByZXNzUGx1Z2luKFZJVEVfQlVJTERfQ09NUFJFU1MsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdml0ZVBsdWdpbnM7XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcY2hlbmdcXFxcRGVza3RvcFxcXFxza3lleWUtYWRtaW5cXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cXFxcaHRtbC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvY2hlbmcvRGVza3RvcC9za3lleWUtYWRtaW4vYnVpbGQvdml0ZS9wbHVnaW4vaHRtbC50c1wiOy8qKlxyXG4gKiBQbHVnaW4gdG8gbWluaW1pemUgYW5kIHVzZSBlanMgdGVtcGxhdGUgc3ludGF4IGluIGluZGV4Lmh0bWwuXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbm5jd2Ivdml0ZS1wbHVnaW4taHRtbFxyXG4gKi9cclxuaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJztcclxuaW1wb3J0IHsgY3JlYXRlSHRtbFBsdWdpbiB9IGZyb20gJ3ZpdGUtcGx1Z2luLWh0bWwnO1xyXG5pbXBvcnQgcGtnIGZyb20gJy4uLy4uLy4uL3BhY2thZ2UuanNvbic7XHJcbmltcG9ydCB7IEdMT0JfQ09ORklHX0ZJTEVfTkFNRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50JztcclxuaW1wb3J0IHsgc2ltcGxlR2l0IH0gZnJvbSAnc2ltcGxlLWdpdCc7XHJcbmNvbnN0IGdpdCA9IHNpbXBsZUdpdCgpO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0SGFzaCgpIHtcclxuICBjb25zdCBnaXRMb2cgPSBhd2FpdCBnaXQubG9nKCk7XHJcbiAgLyoqIFx1NjIyQVx1NTNENmdpdCBoYXNoXHU1MDNDXHU2NzAwXHU1NDBFOFx1NEY0RCAqL1xyXG4gIGNvbnN0IGxhc3RTdHJOdW0gPSA4O1xyXG4gIHJldHVybiBnaXRMb2cubGF0ZXN0Py5oYXNoLnN1YnN0cmluZygtbGFzdFN0ck51bSwgbGFzdFN0ck51bSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25maWdIdG1sUGx1Z2luKGVudjogVml0ZUVudiwgaXNCdWlsZDogYm9vbGVhbik6IFByb21pc2U8UGx1Z2luT3B0aW9uW10+IHtcclxuICBjb25zdCB7IFZJVEVfR0xPQl9BUFBfVElUTEUgfSA9IGVudjtcclxuXHJcbiAgY29uc3QgcGF0aCA9ICcuLyc7XHJcblxyXG4gIGNvbnN0IGdldEFwcENvbmZpZ1NyYyA9ICgpID0+IHtcclxuICAgIHJldHVybiBgJHtwYXRoIHx8ICcvJ30ke0dMT0JfQ09ORklHX0ZJTEVfTkFNRX0/dj0ke3BrZy52ZXJzaW9ufS0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWA7XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICBnZXRMYXRlc3RIYXNoKCkudGhlbigoaGFzaCkgPT4ge1xyXG4gICAgICBjb25zdCBodG1sUGx1Z2luOiBQbHVnaW5PcHRpb25bXSA9IGNyZWF0ZUh0bWxQbHVnaW4oe1xyXG4gICAgICAgIG1pbmlmeTogaXNCdWlsZCxcclxuICAgICAgICBpbmplY3Q6IHtcclxuICAgICAgICAgIC8vIEluamVjdCBkYXRhIGludG8gZWpzIHRlbXBsYXRlXHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBWSVRFX0dMT0JfQVBQX1RJVExFLFxyXG4gICAgICAgICAgICBoYXNoLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC8vIEVtYmVkIHRoZSBnZW5lcmF0ZWQgYXBwLmNvbmZpZy5qcyBmaWxlXHJcbiAgICAgICAgICB0YWdzOiBpc0J1aWxkXHJcbiAgICAgICAgICAgID8gW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICB0YWc6ICdzY3JpcHQnLFxyXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogZ2V0QXBwQ29uZmlnU3JjKCksXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgcmVzb2x2ZShodG1sUGx1Z2luKTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG59XHJcbiIsICJ7XHJcbiAgXCJuYW1lXCI6IFwic2t5ZXllLWFkbWluLWZlXCIsXHJcbiAgXCJ2ZXJzaW9uXCI6IFwiMS4zLjlcIixcclxuICBcInByaXZhdGVcIjogdHJ1ZSxcclxuICBcInR5cGVcIjogXCJtb2R1bGVcIixcclxuICBcInNjcmlwdHNcIjoge1xyXG4gICAgXCJib290c3RyYXBcIjogXCJwbnBtIGluc3RhbGxcIixcclxuICAgIFwic2VydmVcIjogXCJwbnBtIHJ1biBkZXZcIixcclxuICAgIFwiZGV2XCI6IFwidml0ZVwiLFxyXG4gICAgXCJjcmVhdGVDb25maWdcIjogXCJlc25vIC4vYnVpbGQvc2NyaXB0L3Bvc3RCdWlsZC50c1wiLFxyXG4gICAgXCJidWlsZFwiOiBcImNyb3NzLWVudiBOT0RFX0VOVj1wcm9kdWN0aW9uIHZpdGUgYnVpbGRcIixcclxuICAgIFwiYnVpbGQ6dGVzdFwiOiBcImNyb3NzLWVudiB2aXRlIGJ1aWxkIC0tbW9kZSB0ZXN0ICYmIGVzbm8gLi9idWlsZC9zY3JpcHQvcG9zdEJ1aWxkLnRzXCIsXHJcbiAgICBcImJ1aWxkOm5vLWNhY2hlXCI6IFwicG5wbSBjbGVhbjpjYWNoZSAmJiBwbnBtIHJ1biBidWlsZFwiLFxyXG4gICAgXCJyZXBvcnRcIjogXCJjcm9zcy1lbnYgUkVQT1JUPXRydWUgcG5wbSBydW4gYnVpbGRcIixcclxuICAgIFwidHlwZTpjaGVja1wiOiBcInZ1ZS10c2MgLS1ub0VtaXQgLS1za2lwTGliQ2hlY2tcIixcclxuICAgIFwicHJldmlld1wiOiBcInBucG0gcnVuIGJ1aWxkICYmIHZpdGUgcHJldmlld1wiLFxyXG4gICAgXCJwcmV2aWV3OmRpc3RcIjogXCJ2aXRlIHByZXZpZXdcIixcclxuICAgIFwiY2xlYW46Y2FjaGVcIjogXCJyaW1yYWYgbm9kZV9tb2R1bGVzLy5jYWNoZS8gJiYgcmltcmFmIG5vZGVfbW9kdWxlcy8udml0ZVwiLFxyXG4gICAgXCJjbGVhbjpsaWJcIjogXCJyaW1yYWYgbm9kZV9tb2R1bGVzXCIsXHJcbiAgICBcImxpbnQ6ZXNsaW50XCI6IFwiZXNsaW50IFxcXCJ7c3JjLG1vY2t9LyoqLyoue3Z1ZSx0cyx0c3h9XFxcIiAtLWZpeFwiLFxyXG4gICAgXCJsaW50OnByZXR0aWVyXCI6IFwicHJldHRpZXIgLS13cml0ZSAtLWxvZ2xldmVsIHdhcm4gXFxcInNyYy8qKi8qLntqcyxqc29uLHRzeCxjc3MsbGVzcyxzY3NzLHZ1ZSxodG1sLG1kfVxcXCJcIixcclxuICAgIFwibGludDpzdHlsZWxpbnRcIjogXCJzdHlsZWxpbnQgLS1maXggXFxcIioqLyoue3Z1ZSxsZXNzLHBvc3Rjc3MsY3NzLHNjc3N9XFxcIiAtLWNhY2hlIC0tY2FjaGUtbG9jYXRpb24gbm9kZV9tb2R1bGVzLy5jYWNoZS9zdHlsZWxpbnQvXCIsXHJcbiAgICBcImxpbnQ6bGludC1zdGFnZWRcIjogXCJsaW50LXN0YWdlZCAtYyAuLy5odXNreS9saW50c3RhZ2VkcmMuanNcIixcclxuICAgIFwibGludDpwcmV0dHlcIjogXCJwcmV0dHktcXVpY2sgLS1zdGFnZWRcIixcclxuICAgIFwidGVzdCBwcm9kIGd6aXBcIjogXCJodHRwLXNlcnZlciBkaXN0IC0tY29ycyAtLWd6aXAgLWMtMVwiLFxyXG4gICAgXCJyZWluc3RhbGxcIjogXCJyaW1yYWYgcG5wbS1sb2NrLnlhbWwgJiYgcmltcmFmIHBhY2thZ2UubG9jay5qc29uICYmIHJpbXJhZiBub2RlX21vZHVsZXMgJiYgcG5wbSBydW4gYm9vdHN0cmFwXCIsXHJcbiAgICBcImJ1aWxkIHR5cGVjaGVja1wiOiBcInZ1ZWR4LXR5cGVjaGVjayAuICYmIHZpdGUgYnVpbGRcIixcclxuICAgIFwiZGVwbG95XCI6IFwiZ2gtcGFnZXMgLWQgZGlzdFwiLFxyXG4gICAgXCJwdWJsaXNoXCI6IFwiZXNubyAuL2J1aWxkL3B1Ymxpc2gvcHVibGlzaC50c1wiXHJcbiAgfSxcclxuICBcImRlcGVuZGVuY2llc1wiOiB7XHJcbiAgICBcIkBlbGVtZW50LXBsdXMvaWNvbnMtdnVlXCI6IFwiMi4wLjlcIixcclxuICAgIFwiQHR5cGVzL2ZhYnJpY1wiOiBcIjUuMy42XCIsXHJcbiAgICBcIkB2aWNvbnMvYW50ZFwiOiBcIjAuMTIuMFwiLFxyXG4gICAgXCJAdmljb25zL2lvbmljb25zNVwiOiBcIjAuMTIuMFwiLFxyXG4gICAgXCJAdnVldXAvdnVlLXF1aWxsXCI6IFwiMS4wLjAtYmV0YS44XCIsXHJcbiAgICBcIkB2dWV1c2UvY29yZVwiOiBcIjguOS40XCIsXHJcbiAgICBcIkB2dWV1c2Uvcm91dGVyXCI6IFwiMTAuNi4xXCIsXHJcbiAgICBcIkB3YW5nZWRpdG9yL2VkaXRvclwiOiBcIjUuMS4yM1wiLFxyXG4gICAgXCJAd2FuZ2VkaXRvci9lZGl0b3ItZm9yLXZ1ZVwiOiBcIjUuMS4xMlwiLFxyXG4gICAgXCJhbmltYXRlLmNzc1wiOiBcIjQuMS4xXCIsXHJcbiAgICBcImFyY2hpdmVyXCI6IFwiXjcuMC4xXCIsXHJcbiAgICBcImF4aW9zXCI6IFwiMC4yNy4yXCIsXHJcbiAgICBcImJsdWVpbXAtbWQ1XCI6IFwiMi4xOS4wXCIsXHJcbiAgICBcImNhbnZnXCI6IFwiNC4wLjFcIixcclxuICAgIFwiY3JvcHBlcmpzXCI6IFwiMS41LjEyXCIsXHJcbiAgICBcImRheWpzXCI6IFwiMS4xMS40XCIsXHJcbiAgICBcImVjaGFydHNcIjogXCI1LjMuM1wiLFxyXG4gICAgXCJlbGVtZW50LXBsdXNcIjogXCIyLjcuMVwiLFxyXG4gICAgXCJlbGVtZW50LXJlc2l6ZS1kZXRlY3RvclwiOiBcIjEuMi40XCIsXHJcbiAgICBcImZvcm0tZGF0YVwiOiBcIl40LjAuMFwiLFxyXG4gICAgXCJodG1sMmNhbnZhc1wiOiBcIjEuMC4wXCIsXHJcbiAgICBcImtvbnZhXCI6IFwiOS4zLjBcIixcclxuICAgIFwibG9kYXNoLWVzXCI6IFwiNC4xNy4yMVwiLFxyXG4gICAgXCJtb2NranNcIjogXCIxLjEuMFwiLFxyXG4gICAgXCJtcGVndHMuanNcIjogXCIxLjcuM1wiLFxyXG4gICAgXCJucHJvZ3Jlc3NcIjogXCIwLjIuMFwiLFxyXG4gICAgXCJudW1iZXItcHJlY2lzaW9uXCI6IFwiMS42LjBcIixcclxuICAgIFwicGVyZmVjdC1zY3JvbGxiYXJcIjogXCIxLjUuNVwiLFxyXG4gICAgXCJwaW5pYVwiOiBcIjIuMC4xNlwiLFxyXG4gICAgXCJwcmludC1qc1wiOiBcIjEuNi4wXCIsXHJcbiAgICBcInFyY29kZVwiOiBcIjEuNS4xXCIsXHJcbiAgICBcInFzXCI6IFwiNi4xMS4wXCIsXHJcbiAgICBcInVpZFwiOiBcIjIuMC4yXCIsXHJcbiAgICBcInVybC1qb2luXCI6IFwiNS4wLjBcIixcclxuICAgIFwidnVlXCI6IFwiMy4zLjRcIixcclxuICAgIFwidnVlLWVjaGFydHNcIjogXCJeNi42LjhcIixcclxuICAgIFwidnVlLWhvb2tzLXBsdXNcIjogXCIxLjguNlwiLFxyXG4gICAgXCJ2dWUta29udmFcIjogXCIzLjAuMlwiLFxyXG4gICAgXCJ2dWUtcm91dGVyXCI6IFwiNC4xLjJcIixcclxuICAgIFwidnVlLXR5cGVzXCI6IFwiNC4xLjFcIixcclxuICAgIFwidnVlZHJhZ2dhYmxlXCI6IFwiNC4xLjBcIixcclxuICAgIFwieGxzeFwiOiBcIjAuMTguNVwiXHJcbiAgfSxcclxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XHJcbiAgICBcIkBjb21taXRsaW50L2NsaVwiOiBcIjE3LjAuM1wiLFxyXG4gICAgXCJAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsXCI6IFwiMTcuMC4zXCIsXHJcbiAgICBcIkB0eXBlcy9lbGVtZW50LXJlc2l6ZS1kZXRlY3RvclwiOiBcIjEuMS4zXCIsXHJcbiAgICBcIkB0eXBlcy9pbnRyby5qc1wiOiBcIjMuMC4yXCIsXHJcbiAgICBcIkB0eXBlcy9sb2Rhc2gtZXNcIjogXCI0LjE3LjZcIixcclxuICAgIFwiQHR5cGVzL25vZGVcIjogXCIxNy4wLjQ1XCIsXHJcbiAgICBcIkB0eXBlcy9xcmNvZGVcIjogXCIxLjQuMlwiLFxyXG4gICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpblwiOiBcIjUuMzAuN1wiLFxyXG4gICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyXCI6IFwiNS4zMC43XCIsXHJcbiAgICBcIkB2aXRlanMvcGx1Z2luLXZ1ZVwiOiBcIjIuMy4zXCIsXHJcbiAgICBcIkB2aXRlanMvcGx1Z2luLXZ1ZS1qc3hcIjogXCIxLjMuMTBcIixcclxuICAgIFwiQHZ1ZS9jb21waWxlci1zZmNcIjogXCIzLjMuNFwiLFxyXG4gICAgXCJhdXRvcHJlZml4ZXJcIjogXCIxMC40LjdcIixcclxuICAgIFwiY2hhbGtcIjogXCI1LjMuMFwiLFxyXG4gICAgXCJjb2xvcnNcIjogXCIxLjQuMFwiLFxyXG4gICAgXCJjb21taXRpemVuXCI6IFwiNC4yLjVcIixcclxuICAgIFwiY29yZS1qc1wiOiBcIjMuMjMuNVwiLFxyXG4gICAgXCJjcm9zcy1lbnZcIjogXCI3LjAuM1wiLFxyXG4gICAgXCJkb3RlbnZcIjogXCIxNi4wLjFcIixcclxuICAgIFwiZXNsaW50XCI6IFwiOC4yMC4wXCIsXHJcbiAgICBcImVzbGludC1jb25maWctcHJldHRpZXJcIjogXCI4LjUuMFwiLFxyXG4gICAgXCJlc2xpbnQtZGVmaW5lLWNvbmZpZ1wiOiBcIjEuNS4xXCIsXHJcbiAgICBcImVzbGludC1wbHVnaW4tcHJldHRpZXJcIjogXCI0LjIuMVwiLFxyXG4gICAgXCJlc2xpbnQtcGx1Z2luLXZ1ZVwiOiBcIjguNy4xXCIsXHJcbiAgICBcImVzbm9cIjogXCIwLjE2LjNcIixcclxuICAgIFwiZmFzdC1nbG9iXCI6IFwiMy4zLjFcIixcclxuICAgIFwiZnMtZXh0cmFcIjogXCIxMC4xLjBcIixcclxuICAgIFwiZ2gtcGFnZXNcIjogXCI0LjAuMFwiLFxyXG4gICAgXCJodXNreVwiOiBcIjguMC4xXCIsXHJcbiAgICBcImxlc3NcIjogXCI0LjEuM1wiLFxyXG4gICAgXCJsZXNzLWxvYWRlclwiOiBcIjExLjEuM1wiLFxyXG4gICAgXCJsaW50LXN0YWdlZFwiOiBcIjEzLjAuM1wiLFxyXG4gICAgXCJwaWNvY29sb3JzXCI6IFwiMS4wLjBcIixcclxuICAgIFwicG9zdGNzc1wiOiBcIjguNC4xNFwiLFxyXG4gICAgXCJwb3N0Y3NzLXB4LXRvLXZpZXdwb3J0XCI6IFwiMS4xLjFcIixcclxuICAgIFwicHJldHRpZXJcIjogXCIyLjcuMVwiLFxyXG4gICAgXCJwcmV0dHktcXVpY2tcIjogXCIzLjEuM1wiLFxyXG4gICAgXCJyaW1yYWZcIjogXCIzLjAuMlwiLFxyXG4gICAgXCJyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXJcIjogXCI1LjguM1wiLFxyXG4gICAgXCJzYXNzXCI6IFwiMS41My4wXCIsXHJcbiAgICBcInNpbXBsZS1naXRcIjogXCIzLjIyLjBcIixcclxuICAgIFwic3R5bGVsaW50XCI6IFwiMTQuOS4xXCIsXHJcbiAgICBcInN0eWxlbGludC1jb25maWctcHJldHRpZXJcIjogXCI5LjAuM1wiLFxyXG4gICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkXCI6IFwiMjUuMC4wXCIsXHJcbiAgICBcInN0eWxlbGludC1vcmRlclwiOiBcIjUuMC4wXCIsXHJcbiAgICBcInN0eWxlbGludC1zY3NzXCI6IFwiNC4zLjBcIixcclxuICAgIFwidGFpbHdpbmRjc3NcIjogXCIzLjMuMlwiLFxyXG4gICAgXCJ0cy1ub2RlXCI6IFwiMTAuOS4xXCIsXHJcbiAgICBcInR5cGVzY3JpcHRcIjogXCI0LjcuNFwiLFxyXG4gICAgXCJ2Y29uc29sZVwiOiBcIjMuMTUuMVwiLFxyXG4gICAgXCJ2aXRlXCI6IFwiNS4xLjNcIixcclxuICAgIFwidml0ZS1wbHVnaW4tY29tcHJlc3Npb25cIjogXCIwLjUuMVwiLFxyXG4gICAgXCJ2aXRlLXBsdWdpbi1odG1sXCI6IFwiMy4yLjJcIixcclxuICAgIFwidml0ZS1wbHVnaW4tbW9ja1wiOiBcIjIuOS42XCIsXHJcbiAgICBcInZpdGUtcGx1Z2luLXN0eWxlLWltcG9ydFwiOiBcIjIuMC4wXCIsXHJcbiAgICBcInZpdGUtcGx1Z2luLXN2Zy1pY29uc1wiOiBcIjIuMC4xXCIsXHJcbiAgICBcInZpdGUtcGx1Z2luLXZjb25zb2xlXCI6IFwiMS4zLjFcIixcclxuICAgIFwidml0ZS1wbHVnaW4tdnVlLXNldHVwLWV4dGVuZFwiOiBcIjAuNC4wXCIsXHJcbiAgICBcInZ1ZS1lc2xpbnQtcGFyc2VyXCI6IFwiOS4wLjNcIixcclxuICAgIFwidnVlLXRzY1wiOiBcIjAuMzUuMlwiXHJcbiAgfSxcclxuICBcImxpbnQtc3RhZ2VkXCI6IHtcclxuICAgIFwiKi57dnVlLGpzLHRzLHRzeH1cIjogXCJlc2xpbnQgLS1maXhcIlxyXG4gIH0sXHJcbiAgXCJjb25maWdcIjoge1xyXG4gICAgXCJjb21taXRpemVuXCI6IHtcclxuICAgICAgXCJwYXRoXCI6IFwiLi9ub2RlX21vZHVsZXMvY3otY3VzdG9taXphYmxlXCJcclxuICAgIH1cclxuICB9LFxyXG4gIFwia2V5d29yZHNcIjogW1xyXG4gICAgXCJ2dWVcIixcclxuICAgIFwibmFpdmUtdWlcIixcclxuICAgIFwibmFpdmUtdWktYWRtaW5cIixcclxuICAgIFwidnVlM1wiLFxyXG4gICAgXCJ0c1wiLFxyXG4gICAgXCJ0c3hcIixcclxuICAgIFwiYWRtaW5cIixcclxuICAgIFwidHlwZXNjcmlwdFwiXHJcbiAgXSxcclxuICBcImVuZ2luZXNcIjoge1xyXG4gICAgXCJub2RlXCI6IFwiMTIgfHwgPj0xNFwiXHJcbiAgfSxcclxuICBcInBucG1cIjoge1xyXG4gICAgXCJwZWVyRGVwZW5kZW5jeVJ1bGVzXCI6IHtcclxuICAgICAgXCJpZ25vcmVNaXNzaW5nXCI6IFtcclxuICAgICAgICBcInJvbGx1cFwiLFxyXG4gICAgICAgIFwid2VicGFja1wiXHJcbiAgICAgIF1cclxuICAgIH1cclxuICB9XHJcbn0iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxidWlsZFxcXFxjb25zdGFudC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvY2hlbmcvRGVza3RvcC9za3lleWUtYWRtaW4vYnVpbGQvY29uc3RhbnQudHNcIjsvKipcclxuICogVGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBlbnRlcmVkIGluIHRoZSBwcm9kdWN0aW9uIGVudmlyb25tZW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgR0xPQl9DT05GSUdfRklMRV9OQU1FID0gJ2FwcC5jb25maWcuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9VVFBVVF9ESVIgPSAnZGlzdCc7XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcY2hlbmdcXFxcRGVza3RvcFxcXFxza3lleWUtYWRtaW5cXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXFxcXG1vY2sudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzL2NoZW5nL0Rlc2t0b3Avc2t5ZXllLWFkbWluL2J1aWxkL3ZpdGUvcGx1Z2luL21vY2sudHNcIjsvKipcclxuICogTW9jayBwbHVnaW4gZm9yIGRldmVsb3BtZW50IGFuZCBwcm9kdWN0aW9uLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYW5uY3diL3ZpdGUtcGx1Z2luLW1vY2tcclxuICovXHJcbmltcG9ydCB7IHZpdGVNb2NrU2VydmUgfSBmcm9tICd2aXRlLXBsdWdpbi1tb2NrJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25maWdNb2NrUGx1Z2luKGlzQnVpbGQ6IGJvb2xlYW4sIHByb2RNb2NrOiBib29sZWFuKSB7XHJcbiAgcmV0dXJuIHZpdGVNb2NrU2VydmUoe1xyXG4gICAgaWdub3JlOiAvXlxcXy8sXHJcbiAgICBtb2NrUGF0aDogJ21vY2snLFxyXG4gICAgbG9jYWxFbmFibGVkOiAhaXNCdWlsZCxcclxuICAgIHByb2RFbmFibGVkOiBpc0J1aWxkICYmIHByb2RNb2NrLFxyXG4gICAgaW5qZWN0Q29kZTogYFxyXG4gICAgICAgaW1wb3J0IHsgc2V0dXBQcm9kTW9ja1NlcnZlciB9IGZyb20gJy4uL21vY2svX2NyZWF0ZVByb2R1Y3Rpb25TZXJ2ZXInO1xyXG4gXHJcbiAgICAgICBzZXR1cFByb2RNb2NrU2VydmVyKCk7XHJcbiAgICAgICBgLFxyXG4gIH0pO1xyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcY2hlbmdcXFxcRGVza3RvcFxcXFxza3lleWUtYWRtaW5cXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXFxcXGNvbXByZXNzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy9jaGVuZy9EZXNrdG9wL3NreWV5ZS1hZG1pbi9idWlsZC92aXRlL3BsdWdpbi9jb21wcmVzcy50c1wiOy8qKlxyXG4gKiBVc2VkIHRvIHBhY2thZ2UgYW5kIG91dHB1dCBnemlwLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IGluIFZpdGUsIHRoZSBzcGVjaWZpYyByZWFzb24gaXMgc3RpbGwgYmVpbmcgaW52ZXN0aWdhdGVkXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbm5jd2Ivdml0ZS1wbHVnaW4tY29tcHJlc3Npb25cclxuICovXHJcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XHJcblxyXG5pbXBvcnQgY29tcHJlc3NQbHVnaW4gZnJvbSAndml0ZS1wbHVnaW4tY29tcHJlc3Npb24nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ0NvbXByZXNzUGx1Z2luKFxyXG4gIGNvbXByZXNzOiAnZ3ppcCcgfCAnYnJvdGxpJyB8ICdub25lJyxcclxuICBkZWxldGVPcmlnaW5GaWxlID0gZmFsc2VcclxuKTogUGx1Z2luIHwgUGx1Z2luW10ge1xyXG4gIGNvbnN0IGNvbXByZXNzTGlzdCA9IGNvbXByZXNzLnNwbGl0KCcsJyk7XHJcblxyXG4gIGNvbnN0IHBsdWdpbnM6IFBsdWdpbltdID0gW107XHJcblxyXG4gIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoJ2d6aXAnKSkge1xyXG4gICAgcGx1Z2lucy5wdXNoKFxyXG4gICAgICBjb21wcmVzc1BsdWdpbih7XHJcbiAgICAgICAgZXh0OiAnLmd6JyxcclxuICAgICAgICBkZWxldGVPcmlnaW5GaWxlLFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcygnYnJvdGxpJykpIHtcclxuICAgIHBsdWdpbnMucHVzaChcclxuICAgICAgY29tcHJlc3NQbHVnaW4oe1xyXG4gICAgICAgIGV4dDogJy5icicsXHJcbiAgICAgICAgYWxnb3JpdGhtOiAnYnJvdGxpQ29tcHJlc3MnLFxyXG4gICAgICAgIGRlbGV0ZU9yaWdpbkZpbGUsXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICByZXR1cm4gcGx1Z2lucztcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblxcXFx2aXN1YWxpemVyLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy9jaGVuZy9EZXNrdG9wL3NreWV5ZS1hZG1pbi9idWlsZC92aXRlL3BsdWdpbi92aXN1YWxpemVyLnRzXCI7aW1wb3J0IHsgUGx1Z2luT3B0aW9uIH0gZnJvbSAndml0ZSc7XHJcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tICdyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXInO1xyXG5pbXBvcnQgeyBpc1JlcG9ydE1vZGUgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29uZmlnVmlzdWFsaXplclBsdWdpbigpIHtcclxuICBpZiAoaXNSZXBvcnRNb2RlKCkpIHtcclxuICAgIHJldHVybiB2aXN1YWxpemVyKHtcclxuICAgICAgZmlsZW5hbWU6ICcuL25vZGVfbW9kdWxlcy8uY2FjaGUvdmlzdWFsaXplci9zdGF0cy5odG1sJyxcclxuICAgICAgb3BlbjogdHJ1ZSxcclxuICAgICAgZ3ppcFNpemU6IHRydWUsXHJcbiAgICAgIGJyb3RsaVNpemU6IHRydWUsXHJcbiAgICB9KSBhcyBQbHVnaW5PcHRpb247XHJcbiAgfVxyXG4gIHJldHVybiBbXTtcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcXFxccHJveHkudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzL2NoZW5nL0Rlc2t0b3Avc2t5ZXllLWFkbWluL2J1aWxkL3ZpdGUvcHJveHkudHNcIjsvKipcclxuICogVXNlZCB0byBwYXJzZSB0aGUgLmVudi5kZXZlbG9wbWVudCBwcm94eSBjb25maWd1cmF0aW9uXHJcbiAqL1xyXG5pbXBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gJ3ZpdGUnO1xyXG5cclxudHlwZSBQcm94eUl0ZW0gPSBbc3RyaW5nLCBzdHJpbmddO1xyXG5cclxudHlwZSBQcm94eUxpc3QgPSBQcm94eUl0ZW1bXTtcclxuXHJcbnR5cGUgUHJveHlUYXJnZXRMaXN0ID0gUmVjb3JkPHN0cmluZywgUHJveHlPcHRpb25zICYgeyByZXdyaXRlOiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmcgfT47XHJcblxyXG5jb25zdCBodHRwc1JFID0gL15odHRwczpcXC9cXC8vO1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHByb3h5XHJcbiAqIEBwYXJhbSBsaXN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJveHkobGlzdDogUHJveHlMaXN0ID0gW10pIHtcclxuICBjb25zdCByZXQ6IFByb3h5VGFyZ2V0TGlzdCA9IHt9O1xyXG4gIGZvciAoY29uc3QgW3ByZWZpeCwgdGFyZ2V0XSBvZiBsaXN0KSB7XHJcbiAgICBjb25zdCBpc0h0dHBzID0gaHR0cHNSRS50ZXN0KHRhcmdldCk7XHJcblxyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2h0dHAtcGFydHkvbm9kZS1odHRwLXByb3h5I29wdGlvbnNcclxuICAgIHJldFtwcmVmaXhdID0ge1xyXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxyXG4gICAgICB3czogdHJ1ZSxcclxuICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtwcmVmaXh9YCksICcnKSxcclxuICAgICAgLy8gaHR0cHMgaXMgcmVxdWlyZSBzZWN1cmU9ZmFsc2VcclxuICAgICAgLi4uKGlzSHR0cHMgPyB7IHNlY3VyZTogZmFsc2UgfSA6IHt9KSxcclxuICAgIH07XHJcbiAgfVxyXG4gIHJldHVybiByZXQ7XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxzcmNcXFxcdXRpbHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXHNyY1xcXFx1dGlsc1xcXFxkYXRlVXRpbC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvY2hlbmcvRGVza3RvcC9za3lleWUtYWRtaW4vc3JjL3V0aWxzL2RhdGVVdGlsLnRzXCI7aW1wb3J0IGRheWpzLCB7IERheWpzIH0gZnJvbSAnZGF5anMnO1xyXG5cclxuY29uc3QgREFURV9USU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREIEhIOm1tJztcclxuY29uc3QgREFURV9GT1JNQVQgPSAnWVlZWS1NTS1ERCAnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRvRGF0ZVRpbWUoXHJcbiAgZGF0ZTogRGF0ZSB8IERheWpzIHwgc3RyaW5nLFxyXG4gIGZvcm1hdFN0ciA9IERBVEVfVElNRV9GT1JNQVQsXHJcbik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGRheWpzKGRhdGUpLmZvcm1hdChmb3JtYXRTdHIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VG9EYXRlKGRhdGU6IERhdGUgfCBEYXlqcyB8IHN0cmluZywgZm9ybWF0U3RyID0gREFURV9GT1JNQVQpOiBzdHJpbmcge1xyXG4gIHJldHVybiBkYXlqcyhkYXRlKS5mb3JtYXQoZm9ybWF0U3RyKTtcclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUyxlQUFlO0FBQ3hCLE9BQU8sUUFBUSxlQUFlOzs7QUNBOUIsT0FBTyxZQUFZO0FBYVosU0FBUyxlQUF3QjtBQUN0QyxTQUFPLFFBQVEsSUFBSSxXQUFXO0FBQ2hDO0FBR08sU0FBUyxXQUFXLFNBQThCO0FBQ3ZELFFBQU0sTUFBVyxDQUFDO0FBRWxCLGFBQVcsV0FBVyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBQzFDLFFBQUksV0FBVyxRQUFRLE9BQU8sRUFBRSxRQUFRLFFBQVEsSUFBSTtBQUNwRCxlQUFXLGFBQWEsU0FBUyxPQUFPLGFBQWEsVUFBVSxRQUFRO0FBRXZFLFFBQUksWUFBWSxhQUFhO0FBQzNCLGlCQUFXLE9BQU8sUUFBUTtBQUFBLElBQzVCO0FBQ0EsUUFBSSxZQUFZLGNBQWM7QUFDNUIsVUFBSTtBQUNGLG1CQUFXLEtBQUssTUFBTSxRQUFRO0FBQUEsTUFDaEMsU0FBUyxPQUFPO0FBQUEsTUFBQztBQUFBLElBQ25CO0FBQ0EsUUFBSSxPQUFPLElBQUk7QUFDZixZQUFRLElBQUksT0FBTyxJQUFJO0FBQUEsRUFDekI7QUFDQSxTQUFPO0FBQ1Q7OztBQ3JDQSxPQUFPLFNBQVM7QUFDaEIsT0FBTyxZQUFZO0FBQ25CLE9BQU8sb0JBQW9COzs7QUNDM0IsU0FBUyx3QkFBd0I7OztBQ0xqQztBQUFBLEVBQ0UsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLEVBQ1gsU0FBVztBQUFBLEVBQ1gsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLElBQ1QsV0FBYTtBQUFBLElBQ2IsT0FBUztBQUFBLElBQ1QsS0FBTztBQUFBLElBQ1AsY0FBZ0I7QUFBQSxJQUNoQixPQUFTO0FBQUEsSUFDVCxjQUFjO0FBQUEsSUFDZCxrQkFBa0I7QUFBQSxJQUNsQixRQUFVO0FBQUEsSUFDVixjQUFjO0FBQUEsSUFDZCxTQUFXO0FBQUEsSUFDWCxnQkFBZ0I7QUFBQSxJQUNoQixlQUFlO0FBQUEsSUFDZixhQUFhO0FBQUEsSUFDYixlQUFlO0FBQUEsSUFDZixpQkFBaUI7QUFBQSxJQUNqQixrQkFBa0I7QUFBQSxJQUNsQixvQkFBb0I7QUFBQSxJQUNwQixlQUFlO0FBQUEsSUFDZixrQkFBa0I7QUFBQSxJQUNsQixXQUFhO0FBQUEsSUFDYixtQkFBbUI7QUFBQSxJQUNuQixRQUFVO0FBQUEsSUFDVixTQUFXO0FBQUEsRUFDYjtBQUFBLEVBQ0EsY0FBZ0I7QUFBQSxJQUNkLDJCQUEyQjtBQUFBLElBQzNCLGlCQUFpQjtBQUFBLElBQ2pCLGdCQUFnQjtBQUFBLElBQ2hCLHFCQUFxQjtBQUFBLElBQ3JCLG9CQUFvQjtBQUFBLElBQ3BCLGdCQUFnQjtBQUFBLElBQ2hCLGtCQUFrQjtBQUFBLElBQ2xCLHNCQUFzQjtBQUFBLElBQ3RCLDhCQUE4QjtBQUFBLElBQzlCLGVBQWU7QUFBQSxJQUNmLFVBQVk7QUFBQSxJQUNaLE9BQVM7QUFBQSxJQUNULGVBQWU7QUFBQSxJQUNmLE9BQVM7QUFBQSxJQUNULFdBQWE7QUFBQSxJQUNiLE9BQVM7QUFBQSxJQUNULFNBQVc7QUFBQSxJQUNYLGdCQUFnQjtBQUFBLElBQ2hCLDJCQUEyQjtBQUFBLElBQzNCLGFBQWE7QUFBQSxJQUNiLGFBQWU7QUFBQSxJQUNmLE9BQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLFFBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxJQUNiLFdBQWE7QUFBQSxJQUNiLG9CQUFvQjtBQUFBLElBQ3BCLHFCQUFxQjtBQUFBLElBQ3JCLE9BQVM7QUFBQSxJQUNULFlBQVk7QUFBQSxJQUNaLFFBQVU7QUFBQSxJQUNWLElBQU07QUFBQSxJQUNOLEtBQU87QUFBQSxJQUNQLFlBQVk7QUFBQSxJQUNaLEtBQU87QUFBQSxJQUNQLGVBQWU7QUFBQSxJQUNmLGtCQUFrQjtBQUFBLElBQ2xCLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLGNBQWdCO0FBQUEsSUFDaEIsTUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBLGlCQUFtQjtBQUFBLElBQ2pCLG1CQUFtQjtBQUFBLElBQ25CLG1DQUFtQztBQUFBLElBQ25DLGtDQUFrQztBQUFBLElBQ2xDLG1CQUFtQjtBQUFBLElBQ25CLG9CQUFvQjtBQUFBLElBQ3BCLGVBQWU7QUFBQSxJQUNmLGlCQUFpQjtBQUFBLElBQ2pCLG9DQUFvQztBQUFBLElBQ3BDLDZCQUE2QjtBQUFBLElBQzdCLHNCQUFzQjtBQUFBLElBQ3RCLDBCQUEwQjtBQUFBLElBQzFCLHFCQUFxQjtBQUFBLElBQ3JCLGNBQWdCO0FBQUEsSUFDaEIsT0FBUztBQUFBLElBQ1QsUUFBVTtBQUFBLElBQ1YsWUFBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsUUFBVTtBQUFBLElBQ1YsUUFBVTtBQUFBLElBQ1YsMEJBQTBCO0FBQUEsSUFDMUIsd0JBQXdCO0FBQUEsSUFDeEIsMEJBQTBCO0FBQUEsSUFDMUIscUJBQXFCO0FBQUEsSUFDckIsTUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLElBQ1osWUFBWTtBQUFBLElBQ1osT0FBUztBQUFBLElBQ1QsTUFBUTtBQUFBLElBQ1IsZUFBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsWUFBYztBQUFBLElBQ2QsU0FBVztBQUFBLElBQ1gsMEJBQTBCO0FBQUEsSUFDMUIsVUFBWTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsUUFBVTtBQUFBLElBQ1YsNEJBQTRCO0FBQUEsSUFDNUIsTUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLElBQ2QsV0FBYTtBQUFBLElBQ2IsNkJBQTZCO0FBQUEsSUFDN0IsNkJBQTZCO0FBQUEsSUFDN0IsbUJBQW1CO0FBQUEsSUFDbkIsa0JBQWtCO0FBQUEsSUFDbEIsYUFBZTtBQUFBLElBQ2YsV0FBVztBQUFBLElBQ1gsWUFBYztBQUFBLElBQ2QsVUFBWTtBQUFBLElBQ1osTUFBUTtBQUFBLElBQ1IsMkJBQTJCO0FBQUEsSUFDM0Isb0JBQW9CO0FBQUEsSUFDcEIsb0JBQW9CO0FBQUEsSUFDcEIsNEJBQTRCO0FBQUEsSUFDNUIseUJBQXlCO0FBQUEsSUFDekIsd0JBQXdCO0FBQUEsSUFDeEIsZ0NBQWdDO0FBQUEsSUFDaEMscUJBQXFCO0FBQUEsSUFDckIsV0FBVztBQUFBLEVBQ2I7QUFBQSxFQUNBLGVBQWU7QUFBQSxJQUNiLHFCQUFxQjtBQUFBLEVBQ3ZCO0FBQUEsRUFDQSxRQUFVO0FBQUEsSUFDUixZQUFjO0FBQUEsTUFDWixNQUFRO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFVBQVk7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVc7QUFBQSxJQUNULE1BQVE7QUFBQSxFQUNWO0FBQUEsRUFDQSxNQUFRO0FBQUEsSUFDTixxQkFBdUI7QUFBQSxNQUNyQixlQUFpQjtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7OztBQ2xLTyxJQUFNLHdCQUF3QjtBQUU5QixJQUFNLGFBQWE7OztBRkcxQixTQUFTLGlCQUFpQjtBQUMxQixJQUFNLE1BQU0sVUFBVTtBQUV0QixlQUFlLGdCQUFnQjtBQUM3QixRQUFNLFNBQVMsTUFBTSxJQUFJLElBQUk7QUFFN0IsUUFBTSxhQUFhO0FBQ25CLFNBQU8sT0FBTyxRQUFRLEtBQUssVUFBVSxDQUFDLFlBQVksVUFBVTtBQUM5RDtBQUVPLFNBQVMsaUJBQWlCLEtBQWMsU0FBMkM7QUFDeEYsUUFBTSxFQUFFLG9CQUFvQixJQUFJO0FBRWhDLFFBQU1BLFFBQU87QUFFYixRQUFNLGtCQUFrQixNQUFNO0FBQzVCLFdBQU8sR0FBR0EsU0FBUSxHQUFHLEdBQUcscUJBQXFCLE1BQU0sZ0JBQUksT0FBTyxLQUFJLG9CQUFJLEtBQUssR0FBRSxRQUFRLENBQUM7QUFBQSxFQUN4RjtBQUVBLFNBQU8sSUFBSSxRQUFRLENBQUNDLGFBQVk7QUFDOUIsa0JBQWMsRUFBRSxLQUFLLENBQUMsU0FBUztBQUM3QixZQUFNLGFBQTZCLGlCQUFpQjtBQUFBLFFBQ2xELFFBQVE7QUFBQSxRQUNSLFFBQVE7QUFBQTtBQUFBLFVBRU4sTUFBTTtBQUFBLFlBQ0osT0FBTztBQUFBLFlBQ1A7QUFBQSxVQUNGO0FBQUE7QUFBQSxVQUVBLE1BQU0sVUFDRjtBQUFBLFlBQ0U7QUFBQSxjQUNFLEtBQUs7QUFBQSxjQUNMLE9BQU87QUFBQSxnQkFDTCxLQUFLLGdCQUFnQjtBQUFBLGNBQ3ZCO0FBQUEsWUFDRjtBQUFBLFVBQ0YsSUFDQSxDQUFDO0FBQUEsUUFDUDtBQUFBLE1BQ0YsQ0FBQztBQUNELE1BQUFBLFNBQVEsVUFBVTtBQUFBLElBQ3BCLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDs7O0FHakRBLFNBQVMscUJBQXFCO0FBRXZCLFNBQVMsaUJBQWlCLFNBQWtCLFVBQW1CO0FBQ3BFLFNBQU8sY0FBYztBQUFBLElBQ25CLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLGNBQWMsQ0FBQztBQUFBLElBQ2YsYUFBYSxXQUFXO0FBQUEsSUFDeEIsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLZCxDQUFDO0FBQ0g7OztBQ1pBLE9BQU8sb0JBQW9CO0FBRXBCLFNBQVMscUJBQ2QsVUFDQSxtQkFBbUIsT0FDQTtBQUNuQixRQUFNLGVBQWUsU0FBUyxNQUFNLEdBQUc7QUFFdkMsUUFBTSxVQUFvQixDQUFDO0FBRTNCLE1BQUksYUFBYSxTQUFTLE1BQU0sR0FBRztBQUNqQyxZQUFRO0FBQUEsTUFDTixlQUFlO0FBQUEsUUFDYixLQUFLO0FBQUEsUUFDTDtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0EsTUFBSSxhQUFhLFNBQVMsUUFBUSxHQUFHO0FBQ25DLFlBQVE7QUFBQSxNQUNOLGVBQWU7QUFBQSxRQUNiLEtBQUs7QUFBQSxRQUNMLFdBQVc7QUFBQSxRQUNYO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7OztBQ2pDQSxTQUFTLGtCQUFrQjtBQUdwQixTQUFTLHlCQUF5QjtBQUN2QyxNQUFJLGFBQWEsR0FBRztBQUNsQixXQUFPLFdBQVc7QUFBQSxNQUNoQixVQUFVO0FBQUEsTUFDVixNQUFNO0FBQUEsTUFDTixVQUFVO0FBQUEsTUFDVixZQUFZO0FBQUEsSUFDZCxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sQ0FBQztBQUNWOzs7QU5HTyxTQUFTLGtCQUFrQixTQUFrQixTQUFrQixVQUFVO0FBQzlFLFFBQU0sRUFBRSxlQUFlLHFCQUFxQix1Q0FBdUMsSUFBSTtBQUV2RixRQUFNLGNBQWlEO0FBQUE7QUFBQSxJQUVyRCxJQUFJO0FBQUE7QUFBQSxJQUVKLE9BQU87QUFBQSxJQUNQLGVBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWFqQjtBQUdBLGNBQVksS0FBSyxpQkFBaUIsU0FBUyxPQUFPLENBQUM7QUFHbkQsbUJBQWlCLFlBQVksS0FBSyxpQkFBaUIsU0FBUyxRQUFRLENBQUM7QUFHckUsY0FBWSxLQUFLLHVCQUF1QixDQUFDO0FBRXpDLE1BQUksU0FBUztBQUVYLGdCQUFZO0FBQUEsTUFDVixxQkFBcUIscUJBQXFCLHNDQUFzQztBQUFBLElBQ2xGO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDs7O0FPOUNBLElBQU0sVUFBVTtBQU1ULFNBQVMsWUFBWSxPQUFrQixDQUFDLEdBQUc7QUFDaEQsUUFBTSxNQUF1QixDQUFDO0FBQzlCLGFBQVcsQ0FBQyxRQUFRLE1BQU0sS0FBSyxNQUFNO0FBQ25DLFVBQU0sVUFBVSxRQUFRLEtBQUssTUFBTTtBQUduQyxRQUFJLE1BQU0sSUFBSTtBQUFBLE1BQ1o7QUFBQSxNQUNBLGNBQWM7QUFBQSxNQUNkLElBQUk7QUFBQSxNQUNKLFNBQVMsQ0FBQ0MsVUFBU0EsTUFBSyxRQUFRLElBQUksT0FBTyxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFBQTtBQUFBLE1BRTVELEdBQUksVUFBVSxFQUFFLFFBQVEsTUFBTSxJQUFJLENBQUM7QUFBQSxJQUNyQztBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7OztBQ2pDaVUsT0FBTyxXQUFzQjtBQUU5VixJQUFNLG1CQUFtQjtBQUdsQixTQUFTLGlCQUNkLE1BQ0EsWUFBWSxrQkFDSjtBQUNSLFNBQU8sTUFBTSxJQUFJLEVBQUUsT0FBTyxTQUFTO0FBQ3JDOzs7QVZEQSxTQUFTLDRCQUE0QjtBQVRyQyxJQUFNLG1DQUFtQztBQVd6QyxJQUFNLE1BQU0scUJBQXFCO0FBQUE7QUFBQSxFQUUvQixVQUFVLENBQUMsS0FBSyxRQUFRLGtDQUFXLGtCQUFrQixDQUFDO0FBQUE7QUFBQSxFQUV0RCxVQUFVO0FBQ1osQ0FBQztBQUVELElBQU0sRUFBRSxjQUFjLGlCQUFpQixNQUFNLFFBQVEsSUFBSTtBQUV6RCxJQUFNLGVBQWU7QUFBQSxFQUNuQixLQUFLLEVBQUUsY0FBYyxpQkFBaUIsTUFBTSxRQUFRO0FBQUEsRUFDcEQsZUFBZSxpQkFBaUIsb0JBQUksS0FBSyxDQUFDO0FBQzVDO0FBRUEsU0FBUyxZQUFZLEtBQWE7QUFDaEMsU0FBTyxRQUFRLFFBQVEsSUFBSSxHQUFHLEtBQUssR0FBRztBQUN4QztBQUVBLElBQU8sc0JBQVEsQ0FBQyxFQUFFLFNBQVMsS0FBSyxNQUE2QjtBQUMzRCxRQUFNLE9BQU8sUUFBUSxJQUFJO0FBQ3pCLFFBQU0sTUFBTSxRQUFRLE1BQU0sSUFBSTtBQUM5QixRQUFNLFVBQVUsV0FBVyxHQUFHO0FBQzlCLFFBQU0sRUFBRSxXQUFXLHFCQUFxQixXQUFXLElBQUk7QUFDdkQsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sVUFBVSxZQUFZO0FBQzVCLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLFNBQVMsQ0FBQztBQUFBLElBQ1YsU0FBUztBQUFBLE1BQ1AsT0FBTztBQUFBLFFBQ0w7QUFBQSxVQUNFLE1BQU07QUFBQSxVQUNOLGFBQWEsWUFBWSxPQUFPLElBQUk7QUFBQSxRQUN0QztBQUFBLFFBQ0E7QUFBQSxVQUNFLE1BQU07QUFBQSxVQUNOLGFBQWEsWUFBWSxLQUFLLElBQUk7QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLFFBQVEsQ0FBQyxLQUFLO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFNBQVMsQ0FBQyxrQkFBa0IsU0FBUyxTQUFTLFFBQVEsR0FBRyxHQUFHO0FBQUEsSUFDNUQsUUFBUTtBQUFBLE1BQ04sY0FBYyxLQUFLLFVBQVUsWUFBWTtBQUFBLElBQzNDO0FBQUEsSUFDQSxLQUFLO0FBQUEsTUFDSCxjQUFjO0FBQUEsTUFDZCxxQkFBcUI7QUFBQSxRQUNuQixNQUFNO0FBQUEsVUFDSixZQUFZLENBQUM7QUFBQSxVQUNiLG1CQUFtQjtBQUFBLFVBQ25CLGdCQUFnQjtBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLE9BQU8sWUFBWSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVEvQjtBQUFBLElBQ0EsY0FBYztBQUFBLE1BQ1osU0FBUyxDQUFDLFNBQVMscUJBQXFCLGdCQUFnQix5QkFBeUI7QUFBQSxNQUNqRixTQUFTLENBQUM7QUFBQSxJQUNaO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTCxRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFJUixlQUFlO0FBQUEsUUFDYixVQUFVO0FBQUEsVUFDUixlQUFlO0FBQUEsVUFDZixjQUFjO0FBQUEsUUFDaEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxzQkFBc0I7QUFBQSxNQUN0Qix1QkFBdUI7QUFBQSxJQUN6QjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFsicGF0aCIsICJyZXNvbHZlIiwgInBhdGgiXQp9Cg==