@studiokloek/vite-config 0.8.2 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +29 -15
- package/dist/plugins/lib/image-plugin.d.ts +1 -1
- package/package.json +41 -35
package/dist/index.js
CHANGED
|
@@ -10,7 +10,10 @@ import viteHandlebarsPlugin from 'vite-plugin-handlebars';
|
|
|
10
10
|
import legacyPlugin from '@vitejs/plugin-legacy';
|
|
11
11
|
import bannerPlugin from 'vite-plugin-banner';
|
|
12
12
|
import { createHtmlPlugin } from 'vite-plugin-html';
|
|
13
|
-
import
|
|
13
|
+
import viteImagemin from '@vheemstra/vite-plugin-imagemin';
|
|
14
|
+
import imageminMozjpeg from 'imagemin-mozjpeg';
|
|
15
|
+
import imageminPngQuant from 'imagemin-pngquant';
|
|
16
|
+
import imageminOptiPng from 'imagemin-optipng';
|
|
14
17
|
import fullReload from 'vite-plugin-full-reload';
|
|
15
18
|
import mkcert from 'vite-plugin-mkcert';
|
|
16
19
|
import checker from 'vite-plugin-checker';
|
|
@@ -77,7 +80,7 @@ function defineBuildConfig(options) {
|
|
|
77
80
|
input[gameId] = path.resolve(options.root, `${gameId}.html`);
|
|
78
81
|
}
|
|
79
82
|
// Libs die aparte js krijgen:
|
|
80
|
-
const vendorChunks = ['firebase', 'lodash', '
|
|
83
|
+
const vendorChunks = ['firebase', 'lodash', 'gsap', 'studiokloek'];
|
|
81
84
|
return {
|
|
82
85
|
reportCompressedSize: false,
|
|
83
86
|
chunkSizeWarningLimit: 1000,
|
|
@@ -255,17 +258,28 @@ function basePlugins(options) {
|
|
|
255
258
|
}
|
|
256
259
|
|
|
257
260
|
function imageminPlugin(environment, options) {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
261
|
+
if (environment.mode !== 'production') {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
return viteImagemin({
|
|
265
|
+
skipIfLarger: true,
|
|
266
|
+
verbose: true,
|
|
267
|
+
plugins: {
|
|
268
|
+
jpg: [
|
|
269
|
+
imageminMozjpeg({
|
|
270
|
+
quality: options?.jpeg ?? 80,
|
|
271
|
+
})
|
|
272
|
+
],
|
|
273
|
+
png: [
|
|
274
|
+
imageminPngQuant({
|
|
275
|
+
strip: true,
|
|
276
|
+
speed: 2,
|
|
277
|
+
dithering: 0.25,
|
|
278
|
+
quality: options?.png ?? [0.5, 0.7],
|
|
279
|
+
}),
|
|
280
|
+
imageminOptiPng()
|
|
281
|
+
]
|
|
282
|
+
}
|
|
269
283
|
});
|
|
270
284
|
}
|
|
271
285
|
|
|
@@ -372,7 +386,7 @@ function buildPlugins(options) {
|
|
|
372
386
|
if (options.config.build.manifest) {
|
|
373
387
|
plugins.push(manifestPlugin(options.settings.games));
|
|
374
388
|
}
|
|
375
|
-
return plugins;
|
|
389
|
+
return plugins.filter(plugin => plugin !== undefined);
|
|
376
390
|
}
|
|
377
391
|
|
|
378
392
|
function servePlugins() {
|
|
@@ -530,4 +544,4 @@ async function kloekBuild(flags) {
|
|
|
530
544
|
}
|
|
531
545
|
|
|
532
546
|
export { kloekBuild, kloekDevelopment };
|
|
533
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9nYW1lLnRzIiwiLi4vc3JjL3V0aWxzL2J1aWxkLnRzIiwiLi4vc3JjL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL3BsdWdpbnMvbGliL2hhbmRsZWJhcnMtcGx1Z2luLnRzIiwiLi4vc3JjL3BsdWdpbnMvbGliL2h0bWwtcGx1Z2luLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmFzZS50cyIsIi4uL3NyYy9wbHVnaW5zL2xpYi9pbWFnZS1wbHVnaW4udHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvbWFuaWZlc3QtcGx1Z2luLnRzIiwiLi4vc3JjL3BsdWdpbnMvYnVpbGQudHMiLCIuLi9zcmMvcGx1Z2lucy9zZXJ2ZS50cyIsIi4uL3NyYy9jb25maWcudHMiLCIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIHtcbiAgR2FtZVNldHRpbmdzLFxuICBHYW1lU2V0dGluZ3NQcm9wZXJ0eSxcbiAgR2FtZXNTZXR0aW5ncyxcbiAgR2FtZXNTZXR0aW5nc0RhdGEsXG4gIEtsb2VrVml0ZUNvbmZpZyxcbiAgUGFja2FnZUdhbWVzU2V0dGluZ3MsXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmZ1bmN0aW9uIG1lcmdlR2FtZVNldHRpbmdzKFxuICBnZW5lcmljOiBHYW1lU2V0dGluZ3MsXG4gIGdhbWU6IEdhbWVTZXR0aW5ncyxcbiAgaW5mb1R5cGVzOiBHYW1lU2V0dGluZ3NQcm9wZXJ0eVtdLFxuKTogR2FtZVNldHRpbmdzIHtcbiAgY29uc3Qgc2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgLy8gQWxsZSBwcm9wcyBvcCDDqcOpbiBsZXZlbCBkaWVwIG1lcmdlblxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGluZm9UeXBlcykge1xuICAgIHNldHRpbmdzW3Byb3BlcnR5XSA9IHtcbiAgICAgIC4uLmdlbmVyaWNbcHJvcGVydHldLFxuICAgICAgLi4uZ2FtZVtwcm9wZXJ0eV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXR0aW5ncyBhcyB1bmtub3duIGFzIEdhbWVTZXR0aW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFja2FnZUdhbWVzU2V0dGluZ3MoXG4gIHBhY2thZ2VTZXR0aW5nczogUGFja2FnZUdhbWVzU2V0dGluZ3MsXG4pOiBHYW1lc1NldHRpbmdzRGF0YSB7XG4gIC8vIE1lcmdlIHNldHRpbmdzXG4gIGNvbnN0IGluZm9UeXBlcyA9IE9iamVjdC5rZXlzKFxuICAgIHBhY2thZ2VTZXR0aW5ncy5nZW5lcmljLFxuICApIGFzIEdhbWVTZXR0aW5nc1Byb3BlcnR5W107XG4gIGNvbnN0IHtnZW5lcmljfSA9IHBhY2thZ2VTZXR0aW5ncztcbiAgY29uc3QgYWxsU2V0dGluZ3M6IEdhbWVzU2V0dGluZ3NEYXRhID0ge1xuICAgIGRldmVsb3BtZW50OiBnZW5lcmljLFxuICAgIGdhbWVzOiB7fSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IGdhbWUgb2YgcGFja2FnZVNldHRpbmdzLmdhbWVzID8/IFtdKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBtZXJnZUdhbWVTZXR0aW5ncyhnZW5lcmljLCBnYW1lLCBpbmZvVHlwZXMpO1xuXG4gICAgLy8gWm9yZyBlciB2b29yIGRhdCBwYWdlIGFsdGlqZCBnZXpldCBpc1xuICAgIGNvbnN0IHBhZ2VJZCA9IHNldHRpbmdzLmluZm8ucGFnZSA/PyBzZXR0aW5ncy5pbmZvLmlkID8/ICd1bmtub3duJztcbiAgICBzZXR0aW5ncy5pbmZvLnBhZ2UgPSBwYWdlSWQ7XG5cbiAgICAvLyBTbGEgc2V0dGluZ3Mgb3Agb25kZXIgcGFnZSBpZFxuICAgIGFsbFNldHRpbmdzLmdhbWVzW3BhZ2VJZF0gPSBzZXR0aW5ncztcbiAgfVxuXG4gIHJldHVybiBhbGxTZXR0aW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb0dhbWVEYXRhKFxuICBmdWxsRmlsZVBhdGg6IHN0cmluZyxcbiAgc2V0dGluZ3M6IEdhbWVzU2V0dGluZ3MsXG4pOiBHYW1lU2V0dGluZ3MgfCB1bmRlZmluZWQge1xuICAvLyBEZXRlcm1pbmUgZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb25cbiAgbGV0IGZpbGVQYXRoID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZVBhdGgsIHBhdGguZXh0bmFtZShmdWxsRmlsZVBhdGgpKTtcblxuICAvLyBEZXRlcm1pbmUgZGlyICYgcmVtb3ZlIGxlYWRpbmcgc2xhc2hcbiAgbGV0IGZpbGVEaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZnVsbEZpbGVQYXRoKTtcbiAgZmlsZURpcmVjdG9yeSA9IGZpbGVEaXJlY3RvcnkucmVwbGFjZSgvXlxcLysvZywgJycpO1xuXG4gIGlmIChmaWxlRGlyZWN0b3J5KSB7XG4gICAgZmlsZVBhdGggPSBgJHtmaWxlRGlyZWN0b3J5fS8ke2ZpbGVQYXRofWA7XG4gIH1cblxuICByZXR1cm4gc2V0dGluZ3NbZmlsZVBhdGhdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZVRvU2VydmUoXG4gIGNvbmZpZzogS2xvZWtWaXRlQ29uZmlnLFxuICBzZXR0aW5nczogR2FtZXNTZXR0aW5ncyxcbik6IHN0cmluZyB7XG4gIC8vIEhvZXZlZWwgcGFnZXMgemlqbiBlcj9cbiAgY29uc3QgcGFnZUlkcyA9IE9iamVjdC5rZXlzKHNldHRpbmdzKTtcbiAgY29uc3QgcGFnZSA9IHBhZ2VJZHMubGVuZ3RoID09PSAxID8gcGFnZUlkc1swXSA6ICdkZXZlbG9wbWVudCc7XG5cbiAgcmV0dXJuIHBhdGgucG9zaXguam9pbihcbiAgICBjb25maWcuYnVpbGQuYmFzZVBhdGgsXG4gICAgYCR7cGFnZX0uaHRtbCR7Y29uZmlnLmRldi5zZXJ2ZVBhcmFtcyA/PyAnJ31gLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZUlkRnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IHBhdGhuYW1lOiBzdHJpbmc7XG5cbiAgdHJ5IHtcbiAgICBwYXRobmFtZSA9IG5ldyBVUkwodXJsLCAnaHR0cHM6Ly9zdHVkaW9rbG9lay5ubCcpLnBhdGhuYW1lO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBJZiByZXF1ZXN0IGlzIG5vdCBodG1sICwgZGlyZWN0bHkgcmV0dXJuIG5leHQoKVxuICBpZiAoIXBhdGhuYW1lLmVuZHNXaXRoKCcuaHRtbCcpICYmIHBhdGhuYW1lICE9PSAnLycpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBQYWdpbmEgaWQgb3B2cmFnZW5cbiAgY29uc3QgaW5kZXggPSBwYXRobmFtZS5sYXN0SW5kZXhPZignLycpO1xuICBjb25zdCBmaWxlTmFtZSA9IGluZGV4ID09PSAtMSA/IHBhdGhuYW1lIDogcGF0aG5hbWUuc2xpY2UoaW5kZXggKyAxKTtcblxuICByZXR1cm4gZmlsZU5hbWUucmVwbGFjZSgnLmh0bWwnLCAnJyk7XG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUge0J1aWxkT3B0aW9uc30gZnJvbSAndml0ZSc7XG5pbXBvcnQgdHlwZSB7Vml0ZU9wdGlvbnN9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVCdWlsZENvbmZpZyhvcHRpb25zOiBWaXRlT3B0aW9ucyk6IEJ1aWxkT3B0aW9ucyB7XG4gIGNvbnN0IGlucHV0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgZm9yIChjb25zdCBnYW1lSWQgb2YgT2JqZWN0LmtleXMob3B0aW9ucy5zZXR0aW5ncy5nYW1lcykpIHtcbiAgICBpbnB1dFtnYW1lSWRdID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMucm9vdCwgYCR7Z2FtZUlkfS5odG1sYCk7XG4gIH1cblxuICAvLyBMaWJzIGRpZSBhcGFydGUganMga3JpamdlbjpcbiAgY29uc3QgdmVuZG9yQ2h1bmtzID0gWydmaXJlYmFzZScsICdsb2Rhc2gnLCAnY2FwYWNpdG9yJywgJ2dzYXAnLCAnc3R1ZGlva2xvZWsnXTtcblxuICByZXR1cm4ge1xuICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiBmYWxzZSxcbiAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDEwMDAsXG4gICAgb3V0RGlyOiAnLi4vcHVibGljJyxcbiAgICBhc3NldHNEaXI6ICdnZW5lcmF0ZWQnLFxuICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgIGlucHV0LFxuICAgICAgb3V0cHV0OiB7XG4gICAgICAgIG1hbnVhbENodW5rcyhpZCkge1xuICAgICAgICAgIGlmIChpZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzJykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpZFxuICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAuc3BsaXQoJ25vZGVfbW9kdWxlcy8nKVsxXVxuICAgICAgICAgICAgICAuc3BsaXQoJy8nKVswXVxuICAgICAgICAgICAgICAudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2ZW5kb3JDaHVua3MpIHtcbiAgICAgICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAndmVuZG9yJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuIiwiaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7bm9ybWFsaXplUGF0aH0gZnJvbSAndml0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkSlNPTihwYXRoOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gcmVhZEZpbGVTeW5jKHBhdGgpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vXG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBjb25zdCBjd2QgPSBub3JtYWxpemVQYXRoKHByb2Nlc3MuY3dkKCkpO1xuXG5leHBvcnQgKiBmcm9tICcuL2dhbWUnO1xuZXhwb3J0ICogZnJvbSAnLi9idWlsZCc7XG4iLCJpbXBvcnQgb3MgZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUge1BsdWdpbn0gZnJvbSAndml0ZSc7XG5pbXBvcnQgdml0ZUhhbmRsZWJhcnNQbHVnaW4gZnJvbSAndml0ZS1wbHVnaW4taGFuZGxlYmFycyc7XG5pbXBvcnQgdHlwZSB7Vml0ZU9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtnZXRQYWdlSWRGcm9tVXJsfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbi8vIEhlbHBlcnMgdm9vciBoYW5kbGViYXJzXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlYmFyc1BsdWdpbihcbiAgcGFydGlhbERpcmVjdG9yeTogc3RyaW5nIHwgc3RyaW5nW10sXG4gIG9wdGlvbnM6IFZpdGVPcHRpb25zLFxuKTogUGx1Z2luIHtcbiAgcmV0dXJuIHZpdGVIYW5kbGViYXJzUGx1Z2luKHtcbiAgICBwYXJ0aWFsRGlyZWN0b3J5LFxuXG4gICAgaGVscGVyczoge1xuICAgICAganNvbjogKG9iamVjdDogYW55LCBpbmRlbnQgPSAwKSA9PlxuICAgICAgICBKU09OLnN0cmluZ2lmeShvYmplY3QsIHVuZGVmaW5lZCwgaW5kZW50KSxcbiAgICAgIGNvbmNhdDogKC4uLmFyZ3VtZW50c186IGFueVtdKSA9PiBhcmd1bWVudHNfLnNsaWNlKDAsIC0xKS5qb2luKCcnKSxcbiAgICAgIGVxOiAoYTogYW55LCBiOiBhbnkpID0+IGEgPT09IGIsXG4gICAgICBuZXE6IChhOiBhbnksIGI6IGFueSkgPT4gYSAhPT0gYixcbiAgICAgIGlzZGVmaW5lZDogKHZhbHVlOiB1bmRlZmluZWQpID0+IHZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgICAncmVzb2x2ZS1yb290JyhwOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gVGlqZGVsaWprZSBoYWNrIHZvb3IgYnVnIGluIGhhbmRsZWJhcnMgcGx1Z2luXG4gICAgICAgIC8vIHppZSBvb2sgaHR0cHM6Ly9naXRodWIuY29tL2FsZXhsYWZyb3NjaWEvdml0ZS1wbHVnaW4taGFuZGxlYmFycy9wdWxsLzEyOVxuICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5yb290LCBwKTtcbiAgICAgICAgcmV0dXJuIG9zLnBsYXRmb3JtKCkgPT09ICd3aW4zMicgPyBgLyR7cmVzb2x2ZWRQYXRofWAgOiByZXNvbHZlZFBhdGg7XG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBjb250ZXh0KHBhZ2VQYXRoOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgICBjb25zdCBnYW1lSWQgPSBnZXRQYWdlSWRGcm9tVXJsKHBhZ2VQYXRoKTtcblxuICAgICAgaWYgKCFnYW1lSWQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2FtZUlkID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIC8vIFBhZ2luYSBzZXR0aW5ncyB0ZXJ1Z2dldmVuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW52OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgIGRhdGE6IG9wdGlvbnMuc2V0dGluZ3MuZGV2ZWxvcG1lbnQsXG4gICAgICAgICAgZ2FtZXM6IG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIE9wIGJhc2lzIHZhbiBwYWQgZGF0YSBiZXBhbGVuXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXNbZ2FtZUlkXTtcblxuICAgICAgLy8gUGFnaW5hIHNldHRpbmdzIHRlcnVnZ2V2ZW5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudjogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgZGF0YTogc2V0dGluZ3MgPz8ge30sXG4gICAgICB9O1xuICAgIH0sXG4gIH0pO1xufVxuIiwiaW1wb3J0IHtleGlzdHNTeW5jLCBwcm9taXNlc30gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUge0NvbmZpZ0VudiwgUGx1Z2luLCBVc2VyQ29uZmlnLCBWaXRlRGV2U2VydmVyfSBmcm9tICd2aXRlJztcbmltcG9ydCB0eXBlIHtHYW1lc1NldHRpbmdzfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcmZhY2VzJztcbmltcG9ydCB7Y3dkLCBnZXRQYWdlSWRGcm9tVXJsfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IFBBR0VfVEVNUExBVEUgPSAne3s+IGdhbWUgZGF0YT1kYXRhfX0nO1xuY29uc3QgREVWRUxPUE1FTlRfVEVNUExBVEUgPSAne3s+IGRldmVsb3BtZW50IGRhdGE9ZGF0YX19JztcblxuYXN5bmMgZnVuY3Rpb24gcmVuZGVyVGVtcG9yYXJ5RmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEJlc3RhYXQgZGllIGZpbGUgbm9nIG5pZXQ/XG4gIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAvLyBBYW5tYWtlblxuICAgIGF3YWl0IHByb21pc2VzLndyaXRlRmlsZShmaWxlUGF0aCwgUEFHRV9URU1QTEFURSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh0bWxQbHVnaW4oZ2FtZXM6IEdhbWVzU2V0dGluZ3MpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd2aXRlLXBsdWdpbi1rbG9lay1odG1sJyxcbiAgICBlbmZvcmNlOiAncHJlJyxcblxuICAgIGFzeW5jIGNvbmZpZyhfY29uZmlnOiBVc2VyQ29uZmlnLCBlbnZpcm9ubWVudDogQ29uZmlnRW52KSB7XG4gICAgICAvLyBCaWogZWVuIGJ1aWxkIG1ha2VuIHdlIHRpamRlbGlqayBmaWxlcyBhYW5cbiAgICAgIGlmIChlbnZpcm9ubWVudC5jb21tYW5kID09PSAnYnVpbGQnKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFByb21pc2U8dm9pZD4+ID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBwYWdlSWQgb2YgT2JqZWN0LmtleXMoZ2FtZXMpKSB7XG4gICAgICAgICAgLy8gUGFkIG5hYXIgZmlsZVxuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsIGAke3BhZ2VJZH0uaHRtbGApO1xuICAgICAgICAgIGFjdGlvbnMucHVzaChyZW5kZXJUZW1wb3JhcnlGaWxlKGZpbGVQYXRoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChhY3Rpb25zKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29uZmlndXJlU2VydmVyKHNlcnZlcjogVml0ZURldlNlcnZlcikge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgLy8gWm9yZyBlciB2b29yIGRhdCB0aWpkZW5zIGRldmVsb3BtZW50IGRlIHBhZ2luYSBnZS1yZW5kZXJlZCB0ZXJ1ZyBnZWdldmVuIHdvcmR0IHdvcmR0XG4gICAgICAgIHNlcnZlci5taWRkbGV3YXJlcy51c2UoJy8nLCBhc3luYyAocmVxdWVzdCwgcmVzcG9uc2UsIG5leHQpID0+IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSByZXF1ZXN0Py51cmwgPz8gJyc7XG4gICAgICAgICAgY29uc3QgcGFnZUlkID0gZ2V0UGFnZUlkRnJvbVVybCh1cmwpO1xuXG4gICAgICAgICAgaWYgKCFwYWdlSWQpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFnZUlkID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgICAvLyBEZXZlbG9wbWVudD8gZ2VlZiB0ZXJ1Zy4uLlxuICAgICAgICAgICAgcmVzcG9uc2UuZW5kKFxuICAgICAgICAgICAgICBhd2FpdCBzZXJ2ZXIudHJhbnNmb3JtSW5kZXhIdG1sKFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBERVZFTE9QTUVOVF9URU1QTEFURSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9yaWdpbmFsVXJsLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKGdhbWVzKS5pbmNsdWRlcyhwYWdlSWQpKSB7XG4gICAgICAgICAgICAvLyBCZXN0YWFuZGUgZ2FtZT8gem9yZyBlciB2b29yIGRhdCBkZSB0ZW1wbGF0ZSBnZS1yZW5kZXJlZCB3b3JkdFxuICAgICAgICAgICAgcmVzcG9uc2UuZW5kKFxuICAgICAgICAgICAgICBhd2FpdCBzZXJ2ZXIudHJhbnNmb3JtSW5kZXhIdG1sKFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBQQUdFX1RFTVBMQVRFLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Qub3JpZ2luYWxVcmwsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOaWtzIGdldm9uZGVuXG4gICAgICAgICAgICByZXNwb25zZS5lbmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2VCdW5kbGUoKSB7XG4gICAgICAvLyBWZXJ3aWpkZXIgZGUgYWFuZ2VtYWFrdGUgZmlsZXNcbiAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFByb21pc2U8dm9pZD4+ID0gW107XG4gICAgICBmb3IgKGNvbnN0IHBhZ2VJZCBvZiBPYmplY3Qua2V5cyhnYW1lcykpIHtcbiAgICAgICAgLy8gUGFkIG5hYXIgZmlsZVxuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShjd2QsICdzb3VyY2UnLCBgJHtwYWdlSWR9Lmh0bWxgKTtcbiAgICAgICAgaWYgKGV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChwcm9taXNlcy5ybShmaWxlUGF0aCkpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYWN0aW9ucyk7XG4gICAgfSxcbiAgfTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge3N2ZWx0ZSwgdml0ZVByZXByb2Nlc3N9IGZyb20gJ0BzdmVsdGVqcy92aXRlLXBsdWdpbi1zdmVsdGUnO1xuaW1wb3J0IHt0eXBlIFBsdWdpbiwgdHlwZSBQbHVnaW5PcHRpb259IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHRzY29uZmlnUGF0aHNQbHVnaW4gZnJvbSAndml0ZS10c2NvbmZpZy1wYXRocyc7XG5pbXBvcnQge3R5cGUgVml0ZU9wdGlvbnN9IGZyb20gJy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtjd2R9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7aGFuZGxlYmFyc1BsdWdpbn0gZnJvbSAnLi9saWIvaGFuZGxlYmFycy1wbHVnaW4nO1xuaW1wb3J0IHtodG1sUGx1Z2lufSBmcm9tICcuL2xpYi9odG1sLXBsdWdpbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlUGx1Z2lucyhcbiAgb3B0aW9uczogVml0ZU9wdGlvbnMsXG4pOiBBcnJheTxQbHVnaW4gfCBQbHVnaW5PcHRpb24+IHtcbiAgcmV0dXJuIFtcbiAgICBodG1sUGx1Z2luKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLFxuXG4gICAgLi4uc3ZlbHRlKHtcbiAgICAgIHByZXByb2Nlc3M6dml0ZVByZXByb2Nlc3MoKSxcblxuICAgICAgb253YXJuKHdhcm5pbmcsIHdhcm4pIHtcbiAgICAgICAgaWYgKCF3YXJuKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm8gYTExeSB3YXJuaW5ncy4uLlxuICAgICAgICBpZiAod2FybmluZy5jb2RlLnN0YXJ0c1dpdGgoJ2ExMXktJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuKHdhcm5pbmcpO1xuICAgICAgfSxcbiAgICB9KSxcblxuICAgIHRzY29uZmlnUGF0aHNQbHVnaW4oe1xuICAgICAgcm9vdDogcGF0aC5yZXNvbHZlKGN3ZCksXG4gICAgICAvLyBleHRlbnNpb25zOiBbJy50cycsICcuanNvbiddLFxuICAgICAgbG9vc2U6IHRydWUsXG4gICAgfSksXG4gIFxuICAgIGhhbmRsZWJhcnNQbHVnaW4ob3B0aW9ucy5jb25maWcuc2VydmUucGFydGlhbHMsIG9wdGlvbnMpLFxuICBdO1xufVxuIiwiaW1wb3J0IHR5cGUge0NvbmZpZ0VudiwgUGx1Z2lufSBmcm9tICd2aXRlJztcbmltcG9ydCBpbWFnZW1pblBsdWdpbjIgZnJvbSAndml0ZS1wbHVnaW4taW1hZ2VtaW4nO1xuaW1wb3J0IHR5cGUge0ltYWdlUXVhbGl0eUNvbmZpZ30gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZW1pblBsdWdpbihcbiAgZW52aXJvbm1lbnQ6IENvbmZpZ0VudixcbiAgb3B0aW9uczogSW1hZ2VRdWFsaXR5Q29uZmlnLFxuKTogUGx1Z2luIHtcbiAgcmV0dXJuIGltYWdlbWluUGx1Z2luMih7XG4gICAgZGlzYWJsZTogZW52aXJvbm1lbnQubW9kZSAhPT0gJ3Byb2R1Y3Rpb24nLFxuICAgIG1vempwZWc6IHtcbiAgICAgIHF1YWxpdHk6IG9wdGlvbnM/LmpwZWcgPz8gODAsXG4gICAgfSxcbiAgICBwbmdxdWFudDoge1xuICAgICAgc3RyaXA6IHRydWUsXG4gICAgICBzcGVlZDogMixcbiAgICAgIGRpdGhlcmluZzogMC4yNSxcbiAgICAgIHF1YWxpdHk6IG9wdGlvbnM/LnBuZyA/PyBbMC41LCAwLjddLFxuICAgIH0sXG4gIH0pIGFzIFBsdWdpbjtcbn1cbiIsImltcG9ydCB0eXBlIHtQbHVnaW4sIFJlc29sdmVkQ29uZmlnfSBmcm9tICd2aXRlJztcbmltcG9ydCB0eXBlIHtHYW1lU2V0dGluZ3MsIEdhbWVzU2V0dGluZ3N9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuXG5mdW5jdGlvbiByZW5kZXJHYW1lTWFuaWZlc3QoXG4gIHBhZ2VJZDogc3RyaW5nLFxuICBzZXR0aW5nczogR2FtZVNldHRpbmdzLFxuICBjb25maWc6IFJlc29sdmVkQ29uZmlnLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbWFuaWZlc3QgPSB7XG4gICAgc2hvcnRfbmFtZTogYCR7c2V0dGluZ3MubWV0YS5hcHB0aXRsZX1gLFxuICAgIG5hbWU6IGAke3NldHRpbmdzLm1ldGEudGl0bGV9YCxcbiAgICBkZXNjcmlwdGlvbjogYCR7c2V0dGluZ3MubWV0YS5kZXNjcmlwdGlvbn1gLFxuICAgIHNjb3BlOiBgJHtjb25maWcuYmFzZX0ke3BhZ2VJZH0uaHRtbGAsXG4gICAgc3RhcnRfdXJsOiBgJHtjb25maWcuYmFzZX0ke3BhZ2VJZH0uaHRtbGAsXG4gICAgZGlzcGxheTogJ2Z1bGxzY3JlZW4nLFxuICAgIG9yaWVudGF0aW9uOiBgJHtzZXR0aW5ncy5vcHRpb25zLm9yaWVudGF0aW9uID8/ICdsYW5kc2NhcGUnfWAsXG4gICAgaWNvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgc3JjOiBgJHtjb25maWcuYmFzZX1tZXRhLyR7c2V0dGluZ3MuaW5mby5pZH0vaWNvbnMvY2hyb21lLXRvdWNoLWljb24tMTkyeDE5Mi5wbmdgLFxuICAgICAgICB0eXBlOiAnaW1hZ2UvcG5nJyxcbiAgICAgICAgc2l6ZXM6ICcxOTJ4MTkyJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNyYzogYCR7Y29uZmlnLmJhc2V9bWV0YS8ke3NldHRpbmdzLmluZm8uaWR9L2ljb25zL2ljb24ucG5nYCxcbiAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgIHNpemVzOiAnMTAyNHgxMDI0JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBiYWNrZ3JvdW5kX2NvbG9yOiBgJHtzZXR0aW5ncy5vcHRpb25zLmJhY2tncm91bmRDb2xvcn1gLFxuICAgIHRoZW1lX2NvbG9yOiBgJHtzZXR0aW5ncy5vcHRpb25zLmJhY2tncm91bmRDb2xvcn1gLFxuICB9O1xuXG4gIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMil9XFxuYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hbmlmZXN0UGx1Z2luKGdhbWVzOiBHYW1lc1NldHRpbmdzKTogUGx1Z2luIHtcbiAgbGV0IGNvbmZpZzogUmVzb2x2ZWRDb25maWc7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAndml0ZS1wbHVnaW4ta2xvZWstbWFuaWZlc3QnLFxuICAgIGVuZm9yY2U6ICdwb3N0JyxcbiAgICBhcHBseTogJ2J1aWxkJyxcbiAgICBhc3luYyBjb25maWdSZXNvbHZlZChyZXNvbHZlZENvbmZpZzogUmVzb2x2ZWRDb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IHJlc29sdmVkQ29uZmlnO1xuICAgIH0sXG4gICAgZ2VuZXJhdGVCdW5kbGUoXywgYnVuZGxlKSB7XG4gICAgICAvLyBWb29yIGllZGVyZSBhcHAgZWVuIG1hbmlmZXN0IG1ha2VuOlxuICAgICAgZm9yIChjb25zdCBbcGFnZUlkLCBzZXR0aW5nc10gb2YgT2JqZWN0LmVudHJpZXMoZ2FtZXMpKSB7XG4gICAgICAgIGJ1bmRsZVtgJHtwYWdlSWR9LndlYm1hbmlmZXN0YF0gPSB7XG4gICAgICAgICAgbmVlZHNDb2RlUmVmZXJlbmNlOiBmYWxzZSxcbiAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzb3VyY2U6IHJlbmRlckdhbWVNYW5pZmVzdChwYWdlSWQsIHNldHRpbmdzLCBjb25maWcpLFxuICAgICAgICAgIGZpbGVOYW1lOiBgJHtwYWdlSWR9LndlYm1hbmlmZXN0YCxcbiAgICAgICAgfTtcblxuICAgICAgICBidW5kbGVbYCR7cGFnZUlkfS1zZXJ2aWNld29ya2VyLmpzYF0gPSB7XG4gICAgICAgICAgbmVlZHNDb2RlUmVmZXJlbmNlOiBmYWxzZSxcbiAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzb3VyY2U6IFwic2VsZi5hZGRFdmVudExpc3RlbmVyKCdmZXRjaCcsIGZ1bmN0aW9uKCkgeyByZXR1cm47IH0pO1wiLFxuICAgICAgICAgIGZpbGVOYW1lOiBgJHtwYWdlSWR9LXNlcnZpY2V3b3JrZXIuanNgLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgbGVnYWN5UGx1Z2luIGZyb20gJ0B2aXRlanMvcGx1Z2luLWxlZ2FjeSc7XG5pbXBvcnQgdHlwZSB7UGx1Z2luLCBQbHVnaW5PcHRpb259IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IGJhbm5lclBsdWdpbiBmcm9tICd2aXRlLXBsdWdpbi1iYW5uZXInO1xuaW1wb3J0IHtjcmVhdGVIdG1sUGx1Z2lufSBmcm9tICd2aXRlLXBsdWdpbi1odG1sJztcbmltcG9ydCB0eXBlIHtWaXRlT3B0aW9uc30gZnJvbSAnLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQge2ltYWdlbWluUGx1Z2lufSBmcm9tICcuL2xpYi9pbWFnZS1wbHVnaW4nO1xuaW1wb3J0IHttYW5pZmVzdFBsdWdpbn0gZnJvbSAnLi9saWIvbWFuaWZlc3QtcGx1Z2luJztcblxuLy8gQnVpbGQgcGx1Z2luc1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUGx1Z2lucyhcbiAgb3B0aW9uczogVml0ZU9wdGlvbnMsXG4pOiBBcnJheTxQbHVnaW4gfCBQbHVnaW5PcHRpb24+IHtcbiAgLy8gTm8gYnVpbGQ/IG5vIHBsdWdpbnMuLlxuICBpZiAob3B0aW9ucy5lbnZpcm9ubWVudC5jb21tYW5kICE9PSAnYnVpbGQnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGx1Z2luczogQXJyYXk8UGx1Z2luIHwgUGx1Z2luT3B0aW9uPiA9IFtdO1xuXG4gIGlmIChvcHRpb25zLmNvbmZpZy5idWlsZC5sZWdhY3kpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIHBhZ2Ugd29ya3MgaW4gb2xkZXIgYnJvd3NlcnNcbiAgICBwbHVnaW5zLnB1c2goXG4gICAgICAuLi5sZWdhY3lQbHVnaW4oe1xuICAgICAgICB0YXJnZXRzOiAob3B0aW9ucy5jb25maWcuYnVpbGQuYnJvd3NlcnNsaXN0IGFzIHN0cmluZ1tdKSA/PyAnZGVmYXVsdHMnLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHBhZ2VzID0gT2JqZWN0LmtleXMob3B0aW9ucy5zZXR0aW5ncy5nYW1lcykubWFwKChnYW1lSWQpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsZW5hbWU6IGAke2dhbWVJZH0uaHRtbGAsXG4gICAgICB0ZW1wbGF0ZTogYCR7Z2FtZUlkfS5odG1sYCxcbiAgICB9O1xuICB9KTtcblxuICBwbHVnaW5zLnB1c2goXG4gICAgLy8gTWluaWZ5IGltYWdlIGFzc2V0c1xuICAgIGltYWdlbWluUGx1Z2luKG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMuY29uZmlnLmJ1aWxkLmltYWdlUXVhbGl0eSksXG5cbiAgICAvLyBNYWtlIHRoZSBodG1sIG91dHB1dCBzbWFsbGVyXG4gICAgLi4uKGNyZWF0ZUh0bWxQbHVnaW4oe21pbmlmeTogdHJ1ZSwgcGFnZXN9KSBhcyBQbHVnaW5bXSksXG5cbiAgICAvLyBBZGQgYSBiYW5uZXIgdG8gZ2VuZXJhdGVkIGpzL2Nzc1xuICAgIGJhbm5lclBsdWdpbihcbiAgICAgIGBcbiAgICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuXG5cbiAgICAgICAgIF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICAgICAgXyAgICAgICAgICAgIF9cbiAgICAgICAgLyAgKSAgICAgICAgICAgICAgfCAgbyAgICAgICAgIC98ICAgLyB8IHwgICAgICAgICAgfCB8XG4gICAgICAgIFxcXFxfXyBffF8gICAgICAgICBfX3wgICAgICBfXyAgICAgfF9fLyAgfCB8ICBfXyAgIF8gIHwgfFxuICAgICAgICAgICBcXFxcIHwgIHwgICB8ICAvICB8ICB8ICAvICBcXFxcXyAgIHwgXFxcXCAgIHwvICAvICBcXFxcX3wvICB8L18pXG4gICAgICAgKF9fXy8gfF8vIFxcXFxfL3xfL1xcXFxfL3xfL3xfL1xcXFxfXy8gICAgfCAgXFxcXF8vfF9fL1xcXFxfXy8gfF9fL3wgXFxcXF8vXG5cbiAgICAgICAgQ29uY2VwdCwgb250d2VycCAmIG9udHdpa2tlbGluZ1xuICAgICAgICBodHRwczovL3N0dWRpb2tsb2VrLm5sXG5cbiAgICAgICAgU3R1ZGlvIEtsb2VrIOKdpCBQaXhpSlMsIEdTQVAgJiBob3dsZXIuanNcblxuICAgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC5cblxuICAgIGAsXG4gICAgKSxcbiAgKTtcblxuICAvLyBDcmVhdGUgYSBtYW5pZmVzdCBhbmQgbWluaW1hbCB3ZWJ3b3JrZXIgZm9yIGV2ZXJ5IGdhbWVcbiAgaWYgKG9wdGlvbnMuY29uZmlnLmJ1aWxkLm1hbmlmZXN0KSB7XG4gICAgcGx1Z2lucy5wdXNoKG1hbmlmZXN0UGx1Z2luKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpKTtcbiAgfVxuXG4gIHJldHVybiBwbHVnaW5zO1xufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7dHlwZSBQbHVnaW4sIHR5cGUgUGx1Z2luT3B0aW9ufSBmcm9tICd2aXRlJztcbmltcG9ydCBmdWxsUmVsb2FkIGZyb20gJ3ZpdGUtcGx1Z2luLWZ1bGwtcmVsb2FkJztcbmltcG9ydCBta2NlcnQgZnJvbSAndml0ZS1wbHVnaW4tbWtjZXJ0JztcbmltcG9ydCBjaGVja2VyIGZyb20gJ3ZpdGUtcGx1Z2luLWNoZWNrZXInO1xuaW1wb3J0IHtjd2R9IGZyb20gJy4uL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZVBsdWdpbnMoKTogQXJyYXk8UGx1Z2luIHwgUGx1Z2luT3B0aW9uPiB7XG4gIHJldHVybiBbXG4gICAgZnVsbFJlbG9hZChbJ3NjcmlwdC8qKi8qLnRzJywgJ3N2ZWx0ZS8qKi8qLnN2ZWx0ZSddLCB7XG4gICAgICByb290OiBwYXRoLmpvaW4ocGF0aC5yZXNvbHZlKGN3ZCksICdzb3VyY2UnKSxcbiAgICAgIGxvZzogdHJ1ZSxcbiAgICAgIGFsd2F5czogdHJ1ZSxcbiAgICB9KSBhcyBQbHVnaW4sXG5cbiAgICBta2NlcnQoKSxcblxuICAgIGNoZWNrZXIoe1xuICAgICAgdHlwZXNjcmlwdDogdHJ1ZSxcbiAgICB9KSxcbiAgXTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB0eXBlIHtDb25maWdFbnYsIFVzZXJDb25maWd9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHtiYXNlUGx1Z2luc30gZnJvbSAnLi9wbHVnaW5zL2Jhc2UnO1xuaW1wb3J0IHtidWlsZFBsdWdpbnN9IGZyb20gJy4vcGx1Z2lucy9idWlsZCc7XG5pbXBvcnQge3NlcnZlUGx1Z2luc30gZnJvbSAnLi9wbHVnaW5zL3NlcnZlJztcbmltcG9ydCB7XG4gIGN3ZCxcbiAgZGVmaW5lQnVpbGRDb25maWcsXG4gIGdldFBhZ2VUb1NlcnZlLFxuICBwYXJzZVBhY2thZ2VHYW1lc1NldHRpbmdzLFxuICByZWFkSlNPTixcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7XG4gIEtsb2VrVml0ZUNvbmZpZyxcbiAgUGFja2FnZUdhbWVzU2V0dGluZ3MsXG4gIFZpdGVPcHRpb25zLFxufSBmcm9tICcuL3V0aWxzL2ludGVyZmFjZXMnO1xuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlZmluZUtsb2VrVml0ZUNvbmZpZyhcbiAgZW52aXJvbm1lbnQ6IENvbmZpZ0Vudixcbik6IFByb21pc2U8VXNlckNvbmZpZz4ge1xuICBjb25zdCBwa2cgPSByZWFkSlNPTihwYXRoLnJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJykpIGFzIFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgdW5rbm93blxuICA+O1xuICBjb25zdCBrbG9la0NvbmZpZyA9IHBrZy52aXRlIGFzIEtsb2VrVml0ZUNvbmZpZztcbiAgY29uc3QgYnJvd3NlcnNsaXN0ID0gcGtnLmJyb3dzZXJzbGlzdCBhcyBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgY29uc3Qgb3B0aW9uczogVml0ZU9wdGlvbnMgPSB7XG4gICAgcm9vdDogcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScpLFxuICAgIGVudmlyb25tZW50LFxuICAgIHNldHRpbmdzOiBwYXJzZVBhY2thZ2VHYW1lc1NldHRpbmdzKHBrZy5zZXR0aW5ncyBhcyBQYWNrYWdlR2FtZXNTZXR0aW5ncyksXG4gICAgY29uZmlnOiB7XG4gICAgICAuLi5rbG9la0NvbmZpZyxcbiAgICAgIGJ1aWxkOiB7Li4ua2xvZWtDb25maWcuYnVpbGQsIGJyb3dzZXJzbGlzdH0sXG4gICAgICBzZXJ2ZToge1xuICAgICAgICBwYXJ0aWFsczogW1xuICAgICAgICAgIHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdwYXJ0aWFscycpLFxuICAgICAgICAgIHBhdGgucmVzb2x2ZShjd2QsICdzb3VyY2UnLCAncGFydGlhbHMnKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBjb25maWc6IFVzZXJDb25maWcgPSB7XG4gICAgbG9nTGV2ZWw6ICdpbmZvJyxcbiAgICBiYXNlOiBrbG9la0NvbmZpZy5idWlsZC5iYXNlUGF0aCxcbiAgICByb290OiBvcHRpb25zLnJvb3QsXG4gICAgZW52RGlyOiBwYXRoLnJlc29sdmUoY3dkLCAnZW52JyksXG4gICAgZW52UHJlZml4OiBbJ0tMT0VLXycsICdWSVRFXyddLFxuICAgIHB1YmxpY0RpcjogJ3N0YXRpYycsXG4gICAgZGVmaW5lOiB7fSxcblxuICAgIGVzYnVpbGQ6IHtcbiAgICAgIGxlZ2FsQ29tbWVudHM6ICdub25lJyxcbiAgICB9LFxuXG4gICAgcmVzb2x2ZToge1xuICAgICAgZGVkdXBlOiBbXG4gICAgICAgICdAc3R1ZGlva2xvZWsvdHMtY29yZS1saWInLFxuICAgICAgICAnQGNhcGFjaXRvci9hcHAnLFxuICAgICAgICAnQGNhcGFjaXRvci9jb3JlJyxcbiAgICAgICAgJ0BjYXBhY2l0b3IvZGV2aWNlJyxcbiAgICAgICAgJ0BjYXBhY2l0b3IvbmV0d29yaycsXG4gICAgICAgICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nLFxuICAgICAgICAnQGNhcGFjaXRvci9zdGF0dXMtYmFyJyxcbiAgICAgICAgJ0BjYXBhY2l0b3IvcHJlZmVyZW5jZXMnLFxuICAgICAgICAnYm93c2VyJyxcbiAgICAgICAgJ2ZvbnRmYWNlb2JzZXJ2ZXInLFxuICAgICAgICAnZ3NhcCcsXG4gICAgICAgICdob3dsZXInLFxuICAgICAgICAnbG9kYXNoLWRlY29yYXRvcnMtZXNtJyxcbiAgICAgICAgJ2xvZGFzaC1lcycsXG4gICAgICAgICdwaXhpLXNwaW5lJyxcbiAgICAgICAgJ3BpeGkuanMnLFxuICAgICAgICAncHVic3ViLWpzJyxcbiAgICAgICAgJ3JhbmRvbS1qcycsXG4gICAgICAgICdyZXNzJyxcbiAgICAgICAgJ3NsdWdpZnknLFxuICAgICAgICAnc3VwZXJhZ2VudCcsXG4gICAgICAgICd0cy1ldmVudHMnLFxuICAgICAgICAndHMtbWl4ZXInLFxuICAgICAgICAndHNsaWInLFxuICAgICAgXSxcbiAgICAgIGFsaWFzOiB7XG4gICAgICAgIGxvZGFzaDogJ2xvZGFzaC1lcycsXG4gICAgICAgICdAbWV0YSc6IHBhdGgucmVzb2x2ZShjd2QsICdzb3VyY2UnLCAnc3RhdGljJywgJ21ldGEnKSxcbiAgICAgICAgJ0Bmb250cyc6IHBhdGgucmVzb2x2ZShjd2QsICdzb3VyY2UnLCAnc3RhdGljJywgJ2ZvbnRzJyksXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBjc3M6IHtcbiAgICAgIHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcbiAgICAgICAgc2Nzczoge1xuICAgICAgICAgIGNoYXJzZXQ6IGZhbHNlLFxuICAgICAgICAgIC8vIEFkZGl0aW9uYWxEYXRhOiBgQGNoYXJzZXQgXCJVVEYtOFwiYCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHBsdWdpbnM6IFsuLi5iYXNlUGx1Z2lucyhvcHRpb25zKV0sXG4gIH07XG5cbiAgc3dpdGNoIChlbnZpcm9ubWVudC5jb21tYW5kKSB7XG4gICAgY2FzZSAnc2VydmUnOlxuICAgICAgY29uZmlnLnNlcnZlciA9IHtcbiAgICAgICAgaG9zdDogdHJ1ZSxcbiAgICAgICAgY29yczogb3B0aW9ucy5jb25maWcuZGV2LmNvcnMgPz8gdHJ1ZSxcbiAgICAgICAgaHR0cHM6IG9wdGlvbnMuY29uZmlnLmRldi5odHRwcyA/PyB0cnVlLFxuICAgICAgICBvcGVuOiBnZXRQYWdlVG9TZXJ2ZShvcHRpb25zLmNvbmZpZywgb3B0aW9ucy5zZXR0aW5ncy5nYW1lcyksXG4gICAgICB9O1xuICAgICAgY29uZmlnLnBsdWdpbnMgPSBbXG4gICAgICAgIC4uLihjb25maWcucGx1Z2lucyA/IGNvbmZpZy5wbHVnaW5zIDogW10pLFxuICAgICAgICAuLi5zZXJ2ZVBsdWdpbnMoKSxcbiAgICAgIF07XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYnVpbGQnOlxuICAgICAgY29uZmlnLmJ1aWxkID0gZGVmaW5lQnVpbGRDb25maWcob3B0aW9ucyk7XG4gICAgICBjb25maWcucGx1Z2lucyA9IFtcbiAgICAgICAgLi4uKGNvbmZpZy5wbHVnaW5zID8gY29uZmlnLnBsdWdpbnMgOiBbXSksXG4gICAgICAgIC4uLmJ1aWxkUGx1Z2lucyhvcHRpb25zKSxcbiAgICAgIF07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwiaW1wb3J0IHt0eXBlIFR5cGVkRmxhZ3N9IGZyb20gJ21lb3cnO1xuaW1wb3J0IHtidWlsZCwgY3JlYXRlU2VydmVyfSBmcm9tICd2aXRlJztcbmltcG9ydCB7ZGVmaW5lS2xvZWtWaXRlQ29uZmlnfSBmcm9tICcuL2NvbmZpZyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBrbG9la0RldmVsb3BtZW50KFxuICBmbGFnczogVHlwZWRGbGFnczx7XG4gICAgbW9kZToge1xuICAgICAgdHlwZTogJ3N0cmluZyc7XG4gICAgICBzaG9ydEZsYWc6IHN0cmluZztcbiAgICAgIGRlZmF1bHQ/OiBzdHJpbmc7XG4gICAgfTtcbiAgfT4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgZGVmaW5lS2xvZWtWaXRlQ29uZmlnKHtcbiAgICBjb21tYW5kOiAnc2VydmUnLFxuICAgIG1vZGU6ICdkZXZlbG9wbWVudCcsXG4gIH0pO1xuXG4gIC8vIERpZmZlcmVudCBtb2RlXG4gIGlmICh0eXBlb2YgZmxhZ3MubW9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcubW9kZSA9IGZsYWdzLm1vZGU7XG4gIH1cblxuICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBjcmVhdGVTZXJ2ZXIoe1xuICAgIGNvbmZpZ0ZpbGU6IGZhbHNlLFxuICAgIC4uLmNvbmZpZyxcbiAgfSk7XG5cbiAgYXdhaXQgc2VydmVyLmxpc3RlbigpO1xuICBzZXJ2ZXIucHJpbnRVcmxzKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBrbG9la0J1aWxkKFxuICBmbGFnczogVHlwZWRGbGFnczx7XG4gICAgZW1wdHlPdXREaXI6IHtcbiAgICAgIHR5cGU6ICdib29sZWFuJztcbiAgICAgIHNob3J0RmxhZzogc3RyaW5nO1xuICAgICAgZGVmYXVsdDogdHJ1ZTtcbiAgICB9O1xuICAgIGJhc2U6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0OiBzdHJpbmc7XG4gICAgfTtcbiAgICBtb2RlOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJztcbiAgICAgIHNob3J0RmxhZzogc3RyaW5nO1xuICAgICAgZGVmYXVsdD86IHN0cmluZztcbiAgICB9O1xuICB9Pixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBkZWZpbmVLbG9la1ZpdGVDb25maWcoe1xuICAgIGNvbW1hbmQ6ICdidWlsZCcsXG4gICAgbW9kZTogJ3Byb2R1Y3Rpb24nLFxuICB9KTtcblxuICAvLyBFbXB0eSBvdXQgdGhlIE91dHB1dCBkaXIgYmVmb3JlIGJ1aWxkaW5nP1xuICBpZiAoZmxhZ3MuZW1wdHlPdXREaXIgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZy5idWlsZCA9IHtcbiAgICAgIC4uLmNvbmZpZy5idWlsZCxcbiAgICAgIGVtcHR5T3V0RGlyOiBmbGFncy5lbXB0eU91dERpcixcbiAgICB9O1xuICB9XG5cbiAgLy8gRGlmZmVyZW50IGJhc2UgcGF0aFxuICBpZiAodHlwZW9mIGZsYWdzLmJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnLmJhc2UgPSBmbGFncy5iYXNlO1xuICB9XG5cbiAgLy8gRGlmZmVyZW50IG1vZGVcbiAgaWYgKHR5cGVvZiBmbGFncy5tb2RlID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZy5tb2RlID0gZmxhZ3MubW9kZTtcbiAgfVxuXG4gIGF3YWl0IGJ1aWxkKHtcbiAgICBjb25maWdGaWxlOiBmYWxzZSxcbiAgICAuLi5jb25maWcsXG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsU0FBUyxpQkFBaUIsQ0FDeEIsT0FBcUIsRUFDckIsSUFBa0IsRUFDbEIsU0FBaUMsRUFBQTtJQUVqQyxNQUFNLFFBQVEsR0FBNEIsRUFBRSxDQUFDOztBQUc3QyxJQUFBLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFO1FBQ2hDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRztZQUNuQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDcEIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2xCLENBQUM7QUFDSCxLQUFBO0FBRUQsSUFBQSxPQUFPLFFBQW1DLENBQUM7QUFDN0MsQ0FBQztBQUVLLFNBQVUseUJBQXlCLENBQ3ZDLGVBQXFDLEVBQUE7O0lBR3JDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzNCLGVBQWUsQ0FBQyxPQUFPLENBQ0UsQ0FBQztBQUM1QixJQUFBLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxlQUFlLENBQUM7QUFDbEMsSUFBQSxNQUFNLFdBQVcsR0FBc0I7QUFDckMsUUFBQSxXQUFXLEVBQUUsT0FBTztBQUNwQixRQUFBLEtBQUssRUFBRSxFQUFFO0tBQ1YsQ0FBQztJQUVGLEtBQUssTUFBTSxJQUFJLElBQUksZUFBZSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUU7UUFDOUMsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzs7QUFHN0QsUUFBQSxN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
|
|
547
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9nYW1lLnRzIiwiLi4vc3JjL3V0aWxzL2J1aWxkLnRzIiwiLi4vc3JjL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL3BsdWdpbnMvbGliL2hhbmRsZWJhcnMtcGx1Z2luLnRzIiwiLi4vc3JjL3BsdWdpbnMvbGliL2h0bWwtcGx1Z2luLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmFzZS50cyIsIi4uL3NyYy9wbHVnaW5zL2xpYi9pbWFnZS1wbHVnaW4udHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvbWFuaWZlc3QtcGx1Z2luLnRzIiwiLi4vc3JjL3BsdWdpbnMvYnVpbGQudHMiLCIuLi9zcmMvcGx1Z2lucy9zZXJ2ZS50cyIsIi4uL3NyYy9jb25maWcudHMiLCIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmZ1bmN0aW9uIG1lcmdlR2FtZVNldHRpbmdzKGdlbmVyaWMsIGdhbWUsIGluZm9UeXBlcykge1xuICAgIGNvbnN0IHNldHRpbmdzID0ge307XG4gICAgLy8gQWxsZSBwcm9wcyBvcCDDqcOpbiBsZXZlbCBkaWVwIG1lcmdlblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgaW5mb1R5cGVzKSB7XG4gICAgICAgIHNldHRpbmdzW3Byb3BlcnR5XSA9IHtcbiAgICAgICAgICAgIC4uLmdlbmVyaWNbcHJvcGVydHldLFxuICAgICAgICAgICAgLi4uZ2FtZVtwcm9wZXJ0eV0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzZXR0aW5ncztcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhY2thZ2VHYW1lc1NldHRpbmdzKHBhY2thZ2VTZXR0aW5ncykge1xuICAgIC8vIE1lcmdlIHNldHRpbmdzXG4gICAgY29uc3QgaW5mb1R5cGVzID0gT2JqZWN0LmtleXMocGFja2FnZVNldHRpbmdzLmdlbmVyaWMpO1xuICAgIGNvbnN0IHsgZ2VuZXJpYyB9ID0gcGFja2FnZVNldHRpbmdzO1xuICAgIGNvbnN0IGFsbFNldHRpbmdzID0ge1xuICAgICAgICBkZXZlbG9wbWVudDogZ2VuZXJpYyxcbiAgICAgICAgZ2FtZXM6IHt9LFxuICAgIH07XG4gICAgZm9yIChjb25zdCBnYW1lIG9mIHBhY2thZ2VTZXR0aW5ncy5nYW1lcyA/PyBbXSkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IG1lcmdlR2FtZVNldHRpbmdzKGdlbmVyaWMsIGdhbWUsIGluZm9UeXBlcyk7XG4gICAgICAgIC8vIFpvcmcgZXIgdm9vciBkYXQgcGFnZSBhbHRpamQgZ2V6ZXQgaXNcbiAgICAgICAgY29uc3QgcGFnZUlkID0gc2V0dGluZ3MuaW5mby5wYWdlID8/IHNldHRpbmdzLmluZm8uaWQgPz8gJ3Vua25vd24nO1xuICAgICAgICBzZXR0aW5ncy5pbmZvLnBhZ2UgPSBwYWdlSWQ7XG4gICAgICAgIC8vIFNsYSBzZXR0aW5ncyBvcCBvbmRlciBwYWdlIGlkXG4gICAgICAgIGFsbFNldHRpbmdzLmdhbWVzW3BhZ2VJZF0gPSBzZXR0aW5ncztcbiAgICB9XG4gICAgcmV0dXJuIGFsbFNldHRpbmdzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb0dhbWVEYXRhKGZ1bGxGaWxlUGF0aCwgc2V0dGluZ3MpIHtcbiAgICAvLyBEZXRlcm1pbmUgZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb25cbiAgICBsZXQgZmlsZVBhdGggPSBwYXRoLmJhc2VuYW1lKGZ1bGxGaWxlUGF0aCwgcGF0aC5leHRuYW1lKGZ1bGxGaWxlUGF0aCkpO1xuICAgIC8vIERldGVybWluZSBkaXIgJiByZW1vdmUgbGVhZGluZyBzbGFzaFxuICAgIGxldCBmaWxlRGlyZWN0b3J5ID0gcGF0aC5kaXJuYW1lKGZ1bGxGaWxlUGF0aCk7XG4gICAgZmlsZURpcmVjdG9yeSA9IGZpbGVEaXJlY3RvcnkucmVwbGFjZSgvXlxcLysvZywgJycpO1xuICAgIGlmIChmaWxlRGlyZWN0b3J5KSB7XG4gICAgICAgIGZpbGVQYXRoID0gYCR7ZmlsZURpcmVjdG9yeX0vJHtmaWxlUGF0aH1gO1xuICAgIH1cbiAgICByZXR1cm4gc2V0dGluZ3NbZmlsZVBhdGhdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2VUb1NlcnZlKGNvbmZpZywgc2V0dGluZ3MpIHtcbiAgICAvLyBIb2V2ZWVsIHBhZ2VzIHppam4gZXI/XG4gICAgY29uc3QgcGFnZUlkcyA9IE9iamVjdC5rZXlzKHNldHRpbmdzKTtcbiAgICBjb25zdCBwYWdlID0gcGFnZUlkcy5sZW5ndGggPT09IDEgPyBwYWdlSWRzWzBdIDogJ2RldmVsb3BtZW50JztcbiAgICByZXR1cm4gcGF0aC5wb3NpeC5qb2luKGNvbmZpZy5idWlsZC5iYXNlUGF0aCwgYCR7cGFnZX0uaHRtbCR7Y29uZmlnLmRldi5zZXJ2ZVBhcmFtcyA/PyAnJ31gKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlSWRGcm9tVXJsKHVybCkge1xuICAgIGlmICghdXJsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgbGV0IHBhdGhuYW1lO1xuICAgIHRyeSB7XG4gICAgICAgIHBhdGhuYW1lID0gbmV3IFVSTCh1cmwsICdodHRwczovL3N0dWRpb2tsb2VrLm5sJykucGF0aG5hbWU7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvLyBJZiByZXF1ZXN0IGlzIG5vdCBodG1sICwgZGlyZWN0bHkgcmV0dXJuIG5leHQoKVxuICAgIGlmICghcGF0aG5hbWUuZW5kc1dpdGgoJy5odG1sJykgJiYgcGF0aG5hbWUgIT09ICcvJykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIC8vIFBhZ2luYSBpZCBvcHZyYWdlblxuICAgIGNvbnN0IGluZGV4ID0gcGF0aG5hbWUubGFzdEluZGV4T2YoJy8nKTtcbiAgICBjb25zdCBmaWxlTmFtZSA9IGluZGV4ID09PSAtMSA/IHBhdGhuYW1lIDogcGF0aG5hbWUuc2xpY2UoaW5kZXggKyAxKTtcbiAgICByZXR1cm4gZmlsZU5hbWUucmVwbGFjZSgnLmh0bWwnLCAnJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nYW1lLmpzLm1hcCIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQnVpbGRDb25maWcob3B0aW9ucykge1xuICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgZm9yIChjb25zdCBnYW1lSWQgb2YgT2JqZWN0LmtleXMob3B0aW9ucy5zZXR0aW5ncy5nYW1lcykpIHtcbiAgICAgICAgaW5wdXRbZ2FtZUlkXSA9IHBhdGgucmVzb2x2ZShvcHRpb25zLnJvb3QsIGAke2dhbWVJZH0uaHRtbGApO1xuICAgIH1cbiAgICAvLyBMaWJzIGRpZSBhcGFydGUganMga3JpamdlbjpcbiAgICBjb25zdCB2ZW5kb3JDaHVua3MgPSBbJ2ZpcmViYXNlJywgJ2xvZGFzaCcsICdnc2FwJywgJ3N0dWRpb2tsb2VrJ107XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVwb3J0Q29tcHJlc3NlZFNpemU6IGZhbHNlLFxuICAgICAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDEwMDAsXG4gICAgICAgIG91dERpcjogJy4uL3B1YmxpYycsXG4gICAgICAgIGFzc2V0c0RpcjogJ2dlbmVyYXRlZCcsXG4gICAgICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICAgICAgbWFudWFsQ2h1bmtzKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCdub2RlX21vZHVsZXMvJylbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJy8nKVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2ZW5kb3JDaHVua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndmVuZG9yJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWlsZC5qcy5tYXAiLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAndml0ZSc7XG5leHBvcnQgZnVuY3Rpb24gcmVhZEpTT04ocGF0aCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByZWFkRmlsZVN5bmMocGF0aCk7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgLy9cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IGNvbnN0IGN3ZCA9IG5vcm1hbGl6ZVBhdGgocHJvY2Vzcy5jd2QoKSk7XG5leHBvcnQgKiBmcm9tICcuL2dhbWUnO1xuZXhwb3J0ICogZnJvbSAnLi9idWlsZCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgb3MgZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHZpdGVIYW5kbGViYXJzUGx1Z2luIGZyb20gJ3ZpdGUtcGx1Z2luLWhhbmRsZWJhcnMnO1xuaW1wb3J0IHsgZ2V0UGFnZUlkRnJvbVVybCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbi8vIEhlbHBlcnMgdm9vciBoYW5kbGViYXJzXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlYmFyc1BsdWdpbihwYXJ0aWFsRGlyZWN0b3J5LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHZpdGVIYW5kbGViYXJzUGx1Z2luKHtcbiAgICAgICAgcGFydGlhbERpcmVjdG9yeSxcbiAgICAgICAgaGVscGVyczoge1xuICAgICAgICAgICAganNvbjogKG9iamVjdCwgaW5kZW50ID0gMCkgPT4gSlNPTi5zdHJpbmdpZnkob2JqZWN0LCB1bmRlZmluZWQsIGluZGVudCksXG4gICAgICAgICAgICBjb25jYXQ6ICguLi5hcmd1bWVudHNfKSA9PiBhcmd1bWVudHNfLnNsaWNlKDAsIC0xKS5qb2luKCcnKSxcbiAgICAgICAgICAgIGVxOiAoYSwgYikgPT4gYSA9PT0gYixcbiAgICAgICAgICAgIG5lcTogKGEsIGIpID0+IGEgIT09IGIsXG4gICAgICAgICAgICBpc2RlZmluZWQ6ICh2YWx1ZSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdyZXNvbHZlLXJvb3QnKHApIHtcbiAgICAgICAgICAgICAgICAvLyBUaWpkZWxpamtlIGhhY2sgdm9vciBidWcgaW4gaGFuZGxlYmFycyBwbHVnaW5cbiAgICAgICAgICAgICAgICAvLyB6aWUgb29rIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGV4bGFmcm9zY2lhL3ZpdGUtcGx1Z2luLWhhbmRsZWJhcnMvcHVsbC8xMjlcbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5yb290LCBwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJyA/IGAvJHtyZXNvbHZlZFBhdGh9YCA6IHJlc29sdmVkUGF0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRleHQocGFnZVBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdhbWVJZCA9IGdldFBhZ2VJZEZyb21VcmwocGFnZVBhdGgpO1xuICAgICAgICAgICAgaWYgKCFnYW1lSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2FtZUlkID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgICAgICAgLy8gUGFnaW5hIHNldHRpbmdzIHRlcnVnZ2V2ZW5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBlbnY6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IG9wdGlvbnMuc2V0dGluZ3MuZGV2ZWxvcG1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGdhbWVzOiBvcHRpb25zLnNldHRpbmdzLmdhbWVzLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPcCBiYXNpcyB2YW4gcGFkIGRhdGEgYmVwYWxlblxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zLnNldHRpbmdzLmdhbWVzW2dhbWVJZF07XG4gICAgICAgICAgICAvLyBQYWdpbmEgc2V0dGluZ3MgdGVydWdnZXZlblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlbnY6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICAgZGF0YTogc2V0dGluZ3MgPz8ge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFuZGxlYmFycy1wbHVnaW4uanMubWFwIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgcHJvbWlzZXMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBjd2QsIGdldFBhZ2VJZEZyb21VcmwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5jb25zdCBQQUdFX1RFTVBMQVRFID0gJ3t7PiBnYW1lIGRhdGE9ZGF0YX19JztcbmNvbnN0IERFVkVMT1BNRU5UX1RFTVBMQVRFID0gJ3t7PiBkZXZlbG9wbWVudCBkYXRhPWRhdGF9fSc7XG5hc3luYyBmdW5jdGlvbiByZW5kZXJUZW1wb3JhcnlGaWxlKGZpbGVQYXRoKSB7XG4gICAgLy8gQmVzdGFhdCBkaWUgZmlsZSBub2cgbmlldD9cbiAgICBpZiAoIWV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgIC8vIEFhbm1ha2VuXG4gICAgICAgIGF3YWl0IHByb21pc2VzLndyaXRlRmlsZShmaWxlUGF0aCwgUEFHRV9URU1QTEFURSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGh0bWxQbHVnaW4oZ2FtZXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAndml0ZS1wbHVnaW4ta2xvZWstaHRtbCcsXG4gICAgICAgIGVuZm9yY2U6ICdwcmUnLFxuICAgICAgICBhc3luYyBjb25maWcoX2NvbmZpZywgZW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgIC8vIEJpaiBlZW4gYnVpbGQgbWFrZW4gd2UgdGlqZGVsaWprIGZpbGVzIGFhblxuICAgICAgICAgICAgaWYgKGVudmlyb25tZW50LmNvbW1hbmQgPT09ICdidWlsZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWdlSWQgb2YgT2JqZWN0LmtleXMoZ2FtZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhZCBuYWFyIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJywgYCR7cGFnZUlkfS5odG1sYCk7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbnMucHVzaChyZW5kZXJUZW1wb3JhcnlGaWxlKGZpbGVQYXRoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGFjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFpvcmcgZXIgdm9vciBkYXQgdGlqZGVucyBkZXZlbG9wbWVudCBkZSBwYWdpbmEgZ2UtcmVuZGVyZWQgdGVydWcgZ2VnZXZlbiB3b3JkdCB3b3JkdFxuICAgICAgICAgICAgICAgIHNlcnZlci5taWRkbGV3YXJlcy51c2UoJy8nLCBhc3luYyAocmVxdWVzdCwgcmVzcG9uc2UsIG5leHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gcmVxdWVzdD8udXJsID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWdlSWQgPSBnZXRQYWdlSWRGcm9tVXJsKHVybCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFnZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2VJZCA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV2ZWxvcG1lbnQ/IGdlZWYgdGVydWcuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVuZChhd2FpdCBzZXJ2ZXIudHJhbnNmb3JtSW5kZXhIdG1sKHVybCwgREVWRUxPUE1FTlRfVEVNUExBVEUsIHJlcXVlc3Qub3JpZ2luYWxVcmwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChPYmplY3Qua2V5cyhnYW1lcykuaW5jbHVkZXMocGFnZUlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVzdGFhbmRlIGdhbWU/IHpvcmcgZXIgdm9vciBkYXQgZGUgdGVtcGxhdGUgZ2UtcmVuZGVyZWQgd29yZHRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVuZChhd2FpdCBzZXJ2ZXIudHJhbnNmb3JtSW5kZXhIdG1sKHVybCwgUEFHRV9URU1QTEFURSwgcmVxdWVzdC5vcmlnaW5hbFVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmlrcyBnZXZvbmRlblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGNsb3NlQnVuZGxlKCkge1xuICAgICAgICAgICAgLy8gVmVyd2lqZGVyIGRlIGFhbmdlbWFha3RlIGZpbGVzXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhZ2VJZCBvZiBPYmplY3Qua2V5cyhnYW1lcykpIHtcbiAgICAgICAgICAgICAgICAvLyBQYWQgbmFhciBmaWxlXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJywgYCR7cGFnZUlkfS5odG1sYCk7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zLnB1c2gocHJvbWlzZXMucm0oZmlsZVBhdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYWN0aW9ucyk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0bWwtcGx1Z2luLmpzLm1hcCIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBzdmVsdGUsIHZpdGVQcmVwcm9jZXNzIH0gZnJvbSAnQHN2ZWx0ZWpzL3ZpdGUtcGx1Z2luLXN2ZWx0ZSc7XG5pbXBvcnQgdHNjb25maWdQYXRoc1BsdWdpbiBmcm9tICd2aXRlLXRzY29uZmlnLXBhdGhzJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGhhbmRsZWJhcnNQbHVnaW4gfSBmcm9tICcuL2xpYi9oYW5kbGViYXJzLXBsdWdpbic7XG5pbXBvcnQgeyBodG1sUGx1Z2luIH0gZnJvbSAnLi9saWIvaHRtbC1wbHVnaW4nO1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2VQbHVnaW5zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBodG1sUGx1Z2luKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLFxuICAgICAgICAuLi5zdmVsdGUoe1xuICAgICAgICAgICAgcHJlcHJvY2Vzczogdml0ZVByZXByb2Nlc3MoKSxcbiAgICAgICAgICAgIG9ud2Fybih3YXJuaW5nLCB3YXJuKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF3YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm8gYTExeSB3YXJuaW5ncy4uLlxuICAgICAgICAgICAgICAgIGlmICh3YXJuaW5nLmNvZGUuc3RhcnRzV2l0aCgnYTExeS0nKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4od2FybmluZyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgdHNjb25maWdQYXRoc1BsdWdpbih7XG4gICAgICAgICAgICByb290OiBwYXRoLnJlc29sdmUoY3dkKSxcbiAgICAgICAgICAgIC8vIGV4dGVuc2lvbnM6IFsnLnRzJywgJy5qc29uJ10sXG4gICAgICAgICAgICBsb29zZTogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGhhbmRsZWJhcnNQbHVnaW4ob3B0aW9ucy5jb25maWcuc2VydmUucGFydGlhbHMsIG9wdGlvbnMpLFxuICAgIF07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYXNlLmpzLm1hcCIsImltcG9ydCB2aXRlSW1hZ2VtaW4gZnJvbSAnQHZoZWVtc3RyYS92aXRlLXBsdWdpbi1pbWFnZW1pbic7XG4vLyBUaGUgbWluaWZpZXJzIHlvdSB3YW50IHRvIHVzZTpcbmltcG9ydCBpbWFnZW1pbk1vempwZWcgZnJvbSAnaW1hZ2VtaW4tbW96anBlZyc7XG5pbXBvcnQgaW1hZ2VtaW5QbmdRdWFudCBmcm9tICdpbWFnZW1pbi1wbmdxdWFudCc7XG5pbXBvcnQgaW1hZ2VtaW5PcHRpUG5nIGZyb20gJ2ltYWdlbWluLW9wdGlwbmcnO1xuZXhwb3J0IGZ1bmN0aW9uIGltYWdlbWluUGx1Z2luKGVudmlyb25tZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKGVudmlyb25tZW50Lm1vZGUgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB2aXRlSW1hZ2VtaW4oe1xuICAgICAgICBza2lwSWZMYXJnZXI6IHRydWUsXG4gICAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgIGpwZzogW1xuICAgICAgICAgICAgICAgIGltYWdlbWluTW96anBlZyh7XG4gICAgICAgICAgICAgICAgICAgIHF1YWxpdHk6IG9wdGlvbnM/LmpwZWcgPz8gODAsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwbmc6IFtcbiAgICAgICAgICAgICAgICBpbWFnZW1pblBuZ1F1YW50KHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNwZWVkOiAyLFxuICAgICAgICAgICAgICAgICAgICBkaXRoZXJpbmc6IDAuMjUsXG4gICAgICAgICAgICAgICAgICAgIHF1YWxpdHk6IG9wdGlvbnM/LnBuZyA/PyBbMC41LCAwLjddLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGltYWdlbWluT3B0aVBuZygpXG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICB9KTtcbn1cbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWltYWdlLXBsdWdpbi5qcy5tYXAiLCJmdW5jdGlvbiByZW5kZXJHYW1lTWFuaWZlc3QocGFnZUlkLCBzZXR0aW5ncywgY29uZmlnKSB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB7XG4gICAgICAgIHNob3J0X25hbWU6IGAke3NldHRpbmdzLm1ldGEuYXBwdGl0bGV9YCxcbiAgICAgICAgbmFtZTogYCR7c2V0dGluZ3MubWV0YS50aXRsZX1gLFxuICAgICAgICBkZXNjcmlwdGlvbjogYCR7c2V0dGluZ3MubWV0YS5kZXNjcmlwdGlvbn1gLFxuICAgICAgICBzY29wZTogYCR7Y29uZmlnLmJhc2V9JHtwYWdlSWR9Lmh0bWxgLFxuICAgICAgICBzdGFydF91cmw6IGAke2NvbmZpZy5iYXNlfSR7cGFnZUlkfS5odG1sYCxcbiAgICAgICAgZGlzcGxheTogJ2Z1bGxzY3JlZW4nLFxuICAgICAgICBvcmllbnRhdGlvbjogYCR7c2V0dGluZ3Mub3B0aW9ucy5vcmllbnRhdGlvbiA/PyAnbGFuZHNjYXBlJ31gLFxuICAgICAgICBpY29uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNyYzogYCR7Y29uZmlnLmJhc2V9bWV0YS8ke3NldHRpbmdzLmluZm8uaWR9L2ljb25zL2Nocm9tZS10b3VjaC1pY29uLTE5MngxOTIucG5nYCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2UvcG5nJyxcbiAgICAgICAgICAgICAgICBzaXplczogJzE5MngxOTInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcmM6IGAke2NvbmZpZy5iYXNlfW1ldGEvJHtzZXR0aW5ncy5pbmZvLmlkfS9pY29ucy9pY29uLnBuZ2AsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAgICAgc2l6ZXM6ICcxMDI0eDEwMjQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgYmFja2dyb3VuZF9jb2xvcjogYCR7c2V0dGluZ3Mub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3J9YCxcbiAgICAgICAgdGhlbWVfY29sb3I6IGAke3NldHRpbmdzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yfWAsXG4gICAgfTtcbiAgICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3QsIG51bGwsIDIpfVxcbmA7XG59XG5leHBvcnQgZnVuY3Rpb24gbWFuaWZlc3RQbHVnaW4oZ2FtZXMpIHtcbiAgICBsZXQgY29uZmlnO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICd2aXRlLXBsdWdpbi1rbG9lay1tYW5pZmVzdCcsXG4gICAgICAgIGVuZm9yY2U6ICdwb3N0JyxcbiAgICAgICAgYXBwbHk6ICdidWlsZCcsXG4gICAgICAgIGFzeW5jIGNvbmZpZ1Jlc29sdmVkKHJlc29sdmVkQ29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcgPSByZXNvbHZlZENvbmZpZztcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVCdW5kbGUoXywgYnVuZGxlKSB7XG4gICAgICAgICAgICAvLyBWb29yIGllZGVyZSBhcHAgZWVuIG1hbmlmZXN0IG1ha2VuOlxuICAgICAgICAgICAgZm9yIChjb25zdCBbcGFnZUlkLCBzZXR0aW5nc10gb2YgT2JqZWN0LmVudHJpZXMoZ2FtZXMpKSB7XG4gICAgICAgICAgICAgICAgYnVuZGxlW2Ake3BhZ2VJZH0ud2VibWFuaWZlc3RgXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmVlZHNDb2RlUmVmZXJlbmNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Fzc2V0JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHJlbmRlckdhbWVNYW5pZmVzdChwYWdlSWQsIHNldHRpbmdzLCBjb25maWcpLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogYCR7cGFnZUlkfS53ZWJtYW5pZmVzdGAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBidW5kbGVbYCR7cGFnZUlkfS1zZXJ2aWNld29ya2VyLmpzYF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIG5lZWRzQ29kZVJlZmVyZW5jZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhc3NldCcsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBcInNlbGYuYWRkRXZlbnRMaXN0ZW5lcignZmV0Y2gnLCBmdW5jdGlvbigpIHsgcmV0dXJuOyB9KTtcIixcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGAke3BhZ2VJZH0tc2VydmljZXdvcmtlci5qc2AsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFuaWZlc3QtcGx1Z2luLmpzLm1hcCIsImltcG9ydCBsZWdhY3lQbHVnaW4gZnJvbSAnQHZpdGVqcy9wbHVnaW4tbGVnYWN5JztcbmltcG9ydCBiYW5uZXJQbHVnaW4gZnJvbSAndml0ZS1wbHVnaW4tYmFubmVyJztcbmltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1odG1sJztcbmltcG9ydCB7IGltYWdlbWluUGx1Z2luIH0gZnJvbSAnLi9saWIvaW1hZ2UtcGx1Z2luJztcbmltcG9ydCB7IG1hbmlmZXN0UGx1Z2luIH0gZnJvbSAnLi9saWIvbWFuaWZlc3QtcGx1Z2luJztcbi8vIEJ1aWxkIHBsdWdpbnNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBsdWdpbnMob3B0aW9ucykge1xuICAgIC8vIE5vIGJ1aWxkPyBubyBwbHVnaW5zLi5cbiAgICBpZiAob3B0aW9ucy5lbnZpcm9ubWVudC5jb21tYW5kICE9PSAnYnVpbGQnKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgcGx1Z2lucyA9IFtdO1xuICAgIGlmIChvcHRpb25zLmNvbmZpZy5idWlsZC5sZWdhY3kpIHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYWdlIHdvcmtzIGluIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIHBsdWdpbnMucHVzaCguLi5sZWdhY3lQbHVnaW4oe1xuICAgICAgICAgICAgdGFyZ2V0czogb3B0aW9ucy5jb25maWcuYnVpbGQuYnJvd3NlcnNsaXN0ID8/ICdkZWZhdWx0cycsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgY29uc3QgcGFnZXMgPSBPYmplY3Qua2V5cyhvcHRpb25zLnNldHRpbmdzLmdhbWVzKS5tYXAoKGdhbWVJZCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlsZW5hbWU6IGAke2dhbWVJZH0uaHRtbGAsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogYCR7Z2FtZUlkfS5odG1sYCxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICBwbHVnaW5zLnB1c2goXG4gICAgLy8gTWluaWZ5IGltYWdlIGFzc2V0c1xuICAgIGltYWdlbWluUGx1Z2luKG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMuY29uZmlnLmJ1aWxkLmltYWdlUXVhbGl0eSksIFxuICAgIC8vIE1ha2UgdGhlIGh0bWwgb3V0cHV0IHNtYWxsZXJcbiAgICAuLi5jcmVhdGVIdG1sUGx1Z2luKHsgbWluaWZ5OiB0cnVlLCBwYWdlcyB9KSwgXG4gICAgLy8gQWRkIGEgYmFubmVyIHRvIGdlbmVyYXRlZCBqcy9jc3NcbiAgICBiYW5uZXJQbHVnaW4oYFxuICAgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC5cblxuICAgICAgICAgX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgICAgICBfICAgICAgICAgICAgX1xuICAgICAgICAvICApICAgICAgICAgICAgICB8ICBvICAgICAgICAgL3wgICAvIHwgfCAgICAgICAgICB8IHxcbiAgICAgICAgXFxcXF9fIF98XyAgICAgICAgIF9ffCAgICAgIF9fICAgICB8X18vICB8IHwgIF9fICAgXyAgfCB8XG4gICAgICAgICAgIFxcXFwgfCAgfCAgIHwgIC8gIHwgIHwgIC8gIFxcXFxfICAgfCBcXFxcICAgfC8gIC8gIFxcXFxffC8gIHwvXylcbiAgICAgICAoX19fLyB8Xy8gXFxcXF8vfF8vXFxcXF8vfF8vfF8vXFxcXF9fLyAgICB8ICBcXFxcXy98X18vXFxcXF9fLyB8X18vfCBcXFxcXy9cblxuICAgICAgICBDb25jZXB0LCBvbnR3ZXJwICYgb250d2lra2VsaW5nXG4gICAgICAgIGh0dHBzOi8vc3R1ZGlva2xvZWsubmxcblxuICAgICAgICBTdHVkaW8gS2xvZWsg4p2kIFBpeGlKUywgR1NBUCAmIGhvd2xlci5qc1xuXG4gICAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLlxuXG4gICAgYCkpO1xuICAgIC8vIENyZWF0ZSBhIG1hbmlmZXN0IGFuZCBtaW5pbWFsIHdlYndvcmtlciBmb3IgZXZlcnkgZ2FtZVxuICAgIGlmIChvcHRpb25zLmNvbmZpZy5idWlsZC5tYW5pZmVzdCkge1xuICAgICAgICBwbHVnaW5zLnB1c2gobWFuaWZlc3RQbHVnaW4ob3B0aW9ucy5zZXR0aW5ncy5nYW1lcykpO1xuICAgIH1cbiAgICByZXR1cm4gcGx1Z2lucy5maWx0ZXIocGx1Z2luID0+IHBsdWdpbiAhPT0gdW5kZWZpbmVkKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1aWxkLmpzLm1hcCIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgZnVsbFJlbG9hZCBmcm9tICd2aXRlLXBsdWdpbi1mdWxsLXJlbG9hZCc7XG5pbXBvcnQgbWtjZXJ0IGZyb20gJ3ZpdGUtcGx1Z2luLW1rY2VydCc7XG5pbXBvcnQgY2hlY2tlciBmcm9tICd2aXRlLXBsdWdpbi1jaGVja2VyJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJy4uL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZVBsdWdpbnMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgZnVsbFJlbG9hZChbJ3NjcmlwdC8qKi8qLnRzJywgJ3N2ZWx0ZS8qKi8qLnN2ZWx0ZSddLCB7XG4gICAgICAgICAgICByb290OiBwYXRoLmpvaW4ocGF0aC5yZXNvbHZlKGN3ZCksICdzb3VyY2UnKSxcbiAgICAgICAgICAgIGxvZzogdHJ1ZSxcbiAgICAgICAgICAgIGFsd2F5czogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIG1rY2VydCgpLFxuICAgICAgICBjaGVja2VyKHtcbiAgICAgICAgICAgIHR5cGVzY3JpcHQ6IHRydWUsXG4gICAgICAgIH0pLFxuICAgIF07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJ2ZS5qcy5tYXAiLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGJhc2VQbHVnaW5zIH0gZnJvbSAnLi9wbHVnaW5zL2Jhc2UnO1xuaW1wb3J0IHsgYnVpbGRQbHVnaW5zIH0gZnJvbSAnLi9wbHVnaW5zL2J1aWxkJztcbmltcG9ydCB7IHNlcnZlUGx1Z2lucyB9IGZyb20gJy4vcGx1Z2lucy9zZXJ2ZSc7XG5pbXBvcnQgeyBjd2QsIGRlZmluZUJ1aWxkQ29uZmlnLCBnZXRQYWdlVG9TZXJ2ZSwgcGFyc2VQYWNrYWdlR2FtZXNTZXR0aW5ncywgcmVhZEpTT04sIH0gZnJvbSAnLi91dGlscyc7XG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWZpbmVLbG9la1ZpdGVDb25maWcoZW52aXJvbm1lbnQpIHtcbiAgICBjb25zdCBwa2cgPSByZWFkSlNPTihwYXRoLnJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJykpO1xuICAgIGNvbnN0IGtsb2VrQ29uZmlnID0gcGtnLnZpdGU7XG4gICAgY29uc3QgYnJvd3NlcnNsaXN0ID0gcGtnLmJyb3dzZXJzbGlzdDtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICByb290OiBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJyksXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBzZXR0aW5nczogcGFyc2VQYWNrYWdlR2FtZXNTZXR0aW5ncyhwa2cuc2V0dGluZ3MpLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgIC4uLmtsb2VrQ29uZmlnLFxuICAgICAgICAgICAgYnVpbGQ6IHsgLi4ua2xvZWtDb25maWcuYnVpbGQsIGJyb3dzZXJzbGlzdCB9LFxuICAgICAgICAgICAgc2VydmU6IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsczogW1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAncGFydGlhbHMnKSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsICdwYXJ0aWFscycpLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICBsb2dMZXZlbDogJ2luZm8nLFxuICAgICAgICBiYXNlOiBrbG9la0NvbmZpZy5idWlsZC5iYXNlUGF0aCxcbiAgICAgICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgICAgICBlbnZEaXI6IHBhdGgucmVzb2x2ZShjd2QsICdlbnYnKSxcbiAgICAgICAgZW52UHJlZml4OiBbJ0tMT0VLXycsICdWSVRFXyddLFxuICAgICAgICBwdWJsaWNEaXI6ICdzdGF0aWMnLFxuICAgICAgICBkZWZpbmU6IHt9LFxuICAgICAgICBlc2J1aWxkOiB7XG4gICAgICAgICAgICBsZWdhbENvbW1lbnRzOiAnbm9uZScsXG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICAgIGRlZHVwZTogW1xuICAgICAgICAgICAgICAgICdAc3R1ZGlva2xvZWsvdHMtY29yZS1saWInLFxuICAgICAgICAgICAgICAgICdAY2FwYWNpdG9yL2FwcCcsXG4gICAgICAgICAgICAgICAgJ0BjYXBhY2l0b3IvY29yZScsXG4gICAgICAgICAgICAgICAgJ0BjYXBhY2l0b3IvZGV2aWNlJyxcbiAgICAgICAgICAgICAgICAnQGNhcGFjaXRvci9uZXR3b3JrJyxcbiAgICAgICAgICAgICAgICAnQGNhcGFjaXRvci9zcGxhc2gtc2NyZWVuJyxcbiAgICAgICAgICAgICAgICAnQGNhcGFjaXRvci9zdGF0dXMtYmFyJyxcbiAgICAgICAgICAgICAgICAnQGNhcGFjaXRvci9wcmVmZXJlbmNlcycsXG4gICAgICAgICAgICAgICAgJ2Jvd3NlcicsXG4gICAgICAgICAgICAgICAgJ2ZvbnRmYWNlb2JzZXJ2ZXInLFxuICAgICAgICAgICAgICAgICdnc2FwJyxcbiAgICAgICAgICAgICAgICAnaG93bGVyJyxcbiAgICAgICAgICAgICAgICAnbG9kYXNoLWRlY29yYXRvcnMtZXNtJyxcbiAgICAgICAgICAgICAgICAnbG9kYXNoLWVzJyxcbiAgICAgICAgICAgICAgICAncGl4aS1zcGluZScsXG4gICAgICAgICAgICAgICAgJ3BpeGkuanMnLFxuICAgICAgICAgICAgICAgICdwdWJzdWItanMnLFxuICAgICAgICAgICAgICAgICdyYW5kb20tanMnLFxuICAgICAgICAgICAgICAgICdyZXNzJyxcbiAgICAgICAgICAgICAgICAnc2x1Z2lmeScsXG4gICAgICAgICAgICAgICAgJ3N1cGVyYWdlbnQnLFxuICAgICAgICAgICAgICAgICd0cy1ldmVudHMnLFxuICAgICAgICAgICAgICAgICd0cy1taXhlcicsXG4gICAgICAgICAgICAgICAgJ3RzbGliJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgICAgIGxvZGFzaDogJ2xvZGFzaC1lcycsXG4gICAgICAgICAgICAgICAgJ0BtZXRhJzogcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsICdzdGF0aWMnLCAnbWV0YScpLFxuICAgICAgICAgICAgICAgICdAZm9udHMnOiBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJywgJ3N0YXRpYycsICdmb250cycpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY3NzOiB7XG4gICAgICAgICAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgc2Nzczoge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkaXRpb25hbERhdGE6IGBAY2hhcnNldCBcIlVURi04XCJgLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwbHVnaW5zOiBbLi4uYmFzZVBsdWdpbnMob3B0aW9ucyldLFxuICAgIH07XG4gICAgc3dpdGNoIChlbnZpcm9ubWVudC5jb21tYW5kKSB7XG4gICAgICAgIGNhc2UgJ3NlcnZlJzpcbiAgICAgICAgICAgIGNvbmZpZy5zZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgaG9zdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb3JzOiBvcHRpb25zLmNvbmZpZy5kZXYuY29ycyA/PyB0cnVlLFxuICAgICAgICAgICAgICAgIGh0dHBzOiBvcHRpb25zLmNvbmZpZy5kZXYuaHR0cHMgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICBvcGVuOiBnZXRQYWdlVG9TZXJ2ZShvcHRpb25zLmNvbmZpZywgb3B0aW9ucy5zZXR0aW5ncy5nYW1lcyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uZmlnLnBsdWdpbnMgPSBbXG4gICAgICAgICAgICAgICAgLi4uKGNvbmZpZy5wbHVnaW5zID8gY29uZmlnLnBsdWdpbnMgOiBbXSksXG4gICAgICAgICAgICAgICAgLi4uc2VydmVQbHVnaW5zKCksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2J1aWxkJzpcbiAgICAgICAgICAgIGNvbmZpZy5idWlsZCA9IGRlZmluZUJ1aWxkQ29uZmlnKG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uZmlnLnBsdWdpbnMgPSBbXG4gICAgICAgICAgICAgICAgLi4uKGNvbmZpZy5wbHVnaW5zID8gY29uZmlnLnBsdWdpbnMgOiBbXSksXG4gICAgICAgICAgICAgICAgLi4uYnVpbGRQbHVnaW5zKG9wdGlvbnMpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlnLmpzLm1hcCIsImltcG9ydCB7IGJ1aWxkLCBjcmVhdGVTZXJ2ZXIgfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IGRlZmluZUtsb2VrVml0ZUNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBrbG9la0RldmVsb3BtZW50KGZsYWdzKSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgZGVmaW5lS2xvZWtWaXRlQ29uZmlnKHtcbiAgICAgICAgY29tbWFuZDogJ3NlcnZlJyxcbiAgICAgICAgbW9kZTogJ2RldmVsb3BtZW50JyxcbiAgICB9KTtcbiAgICAvLyBEaWZmZXJlbnQgbW9kZVxuICAgIGlmICh0eXBlb2YgZmxhZ3MubW9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uZmlnLm1vZGUgPSBmbGFncy5tb2RlO1xuICAgIH1cbiAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBjcmVhdGVTZXJ2ZXIoe1xuICAgICAgICBjb25maWdGaWxlOiBmYWxzZSxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgIH0pO1xuICAgIGF3YWl0IHNlcnZlci5saXN0ZW4oKTtcbiAgICBzZXJ2ZXIucHJpbnRVcmxzKCk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2xvZWtCdWlsZChmbGFncykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGRlZmluZUtsb2VrVml0ZUNvbmZpZyh7XG4gICAgICAgIGNvbW1hbmQ6ICdidWlsZCcsXG4gICAgICAgIG1vZGU6ICdwcm9kdWN0aW9uJyxcbiAgICB9KTtcbiAgICAvLyBFbXB0eSBvdXQgdGhlIE91dHB1dCBkaXIgYmVmb3JlIGJ1aWxkaW5nP1xuICAgIGlmIChmbGFncy5lbXB0eU91dERpciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbmZpZy5idWlsZCA9IHtcbiAgICAgICAgICAgIC4uLmNvbmZpZy5idWlsZCxcbiAgICAgICAgICAgIGVtcHR5T3V0RGlyOiBmbGFncy5lbXB0eU91dERpcixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gRGlmZmVyZW50IGJhc2UgcGF0aFxuICAgIGlmICh0eXBlb2YgZmxhZ3MuYmFzZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uZmlnLmJhc2UgPSBmbGFncy5iYXNlO1xuICAgIH1cbiAgICAvLyBEaWZmZXJlbnQgbW9kZVxuICAgIGlmICh0eXBlb2YgZmxhZ3MubW9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uZmlnLm1vZGUgPSBmbGFncy5tb2RlO1xuICAgIH1cbiAgICBhd2FpdCBidWlsZCh7XG4gICAgICAgIGNvbmZpZ0ZpbGU6IGZhbHNlLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxTQUFTLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0FBQ3JELElBQUksTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsSUFBSSxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRTtBQUN0QyxRQUFRLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRztBQUM3QixZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM3QixTQUFTLENBQUM7QUFDVixLQUFLO0FBQ0wsSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDO0FBQ00sU0FBUyx5QkFBeUIsQ0FBQyxlQUFlLEVBQUU7QUFDM0Q7QUFDQSxJQUFJLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNELElBQUksTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGVBQWUsQ0FBQztBQUN4QyxJQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3hCLFFBQVEsV0FBVyxFQUFFLE9BQU87QUFDNUIsUUFBUSxLQUFLLEVBQUUsRUFBRTtB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
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ConfigEnv, Plugin } from 'vite';
|
|
2
2
|
import type { ImageQualityConfig } from '../../utils/interfaces';
|
|
3
|
-
export declare function imageminPlugin(environment: ConfigEnv, options: ImageQualityConfig): Plugin;
|
|
3
|
+
export declare function imageminPlugin(environment: ConfigEnv, options: ImageQualityConfig): Plugin | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@studiokloek/vite-config",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Martijn Swart <opensource@studiokloek.nl> (https://studiokloek.nl)",
|
|
6
6
|
"description": "Base Vite config for usage in our projects.",
|
|
@@ -65,60 +65,66 @@
|
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@sveltejs/vite-plugin-svelte": "^2.4.
|
|
69
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
70
|
-
"@typescript-eslint/parser": "^
|
|
68
|
+
"@sveltejs/vite-plugin-svelte": "^2.4.6",
|
|
69
|
+
"@typescript-eslint/eslint-plugin": "^6.7.2",
|
|
70
|
+
"@typescript-eslint/parser": "^6.7.2",
|
|
71
|
+
"@vheemstra/vite-plugin-imagemin": "^1.0.11",
|
|
71
72
|
"@vitejs/plugin-legacy": "^4.1.1",
|
|
72
|
-
"eslint": "^8.
|
|
73
|
-
"eslint-config-prettier": "^
|
|
73
|
+
"eslint": "^8.50.0",
|
|
74
|
+
"eslint-config-prettier": "^9.0.0",
|
|
74
75
|
"eslint-formatter-pretty": "^5.0.0",
|
|
75
|
-
"eslint-import-resolver-typescript": "^3.
|
|
76
|
+
"eslint-import-resolver-typescript": "^3.6.1",
|
|
76
77
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
77
|
-
"eslint-plugin-import": "^2.
|
|
78
|
-
"eslint-plugin-prettier": "^
|
|
78
|
+
"eslint-plugin-import": "^2.28.1",
|
|
79
|
+
"eslint-plugin-prettier": "^5.0.0",
|
|
79
80
|
"eslint-plugin-promise": "^6.1.1",
|
|
80
|
-
"eslint-plugin-svelte": "^2.
|
|
81
|
-
"eslint-plugin-unicorn": "^
|
|
82
|
-
"
|
|
81
|
+
"eslint-plugin-svelte": "^2.33.2",
|
|
82
|
+
"eslint-plugin-unicorn": "^48.0.1",
|
|
83
|
+
"imagemin-mozjpeg": "^10.0.0",
|
|
84
|
+
"imagemin-optipng": "^8.0.0",
|
|
85
|
+
"imagemin-pngquant": "^9.0.2",
|
|
86
|
+
"meow": "12.0.1",
|
|
83
87
|
"npm-run-all": "^4.1.5",
|
|
84
|
-
"postcss": "^8.4.
|
|
88
|
+
"postcss": "^8.4.30",
|
|
85
89
|
"postcss-load-config": "^4.0.1",
|
|
86
|
-
"prettier": "^
|
|
90
|
+
"prettier": "^3.0.3",
|
|
87
91
|
"prettier-package-json": "^2.8.0",
|
|
88
|
-
"prettier-plugin-svelte": "^
|
|
89
|
-
"sass": "^1.
|
|
90
|
-
"stylelint": "^15.10.
|
|
92
|
+
"prettier-plugin-svelte": "^3.0.3",
|
|
93
|
+
"sass": "^1.68.0",
|
|
94
|
+
"stylelint": "^15.10.3",
|
|
91
95
|
"svelte": "^3.59.2",
|
|
92
|
-
"terser": "^5.
|
|
93
|
-
"vite": "v4.4.
|
|
94
|
-
"vite-plugin-banner": "^0.7.
|
|
95
|
-
"vite-plugin-checker": "^0.6.
|
|
96
|
+
"terser": "^5.20.0",
|
|
97
|
+
"vite": "v4.4.9",
|
|
98
|
+
"vite-plugin-banner": "^0.7.1",
|
|
99
|
+
"vite-plugin-checker": "^0.6.2",
|
|
96
100
|
"vite-plugin-full-reload": "^1.0.5",
|
|
97
101
|
"vite-plugin-handlebars": "naranjamecanica/vite-plugin-handlebars#tmp-release",
|
|
98
102
|
"vite-plugin-html": "3.2.0",
|
|
99
|
-
"vite-plugin-imagemin": "studiokloek/vite-plugin-imagemin#tmp-release",
|
|
100
103
|
"vite-plugin-live-reload": "^3.0.2",
|
|
101
104
|
"vite-plugin-mkcert": "1.16.0",
|
|
102
|
-
"vite-tsconfig-paths": "^4.2.
|
|
105
|
+
"vite-tsconfig-paths": "^4.2.1"
|
|
103
106
|
},
|
|
104
107
|
"devDependencies": {
|
|
105
|
-
"@microsoft/api-extractor": "7.
|
|
106
|
-
"@rollup/plugin-node-resolve": "^15.1
|
|
107
|
-
"@rollup/plugin-typescript": "^11.1.
|
|
108
|
-
"@sveltejs/kit": "^1.
|
|
109
|
-
"@types/ejs": "^3.1.
|
|
110
|
-
"@types/estree": "^1.0.
|
|
108
|
+
"@microsoft/api-extractor": "7.37.0",
|
|
109
|
+
"@rollup/plugin-node-resolve": "^15.2.1",
|
|
110
|
+
"@rollup/plugin-typescript": "^11.1.3",
|
|
111
|
+
"@sveltejs/kit": "^1.25.1",
|
|
112
|
+
"@types/ejs": "^3.1.3",
|
|
113
|
+
"@types/estree": "^1.0.2",
|
|
111
114
|
"@types/html-minifier-terser": "^7.0.0",
|
|
112
|
-
"@types/
|
|
115
|
+
"@types/imagemin": "^8.0.1",
|
|
116
|
+
"@types/imagemin-mozjpeg": "^8.0.1",
|
|
117
|
+
"@types/imagemin-optipng": "^5.2.1",
|
|
118
|
+
"@types/node": "^20.6.5",
|
|
113
119
|
"rimraf": "^5.0.1",
|
|
114
|
-
"rollup": "^3.
|
|
120
|
+
"rollup": "^3.29.3",
|
|
115
121
|
"typescript": "4.9.5",
|
|
116
|
-
"xo": "^0.
|
|
122
|
+
"xo": "^0.56.0"
|
|
117
123
|
},
|
|
118
124
|
"resolutions": {
|
|
119
|
-
"@types/estree": "^1.0.
|
|
120
|
-
"@types/node": "^20.
|
|
121
|
-
"vite": "v4.4.
|
|
125
|
+
"@types/estree": "^1.0.2",
|
|
126
|
+
"@types/node": "^20.6.5",
|
|
127
|
+
"vite": "v4.4.9"
|
|
122
128
|
},
|
|
123
129
|
"volta": {
|
|
124
130
|
"node": "16.20.0",
|