@studiokloek/vite-config 0.12.17 → 0.13.0-1
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.d.ts +1 -1
- package/dist/index.js +64 -61
- package/dist/partials/development.hbs +112 -0
- package/dist/plugins/base.d.ts +2 -2
- package/dist/plugins/lib/handlebars-plugin.d.ts +1 -1
- package/dist/plugins/serve.d.ts +1 -1
- package/dist/public.d.ts +1 -1
- package/dist/utils/hash.d.ts +0 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/pkg.d.ts +1 -1
- package/package.json +38 -64
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -2,40 +2,26 @@ import { normalizePath, createServer, build } from 'vite';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { svelte } from '@sveltejs/vite-plugin-svelte';
|
|
5
|
+
import { sveltePreprocess } from 'svelte-preprocess';
|
|
5
6
|
import tsconfigPathsPlugin from 'vite-tsconfig-paths';
|
|
6
|
-
import sveltePreprocess from 'svelte-preprocess';
|
|
7
7
|
import process from 'node:process';
|
|
8
8
|
import { readFileSync, existsSync, promises } from 'node:fs';
|
|
9
|
-
import
|
|
10
|
-
import viteHandlebarsPlugin from 'vite-plugin-handlebars';
|
|
9
|
+
import viteHandlebarsPlugin from '@yoichiro/vite-plugin-handlebars';
|
|
11
10
|
import legacyPlugin from '@vitejs/plugin-legacy';
|
|
12
11
|
import { visualizer } from 'rollup-plugin-visualizer';
|
|
13
12
|
import bannerPlugin from 'vite-plugin-banner';
|
|
14
13
|
import { createHtmlPlugin } from 'vite-plugin-html';
|
|
15
14
|
import viteImagemin from '@vheemstra/vite-plugin-imagemin';
|
|
16
15
|
import imageminMozJpeg from 'imagemin-mozjpeg';
|
|
17
|
-
import crypto from 'node:crypto';
|
|
18
|
-
import imageminPngQuant from 'imagemin-pngquant';
|
|
19
16
|
import imageminOptiPng from 'imagemin-optipng';
|
|
17
|
+
import imageminPngQuant from 'imagemin-pngquant';
|
|
18
|
+
import crypto from 'node:crypto';
|
|
19
|
+
import basicSsl from '@vitejs/plugin-basic-ssl';
|
|
20
20
|
import checker from 'vite-plugin-checker';
|
|
21
21
|
import fullReload from 'vite-plugin-full-reload';
|
|
22
|
-
import mkcert from 'vite-plugin-mkcert';
|
|
23
22
|
import { mkdir, unlink } from 'node:fs/promises';
|
|
24
|
-
import { zip } from 'zip-a-folder';
|
|
25
23
|
import filenamify from 'filenamify';
|
|
26
|
-
|
|
27
|
-
const cwd = normalizePath(process.cwd());
|
|
28
|
-
|
|
29
|
-
function readJSON(path) {
|
|
30
|
-
try {
|
|
31
|
-
const data = readFileSync(path);
|
|
32
|
-
return JSON.parse(data.toString());
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
//
|
|
36
|
-
}
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
24
|
+
import { zip } from 'zip-a-folder';
|
|
39
25
|
|
|
40
26
|
function defineBuildConfig(options) {
|
|
41
27
|
const input = {};
|
|
@@ -57,6 +43,8 @@ function defineBuildConfig(options) {
|
|
|
57
43
|
};
|
|
58
44
|
}
|
|
59
45
|
|
|
46
|
+
const cwd = normalizePath(process.cwd());
|
|
47
|
+
|
|
60
48
|
function mergeGameSettings(generic, game, infoTypes) {
|
|
61
49
|
const settings = {};
|
|
62
50
|
// Alle props op één level diep mergen
|
|
@@ -115,6 +103,17 @@ function getPageIdFromUrl(url) {
|
|
|
115
103
|
return fileName.replace('.html', '');
|
|
116
104
|
}
|
|
117
105
|
|
|
106
|
+
function readJSON(path) {
|
|
107
|
+
try {
|
|
108
|
+
const data = readFileSync(path);
|
|
109
|
+
return JSON.parse(data.toString());
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
//
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
|
|
118
117
|
const package_ = readJSON(path.resolve(cwd, 'package.json'));
|
|
119
118
|
const config = {
|
|
120
119
|
vite: package_.vite,
|
|
@@ -147,43 +146,48 @@ async function addBuildFolderToZip() {
|
|
|
147
146
|
}
|
|
148
147
|
|
|
149
148
|
// Helpers voor handlebars
|
|
150
|
-
function handlebarsPlugin(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
149
|
+
function handlebarsPlugin(partialsDirectoryPaths, options) {
|
|
150
|
+
const dirs = Array.isArray(partialsDirectoryPaths) ? partialsDirectoryPaths : [partialsDirectoryPaths];
|
|
151
|
+
return dirs.map((partialsDirectoryPath) => {
|
|
152
|
+
return viteHandlebarsPlugin({
|
|
153
|
+
partialsDirectoryPath,
|
|
154
|
+
transformIndexHtmlOptions: {
|
|
155
|
+
helpers: {
|
|
156
|
+
json: (object, indent = 0) => JSON.stringify(object, undefined, indent),
|
|
157
|
+
concat: (...arguments_) => arguments_.slice(0, -1).join(''),
|
|
158
|
+
eq: (a, b) => a === b,
|
|
159
|
+
neq: (a, b) => a !== b,
|
|
160
|
+
isdefined: (value) => value !== undefined,
|
|
161
|
+
// 'resolve-root'(p: string) {
|
|
162
|
+
// // Tijdelijke hack voor bug in handlebars plugin
|
|
163
|
+
// // zie ook https://github.com/alexlafroscia/vite-plugin-handlebars/pull/129
|
|
164
|
+
// const resolvedPath = path.resolve(options.root, p);
|
|
165
|
+
// return os.platform() === 'win32' ? `/${resolvedPath}` : resolvedPath;
|
|
166
|
+
// },
|
|
167
|
+
},
|
|
168
|
+
context: ((pagePath) => {
|
|
169
|
+
const gameId = getPageIdFromUrl(pagePath);
|
|
170
|
+
if (!gameId) {
|
|
171
|
+
return {};
|
|
172
|
+
}
|
|
173
|
+
if (gameId === 'development') {
|
|
174
|
+
// Pagina settings teruggeven
|
|
175
|
+
return {
|
|
176
|
+
env: options.environment,
|
|
177
|
+
data: options.settings.development,
|
|
178
|
+
games: options.settings.games,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// Op basis van pad data bepalen
|
|
182
|
+
const settings = options.settings.games[gameId];
|
|
183
|
+
// Pagina settings teruggeven
|
|
184
|
+
return {
|
|
185
|
+
env: options.environment,
|
|
186
|
+
data: settings ?? {},
|
|
187
|
+
};
|
|
188
|
+
}),
|
|
164
189
|
},
|
|
165
|
-
}
|
|
166
|
-
context(pagePath) {
|
|
167
|
-
const gameId = getPageIdFromUrl(pagePath);
|
|
168
|
-
if (!gameId) {
|
|
169
|
-
return {};
|
|
170
|
-
}
|
|
171
|
-
if (gameId === 'development') {
|
|
172
|
-
// Pagina settings teruggeven
|
|
173
|
-
return {
|
|
174
|
-
env: options.environment,
|
|
175
|
-
data: options.settings.development,
|
|
176
|
-
games: options.settings.games,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
// Op basis van pad data bepalen
|
|
180
|
-
const settings = options.settings.games[gameId];
|
|
181
|
-
// Pagina settings teruggeven
|
|
182
|
-
return {
|
|
183
|
-
env: options.environment,
|
|
184
|
-
data: settings ?? {},
|
|
185
|
-
};
|
|
186
|
-
},
|
|
190
|
+
});
|
|
187
191
|
});
|
|
188
192
|
}
|
|
189
193
|
|
|
@@ -274,7 +278,6 @@ function basePlugins(options) {
|
|
|
274
278
|
}),
|
|
275
279
|
tsconfigPathsPlugin({
|
|
276
280
|
root: path.resolve(cwd),
|
|
277
|
-
// Extensions: ['.ts', '.json'],
|
|
278
281
|
loose: true,
|
|
279
282
|
}),
|
|
280
283
|
handlebarsPlugin(options.config.serve.partials, options),
|
|
@@ -417,7 +420,7 @@ function buildPlugins(options) {
|
|
|
417
420
|
// Do we need to analyse the build?
|
|
418
421
|
if (options.config.build.analyzeBundle) {
|
|
419
422
|
plugins.push(visualizer({
|
|
420
|
-
template: 'treemap',
|
|
423
|
+
template: 'treemap', // or sunburst
|
|
421
424
|
open: true,
|
|
422
425
|
gzipSize: true,
|
|
423
426
|
filename: 'bundle-analyse.html', // will be saved in project's root
|
|
@@ -437,7 +440,7 @@ function servePlugins(settings) {
|
|
|
437
440
|
log: true,
|
|
438
441
|
always: true,
|
|
439
442
|
}),
|
|
440
|
-
|
|
443
|
+
basicSsl(),
|
|
441
444
|
checker({
|
|
442
445
|
typescript: true,
|
|
443
446
|
}),
|
|
@@ -523,7 +526,7 @@ async function defineKloekViteConfig(environment) {
|
|
|
523
526
|
config.server = {
|
|
524
527
|
host: true,
|
|
525
528
|
cors: options.config.dev.cors ?? true,
|
|
526
|
-
https: options.config.dev.https ?? true
|
|
529
|
+
// https: {}, // options.config.dev.https ?? true
|
|
527
530
|
open: getPageToServe(options.config, options.settings.games),
|
|
528
531
|
};
|
|
529
532
|
config.plugins = [
|
|
@@ -599,4 +602,4 @@ async function kloekBuild(flags) {
|
|
|
599
602
|
}
|
|
600
603
|
|
|
601
604
|
export { kloekBuild, kloekDevelopment };
|
|
602
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9jd2QudHMiLCIuLi9zcmMvdXRpbHMvanNvbi50cyIsIi4uL3NyYy91dGlscy9idWlsZC50cyIsIi4uL3NyYy91dGlscy9nYW1lLnRzIiwiLi4vc3JjL3V0aWxzL3BrZy50cyIsIi4uL3NyYy91dGlscy96aXAudHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaGFuZGxlYmFycy1wbHVnaW4udHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaHRtbC1wbHVnaW4udHMiLCIuLi9zcmMvcGx1Z2lucy9iYXNlLnRzIiwiLi4vc3JjL3V0aWxzL2hhc2gudHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaW1hZ2UtcGx1Z2luLnRzIiwiLi4vc3JjL3BsdWdpbnMvbGliL21hbmlmZXN0LXBsdWdpbi50cyIsIi4uL3NyYy9wbHVnaW5zL2J1aWxkLnRzIiwiLi4vc3JjL3BsdWdpbnMvc2VydmUudHMiLCIuLi9zcmMvY29uZmlnLnRzIiwiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQge25vcm1hbGl6ZVBhdGh9IGZyb20gJ3ZpdGUnO1xuXG5leHBvcnQgY29uc3QgY3dkID0gbm9ybWFsaXplUGF0aChwcm9jZXNzLmN3ZCgpKTtcbiIsImltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdub2RlOmZzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRKU09OKHBhdGg6IHN0cmluZyk6IHVua25vd24ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSByZWFkRmlsZVN5bmMocGF0aCk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKTtcbiAgfSBjYXRjaCB7XG4gICAgLy9cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7QnVpbGRPcHRpb25zfSBmcm9tICd2aXRlJztcbmltcG9ydCB0eXBlIHtWaXRlT3B0aW9uc30gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUJ1aWxkQ29uZmlnKG9wdGlvbnM6IFZpdGVPcHRpb25zKTogQnVpbGRPcHRpb25zIHtcbiAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBmb3IgKGNvbnN0IGdhbWVJZCBvZiBPYmplY3Qua2V5cyhvcHRpb25zLnNldHRpbmdzLmdhbWVzKSkge1xuICAgIGlucHV0W2dhbWVJZF0gPSBwYXRoLnJlc29sdmUob3B0aW9ucy5yb290LCBgJHtnYW1lSWR9Lmh0bWxgKTtcbiAgfVxuXG4gIC8vIExpYnMgZGllIGFwYXJ0ZSBqcyBrcmlqZ2VuOlxuICAvLyBjb25zdCB2ZW5kb3JDaHVua3MgPSBbJ3BpeGknLCAnZmlyZWJhc2UnLCAnbG9kYXNoJywgJ2dzYXAnLCAnc3R1ZGlva2xvZWsnXTtcblxuICByZXR1cm4ge1xuICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiB0cnVlLFxuICAgIGNodW5rU2l6ZVdhcm5pbmdMaW1pdDogMjAwMCxcbiAgICBvdXREaXI6ICcuLi9wdWJsaWMnLFxuICAgIGFzc2V0c0RpcjogJ2dlbmVyYXRlZCcsXG4gICAgbWluaWZ5OiAndGVyc2VyJyxcbiAgICBzb3VyY2VtYXA6IG9wdGlvbnMuY29uZmlnLmJ1aWxkLnNvdXJjZU1hcHMgPz8gZmFsc2UsXG4gICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgaW5wdXQsXG4gICAgfSxcbiAgfTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7XG4gIEdhbWVTZXR0aW5ncyxcbiAgR2FtZVNldHRpbmdzUHJvcGVydHksXG4gIEdhbWVzU2V0dGluZ3MsXG4gIEdhbWVzU2V0dGluZ3NEYXRhLFxuICBLbG9la1ZpdGVDb25maWcsXG4gIFBhY2thZ2VHYW1lc1NldHRpbmdzLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5mdW5jdGlvbiBtZXJnZUdhbWVTZXR0aW5ncyhcbiAgZ2VuZXJpYzogR2FtZVNldHRpbmdzLFxuICBnYW1lOiBHYW1lU2V0dGluZ3MsXG4gIGluZm9UeXBlczogR2FtZVNldHRpbmdzUHJvcGVydHlbXSxcbik6IEdhbWVTZXR0aW5ncyB7XG4gIGNvbnN0IHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIC8vIEFsbGUgcHJvcHMgb3Agw6nDqW4gbGV2ZWwgZGllcCBtZXJnZW5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBpbmZvVHlwZXMpIHtcbiAgICBzZXR0aW5nc1twcm9wZXJ0eV0gPSB7XG4gICAgICAuLi5nZW5lcmljW3Byb3BlcnR5XSxcbiAgICAgIC4uLmdhbWVbcHJvcGVydHldLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0dGluZ3MgYXMgdW5rbm93biBhcyBHYW1lU2V0dGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhY2thZ2VHYW1lc1NldHRpbmdzKFxuICBwYWNrYWdlU2V0dGluZ3M6IFBhY2thZ2VHYW1lc1NldHRpbmdzLFxuICB2ZXJzaW9uOiBzdHJpbmdcbik6IEdhbWVzU2V0dGluZ3NEYXRhIHtcbiAgLy8gTWVyZ2Ugc2V0dGluZ3NcbiAgY29uc3QgaW5mb1R5cGVzID0gT2JqZWN0LmtleXMoXG4gICAgcGFja2FnZVNldHRpbmdzLmdlbmVyaWMsXG4gICkgYXMgR2FtZVNldHRpbmdzUHJvcGVydHlbXTtcbiAgY29uc3Qge2dlbmVyaWN9ID0gcGFja2FnZVNldHRpbmdzO1xuICBjb25zdCBhbGxTZXR0aW5nczogR2FtZXNTZXR0aW5nc0RhdGEgPSB7XG4gICAgZGV2ZWxvcG1lbnQ6IGdlbmVyaWMsXG4gICAgZ2FtZXM6IHt9LFxuICB9O1xuXG4gIGZvciAoY29uc3QgZ2FtZSBvZiBwYWNrYWdlU2V0dGluZ3MuZ2FtZXMgPz8gW10pIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IG1lcmdlR2FtZVNldHRpbmdzKGdlbmVyaWMsIGdhbWUsIGluZm9UeXBlcyk7XG5cbiAgICAvLyBab3JnIGVyIHZvb3IgZGF0IHBhZ2UgYWx0aWpkIGdlemV0IGlzXG4gICAgY29uc3QgcGFnZUlkID0gc2V0dGluZ3MuaW5mby5wYWdlID8/IHNldHRpbmdzLmluZm8uaWQgPz8gJ3Vua25vd24nO1xuICAgIHNldHRpbmdzLmluZm8ucGFnZSA9IHBhZ2VJZDtcblxuICAgIC8vIGVpZ2VuIHZlcnNpZSBudW1tZXIgb2YgZGUgZ2VuZXJpZWtlIHVpdCBkZSBwYWNrYWdlXG4gICAgc2V0dGluZ3MuaW5mby52ZXJzaW9uID0gc2V0dGluZ3MuaW5mby52ZXJzaW9uID8/IHZlcnNpb247XG5cbiAgICAvLyBTbGEgc2V0dGluZ3Mgb3Agb25kZXIgcGFnZSBpZFxuICAgIGFsbFNldHRpbmdzLmdhbWVzW3BhZ2VJZF0gPSBzZXR0aW5ncztcbiAgfVxuXG4gIHJldHVybiBhbGxTZXR0aW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb0dhbWVEYXRhKFxuICBmdWxsRmlsZVBhdGg6IHN0cmluZyxcbiAgc2V0dGluZ3M6IEdhbWVzU2V0dGluZ3MsXG4pOiBHYW1lU2V0dGluZ3MgfCB1bmRlZmluZWQge1xuICAvLyBEZXRlcm1pbmUgZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb25cbiAgbGV0IGZpbGVQYXRoID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZVBhdGgsIHBhdGguZXh0bmFtZShmdWxsRmlsZVBhdGgpKTtcblxuICAvLyBEZXRlcm1pbmUgZGlyICYgcmVtb3ZlIGxlYWRpbmcgc2xhc2hcbiAgbGV0IGZpbGVEaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZnVsbEZpbGVQYXRoKTtcbiAgZmlsZURpcmVjdG9yeSA9IGZpbGVEaXJlY3RvcnkucmVwbGFjZSgvXlxcLysvZywgJycpO1xuXG4gIGlmIChmaWxlRGlyZWN0b3J5KSB7XG4gICAgZmlsZVBhdGggPSBgJHtmaWxlRGlyZWN0b3J5fS8ke2ZpbGVQYXRofWA7XG4gIH1cblxuICByZXR1cm4gc2V0dGluZ3NbZmlsZVBhdGhdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZVRvU2VydmUoXG4gIGNvbmZpZzogS2xvZWtWaXRlQ29uZmlnLFxuICBzZXR0aW5nczogR2FtZXNTZXR0aW5ncyxcbik6IHN0cmluZyB7XG4gIC8vIEhvZXZlZWwgcGFnZXMgemlqbiBlcj9cbiAgY29uc3QgcGFnZUlkcyA9IE9iamVjdC5rZXlzKHNldHRpbmdzKTtcbiAgY29uc3QgcGFnZSA9IHBhZ2VJZHMubGVuZ3RoID09PSAxID8gcGFnZUlkc1swXSA6ICdkZXZlbG9wbWVudCc7XG5cbiAgcmV0dXJuIHBhdGgucG9zaXguam9pbihcbiAgICBjb25maWcuYnVpbGQuYmFzZVBhdGgsXG4gICAgYCR7cGFnZX0uaHRtbCR7Y29uZmlnLmRldi5zZXJ2ZVBhcmFtcyA/PyAnJ31gLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZUlkRnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IHBhdGhuYW1lOiBzdHJpbmc7XG5cbiAgdHJ5IHtcbiAgICBwYXRobmFtZSA9IG5ldyBVUkwodXJsLCAnaHR0cHM6Ly9zdHVkaW9rbG9lay5ubCcpLnBhdGhuYW1lO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBJZiByZXF1ZXN0IGlzIG5vdCBodG1sICwgZGlyZWN0bHkgcmV0dXJuIG5leHQoKVxuICBpZiAoIXBhdGhuYW1lLmVuZHNXaXRoKCcuaHRtbCcpICYmIHBhdGhuYW1lICE9PSAnLycpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBQYWdpbmEgaWQgb3B2cmFnZW5cbiAgY29uc3QgaW5kZXggPSBwYXRobmFtZS5sYXN0SW5kZXhPZignLycpO1xuICBjb25zdCBmaWxlTmFtZSA9IGluZGV4ID09PSAtMSA/IHBhdGhuYW1lIDogcGF0aG5hbWUuc2xpY2UoaW5kZXggKyAxKTtcblxuICByZXR1cm4gZmlsZU5hbWUucmVwbGFjZSgnLmh0bWwnLCAnJyk7XG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHt0eXBlIEtsb2VrVml0ZUNvbmZpZywgdHlwZSBQYWNrYWdlQ29uZmlnLCB0eXBlIFBhY2thZ2VHYW1lc1NldHRpbmdzfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtjd2QsIHJlYWRKU09OfSBmcm9tICcuJztcblxuY29uc3QgcGFja2FnZV8gPSByZWFkSlNPTihwYXRoLnJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJykpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5jb25zdCBjb25maWc6IFBhY2thZ2VDb25maWcgPSB7XG4gIHZpdGU6IHBhY2thZ2VfLnZpdGUgYXMgS2xvZWtWaXRlQ29uZmlnLFxuICBicm93c2Vyc2xpc3Q6IHBhY2thZ2VfLmJyb3dzZXJzbGlzdCBhcyBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgc2V0dGluZ3M6IHBhY2thZ2VfLnNldHRpbmdzIGFzIFBhY2thZ2VHYW1lc1NldHRpbmdzLFxuICB2ZXJzaW9uOiBwYWNrYWdlXy52ZXJzaW9uIGFzIHN0cmluZyxcbiAgbmFtZTogcGFja2FnZV8ubmFtZSBhcyBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBwYWNrYWdlXy5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZUNvbmZpZygpOiBQYWNrYWdlQ29uZmlnIHtcbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge21rZGlyLCB1bmxpbmt9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHt6aXB9IGZyb20gJ3ppcC1hLWZvbGRlcic7XG5pbXBvcnQgZmlsZW5hbWlmeSBmcm9tICdmaWxlbmFtaWZ5JztcbmltcG9ydCB7Y3dkLCBnZXRQYWNrYWdlQ29uZmlnfSBmcm9tICcuJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEJ1aWxkRm9sZGVyVG9aaXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBrZyA9IGdldFBhY2thZ2VDb25maWcoKTtcbiAgY29uc3Qgc291cmNlRGlyZWN0b3J5ID0gcGF0aC5qb2luKHBhdGgucmVzb2x2ZShjd2QpLCAncHVibGljJyk7XG4gIGNvbnN0IGRlc3RpbmF0aW9uRGlyZWN0b3J5ID0gcGF0aC5qb2luKHBhdGgucmVzb2x2ZShjd2QpLCAnemlwcycpO1xuICBjb25zdCBkZXN0aW5hdGlvbkZpbGUgPSBwYXRoLmpvaW4oXG4gICAgZGVzdGluYXRpb25EaXJlY3RvcnksXG4gICAgZmlsZW5hbWlmeShgJHtwa2cubmFtZX0tdiR7cGtnLnZlcnNpb259LnppcGAsIHtyZXBsYWNlbWVudDogJy0nfSksXG4gICk7XG5cbiAgLy8gRG9lcyB0aGUgZm9sZGVyIGV4aXN0P1xuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRlc3RpbmF0aW9uRGlyZWN0b3J5KTtcbiAgfSBjYXRjaCB7fVxuXG4gIC8vIFJlbW92ZSBwcmV2aW91cyB6aXAgZmlsZVxuICB0cnkge1xuICAgIGF3YWl0IHVubGluayhkZXN0aW5hdGlvbkZpbGUpO1xuICB9IGNhdGNoIHt9XG5cbiAgYXdhaXQgemlwKHNvdXJjZURpcmVjdG9yeSwgZGVzdGluYXRpb25GaWxlKTtcbn1cbiIsImltcG9ydCBvcyBmcm9tICdub2RlOm9zJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7UGx1Z2lufSBmcm9tICd2aXRlJztcbmltcG9ydCB2aXRlSGFuZGxlYmFyc1BsdWdpbiBmcm9tICd2aXRlLXBsdWdpbi1oYW5kbGViYXJzJztcbmltcG9ydCB0eXBlIHtWaXRlT3B0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQge2dldFBhZ2VJZEZyb21Vcmx9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLy8gSGVscGVycyB2b29yIGhhbmRsZWJhcnNcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGViYXJzUGx1Z2luKFxuICBwYXJ0aWFsRGlyZWN0b3J5OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgb3B0aW9uczogVml0ZU9wdGlvbnMsXG4pOiBQbHVnaW4ge1xuICByZXR1cm4gdml0ZUhhbmRsZWJhcnNQbHVnaW4oe1xuICAgIHBhcnRpYWxEaXJlY3RvcnksXG5cbiAgICBoZWxwZXJzOiB7XG4gICAgICBqc29uOiAob2JqZWN0OiBhbnksIGluZGVudCA9IDApID0+XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9iamVjdCwgdW5kZWZpbmVkLCBpbmRlbnQpLFxuICAgICAgY29uY2F0OiAoLi4uYXJndW1lbnRzXzogYW55W10pID0+IGFyZ3VtZW50c18uc2xpY2UoMCwgLTEpLmpvaW4oJycpLFxuICAgICAgZXE6IChhOiBhbnksIGI6IGFueSkgPT4gYSA9PT0gYixcbiAgICAgIG5lcTogKGE6IGFueSwgYjogYW55KSA9PiBhICE9PSBiLFxuICAgICAgaXNkZWZpbmVkOiAodmFsdWU6IHVuZGVmaW5lZCkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgICAgICdyZXNvbHZlLXJvb3QnKHA6IHN0cmluZykge1xuICAgICAgICAvLyBUaWpkZWxpamtlIGhhY2sgdm9vciBidWcgaW4gaGFuZGxlYmFycyBwbHVnaW5cbiAgICAgICAgLy8gemllIG9vayBodHRwczovL2dpdGh1Yi5jb20vYWxleGxhZnJvc2NpYS92aXRlLXBsdWdpbi1oYW5kbGViYXJzL3B1bGwvMTI5XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLnJvb3QsIHApO1xuICAgICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJyA/IGAvJHtyZXNvbHZlZFBhdGh9YCA6IHJlc29sdmVkUGF0aDtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGNvbnRleHQocGFnZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICAgIGNvbnN0IGdhbWVJZCA9IGdldFBhZ2VJZEZyb21VcmwocGFnZVBhdGgpO1xuXG4gICAgICBpZiAoIWdhbWVJZCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChnYW1lSWQgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgLy8gUGFnaW5hIHNldHRpbmdzIHRlcnVnZ2V2ZW5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbnY6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgZGF0YTogb3B0aW9ucy5zZXR0aW5ncy5kZXZlbG9wbWVudCxcbiAgICAgICAgICBnYW1lczogb3B0aW9ucy5zZXR0aW5ncy5nYW1lcyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gT3AgYmFzaXMgdmFuIHBhZCBkYXRhIGJlcGFsZW5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucy5zZXR0aW5ncy5nYW1lc1tnYW1lSWRdO1xuXG4gICAgICAvLyBQYWdpbmEgc2V0dGluZ3MgdGVydWdnZXZlblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW52OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBkYXRhOiBzZXR0aW5ncyA/PyB7fSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSk7XG59XG4iLCJpbXBvcnQge2V4aXN0c1N5bmMsIHByb21pc2VzfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7Q29uZmlnRW52LCBQbHVnaW4sIFVzZXJDb25maWcsIFZpdGVEZXZTZXJ2ZXJ9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHR5cGUge0dhbWVzU2V0dGluZ3N9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtjd2QsIGdldFBhZ2VJZEZyb21Vcmx9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuY29uc3QgUEFHRV9URU1QTEFURSA9ICd7ez4gZ2FtZSBkYXRhPWRhdGF9fSc7XG5jb25zdCBERVZFTE9QTUVOVF9URU1QTEFURSA9ICd7ez4gZGV2ZWxvcG1lbnQgZGF0YT1kYXRhfX0nO1xuXG5hc3luYyBmdW5jdGlvbiByZW5kZXJUZW1wb3JhcnlGaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gQmVzdGFhdCBkaWUgZmlsZSBub2cgbmlldD9cbiAgaWYgKCFleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgIC8vIEFhbm1ha2VuXG4gICAgYXdhaXQgcHJvbWlzZXMud3JpdGVGaWxlKGZpbGVQYXRoLCBQQUdFX1RFTVBMQVRFKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaHRtbFBsdWdpbihnYW1lczogR2FtZXNTZXR0aW5ncyk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3ZpdGUtcGx1Z2luLWtsb2VrLWh0bWwnLFxuICAgIGVuZm9yY2U6ICdwcmUnLFxuXG4gICAgYXN5bmMgY29uZmlnKF9jb25maWc6IFVzZXJDb25maWcsIGVudmlyb25tZW50OiBDb25maWdFbnYpIHtcbiAgICAgIC8vIEJpaiBlZW4gYnVpbGQgbWFrZW4gd2UgdGlqZGVsaWprIGZpbGVzIGFhblxuICAgICAgaWYgKGVudmlyb25tZW50LmNvbW1hbmQgPT09ICdidWlsZCcpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBhZ2VJZCBvZiBPYmplY3Qua2V5cyhnYW1lcykpIHtcbiAgICAgICAgICAvLyBQYWQgbmFhciBmaWxlXG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJywgYCR7cGFnZUlkfS5odG1sYCk7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKHJlbmRlclRlbXBvcmFyeUZpbGUoZmlsZVBhdGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGFjdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyOiBWaXRlRGV2U2VydmVyKSB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAvLyBab3JnIGVyIHZvb3IgZGF0IHRpamRlbnMgZGV2ZWxvcG1lbnQgZGUgcGFnaW5hIGdlLXJlbmRlcmVkIHRlcnVnIGdlZ2V2ZW4gd29yZHQgd29yZHRcbiAgICAgICAgc2VydmVyLm1pZGRsZXdhcmVzLnVzZSgnLycsIGFzeW5jIChyZXF1ZXN0LCByZXNwb25zZSwgbmV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVybCA9IHJlcXVlc3Q/LnVybCA/PyAnJztcbiAgICAgICAgICBjb25zdCBwYWdlSWQgPSBnZXRQYWdlSWRGcm9tVXJsKHVybCk7XG5cbiAgICAgICAgICBpZiAoIXBhZ2VJZCkge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYWdlSWQgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgICAgIC8vIERldmVsb3BtZW50PyBnZWVmIHRlcnVnLi4uXG4gICAgICAgICAgICByZXNwb25zZS5lbmQoXG4gICAgICAgICAgICAgIGF3YWl0IHNlcnZlci50cmFuc2Zvcm1JbmRleEh0bWwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIERFVkVMT1BNRU5UX1RFTVBMQVRFLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Qub3JpZ2luYWxVcmwsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoZ2FtZXMpLmluY2x1ZGVzKHBhZ2VJZCkpIHtcbiAgICAgICAgICAgIC8vIEJlc3RhYW5kZSBnYW1lPyB6b3JnIGVyIHZvb3IgZGF0IGRlIHRlbXBsYXRlIGdlLXJlbmRlcmVkIHdvcmR0XG4gICAgICAgICAgICByZXNwb25zZS5lbmQoXG4gICAgICAgICAgICAgIGF3YWl0IHNlcnZlci50cmFuc2Zvcm1JbmRleEh0bWwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIFBBR0VfVEVNUExBVEUsXG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vcmlnaW5hbFVybCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5pa3MgZ2V2b25kZW5cbiAgICAgICAgICAgIHJlc3BvbnNlLmVuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZUJ1bmRsZSgpIHtcbiAgICAgIC8vIFZlcndpamRlciBkZSBhYW5nZW1hYWt0ZSBmaWxlc1xuICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGFnZUlkIG9mIE9iamVjdC5rZXlzKGdhbWVzKSkge1xuICAgICAgICAvLyBQYWQgbmFhciBmaWxlXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsIGAke3BhZ2VJZH0uaHRtbGApO1xuICAgICAgICBpZiAoZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHByb21pc2VzLnJtKGZpbGVQYXRoKSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChhY3Rpb25zKTtcbiAgICB9LFxuICB9O1xufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7c3ZlbHRlfSBmcm9tICdAc3ZlbHRlanMvdml0ZS1wbHVnaW4tc3ZlbHRlJztcbmltcG9ydCB7dHlwZSBQbHVnaW4sIHR5cGUgUGx1Z2luT3B0aW9ufSBmcm9tICd2aXRlJztcbmltcG9ydCB0c2NvbmZpZ1BhdGhzUGx1Z2luIGZyb20gJ3ZpdGUtdHNjb25maWctcGF0aHMnO1xuaW1wb3J0IHN2ZWx0ZVByZXByb2Nlc3MgZnJvbSAnc3ZlbHRlLXByZXByb2Nlc3MnO1xuaW1wb3J0IHt0eXBlIFZpdGVPcHRpb25zfSBmcm9tICcuLi91dGlscy9pbnRlcmZhY2VzJztcbmltcG9ydCB7Y3dkfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2hhbmRsZWJhcnNQbHVnaW59IGZyb20gJy4vbGliL2hhbmRsZWJhcnMtcGx1Z2luJztcbmltcG9ydCB7aHRtbFBsdWdpbn0gZnJvbSAnLi9saWIvaHRtbC1wbHVnaW4nO1xuXG5leHBvcnQgZnVuY3Rpb24gYmFzZVBsdWdpbnMob3B0aW9uczogVml0ZU9wdGlvbnMpOiBBcnJheTxQbHVnaW4gfCBQbHVnaW5PcHRpb24+IHtcbiAgcmV0dXJuIFtcbiAgICBodG1sUGx1Z2luKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLFxuXG4gICAgLi4uc3ZlbHRlKHtcbiAgICAgIHByZXByb2Nlc3M6IHN2ZWx0ZVByZXByb2Nlc3MoKSxcblxuICAgICAgb253YXJuKHdhcm5pbmcsIHdhcm4pIHtcbiAgICAgICAgaWYgKCF3YXJuKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm8gYTExeSB3YXJuaW5ncy4uLlxuICAgICAgICBpZiAod2FybmluZy5jb2RlLnN0YXJ0c1dpdGgoJ2ExMXktJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuKHdhcm5pbmcpO1xuICAgICAgfSxcbiAgICB9KSxcblxuICAgIHRzY29uZmlnUGF0aHNQbHVnaW4oe1xuICAgICAgcm9vdDogcGF0aC5yZXNvbHZlKGN3ZCksXG4gICAgICAvLyBFeHRlbnNpb25zOiBbJy50cycsICcuanNvbiddLFxuICAgICAgbG9vc2U6IHRydWUsXG4gICAgfSksXG5cbiAgICBoYW5kbGViYXJzUGx1Z2luKG9wdGlvbnMuY29uZmlnLnNlcnZlLnBhcnRpYWxzLCBvcHRpb25zKSxcbiAgXTtcbn1cbiIsImltcG9ydCBjcnlwdG8sIHt0eXBlIEJpbmFyeUxpa2V9IGZyb20gJ25vZGU6Y3J5cHRvJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1kNShidWZmZXI6IEJpbmFyeUxpa2UpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShidWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUge0NvbmZpZ0VudiwgUGx1Z2lufSBmcm9tICd2aXRlJztcbmltcG9ydCB2aXRlSW1hZ2VtaW4gZnJvbSAnQHZoZWVtc3RyYS92aXRlLXBsdWdpbi1pbWFnZW1pbic7XG5pbXBvcnQgaW1hZ2VtaW5Nb3pKcGVnIGZyb20gJ2ltYWdlbWluLW1vempwZWcnO1xuaW1wb3J0IHR5cGUge0ltYWdlUXVhbGl0eUNvbmZpZ30gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQge2N3ZCwgcmVhZEpTT059IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7bWQ1fSBmcm9tICcuLi8uLi91dGlscy9oYXNoJztcblxuLy8gVGhlIG1pbmlmaWVycyB5b3Ugd2FudCB0byB1c2U6XG5pbXBvcnQgaW1hZ2VtaW5QbmdRdWFudCBmcm9tICdpbWFnZW1pbi1wbmdxdWFudCc7XG5pbXBvcnQgaW1hZ2VtaW5PcHRpUG5nIGZyb20gJ2ltYWdlbWluLW9wdGlwbmcnO1xuXG5jb25zdCBwa2cgPSByZWFkSlNPTihwYXRoLnJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJykpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgZnVuY3Rpb24gaW1hZ2VtaW5QbHVnaW4oXG4gIGVudmlyb25tZW50OiBDb25maWdFbnYsXG4gIG9wdGlvbnM6IEltYWdlUXVhbGl0eUNvbmZpZyxcbik6IFBsdWdpbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChlbnZpcm9ubWVudC5tb2RlICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdml0ZUltYWdlbWluKHtcbiAgICBza2lwSWZMYXJnZXI6IHRydWUsXG4gICAgdmVyYm9zZTogdHJ1ZSxcbiAgICBjYWNoZTogdHJ1ZSxcbiAgICBjYWNoZURpcjogcGF0aC5yZXNvbHZlKGN3ZCwgJy5jYWNoZS92aXRlLXBsdWdpbi1pbWFnZW1pbicpLFxuICAgIGNhY2hlS2V5OiBgJHtwa2cubmFtZX0tJHttZDUoSlNPTi5zdHJpbmdpZnkoey4uLm9wdGlvbnN9KSl9YCxcbiAgICByb290OiBwYXRoLmpvaW4ocGF0aC5yZXNvbHZlKGN3ZCksICdwdWJsaWMnKSxcbiAgICBwbHVnaW5zOiB7XG4gICAgICBqcGc6IFtcbiAgICAgICAgaW1hZ2VtaW5Nb3pKcGVnKHtcbiAgICAgICAgICBxdWFsaXR5OiBvcHRpb25zLmpwZWcgPz8gODAsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIHBuZzogW1xuICAgICAgICBpbWFnZW1pblBuZ1F1YW50KHtcbiAgICAgICAgICBzdHJpcDogdHJ1ZSxcbiAgICAgICAgICBzcGVlZDogMixcbiAgICAgICAgICBkaXRoZXJpbmc6IDAuMjUsXG4gICAgICAgICAgcXVhbGl0eTogb3B0aW9ucy5wbmcgPz8gWzAuNSwgMC43XSxcbiAgICAgICAgfSksXG4gICAgICAgIGltYWdlbWluT3B0aVBuZygpLFxuICAgICAgXSxcbiAgICB9LFxuICB9KSBhcyBQbHVnaW47XG59XG4iLCJpbXBvcnQgeyBPdXRwdXRBc3NldCB9IGZyb20gJ3JvbGx1cCc7XG5pbXBvcnQgdHlwZSB7UGx1Z2luLCBSZXNvbHZlZENvbmZpZ30gZnJvbSAndml0ZSc7XG5pbXBvcnQgdHlwZSB7R2FtZVNldHRpbmdzLCBHYW1lc1NldHRpbmdzfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcmZhY2VzJztcblxuZnVuY3Rpb24gcmVuZGVyR2FtZU1hbmlmZXN0KFxuICBwYWdlSWQ6IHN0cmluZyxcbiAgc2V0dGluZ3M6IEdhbWVTZXR0aW5ncyxcbiAgY29uZmlnOiBSZXNvbHZlZENvbmZpZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hbmlmZXN0ID0ge1xuICAgIHNob3J0X25hbWU6IGAke3NldHRpbmdzLm1ldGEuYXBwdGl0bGV9YCxcbiAgICBuYW1lOiBgJHtzZXR0aW5ncy5tZXRhLnRpdGxlfWAsXG4gICAgZGVzY3JpcHRpb246IGAke3NldHRpbmdzLm1ldGEuZGVzY3JpcHRpb259YCxcbiAgICBzY29wZTogYCR7Y29uZmlnLmJhc2V9JHtwYWdlSWR9Lmh0bWxgLFxuICAgIHN0YXJ0X3VybDogYCR7Y29uZmlnLmJhc2V9JHtwYWdlSWR9Lmh0bWxgLFxuICAgIGRpc3BsYXk6ICdmdWxsc2NyZWVuJyxcbiAgICBvcmllbnRhdGlvbjogYCR7c2V0dGluZ3Mub3B0aW9ucy5vcmllbnRhdGlvbiA/PyAnbGFuZHNjYXBlJ31gLFxuICAgIGljb25zOiBbXG4gICAgICB7XG4gICAgICAgIHNyYzogYCR7Y29uZmlnLmJhc2V9bWV0YS8ke3NldHRpbmdzLmluZm8uaWR9L2ljb25zL2Nocm9tZS10b3VjaC1pY29uLTE5MngxOTIucG5nYCxcbiAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgIHNpemVzOiAnMTkyeDE5MicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzcmM6IGAke2NvbmZpZy5iYXNlfW1ldGEvJHtzZXR0aW5ncy5pbmZvLmlkfS9pY29ucy9pY29uLnBuZ2AsXG4gICAgICAgIHR5cGU6ICdpbWFnZS9wbmcnLFxuICAgICAgICBzaXplczogJzEwMjR4MTAyNCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYmFja2dyb3VuZF9jb2xvcjogYCR7c2V0dGluZ3Mub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3J9YCxcbiAgICB0aGVtZV9jb2xvcjogYCR7c2V0dGluZ3Mub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3J9YCxcbiAgfTtcblxuICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3QsIG51bGwsIDIpfVxcbmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYW5pZmVzdFBsdWdpbihnYW1lczogR2FtZXNTZXR0aW5ncyk6IFBsdWdpbiB7XG4gIGxldCBjb25maWc6IFJlc29sdmVkQ29uZmlnO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3ZpdGUtcGx1Z2luLWtsb2VrLW1hbmlmZXN0JyxcbiAgICBlbmZvcmNlOiAncG9zdCcsXG4gICAgYXBwbHk6ICdidWlsZCcsXG4gICAgYXN5bmMgY29uZmlnUmVzb2x2ZWQocmVzb2x2ZWRDb25maWc6IFJlc29sdmVkQ29uZmlnKSB7XG4gICAgICBjb25maWcgPSByZXNvbHZlZENvbmZpZztcbiAgICB9LFxuICAgIGdlbmVyYXRlQnVuZGxlKF8sIGJ1bmRsZSkge1xuICAgICAgLy8gVm9vciBpZWRlcmUgYXBwIGVlbiBtYW5pZmVzdCBtYWtlbjpcbiAgICAgIGZvciAoY29uc3QgW3BhZ2VJZCwgc2V0dGluZ3NdIG9mIE9iamVjdC5lbnRyaWVzKGdhbWVzKSkge1xuICAgICAgICBidW5kbGVbYCR7cGFnZUlkfS53ZWJtYW5pZmVzdGBdID0ge1xuICAgICAgICAgIG5lZWRzQ29kZVJlZmVyZW5jZTogZmFsc2UsXG4gICAgICAgICAgdHlwZTogJ2Fzc2V0JyxcbiAgICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgc291cmNlOiByZW5kZXJHYW1lTWFuaWZlc3QocGFnZUlkLCBzZXR0aW5ncywgY29uZmlnKSxcbiAgICAgICAgICBmaWxlTmFtZTogYCR7cGFnZUlkfS53ZWJtYW5pZmVzdGAsXG4gICAgICAgIH0gYXMgT3V0cHV0QXNzZXQ7XG5cbiAgICAgICAgYnVuZGxlW2Ake3BhZ2VJZH0tc2VydmljZXdvcmtlci5qc2BdID0ge1xuICAgICAgICAgIG5lZWRzQ29kZVJlZmVyZW5jZTogZmFsc2UsXG4gICAgICAgICAgdHlwZTogJ2Fzc2V0JyxcbiAgICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgc291cmNlOiBcInNlbGYuYWRkRXZlbnRMaXN0ZW5lcignZmV0Y2gnLCBmdW5jdGlvbigpIHsgcmV0dXJuOyB9KTtcIixcbiAgICAgICAgICBmaWxlTmFtZTogYCR7cGFnZUlkfS1zZXJ2aWNld29ya2VyLmpzYCxcbiAgICAgICAgfSBhcyBPdXRwdXRBc3NldDtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwiaW1wb3J0IGxlZ2FjeVBsdWdpbiBmcm9tICdAdml0ZWpzL3BsdWdpbi1sZWdhY3knO1xuaW1wb3J0IHsgdmlzdWFsaXplciB9IGZyb20gJ3JvbGx1cC1wbHVnaW4tdmlzdWFsaXplcic7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiwgUGx1Z2luT3B0aW9uIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIGJhbm5lclBsdWdpbiB9IGZyb20gJ3ZpdGUtcGx1Z2luLWJhbm5lcic7XG5pbXBvcnQgeyBjcmVhdGVIdG1sUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4taHRtbCc7XG5pbXBvcnQgdHlwZSB7IFZpdGVPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpbWFnZW1pblBsdWdpbiB9IGZyb20gJy4vbGliL2ltYWdlLXBsdWdpbic7XG5pbXBvcnQgeyBtYW5pZmVzdFBsdWdpbiB9IGZyb20gJy4vbGliL21hbmlmZXN0LXBsdWdpbic7XG5cbi8vIEJ1aWxkIHBsdWdpbnNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBsdWdpbnMob3B0aW9uczogVml0ZU9wdGlvbnMpOiBBcnJheTxQbHVnaW4gfCBQbHVnaW5PcHRpb24+IHtcbiAgLy8gTm8gYnVpbGQ/IG5vIHBsdWdpbnMuLlxuICBpZiAob3B0aW9ucy5lbnZpcm9ubWVudC5jb21tYW5kICE9PSAnYnVpbGQnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGx1Z2luczogQXJyYXk8UGx1Z2luIHwgUGx1Z2luT3B0aW9uIHwgdW5kZWZpbmVkPiA9IFtdO1xuXG4gIGlmIChvcHRpb25zLmNvbmZpZy5idWlsZC5sZWdhY3kpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIHBhZ2Ugd29ya3MgaW4gb2xkZXIgYnJvd3NlcnNcbiAgICBwbHVnaW5zLnB1c2goXG4gICAgICAuLi5sZWdhY3lQbHVnaW4oeyB0YXJnZXRzOiAob3B0aW9ucy5jb25maWcuYnVpbGQuYnJvd3NlcnNsaXN0IGFzIHN0cmluZ1tdKSA/PyAnZGVmYXVsdHMnIH0pLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYWdlcyA9IE9iamVjdC5rZXlzKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLm1hcCgoZ2FtZUlkKSA9PiB7XG4gICAgcmV0dXJuIHsgZmlsZW5hbWU6IGAke2dhbWVJZH0uaHRtbGAsIHRlbXBsYXRlOiBgJHtnYW1lSWR9Lmh0bWxgIH07XG4gIH0pO1xuXG4gIHBsdWdpbnMucHVzaChcbiAgICAvLyBNaW5pZnkgaW1hZ2UgYXNzZXRzXG4gICAgaW1hZ2VtaW5QbHVnaW4ob3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5jb25maWcuYnVpbGQuaW1hZ2VRdWFsaXR5KSxcblxuICAgIC8vIE1ha2UgdGhlIGh0bWwgb3V0cHV0IHNtYWxsZXJcbiAgICAuLi4oY3JlYXRlSHRtbFBsdWdpbih7IG1pbmlmeTogdHJ1ZSwgcGFnZXMgfSkgYXMgUGx1Z2luW10pLFxuXG4gICAgLy8gQWRkIGEgYmFubmVyIHRvIGdlbmVyYXRlZCBqcy9jc3NcbiAgICBiYW5uZXJQbHVnaW4oe1xuICAgICAgb3V0RGlyOiAnLi4vcHVibGljJyxcbiAgICAgIGNvbnRlbnQ6IGAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuXG5cbiAgICAgICAgIF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICAgICAgXyAgICAgICAgICAgIF9cbiAgICAgICAgLyAgKSAgICAgICAgICAgICAgfCAgbyAgICAgICAgIC98ICAgLyB8IHwgICAgICAgICAgfCB8XG4gICAgICAgIFxcXFxfXyBffF8gICAgICAgICBfX3wgICAgICBfXyAgICAgfF9fLyAgfCB8ICBfXyAgIF8gIHwgfFxuICAgICAgICAgICBcXFxcIHwgIHwgICB8ICAvICB8ICB8ICAvICBcXFxcXyAgIHwgXFxcXCAgIHwvICAvICBcXFxcX3wvICB8L18pXG4gICAgICAgKF9fXy8gfF8vIFxcXFxfL3xfL1xcXFxfL3xfL3xfL1xcXFxfXy8gICAgfCAgXFxcXF8vfF9fL1xcXFxfXy8gfF9fL3wgXFxcXF8vXG5cbiAgICAgICAgQ29uY2VwdCwgb250d2VycCAmIG9udHdpa2tlbGluZ1xuICAgICAgICBodHRwczovL3N0dWRpb2tsb2VrLm5sXG5cbiAgICAgICAgU3R1ZGlvIEtsb2VrIOKdpCBQaXhpSlMsIEdTQVAgJiBob3dsZXIuanNcblxuICAgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC5gLFxuICAgIH0pLFxuICApO1xuXG4gIC8vIENyZWF0ZSBhIG1hbmlmZXN0IGFuZCBtaW5pbWFsIHdlYndvcmtlciBmb3IgZXZlcnkgZ2FtZVxuICBpZiAob3B0aW9ucy5jb25maWcuYnVpbGQubWFuaWZlc3QpIHtcbiAgICBwbHVnaW5zLnB1c2gobWFuaWZlc3RQbHVnaW4ob3B0aW9ucy5zZXR0aW5ncy5nYW1lcykpO1xuICB9XG5cbiAgLy8gRG8gd2UgbmVlZCB0byBhbmFseXNlIHRoZSBidWlsZD9cbiAgaWYgKG9wdGlvbnMuY29uZmlnLmJ1aWxkLmFuYWx5emVCdW5kbGUpIHtcbiAgICBwbHVnaW5zLnB1c2goXG4gICAgICB2aXN1YWxpemVyKHtcbiAgICAgICAgdGVtcGxhdGU6ICd0cmVlbWFwJywgLy8gb3Igc3VuYnVyc3RcbiAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgZ3ppcFNpemU6IHRydWUsXG4gICAgICAgIGZpbGVuYW1lOiAnYnVuZGxlLWFuYWx5c2UuaHRtbCcsIC8vIHdpbGwgYmUgc2F2ZWQgaW4gcHJvamVjdCdzIHJvb3RcbiAgICAgIH0pIGFzIFBsdWdpbk9wdGlvbixcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHBsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+IHBsdWdpbiAhPT0gdW5kZWZpbmVkKTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge3R5cGUgUGx1Z2luLCB0eXBlIFBsdWdpbk9wdGlvbn0gZnJvbSAndml0ZSc7XG5pbXBvcnQgY2hlY2tlciBmcm9tICd2aXRlLXBsdWdpbi1jaGVja2VyJztcbmltcG9ydCBmdWxsUmVsb2FkIGZyb20gJ3ZpdGUtcGx1Z2luLWZ1bGwtcmVsb2FkJztcbmltcG9ydCBta2NlcnQgZnJvbSAndml0ZS1wbHVnaW4tbWtjZXJ0JztcbmltcG9ydCB7Y3dkfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIEtsb2VrQ29uZmlnU2VydmVTZXR0aW5ncyA9IHtcbiAgZnVsbFJlbG9hZFN2ZWx0ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2VydmVQbHVnaW5zKHNldHRpbmdzPzogS2xvZWtDb25maWdTZXJ2ZVNldHRpbmdzKTogQXJyYXk8UGx1Z2luIHwgUGx1Z2luT3B0aW9uPiB7XG4gIGNvbnN0IGZ1bGxSZWxvYWRQYXRocyA9IFsnc2NyaXB0LyoqLyoudHMnXTtcbiAgaWYgKHNldHRpbmdzPy5mdWxsUmVsb2FkU3ZlbHRlKSB7XG4gICAgZnVsbFJlbG9hZFBhdGhzLnB1c2goJ3N2ZWx0ZS8qKi8qLnN2ZWx0ZScpO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICBmdWxsUmVsb2FkKGZ1bGxSZWxvYWRQYXRocywge1xuICAgICAgcm9vdDogcGF0aC5qb2luKHBhdGgucmVzb2x2ZShjd2QpLCAnc291cmNlJyksXG4gICAgICBsb2c6IHRydWUsXG4gICAgICBhbHdheXM6IHRydWUsXG4gICAgfSkgYXMgUGx1Z2luLFxuXG4gICAgbWtjZXJ0KCksXG5cbiAgICBjaGVja2VyKHtcbiAgICAgIHR5cGVzY3JpcHQ6IHRydWUsXG4gICAgfSksXG4gIF07XG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7Q29uZmlnRW52LCBVc2VyQ29uZmlnfSBmcm9tICd2aXRlJztcbmltcG9ydCB7YmFzZVBsdWdpbnN9IGZyb20gJy4vcGx1Z2lucy9iYXNlJztcbmltcG9ydCB7YnVpbGRQbHVnaW5zfSBmcm9tICcuL3BsdWdpbnMvYnVpbGQnO1xuaW1wb3J0IHtzZXJ2ZVBsdWdpbnN9IGZyb20gJy4vcGx1Z2lucy9zZXJ2ZSc7XG5pbXBvcnQge1xuICBjd2QsXG4gIGRlZmluZUJ1aWxkQ29uZmlnLFxuICBnZXRQYWNrYWdlQ29uZmlnLFxuICBnZXRQYWdlVG9TZXJ2ZSxcbiAgcGFyc2VQYWNrYWdlR2FtZXNTZXR0aW5ncyxcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7Vml0ZU9wdGlvbnN9IGZyb20gJy4vdXRpbHMvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVmaW5lS2xvZWtWaXRlQ29uZmlnKGVudmlyb25tZW50OiBDb25maWdFbnYpOiBQcm9taXNlPFVzZXJDb25maWc+IHtcbiAgY29uc3QgcGFja2FnZV8gPSBnZXRQYWNrYWdlQ29uZmlnKCk7XG5cbiAgY29uc3Qgb3B0aW9uczogVml0ZU9wdGlvbnMgPSB7XG4gICAgcm9vdDogcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScpLFxuICAgIHBhY2thZ2U6IHBhY2thZ2VfLFxuICAgIGVudmlyb25tZW50LFxuICAgIHNldHRpbmdzOiBwYXJzZVBhY2thZ2VHYW1lc1NldHRpbmdzKHBhY2thZ2VfLnNldHRpbmdzLCBwYWNrYWdlXy52ZXJzaW9uKSxcbiAgICBjb25maWc6IHtcbiAgICAgIC4uLnBhY2thZ2VfLnZpdGUsXG4gICAgICBidWlsZDogey4uLnBhY2thZ2VfLnZpdGUuYnVpbGQsIGJyb3dzZXJzbGlzdDogcGFja2FnZV8uYnJvd3NlcnNsaXN0fSxcbiAgICAgIHNlcnZlOiB7XG4gICAgICAgIHBhcnRpYWxzOiBbcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3BhcnRpYWxzJyksIHBhdGgucmVzb2x2ZShjd2QsICdzb3VyY2UnLCAncGFydGlhbHMnKV0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgY29uZmlnOiBVc2VyQ29uZmlnID0ge1xuICAgIGxvZ0xldmVsOiAnaW5mbycsXG4gICAgYmFzZTogcGFja2FnZV8udml0ZS5idWlsZC5iYXNlUGF0aCxcbiAgICByb290OiBvcHRpb25zLnJvb3QsXG4gICAgZW52RGlyOiBwYXRoLnJlc29sdmUoY3dkLCAnZW52JyksXG4gICAgZW52UHJlZml4OiBbJ0tMT0VLXycsICdWSVRFXyddLFxuICAgIHB1YmxpY0RpcjogJ3N0YXRpYycsXG4gICAgZGVmaW5lOiB7fSxcblxuICAgIGVzYnVpbGQ6IHtcbiAgICAgIGxlZ2FsQ29tbWVudHM6ICdub25lJyxcbiAgICB9LFxuXG4gICAgcmVzb2x2ZToge1xuICAgICAgYWxpYXM6IHtcbiAgICAgICAgJ0BtZXRhJzogcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsICdzdGF0aWMnLCAnbWV0YScpLFxuICAgICAgICAnQGZvbnRzJzogcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsICdzdGF0aWMnLCAnZm9udHMnKSxcbiAgICAgIH0sXG4gICAgICBkZWR1cGU6IFtcbiAgICAgICAgJ0BzdHVkaW9rbG9lay90cy1jb3JlLWxpYicsXG4gICAgICAgICdAY2FwYWNpdG9yL2FwcCcsXG4gICAgICAgICdAY2FwYWNpdG9yL2NvcmUnLFxuICAgICAgICAnQGNhcGFjaXRvci9kZXZpY2UnLFxuICAgICAgICAnQGNhcGFjaXRvci9uZXR3b3JrJyxcbiAgICAgICAgJ0BjYXBhY2l0b3IvcHJlZmVyZW5jZXMnLFxuICAgICAgICAnQGNhcGFjaXRvci9zcGxhc2gtc2NyZWVuJyxcbiAgICAgICAgJ0BjYXBhY2l0b3Ivc3RhdHVzLWJhcicsXG4gICAgICAgICdib3dzZXInLFxuICAgICAgICAnZGF0ZS1mbnMtdHonLFxuICAgICAgICAnZGF0ZS1mbnMnLFxuICAgICAgICAnZXJyb3Itc3RhY2stcGFyc2VyLWVzJyxcbiAgICAgICAgJ2ZpcmViYXNlJyxcbiAgICAgICAgJ2ZvbnRmYWNlb2JzZXJ2ZXInLFxuICAgICAgICAnZ3NhcCcsXG4gICAgICAgICdob3dsZXInLFxuICAgICAgICAnbG9kYXNoLWRlY29yYXRvcnMnLFxuICAgICAgICAnbG9kYXNoJyxcbiAgICAgICAgJ292ZXJtaW5kJyxcbiAgICAgICAgJ3BpeGktc3BpbmUnLFxuICAgICAgICAncGl4aScsXG4gICAgICAgICdwdWJzdWItanMnLFxuICAgICAgICAncmFuZG9tLWpzJyxcbiAgICAgICAgJ3Jlc3MnLFxuICAgICAgICAnc2x1Z2lmeScsXG4gICAgICAgICdzdXBlcmFnZW50JyxcbiAgICAgICAgJ3RzLWV2ZW50cycsXG4gICAgICAgICd0cy1taXhlcicsXG4gICAgICAgICd0c2xpYicsXG4gICAgICBdLFxuICAgIH0sXG5cbiAgICBjc3M6IHtcbiAgICAgIHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcbiAgICAgICAgc2Nzczoge1xuICAgICAgICAgIGNoYXJzZXQ6IGZhbHNlLFxuICAgICAgICAgIHNpbGVuY2VEZXByZWNhdGlvbnM6IFsnbGVnYWN5LWpzLWFwaSddLFxuICAgICAgICAgIC8vIEFkZGl0aW9uYWxEYXRhOiBgQGNoYXJzZXQgXCJVVEYtOFwiYCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHBsdWdpbnM6IFsuLi5iYXNlUGx1Z2lucyhvcHRpb25zKV0sXG4gIH07XG5cbiAgc3dpdGNoIChlbnZpcm9ubWVudC5jb21tYW5kKSB7XG4gICAgY2FzZSAnc2VydmUnOiB7XG4gICAgICBjb25maWcuc2VydmVyID0ge1xuICAgICAgICBob3N0OiB0cnVlLFxuICAgICAgICBjb3JzOiBvcHRpb25zLmNvbmZpZy5kZXYuY29ycyA/PyB0cnVlLFxuICAgICAgICBodHRwczogb3B0aW9ucy5jb25maWcuZGV2Lmh0dHBzID8/IHRydWUsXG4gICAgICAgIG9wZW46IGdldFBhZ2VUb1NlcnZlKG9wdGlvbnMuY29uZmlnLCBvcHRpb25zLnNldHRpbmdzLmdhbWVzKSxcbiAgICAgIH07XG4gICAgICBjb25maWcucGx1Z2lucyA9IFtcbiAgICAgICAgLi4uKGNvbmZpZy5wbHVnaW5zID8gY29uZmlnLnBsdWdpbnMgOiBbXSksXG4gICAgICAgIC4uLnNlcnZlUGx1Z2lucyh7XG4gICAgICAgICAgZnVsbFJlbG9hZFN2ZWx0ZTogcGFja2FnZV8udml0ZS5kZXYuZnVsbFJlbG9hZFN2ZWx0ZSA/PyB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgIF07XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgJ2J1aWxkJzoge1xuICAgICAgY29uZmlnLmJ1aWxkID0gZGVmaW5lQnVpbGRDb25maWcob3B0aW9ucyk7XG4gICAgICBjb25maWcucGx1Z2lucyA9IFsuLi4oY29uZmlnLnBsdWdpbnMgPyBjb25maWcucGx1Z2lucyA6IFtdKSwgLi4uYnVpbGRQbHVnaW5zKG9wdGlvbnMpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwiaW1wb3J0IHt0eXBlIFR5cGVkRmxhZ3N9IGZyb20gJ21lb3cnO1xuaW1wb3J0IHtidWlsZCwgY3JlYXRlU2VydmVyLCB0eXBlIExvZ0xldmVsfSBmcm9tICd2aXRlJztcbmltcG9ydCB7ZGVmaW5lS2xvZWtWaXRlQ29uZmlnfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge2FkZEJ1aWxkRm9sZGVyVG9aaXAsIGdldFBhY2thZ2VDb25maWd9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2xvZWtEZXZlbG9wbWVudChcbiAgZmxhZ3M6IFR5cGVkRmxhZ3M8e1xuICAgIG1vZGU6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0Pzogc3RyaW5nO1xuICAgIH07XG4gIH0+LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGRlZmluZUtsb2VrVml0ZUNvbmZpZyh7XG4gICAgY29tbWFuZDogJ3NlcnZlJyxcbiAgICBtb2RlOiAnZGV2ZWxvcG1lbnQnLFxuICB9KTtcblxuICAvLyBEaWZmZXJlbnQgbW9kZVxuICBpZiAodHlwZW9mIGZsYWdzLm1vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnLm1vZGUgPSBmbGFncy5tb2RlO1xuICB9XG5cbiAgY29uc3Qgc2VydmVyID0gYXdhaXQgY3JlYXRlU2VydmVyKHtcbiAgICBjb25maWdGaWxlOiBmYWxzZSxcbiAgICAuLi5jb25maWcsXG4gIH0pO1xuXG4gIGF3YWl0IHNlcnZlci5saXN0ZW4oKTtcbiAgc2VydmVyLnByaW50VXJscygpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2xvZWtCdWlsZChcbiAgZmxhZ3M6IFR5cGVkRmxhZ3M8e1xuICAgIGJhc2U6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0OiBzdHJpbmc7XG4gICAgfTtcbiAgICBtb2RlOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJztcbiAgICAgIHNob3J0RmxhZzogc3RyaW5nO1xuICAgICAgZGVmYXVsdD86IHN0cmluZztcbiAgICB9O1xuICAgIGxvZ0xldmVsOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJztcbiAgICAgIHNob3J0RmxhZzogc3RyaW5nO1xuICAgICAgZGVmYXVsdD86IHN0cmluZztcbiAgICB9O1xuICAgIGVtcHR5T3V0RGlyOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbic7XG4gICAgICBzaG9ydEZsYWc6IHN0cmluZztcbiAgICAgIGRlZmF1bHQ6IHRydWU7XG4gICAgfTtcbiAgICBzb3VyY2VtYXBzOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbic7XG4gICAgICBzaG9ydEZsYWc6IHN0cmluZztcbiAgICAgIGRlZmF1bHQ6IGZhbHNlO1xuICAgIH07XG4gICAgaW5saW5lU291cmNlbWFwczoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0OiBmYWxzZTtcbiAgICB9O1xuICAgIGNyZWF0ZVppcDoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0OiBmYWxzZTtcbiAgICB9O1xuICB9Pixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBkZWZpbmVLbG9la1ZpdGVDb25maWcoe1xuICAgIGNvbW1hbmQ6ICdidWlsZCcsXG4gICAgbW9kZTogJ3Byb2R1Y3Rpb24nLFxuICB9KTtcblxuICAvLyBFbXB0eSBvdXQgdGhlIE91dHB1dCBkaXIgYmVmb3JlIGJ1aWxkaW5nP1xuICBpZiAoZmxhZ3MuZW1wdHlPdXREaXIgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZy5idWlsZCA9IHtcbiAgICAgIC4uLmNvbmZpZy5idWlsZCxcbiAgICAgIGVtcHR5T3V0RGlyOiBmbGFncy5lbXB0eU91dERpcixcbiAgICB9O1xuICB9XG5cbiAgLy8gQ3JlYXRlIHNvdXJjZW1hcHM/XG4gIGlmIChmbGFncy5zb3VyY2VtYXBzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25maWcuYnVpbGQgPSB7XG4gICAgICAuLi5jb25maWcuYnVpbGQsXG4gICAgICBzb3VyY2VtYXA6IGZsYWdzLnNvdXJjZW1hcHMgPyAoZmxhZ3MuaW5saW5lU291cmNlbWFwcyA/ICdpbmxpbmUnIDogdHJ1ZSkgOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gRGlmZmVyZW50IGJhc2UgcGF0aFxuICBpZiAodHlwZW9mIGZsYWdzLmJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnLmJhc2UgPSBmbGFncy5iYXNlO1xuICB9XG5cbiAgLy8gRGlmZmVyZW50IG1vZGVcbiAgaWYgKHR5cGVvZiBmbGFncy5tb2RlID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZy5tb2RlID0gZmxhZ3MubW9kZTtcbiAgfVxuXG4gIC8vIERpZmZlcmVudCBtb2RlXG4gIGNvbmZpZy5sb2dMZXZlbCA9IGZsYWdzLmxvZ0xldmVsIGFzIExvZ0xldmVsIHwgdW5kZWZpbmVkO1xuXG4gIGF3YWl0IGJ1aWxkKHtcbiAgICBjb25maWdGaWxlOiBmYWxzZSxcbiAgICAuLi5jb25maWcsXG4gIH0pO1xuXG4gIC8vIE1ha2VuIHdlIGVlbiB6aXAgYWFuP1xuICBpZiAoZmxhZ3MuY3JlYXRlWmlwIHx8IGdldFBhY2thZ2VDb25maWcoKS52aXRlLmJ1aWxkLmNyZWF0ZVppcCkge1xuICAgIGF3YWl0IGFkZEJ1aWxkRm9sZGVyVG9aaXAoKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7QUNEekMsU0FBVSxRQUFRLENBQUMsSUFBWSxFQUFBO0lBQ25DLElBQUk7QUFDRixRQUFBLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNuQztJQUFDLE1BQU07O0FBRVA7QUFFRCxJQUFBLE9BQU8sS0FBSztBQUNkOztBQ1BNLFNBQVUsaUJBQWlCLENBQUMsT0FBb0IsRUFBQTtJQUNwRCxNQUFNLEtBQUssR0FBMkIsRUFBRTtBQUV4QyxJQUFBLEtBQUssTUFB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
|
|
605
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9idWlsZC50cyIsIi4uL3NyYy91dGlscy9jd2QudHMiLCIuLi9zcmMvdXRpbHMvZ2FtZS50cyIsIi4uL3NyYy91dGlscy9qc29uLnRzIiwiLi4vc3JjL3V0aWxzL3BrZy50cyIsIi4uL3NyYy91dGlscy96aXAudHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaGFuZGxlYmFycy1wbHVnaW4udHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaHRtbC1wbHVnaW4udHMiLCIuLi9zcmMvcGx1Z2lucy9iYXNlLnRzIiwiLi4vc3JjL3V0aWxzL2hhc2gudHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaW1hZ2UtcGx1Z2luLnRzIiwiLi4vc3JjL3BsdWdpbnMvbGliL21hbmlmZXN0LXBsdWdpbi50cyIsIi4uL3NyYy9wbHVnaW5zL2J1aWxkLnRzIiwiLi4vc3JjL3BsdWdpbnMvc2VydmUudHMiLCIuLi9zcmMvY29uZmlnLnRzIiwiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkT3B0aW9ucyB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHR5cGUgeyBWaXRlT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVCdWlsZENvbmZpZyhvcHRpb25zOiBWaXRlT3B0aW9ucyk6IEJ1aWxkT3B0aW9ucyB7XG4gICAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgZ2FtZUlkIG9mIE9iamVjdC5rZXlzKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpKSB7XG4gICAgICAgIGlucHV0W2dhbWVJZF0gPSBwYXRoLnJlc29sdmUob3B0aW9ucy5yb290LCBgJHtnYW1lSWR9Lmh0bWxgKTtcbiAgICB9XG5cbiAgICAvLyBMaWJzIGRpZSBhcGFydGUganMga3JpamdlbjpcbiAgICAvLyBjb25zdCB2ZW5kb3JDaHVua3MgPSBbJ3BpeGknLCAnZmlyZWJhc2UnLCAnbG9kYXNoJywgJ2dzYXAnLCAnc3R1ZGlva2xvZWsnXTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiB0cnVlLFxuICAgICAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDIwMDAsXG4gICAgICAgIG91dERpcjogJy4uL3B1YmxpYycsXG4gICAgICAgIGFzc2V0c0RpcjogJ2dlbmVyYXRlZCcsXG4gICAgICAgIG1pbmlmeTogJ3RlcnNlcicsXG4gICAgICAgIHNvdXJjZW1hcDogb3B0aW9ucy5jb25maWcuYnVpbGQuc291cmNlTWFwcyA/PyBmYWxzZSxcbiAgICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiIsImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAndml0ZSc7XG5cbmV4cG9ydCBjb25zdCBjd2QgPSBub3JtYWxpemVQYXRoKHByb2Nlc3MuY3dkKCkpO1xuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIHtcbiAgICBHYW1lU2V0dGluZ3MsXG4gICAgR2FtZVNldHRpbmdzUHJvcGVydHksXG4gICAgR2FtZXNTZXR0aW5ncyxcbiAgICBHYW1lc1NldHRpbmdzRGF0YSxcbiAgICBLbG9la1ZpdGVDb25maWcsXG4gICAgUGFja2FnZUdhbWVzU2V0dGluZ3MsXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmZ1bmN0aW9uIG1lcmdlR2FtZVNldHRpbmdzKGdlbmVyaWM6IEdhbWVTZXR0aW5ncywgZ2FtZTogR2FtZVNldHRpbmdzLCBpbmZvVHlwZXM6IEdhbWVTZXR0aW5nc1Byb3BlcnR5W10pOiBHYW1lU2V0dGluZ3Mge1xuICAgIGNvbnN0IHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgLy8gQWxsZSBwcm9wcyBvcCDDqcOpbiBsZXZlbCBkaWVwIG1lcmdlblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgaW5mb1R5cGVzKSB7XG4gICAgICAgIHNldHRpbmdzW3Byb3BlcnR5XSA9IHtcbiAgICAgICAgICAgIC4uLmdlbmVyaWNbcHJvcGVydHldLFxuICAgICAgICAgICAgLi4uZ2FtZVtwcm9wZXJ0eV0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldHRpbmdzIGFzIHVua25vd24gYXMgR2FtZVNldHRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYWNrYWdlR2FtZXNTZXR0aW5ncyhwYWNrYWdlU2V0dGluZ3M6IFBhY2thZ2VHYW1lc1NldHRpbmdzLCB2ZXJzaW9uOiBzdHJpbmcpOiBHYW1lc1NldHRpbmdzRGF0YSB7XG4gICAgLy8gTWVyZ2Ugc2V0dGluZ3NcbiAgICBjb25zdCBpbmZvVHlwZXMgPSBPYmplY3Qua2V5cyhwYWNrYWdlU2V0dGluZ3MuZ2VuZXJpYykgYXMgR2FtZVNldHRpbmdzUHJvcGVydHlbXTtcbiAgICBjb25zdCB7IGdlbmVyaWMgfSA9IHBhY2thZ2VTZXR0aW5ncztcbiAgICBjb25zdCBhbGxTZXR0aW5nczogR2FtZXNTZXR0aW5nc0RhdGEgPSB7XG4gICAgICAgIGRldmVsb3BtZW50OiBnZW5lcmljLFxuICAgICAgICBnYW1lczoge30sXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgZ2FtZSBvZiBwYWNrYWdlU2V0dGluZ3MuZ2FtZXMgPz8gW10pIHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBtZXJnZUdhbWVTZXR0aW5ncyhnZW5lcmljLCBnYW1lLCBpbmZvVHlwZXMpO1xuXG4gICAgICAgIC8vIFpvcmcgZXIgdm9vciBkYXQgcGFnZSBhbHRpamQgZ2V6ZXQgaXNcbiAgICAgICAgY29uc3QgcGFnZUlkID0gc2V0dGluZ3MuaW5mby5wYWdlID8/IHNldHRpbmdzLmluZm8uaWQgPz8gJ3Vua25vd24nO1xuICAgICAgICBzZXR0aW5ncy5pbmZvLnBhZ2UgPSBwYWdlSWQ7XG5cbiAgICAgICAgLy8gZWlnZW4gdmVyc2llIG51bW1lciBvZiBkZSBnZW5lcmlla2UgdWl0IGRlIHBhY2thZ2VcbiAgICAgICAgc2V0dGluZ3MuaW5mby52ZXJzaW9uID0gc2V0dGluZ3MuaW5mby52ZXJzaW9uID8/IHZlcnNpb247XG5cbiAgICAgICAgLy8gU2xhIHNldHRpbmdzIG9wIG9uZGVyIHBhZ2UgaWRcbiAgICAgICAgYWxsU2V0dGluZ3MuZ2FtZXNbcGFnZUlkXSA9IHNldHRpbmdzO1xuICAgIH1cblxuICAgIHJldHVybiBhbGxTZXR0aW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb0dhbWVEYXRhKGZ1bGxGaWxlUGF0aDogc3RyaW5nLCBzZXR0aW5nczogR2FtZXNTZXR0aW5ncyk6IEdhbWVTZXR0aW5ncyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gRGV0ZXJtaW5lIGZpbGVuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uXG4gICAgbGV0IGZpbGVQYXRoID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZVBhdGgsIHBhdGguZXh0bmFtZShmdWxsRmlsZVBhdGgpKTtcblxuICAgIC8vIERldGVybWluZSBkaXIgJiByZW1vdmUgbGVhZGluZyBzbGFzaFxuICAgIGxldCBmaWxlRGlyZWN0b3J5ID0gcGF0aC5kaXJuYW1lKGZ1bGxGaWxlUGF0aCk7XG4gICAgZmlsZURpcmVjdG9yeSA9IGZpbGVEaXJlY3RvcnkucmVwbGFjZSgvXlxcLysvZywgJycpO1xuXG4gICAgaWYgKGZpbGVEaXJlY3RvcnkpIHtcbiAgICAgICAgZmlsZVBhdGggPSBgJHtmaWxlRGlyZWN0b3J5fS8ke2ZpbGVQYXRofWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldHRpbmdzW2ZpbGVQYXRoXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2VUb1NlcnZlKGNvbmZpZzogS2xvZWtWaXRlQ29uZmlnLCBzZXR0aW5nczogR2FtZXNTZXR0aW5ncyk6IHN0cmluZyB7XG4gICAgLy8gSG9ldmVlbCBwYWdlcyB6aWpuIGVyP1xuICAgIGNvbnN0IHBhZ2VJZHMgPSBPYmplY3Qua2V5cyhzZXR0aW5ncyk7XG4gICAgY29uc3QgcGFnZSA9IHBhZ2VJZHMubGVuZ3RoID09PSAxID8gcGFnZUlkc1swXSA6ICdkZXZlbG9wbWVudCc7XG5cbiAgICByZXR1cm4gcGF0aC5wb3NpeC5qb2luKGNvbmZpZy5idWlsZC5iYXNlUGF0aCwgYCR7cGFnZX0uaHRtbCR7Y29uZmlnLmRldi5zZXJ2ZVBhcmFtcyA/PyAnJ31gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2VJZEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdXJsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBsZXQgcGF0aG5hbWU6IHN0cmluZztcblxuICAgIHRyeSB7XG4gICAgICAgIHBhdGhuYW1lID0gbmV3IFVSTCh1cmwsICdodHRwczovL3N0dWRpb2tsb2VrLm5sJykucGF0aG5hbWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBJZiByZXF1ZXN0IGlzIG5vdCBodG1sICwgZGlyZWN0bHkgcmV0dXJuIG5leHQoKVxuICAgIGlmICghcGF0aG5hbWUuZW5kc1dpdGgoJy5odG1sJykgJiYgcGF0aG5hbWUgIT09ICcvJykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gUGFnaW5hIGlkIG9wdnJhZ2VuXG4gICAgY29uc3QgaW5kZXggPSBwYXRobmFtZS5sYXN0SW5kZXhPZignLycpO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gaW5kZXggPT09IC0xID8gcGF0aG5hbWUgOiBwYXRobmFtZS5zbGljZShpbmRleCArIDEpO1xuXG4gICAgcmV0dXJuIGZpbGVOYW1lLnJlcGxhY2UoJy5odG1sJywgJycpO1xufVxuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkSlNPTihwYXRoOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gcmVhZEZpbGVTeW5jKHBhdGgpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBjd2QsIHJlYWRKU09OIH0gZnJvbSAnLic7XG5pbXBvcnQgdHlwZSB7IEtsb2VrVml0ZUNvbmZpZywgUGFja2FnZUNvbmZpZywgUGFja2FnZUdhbWVzU2V0dGluZ3MgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5jb25zdCBwYWNrYWdlXyA9IHJlYWRKU09OKHBhdGgucmVzb2x2ZShjd2QsICdwYWNrYWdlLmpzb24nKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmNvbnN0IGNvbmZpZzogUGFja2FnZUNvbmZpZyA9IHtcbiAgICB2aXRlOiBwYWNrYWdlXy52aXRlIGFzIEtsb2VrVml0ZUNvbmZpZyxcbiAgICBicm93c2Vyc2xpc3Q6IHBhY2thZ2VfLmJyb3dzZXJzbGlzdCBhcyBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICBzZXR0aW5nczogcGFja2FnZV8uc2V0dGluZ3MgYXMgUGFja2FnZUdhbWVzU2V0dGluZ3MsXG4gICAgdmVyc2lvbjogcGFja2FnZV8udmVyc2lvbiBhcyBzdHJpbmcsXG4gICAgbmFtZTogcGFja2FnZV8ubmFtZSBhcyBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHBhY2thZ2VfLmRlc2NyaXB0aW9uIGFzIHN0cmluZyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlQ29uZmlnKCk6IFBhY2thZ2VDb25maWcge1xuICAgIHJldHVybiBjb25maWc7XG59XG4iLCJpbXBvcnQgeyBta2RpciwgdW5saW5rIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGZpbGVuYW1pZnkgZnJvbSAnZmlsZW5hbWlmeSc7XG5pbXBvcnQgeyB6aXAgfSBmcm9tICd6aXAtYS1mb2xkZXInO1xuaW1wb3J0IHsgY3dkLCBnZXRQYWNrYWdlQ29uZmlnIH0gZnJvbSAnLic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRCdWlsZEZvbGRlclRvWmlwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBrZyA9IGdldFBhY2thZ2VDb25maWcoKTtcbiAgICBjb25zdCBzb3VyY2VEaXJlY3RvcnkgPSBwYXRoLmpvaW4ocGF0aC5yZXNvbHZlKGN3ZCksICdwdWJsaWMnKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkRpcmVjdG9yeSA9IHBhdGguam9pbihwYXRoLnJlc29sdmUoY3dkKSwgJ3ppcHMnKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkZpbGUgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRlc3RpbmF0aW9uRGlyZWN0b3J5LFxuICAgICAgICBmaWxlbmFtaWZ5KGAke3BrZy5uYW1lfS12JHtwa2cudmVyc2lvbn0uemlwYCwgeyByZXBsYWNlbWVudDogJy0nIH0pLFxuICAgICk7XG5cbiAgICAvLyBEb2VzIHRoZSBmb2xkZXIgZXhpc3Q/XG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbWtkaXIoZGVzdGluYXRpb25EaXJlY3RvcnkpO1xuICAgIH0gY2F0Y2gge31cblxuICAgIC8vIFJlbW92ZSBwcmV2aW91cyB6aXAgZmlsZVxuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHVubGluayhkZXN0aW5hdGlvbkZpbGUpO1xuICAgIH0gY2F0Y2gge31cblxuICAgIGF3YWl0IHppcChzb3VyY2VEaXJlY3RvcnksIGRlc3RpbmF0aW9uRmlsZSk7XG59XG4iLCJpbXBvcnQgdml0ZUhhbmRsZWJhcnNQbHVnaW4sIHsgdHlwZSBIYW5kbGViYXJzQ29udGV4dCB9IGZyb20gJ0B5b2ljaGlyby92aXRlLXBsdWdpbi1oYW5kbGViYXJzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBnZXRQYWdlSWRGcm9tVXJsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBWaXRlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuXG4vLyBIZWxwZXJzIHZvb3IgaGFuZGxlYmFyc1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZWJhcnNQbHVnaW4ocGFydGlhbHNEaXJlY3RvcnlQYXRoczogc3RyaW5nIHwgc3RyaW5nW10sIG9wdGlvbnM6IFZpdGVPcHRpb25zKTogUGx1Z2luW10ge1xuICAgIGNvbnN0IGRpcnMgPSBBcnJheS5pc0FycmF5KHBhcnRpYWxzRGlyZWN0b3J5UGF0aHMpID8gcGFydGlhbHNEaXJlY3RvcnlQYXRocyA6IFtwYXJ0aWFsc0RpcmVjdG9yeVBhdGhzXTtcblxuICAgIHJldHVybiBkaXJzLm1hcCgocGFydGlhbHNEaXJlY3RvcnlQYXRoKSA9PiB7XG4gICAgICAgIHJldHVybiB2aXRlSGFuZGxlYmFyc1BsdWdpbih7XG4gICAgICAgICAgICBwYXJ0aWFsc0RpcmVjdG9yeVBhdGgsXG5cbiAgICAgICAgICAgIHRyYW5zZm9ybUluZGV4SHRtbE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBoZWxwZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGpzb246IChvYmplY3Q6IGFueSwgaW5kZW50ID0gMCkgPT4gSlNPTi5zdHJpbmdpZnkob2JqZWN0LCB1bmRlZmluZWQsIGluZGVudCksXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdDogKC4uLmFyZ3VtZW50c186IGFueVtdKSA9PiBhcmd1bWVudHNfLnNsaWNlKDAsIC0xKS5qb2luKCcnKSxcbiAgICAgICAgICAgICAgICAgICAgZXE6IChhOiBhbnksIGI6IGFueSkgPT4gYSA9PT0gYixcbiAgICAgICAgICAgICAgICAgICAgbmVxOiAoYTogYW55LCBiOiBhbnkpID0+IGEgIT09IGIsXG4gICAgICAgICAgICAgICAgICAgIGlzZGVmaW5lZDogKHZhbHVlOiB1bmRlZmluZWQpID0+IHZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIC8vICdyZXNvbHZlLXJvb3QnKHA6IHN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgLy8gVGlqZGVsaWprZSBoYWNrIHZvb3IgYnVnIGluIGhhbmRsZWJhcnMgcGx1Z2luXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAvLyB6aWUgb29rIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGV4bGFmcm9zY2lhL3ZpdGUtcGx1Z2luLWhhbmRsZWJhcnMvcHVsbC8xMjlcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLnJvb3QsIHApO1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuIG9zLnBsYXRmb3JtKCkgPT09ICd3aW4zMicgPyBgLyR7cmVzb2x2ZWRQYXRofWAgOiByZXNvbHZlZFBhdGg7XG4gICAgICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGNvbnRleHQ6ICgocGFnZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2FtZUlkID0gZ2V0UGFnZUlkRnJvbVVybChwYWdlUGF0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFnYW1lSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChnYW1lSWQgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhZ2luYSBzZXR0aW5ncyB0ZXJ1Z2dldmVuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudjogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBvcHRpb25zLnNldHRpbmdzLmRldmVsb3BtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbWVzOiBvcHRpb25zLnNldHRpbmdzLmdhbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIE9wIGJhc2lzIHZhbiBwYWQgZGF0YSBiZXBhbGVuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucy5zZXR0aW5ncy5nYW1lc1tnYW1lSWRdO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFBhZ2luYSBzZXR0aW5ncyB0ZXJ1Z2dldmVuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnY6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzZXR0aW5ncyA/PyB7fSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KSBhcyBIYW5kbGViYXJzQ29udGV4dCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgcHJvbWlzZXMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ0VudiwgUGx1Z2luLCBVc2VyQ29uZmlnLCBWaXRlRGV2U2VydmVyIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBjd2QsIGdldFBhZ2VJZEZyb21VcmwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEdhbWVzU2V0dGluZ3MgfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcmZhY2VzJztcblxuY29uc3QgUEFHRV9URU1QTEFURSA9ICd7ez4gZ2FtZSBkYXRhPWRhdGF9fSc7XG5jb25zdCBERVZFTE9QTUVOVF9URU1QTEFURSA9ICd7ez4gZGV2ZWxvcG1lbnQgZGF0YT1kYXRhfX0nO1xuXG5hc3luYyBmdW5jdGlvbiByZW5kZXJUZW1wb3JhcnlGaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBCZXN0YWF0IGRpZSBmaWxlIG5vZyBuaWV0P1xuICAgIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgLy8gQWFubWFrZW5cbiAgICAgICAgYXdhaXQgcHJvbWlzZXMud3JpdGVGaWxlKGZpbGVQYXRoLCBQQUdFX1RFTVBMQVRFKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodG1sUGx1Z2luKGdhbWVzOiBHYW1lc1NldHRpbmdzKTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAndml0ZS1wbHVnaW4ta2xvZWstaHRtbCcsXG4gICAgICAgIGVuZm9yY2U6ICdwcmUnLFxuXG4gICAgICAgIGFzeW5jIGNvbmZpZyhfY29uZmlnOiBVc2VyQ29uZmlnLCBlbnZpcm9ubWVudDogQ29uZmlnRW52KSB7XG4gICAgICAgICAgICAvLyBCaWogZWVuIGJ1aWxkIG1ha2VuIHdlIHRpamRlbGlqayBmaWxlcyBhYW5cbiAgICAgICAgICAgIGlmIChlbnZpcm9ubWVudC5jb21tYW5kID09PSAnYnVpbGQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFnZUlkIG9mIE9iamVjdC5rZXlzKGdhbWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBQYWQgbmFhciBmaWxlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsIGAke3BhZ2VJZH0uaHRtbGApO1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zLnB1c2gocmVuZGVyVGVtcG9yYXJ5RmlsZShmaWxlUGF0aCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGFjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbmZpZ3VyZVNlcnZlcihzZXJ2ZXI6IFZpdGVEZXZTZXJ2ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gWm9yZyBlciB2b29yIGRhdCB0aWpkZW5zIGRldmVsb3BtZW50IGRlIHBhZ2luYSBnZS1yZW5kZXJlZCB0ZXJ1ZyBnZWdldmVuIHdvcmR0IHdvcmR0XG4gICAgICAgICAgICAgICAgc2VydmVyLm1pZGRsZXdhcmVzLnVzZSgnLycsIGFzeW5jIChyZXF1ZXN0LCByZXNwb25zZSwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSByZXF1ZXN0Py51cmwgPz8gJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VJZCA9IGdldFBhZ2VJZEZyb21VcmwodXJsKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhZ2VJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2VJZCA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV2ZWxvcG1lbnQ/IGdlZWYgdGVydWcuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVuZChhd2FpdCBzZXJ2ZXIudHJhbnNmb3JtSW5kZXhIdG1sKHVybCwgREVWRUxPUE1FTlRfVEVNUExBVEUsIHJlcXVlc3Qub3JpZ2luYWxVcmwpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChPYmplY3Qua2V5cyhnYW1lcykuaW5jbHVkZXMocGFnZUlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVzdGFhbmRlIGdhbWU/IHpvcmcgZXIgdm9vciBkYXQgZGUgdGVtcGxhdGUgZ2UtcmVuZGVyZWQgd29yZHRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVuZChhd2FpdCBzZXJ2ZXIudHJhbnNmb3JtSW5kZXhIdG1sKHVybCwgUEFHRV9URU1QTEFURSwgcmVxdWVzdC5vcmlnaW5hbFVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmlrcyBnZXZvbmRlblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgY2xvc2VCdW5kbGUoKSB7XG4gICAgICAgICAgICAvLyBWZXJ3aWpkZXIgZGUgYWFuZ2VtYWFrdGUgZmlsZXNcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFByb21pc2U8dm9pZD4+ID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhZ2VJZCBvZiBPYmplY3Qua2V5cyhnYW1lcykpIHtcbiAgICAgICAgICAgICAgICAvLyBQYWQgbmFhciBmaWxlXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJywgYCR7cGFnZUlkfS5odG1sYCk7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zLnB1c2gocHJvbWlzZXMucm0oZmlsZVBhdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChhY3Rpb25zKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHN2ZWx0ZSB9IGZyb20gJ0BzdmVsdGVqcy92aXRlLXBsdWdpbi1zdmVsdGUnO1xuaW1wb3J0IHsgc3ZlbHRlUHJlcHJvY2VzcyB9IGZyb20gJ3N2ZWx0ZS1wcmVwcm9jZXNzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJztcbmltcG9ydCB0c2NvbmZpZ1BhdGhzUGx1Z2luIGZyb20gJ3ZpdGUtdHNjb25maWctcGF0aHMnO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBWaXRlT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaGFuZGxlYmFyc1BsdWdpbiB9IGZyb20gJy4vbGliL2hhbmRsZWJhcnMtcGx1Z2luJztcbmltcG9ydCB7IGh0bWxQbHVnaW4gfSBmcm9tICcuL2xpYi9odG1sLXBsdWdpbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlUGx1Z2lucyhvcHRpb25zOiBWaXRlT3B0aW9ucyk6IEFycmF5PFBsdWdpbiB8IFBsdWdpbk9wdGlvbj4ge1xuICAgIHJldHVybiBbXG4gICAgICAgIGh0bWxQbHVnaW4ob3B0aW9ucy5zZXR0aW5ncy5nYW1lcyksXG5cbiAgICAgICAgLi4uc3ZlbHRlKHtcbiAgICAgICAgICAgIHByZXByb2Nlc3M6IHN2ZWx0ZVByZXByb2Nlc3MoKSxcblxuICAgICAgICAgICAgb253YXJuKHdhcm5pbmcsIHdhcm4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXdhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE5vIGExMXkgd2FybmluZ3MuLi5cbiAgICAgICAgICAgICAgICBpZiAod2FybmluZy5jb2RlLnN0YXJ0c1dpdGgoJ2ExMXktJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHdhcm4od2FybmluZyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSxcblxuICAgICAgICB0c2NvbmZpZ1BhdGhzUGx1Z2luKHtcbiAgICAgICAgICAgIHJvb3Q6IHBhdGgucmVzb2x2ZShjd2QpLFxuICAgICAgICAgICAgbG9vc2U6IHRydWUsXG4gICAgICAgIH0pLFxuXG4gICAgICAgIGhhbmRsZWJhcnNQbHVnaW4ob3B0aW9ucy5jb25maWcuc2VydmUucGFydGlhbHMsIG9wdGlvbnMpLFxuICAgIF07XG59XG4iLCJpbXBvcnQgY3J5cHRvLCB7IHR5cGUgQmluYXJ5TGlrZSB9IGZyb20gJ25vZGU6Y3J5cHRvJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1kNShidWZmZXI6IEJpbmFyeUxpa2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGJ1ZmZlcikuZGlnZXN0KCdoZXgnKTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdml0ZUltYWdlbWluIGZyb20gJ0B2aGVlbXN0cmEvdml0ZS1wbHVnaW4taW1hZ2VtaW4nO1xuaW1wb3J0IGltYWdlbWluTW96SnBlZyBmcm9tICdpbWFnZW1pbi1tb3pqcGVnJztcbmltcG9ydCBpbWFnZW1pbk9wdGlQbmcgZnJvbSAnaW1hZ2VtaW4tb3B0aXBuZyc7XG4vLyBUaGUgbWluaWZpZXJzIHlvdSB3YW50IHRvIHVzZTpcbmltcG9ydCBpbWFnZW1pblBuZ1F1YW50IGZyb20gJ2ltYWdlbWluLXBuZ3F1YW50JztcbmltcG9ydCB0eXBlIHsgQ29uZmlnRW52LCBQbHVnaW4gfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IGN3ZCwgcmVhZEpTT04gfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBtZDUgfSBmcm9tICcuLi8uLi91dGlscy9oYXNoJztcbmltcG9ydCB0eXBlIHsgSW1hZ2VRdWFsaXR5Q29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IHBrZyA9IHJlYWRKU09OKHBhdGgucmVzb2x2ZShjd2QsICdwYWNrYWdlLmpzb24nKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZW1pblBsdWdpbihlbnZpcm9ubWVudDogQ29uZmlnRW52LCBvcHRpb25zOiBJbWFnZVF1YWxpdHlDb25maWcpOiBQbHVnaW4gfCB1bmRlZmluZWQge1xuICAgIGlmIChlbnZpcm9ubWVudC5tb2RlICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2aXRlSW1hZ2VtaW4oe1xuICAgICAgICBza2lwSWZMYXJnZXI6IHRydWUsXG4gICAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICBjYWNoZURpcjogcGF0aC5yZXNvbHZlKGN3ZCwgJy5jYWNoZS92aXRlLXBsdWdpbi1pbWFnZW1pbicpLFxuICAgICAgICBjYWNoZUtleTogYCR7cGtnLm5hbWV9LSR7bWQ1KEpTT04uc3RyaW5naWZ5KHsgLi4ub3B0aW9ucyB9KSl9YCxcbiAgICAgICAgcm9vdDogcGF0aC5qb2luKHBhdGgucmVzb2x2ZShjd2QpLCAncHVibGljJyksXG4gICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgIGpwZzogW1xuICAgICAgICAgICAgICAgIGltYWdlbWluTW96SnBlZyh7XG4gICAgICAgICAgICAgICAgICAgIHF1YWxpdHk6IG9wdGlvbnMuanBlZyA/PyA4MCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwbmc6IFtcbiAgICAgICAgICAgICAgICBpbWFnZW1pblBuZ1F1YW50KHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNwZWVkOiAyLFxuICAgICAgICAgICAgICAgICAgICBkaXRoZXJpbmc6IDAuMjUsXG4gICAgICAgICAgICAgICAgICAgIHF1YWxpdHk6IG9wdGlvbnMucG5nID8/IFswLjUsIDAuN10sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaW1hZ2VtaW5PcHRpUG5nKCksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0pIGFzIFBsdWdpbjtcbn1cbiIsImltcG9ydCB0eXBlIHsgT3V0cHV0QXNzZXQgfSBmcm9tICdyb2xsdXAnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4sIFJlc29sdmVkQ29uZmlnIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgdHlwZSB7IEdhbWVTZXR0aW5ncywgR2FtZXNTZXR0aW5ncyB9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuXG5mdW5jdGlvbiByZW5kZXJHYW1lTWFuaWZlc3QocGFnZUlkOiBzdHJpbmcsIHNldHRpbmdzOiBHYW1lU2V0dGluZ3MsIGNvbmZpZzogUmVzb2x2ZWRDb25maWcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0ge1xuICAgICAgICBzaG9ydF9uYW1lOiBgJHtzZXR0aW5ncy5tZXRhLmFwcHRpdGxlfWAsXG4gICAgICAgIG5hbWU6IGAke3NldHRpbmdzLm1ldGEudGl0bGV9YCxcbiAgICAgICAgZGVzY3JpcHRpb246IGAke3NldHRpbmdzLm1ldGEuZGVzY3JpcHRpb259YCxcbiAgICAgICAgc2NvcGU6IGAke2NvbmZpZy5iYXNlfSR7cGFnZUlkfS5odG1sYCxcbiAgICAgICAgc3RhcnRfdXJsOiBgJHtjb25maWcuYmFzZX0ke3BhZ2VJZH0uaHRtbGAsXG4gICAgICAgIGRpc3BsYXk6ICdmdWxsc2NyZWVuJyxcbiAgICAgICAgb3JpZW50YXRpb246IGAke3NldHRpbmdzLm9wdGlvbnMub3JpZW50YXRpb24gPz8gJ2xhbmRzY2FwZSd9YCxcbiAgICAgICAgaWNvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcmM6IGAke2NvbmZpZy5iYXNlfW1ldGEvJHtzZXR0aW5ncy5pbmZvLmlkfS9pY29ucy9jaHJvbWUtdG91Y2gtaWNvbi0xOTJ4MTkyLnBuZ2AsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAgICAgc2l6ZXM6ICcxOTJ4MTkyJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3JjOiBgJHtjb25maWcuYmFzZX1tZXRhLyR7c2V0dGluZ3MuaW5mby5pZH0vaWNvbnMvaWNvbi5wbmdgLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbWFnZS9wbmcnLFxuICAgICAgICAgICAgICAgIHNpemVzOiAnMTAyNHgxMDI0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGJhY2tncm91bmRfY29sb3I6IGAke3NldHRpbmdzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yfWAsXG4gICAgICAgIHRoZW1lX2NvbG9yOiBgJHtzZXR0aW5ncy5vcHRpb25zLmJhY2tncm91bmRDb2xvcn1gLFxuICAgIH07XG5cbiAgICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3QsIG51bGwsIDIpfVxcbmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYW5pZmVzdFBsdWdpbihnYW1lczogR2FtZXNTZXR0aW5ncyk6IFBsdWdpbiB7XG4gICAgbGV0IGNvbmZpZzogUmVzb2x2ZWRDb25maWc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAndml0ZS1wbHVnaW4ta2xvZWstbWFuaWZlc3QnLFxuICAgICAgICBlbmZvcmNlOiAncG9zdCcsXG4gICAgICAgIGFwcGx5OiAnYnVpbGQnLFxuICAgICAgICBhc3luYyBjb25maWdSZXNvbHZlZChyZXNvbHZlZENvbmZpZzogUmVzb2x2ZWRDb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZyA9IHJlc29sdmVkQ29uZmlnO1xuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZUJ1bmRsZShfLCBidW5kbGUpIHtcbiAgICAgICAgICAgIC8vIFZvb3IgaWVkZXJlIGFwcCBlZW4gbWFuaWZlc3QgbWFrZW46XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtwYWdlSWQsIHNldHRpbmdzXSBvZiBPYmplY3QuZW50cmllcyhnYW1lcykpIHtcbiAgICAgICAgICAgICAgICBidW5kbGVbYCR7cGFnZUlkfS53ZWJtYW5pZmVzdGBdID0ge1xuICAgICAgICAgICAgICAgICAgICBuZWVkc0NvZGVSZWZlcmVuY2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogcmVuZGVyR2FtZU1hbmlmZXN0KHBhZ2VJZCwgc2V0dGluZ3MsIGNvbmZpZyksXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBgJHtwYWdlSWR9LndlYm1hbmlmZXN0YCxcbiAgICAgICAgICAgICAgICB9IGFzIE91dHB1dEFzc2V0O1xuXG4gICAgICAgICAgICAgICAgYnVuZGxlW2Ake3BhZ2VJZH0tc2VydmljZXdvcmtlci5qc2BdID0ge1xuICAgICAgICAgICAgICAgICAgICBuZWVkc0NvZGVSZWZlcmVuY2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogXCJzZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ2ZldGNoJywgZnVuY3Rpb24oKSB7IHJldHVybjsgfSk7XCIsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBgJHtwYWdlSWR9LXNlcnZpY2V3b3JrZXIuanNgLFxuICAgICAgICAgICAgICAgIH0gYXMgT3V0cHV0QXNzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiIsImltcG9ydCBsZWdhY3lQbHVnaW4gZnJvbSAnQHZpdGVqcy9wbHVnaW4tbGVnYWN5JztcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tICdyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXInO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4sIFBsdWdpbk9wdGlvbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBiYW5uZXJQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1iYW5uZXInO1xuaW1wb3J0IHsgY3JlYXRlSHRtbFBsdWdpbiB9IGZyb20gJ3ZpdGUtcGx1Z2luLWh0bWwnO1xuaW1wb3J0IHR5cGUgeyBWaXRlT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaW1hZ2VtaW5QbHVnaW4gfSBmcm9tICcuL2xpYi9pbWFnZS1wbHVnaW4nO1xuaW1wb3J0IHsgbWFuaWZlc3RQbHVnaW4gfSBmcm9tICcuL2xpYi9tYW5pZmVzdC1wbHVnaW4nO1xuXG4vLyBCdWlsZCBwbHVnaW5zXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQbHVnaW5zKG9wdGlvbnM6IFZpdGVPcHRpb25zKTogQXJyYXk8UGx1Z2luIHwgUGx1Z2luT3B0aW9uPiB7XG4gICAgLy8gTm8gYnVpbGQ/IG5vIHBsdWdpbnMuLlxuICAgIGlmIChvcHRpb25zLmVudmlyb25tZW50LmNvbW1hbmQgIT09ICdidWlsZCcpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHBsdWdpbnM6IEFycmF5PFBsdWdpbiB8IFBsdWdpbk9wdGlvbiB8IHVuZGVmaW5lZD4gPSBbXTtcblxuICAgIGlmIChvcHRpb25zLmNvbmZpZy5idWlsZC5sZWdhY3kpIHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYWdlIHdvcmtzIGluIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIHBsdWdpbnMucHVzaCguLi5sZWdhY3lQbHVnaW4oeyB0YXJnZXRzOiAob3B0aW9ucy5jb25maWcuYnVpbGQuYnJvd3NlcnNsaXN0IGFzIHN0cmluZ1tdKSA/PyAnZGVmYXVsdHMnIH0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlcyA9IE9iamVjdC5rZXlzKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLm1hcCgoZ2FtZUlkKSA9PiB7XG4gICAgICAgIHJldHVybiB7IGZpbGVuYW1lOiBgJHtnYW1lSWR9Lmh0bWxgLCB0ZW1wbGF0ZTogYCR7Z2FtZUlkfS5odG1sYCB9O1xuICAgIH0pO1xuXG4gICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAvLyBNaW5pZnkgaW1hZ2UgYXNzZXRzXG4gICAgICAgIGltYWdlbWluUGx1Z2luKG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMuY29uZmlnLmJ1aWxkLmltYWdlUXVhbGl0eSksXG5cbiAgICAgICAgLy8gTWFrZSB0aGUgaHRtbCBvdXRwdXQgc21hbGxlclxuICAgICAgICAuLi4oY3JlYXRlSHRtbFBsdWdpbih7IG1pbmlmeTogdHJ1ZSwgcGFnZXMgfSkgYXMgUGx1Z2luW10pLFxuXG4gICAgICAgIC8vIEFkZCBhIGJhbm5lciB0byBnZW5lcmF0ZWQganMvY3NzXG4gICAgICAgIGJhbm5lclBsdWdpbih7XG4gICAgICAgICAgICBvdXREaXI6ICcuLi9wdWJsaWMnLFxuICAgICAgICAgICAgY29udGVudDogYC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC5cblxuICAgICAgICAgX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgICAgICBfICAgICAgICAgICAgX1xuICAgICAgICAvICApICAgICAgICAgICAgICB8ICBvICAgICAgICAgL3wgICAvIHwgfCAgICAgICAgICB8IHxcbiAgICAgICAgXFxcXF9fIF98XyAgICAgICAgIF9ffCAgICAgIF9fICAgICB8X18vICB8IHwgIF9fICAgXyAgfCB8XG4gICAgICAgICAgIFxcXFwgfCAgfCAgIHwgIC8gIHwgIHwgIC8gIFxcXFxfICAgfCBcXFxcICAgfC8gIC8gIFxcXFxffC8gIHwvXylcbiAgICAgICAoX19fLyB8Xy8gXFxcXF8vfF8vXFxcXF8vfF8vfF8vXFxcXF9fLyAgICB8ICBcXFxcXy98X18vXFxcXF9fLyB8X18vfCBcXFxcXy9cblxuICAgICAgICBDb25jZXB0LCBvbnR3ZXJwICYgb250d2lra2VsaW5nXG4gICAgICAgIGh0dHBzOi8vc3R1ZGlva2xvZWsubmxcblxuICAgICAgICBTdHVkaW8gS2xvZWsg4p2kIFBpeGlKUywgR1NBUCAmIGhvd2xlci5qc1xuXG4gICAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLmAsXG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgYSBtYW5pZmVzdCBhbmQgbWluaW1hbCB3ZWJ3b3JrZXIgZm9yIGV2ZXJ5IGdhbWVcbiAgICBpZiAob3B0aW9ucy5jb25maWcuYnVpbGQubWFuaWZlc3QpIHtcbiAgICAgICAgcGx1Z2lucy5wdXNoKG1hbmlmZXN0UGx1Z2luKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpKTtcbiAgICB9XG5cbiAgICAvLyBEbyB3ZSBuZWVkIHRvIGFuYWx5c2UgdGhlIGJ1aWxkP1xuICAgIGlmIChvcHRpb25zLmNvbmZpZy5idWlsZC5hbmFseXplQnVuZGxlKSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChcbiAgICAgICAgICAgIHZpc3VhbGl6ZXIoe1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiAndHJlZW1hcCcsIC8vIG9yIHN1bmJ1cnN0XG4gICAgICAgICAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBnemlwU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWxlbmFtZTogJ2J1bmRsZS1hbmFseXNlLmh0bWwnLCAvLyB3aWxsIGJlIHNhdmVkIGluIHByb2plY3QncyByb290XG4gICAgICAgICAgICB9KSBhcyBQbHVnaW5PcHRpb24sXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+IHBsdWdpbiAhPT0gdW5kZWZpbmVkKTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgYmFzaWNTc2wgZnJvbSAnQHZpdGVqcy9wbHVnaW4tYmFzaWMtc3NsJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJztcbmltcG9ydCBjaGVja2VyIGZyb20gJ3ZpdGUtcGx1Z2luLWNoZWNrZXInO1xuaW1wb3J0IGZ1bGxSZWxvYWQgZnJvbSAndml0ZS1wbHVnaW4tZnVsbC1yZWxvYWQnO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBLbG9la0NvbmZpZ1NlcnZlU2V0dGluZ3MgPSB7XG4gICAgZnVsbFJlbG9hZFN2ZWx0ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2VydmVQbHVnaW5zKHNldHRpbmdzPzogS2xvZWtDb25maWdTZXJ2ZVNldHRpbmdzKTogQXJyYXk8UGx1Z2luIHwgUGx1Z2luT3B0aW9uPiB7XG4gICAgY29uc3QgZnVsbFJlbG9hZFBhdGhzID0gWydzY3JpcHQvKiovKi50cyddO1xuICAgIGlmIChzZXR0aW5ncz8uZnVsbFJlbG9hZFN2ZWx0ZSkge1xuICAgICAgICBmdWxsUmVsb2FkUGF0aHMucHVzaCgnc3ZlbHRlLyoqLyouc3ZlbHRlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgZnVsbFJlbG9hZChmdWxsUmVsb2FkUGF0aHMsIHtcbiAgICAgICAgICAgIHJvb3Q6IHBhdGguam9pbihwYXRoLnJlc29sdmUoY3dkKSwgJ3NvdXJjZScpLFxuICAgICAgICAgICAgbG9nOiB0cnVlLFxuICAgICAgICAgICAgYWx3YXlzOiB0cnVlLFxuICAgICAgICB9KSBhcyBQbHVnaW4sXG5cbiAgICAgICAgYmFzaWNTc2woKSxcblxuICAgICAgICBjaGVja2VyKHtcbiAgICAgICAgICAgIHR5cGVzY3JpcHQ6IHRydWUsXG4gICAgICAgIH0pLFxuICAgIF07XG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB0eXBlIHsgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBiYXNlUGx1Z2lucyB9IGZyb20gJy4vcGx1Z2lucy9iYXNlJztcbmltcG9ydCB7IGJ1aWxkUGx1Z2lucyB9IGZyb20gJy4vcGx1Z2lucy9idWlsZCc7XG5pbXBvcnQgeyBzZXJ2ZVBsdWdpbnMgfSBmcm9tICcuL3BsdWdpbnMvc2VydmUnO1xuaW1wb3J0IHsgY3dkLCBkZWZpbmVCdWlsZENvbmZpZywgZ2V0UGFja2FnZUNvbmZpZywgZ2V0UGFnZVRvU2VydmUsIHBhcnNlUGFja2FnZUdhbWVzU2V0dGluZ3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgVml0ZU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzL2ludGVyZmFjZXMnO1xuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlZmluZUtsb2VrVml0ZUNvbmZpZyhlbnZpcm9ubWVudDogQ29uZmlnRW52KTogUHJvbWlzZTxVc2VyQ29uZmlnPiB7XG4gICAgY29uc3QgcGFja2FnZV8gPSBnZXRQYWNrYWdlQ29uZmlnKCk7XG5cbiAgICBjb25zdCBvcHRpb25zOiBWaXRlT3B0aW9ucyA9IHtcbiAgICAgICAgcm9vdDogcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScpLFxuICAgICAgICBwYWNrYWdlOiBwYWNrYWdlXyxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIHNldHRpbmdzOiBwYXJzZVBhY2thZ2VHYW1lc1NldHRpbmdzKHBhY2thZ2VfLnNldHRpbmdzLCBwYWNrYWdlXy52ZXJzaW9uKSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAuLi5wYWNrYWdlXy52aXRlLFxuICAgICAgICAgICAgYnVpbGQ6IHsgLi4ucGFja2FnZV8udml0ZS5idWlsZCwgYnJvd3NlcnNsaXN0OiBwYWNrYWdlXy5icm93c2Vyc2xpc3QgfSxcbiAgICAgICAgICAgIHNlcnZlOiB7XG4gICAgICAgICAgICAgICAgcGFydGlhbHM6IFtwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAncGFydGlhbHMnKSwgcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsICdwYXJ0aWFscycpXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbmZpZzogVXNlckNvbmZpZyA9IHtcbiAgICAgICAgbG9nTGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgYmFzZTogcGFja2FnZV8udml0ZS5idWlsZC5iYXNlUGF0aCxcbiAgICAgICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgICAgICBlbnZEaXI6IHBhdGgucmVzb2x2ZShjd2QsICdlbnYnKSxcbiAgICAgICAgZW52UHJlZml4OiBbJ0tMT0VLXycsICdWSVRFXyddLFxuICAgICAgICBwdWJsaWNEaXI6ICdzdGF0aWMnLFxuICAgICAgICBkZWZpbmU6IHt9LFxuXG4gICAgICAgIGVzYnVpbGQ6IHtcbiAgICAgICAgICAgIGxlZ2FsQ29tbWVudHM6ICdub25lJyxcbiAgICAgICAgfSxcblxuICAgICAgICByZXNvbHZlOiB7XG4gICAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgICAgICdAbWV0YSc6IHBhdGgucmVzb2x2ZShjd2QsICdzb3VyY2UnLCAnc3RhdGljJywgJ21ldGEnKSxcbiAgICAgICAgICAgICAgICAnQGZvbnRzJzogcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsICdzdGF0aWMnLCAnZm9udHMnKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWR1cGU6IFtcbiAgICAgICAgICAgICAgICAnQHN0dWRpb2tsb2VrL3RzLWNvcmUtbGliJyxcbiAgICAgICAgICAgICAgICAnQGNhcGFjaXRvci9hcHAnLFxuICAgICAgICAgICAgICAgICdAY2FwYWNpdG9yL2NvcmUnLFxuICAgICAgICAgICAgICAgICdAY2FwYWNpdG9yL2RldmljZScsXG4gICAgICAgICAgICAgICAgJ0BjYXBhY2l0b3IvbmV0d29yaycsXG4gICAgICAgICAgICAgICAgJ0BjYXBhY2l0b3IvcHJlZmVyZW5jZXMnLFxuICAgICAgICAgICAgICAgICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nLFxuICAgICAgICAgICAgICAgICdAY2FwYWNpdG9yL3N0YXR1cy1iYXInLFxuICAgICAgICAgICAgICAgICdib3dzZXInLFxuICAgICAgICAgICAgICAgICdkYXRlLWZucy10eicsXG4gICAgICAgICAgICAgICAgJ2RhdGUtZm5zJyxcbiAgICAgICAgICAgICAgICAnZXJyb3Itc3RhY2stcGFyc2VyLWVzJyxcbiAgICAgICAgICAgICAgICAnZmlyZWJhc2UnLFxuICAgICAgICAgICAgICAgICdmb250ZmFjZW9ic2VydmVyJyxcbiAgICAgICAgICAgICAgICAnZ3NhcCcsXG4gICAgICAgICAgICAgICAgJ2hvd2xlcicsXG4gICAgICAgICAgICAgICAgJ2xvZGFzaC1kZWNvcmF0b3JzJyxcbiAgICAgICAgICAgICAgICAnbG9kYXNoJyxcbiAgICAgICAgICAgICAgICAnb3Zlcm1pbmQnLFxuICAgICAgICAgICAgICAgICdwaXhpLXNwaW5lJyxcbiAgICAgICAgICAgICAgICAncGl4aScsXG4gICAgICAgICAgICAgICAgJ3B1YnN1Yi1qcycsXG4gICAgICAgICAgICAgICAgJ3JhbmRvbS1qcycsXG4gICAgICAgICAgICAgICAgJ3Jlc3MnLFxuICAgICAgICAgICAgICAgICdzbHVnaWZ5JyxcbiAgICAgICAgICAgICAgICAnc3VwZXJhZ2VudCcsXG4gICAgICAgICAgICAgICAgJ3RzLWV2ZW50cycsXG4gICAgICAgICAgICAgICAgJ3RzLW1peGVyJyxcbiAgICAgICAgICAgICAgICAndHNsaWInLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcblxuICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgIHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBzY3NzOiB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzaWxlbmNlRGVwcmVjYXRpb25zOiBbJ2xlZ2FjeS1qcy1hcGknXSxcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkaXRpb25hbERhdGE6IGBAY2hhcnNldCBcIlVURi04XCJgLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHBsdWdpbnM6IFsuLi5iYXNlUGx1Z2lucyhvcHRpb25zKV0sXG4gICAgfTtcblxuICAgIHN3aXRjaCAoZW52aXJvbm1lbnQuY29tbWFuZCkge1xuICAgICAgICBjYXNlICdzZXJ2ZSc6IHtcbiAgICAgICAgICAgIGNvbmZpZy5zZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgaG9zdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb3JzOiBvcHRpb25zLmNvbmZpZy5kZXYuY29ycyA/PyB0cnVlLFxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOiB7fSwgLy8gb3B0aW9ucy5jb25maWcuZGV2Lmh0dHBzID8/IHRydWVcbiAgICAgICAgICAgICAgICBvcGVuOiBnZXRQYWdlVG9TZXJ2ZShvcHRpb25zLmNvbmZpZywgb3B0aW9ucy5zZXR0aW5ncy5nYW1lcyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uZmlnLnBsdWdpbnMgPSBbXG4gICAgICAgICAgICAgICAgLi4uKGNvbmZpZy5wbHVnaW5zID8gY29uZmlnLnBsdWdpbnMgOiBbXSksXG4gICAgICAgICAgICAgICAgLi4uc2VydmVQbHVnaW5zKHtcbiAgICAgICAgICAgICAgICAgICAgZnVsbFJlbG9hZFN2ZWx0ZTogcGFja2FnZV8udml0ZS5kZXYuZnVsbFJlbG9hZFN2ZWx0ZSA/PyB0cnVlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdidWlsZCc6IHtcbiAgICAgICAgICAgIGNvbmZpZy5idWlsZCA9IGRlZmluZUJ1aWxkQ29uZmlnKG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uZmlnLnBsdWdpbnMgPSBbLi4uKGNvbmZpZy5wbHVnaW5zID8gY29uZmlnLnBsdWdpbnMgOiBbXSksIC4uLmJ1aWxkUGx1Z2lucyhvcHRpb25zKV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZztcbn1cbiIsImltcG9ydCB0eXBlIHsgVHlwZWRGbGFncyB9IGZyb20gJ21lb3cnO1xuaW1wb3J0IHsgYnVpbGQsIGNyZWF0ZVNlcnZlciwgdHlwZSBMb2dMZXZlbCB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgZGVmaW5lS2xvZWtWaXRlQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgYWRkQnVpbGRGb2xkZXJUb1ppcCwgZ2V0UGFja2FnZUNvbmZpZyB9IGZyb20gJy4vdXRpbHMvaW5kZXgnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2xvZWtEZXZlbG9wbWVudChcbiAgICBmbGFnczogVHlwZWRGbGFnczx7XG4gICAgICAgIG1vZGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnO1xuICAgICAgICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICAgICAgICBkZWZhdWx0Pzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgIH0+LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgZGVmaW5lS2xvZWtWaXRlQ29uZmlnKHtcbiAgICAgICAgY29tbWFuZDogJ3NlcnZlJyxcbiAgICAgICAgbW9kZTogJ2RldmVsb3BtZW50JyxcbiAgICB9KTtcblxuICAgIC8vIERpZmZlcmVudCBtb2RlXG4gICAgaWYgKHR5cGVvZiBmbGFncy5tb2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25maWcubW9kZSA9IGZsYWdzLm1vZGU7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmVyID0gYXdhaXQgY3JlYXRlU2VydmVyKHtcbiAgICAgICAgY29uZmlnRmlsZTogZmFsc2UsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICB9KTtcblxuICAgIGF3YWl0IHNlcnZlci5saXN0ZW4oKTtcbiAgICBzZXJ2ZXIucHJpbnRVcmxzKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBrbG9la0J1aWxkKFxuICAgIGZsYWdzOiBUeXBlZEZsYWdzPHtcbiAgICAgICAgYmFzZToge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZyc7XG4gICAgICAgICAgICBzaG9ydEZsYWc6IHN0cmluZztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgICAgbW9kZToge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZyc7XG4gICAgICAgICAgICBzaG9ydEZsYWc6IHN0cmluZztcbiAgICAgICAgICAgIGRlZmF1bHQ/OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIGxvZ0xldmVsOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJztcbiAgICAgICAgICAgIHNob3J0RmxhZzogc3RyaW5nO1xuICAgICAgICAgICAgZGVmYXVsdD86IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgICAgZW1wdHlPdXREaXI6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJztcbiAgICAgICAgICAgIHNob3J0RmxhZzogc3RyaW5nO1xuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgc291cmNlbWFwczoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nO1xuICAgICAgICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgaW5saW5lU291cmNlbWFwczoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nO1xuICAgICAgICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgY3JlYXRlWmlwOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbic7XG4gICAgICAgICAgICBzaG9ydEZsYWc6IHN0cmluZztcbiAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlO1xuICAgICAgICB9O1xuICAgIH0+LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgZGVmaW5lS2xvZWtWaXRlQ29uZmlnKHtcbiAgICAgICAgY29tbWFuZDogJ2J1aWxkJyxcbiAgICAgICAgbW9kZTogJ3Byb2R1Y3Rpb24nLFxuICAgIH0pO1xuXG4gICAgLy8gRW1wdHkgb3V0IHRoZSBPdXRwdXQgZGlyIGJlZm9yZSBidWlsZGluZz9cbiAgICBpZiAoZmxhZ3MuZW1wdHlPdXREaXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25maWcuYnVpbGQgPSB7XG4gICAgICAgICAgICAuLi5jb25maWcuYnVpbGQsXG4gICAgICAgICAgICBlbXB0eU91dERpcjogZmxhZ3MuZW1wdHlPdXREaXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHNvdXJjZW1hcHM/XG4gICAgaWYgKGZsYWdzLnNvdXJjZW1hcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25maWcuYnVpbGQgPSB7XG4gICAgICAgICAgICAuLi5jb25maWcuYnVpbGQsXG4gICAgICAgICAgICBzb3VyY2VtYXA6IGZsYWdzLnNvdXJjZW1hcHMgPyAoZmxhZ3MuaW5saW5lU291cmNlbWFwcyA/ICdpbmxpbmUnIDogdHJ1ZSkgOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBEaWZmZXJlbnQgYmFzZSBwYXRoXG4gICAgaWYgKHR5cGVvZiBmbGFncy5iYXNlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25maWcuYmFzZSA9IGZsYWdzLmJhc2U7XG4gICAgfVxuXG4gICAgLy8gRGlmZmVyZW50IG1vZGVcbiAgICBpZiAodHlwZW9mIGZsYWdzLm1vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbmZpZy5tb2RlID0gZmxhZ3MubW9kZTtcbiAgICB9XG5cbiAgICAvLyBEaWZmZXJlbnQgbW9kZVxuICAgIGNvbmZpZy5sb2dMZXZlbCA9IGZsYWdzLmxvZ0xldmVsIGFzIExvZ0xldmVsIHwgdW5kZWZpbmVkO1xuXG4gICAgYXdhaXQgYnVpbGQoe1xuICAgICAgICBjb25maWdGaWxlOiBmYWxzZSxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgIH0pO1xuXG4gICAgLy8gTWFrZW4gd2UgZWVuIHppcCBhYW4/XG4gICAgaWYgKGZsYWdzLmNyZWF0ZVppcCB8fCBnZXRQYWNrYWdlQ29uZmlnKCkudml0ZS5idWlsZC5jcmVhdGVaaXApIHtcbiAgICAgICAgYXdhaXQgYWRkQnVpbGRGb2xkZXJUb1ppcCgpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSU0sU0FBVSxp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
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="nl">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8" />
|
|
6
|
+
<title>Development</title>
|
|
7
|
+
<style>
|
|
8
|
+
html {
|
|
9
|
+
padding: 0;
|
|
10
|
+
margin: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
body {
|
|
14
|
+
padding: 2rem;
|
|
15
|
+
max-width: 920px;
|
|
16
|
+
margin: 0 auto 12rem;
|
|
17
|
+
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell,
|
|
18
|
+
Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
|
19
|
+
background-color: #f0f4f8;
|
|
20
|
+
color: #243b53;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
a {
|
|
24
|
+
color: inherit;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
ul {
|
|
28
|
+
display: flex;
|
|
29
|
+
flex-wrap: wrap;
|
|
30
|
+
align-items: flex-start;
|
|
31
|
+
justify-content: center;
|
|
32
|
+
list-style: none;
|
|
33
|
+
padding: 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ul li {
|
|
37
|
+
flex: 1 1 25%;
|
|
38
|
+
margin-bottom: 1rem;
|
|
39
|
+
margin-right: 1rem;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
article {
|
|
43
|
+
background-color: #fff;
|
|
44
|
+
border-radius: 8px;
|
|
45
|
+
box-shadow: rgba(0, 0, 0, 0.2) 0px 3px 1px -2px, rgba(0, 0, 0, 0.14) 0px 2px 2px 0px,
|
|
46
|
+
rgba(0, 0, 0, 0.12) 0px 1px 5px 0px;
|
|
47
|
+
;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
article>a {
|
|
51
|
+
text-decoration: none;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
article h2 {
|
|
55
|
+
margin-top: 0;
|
|
56
|
+
margin-bottom: 0.5rem;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
article .content {
|
|
60
|
+
padding: 1.5rem
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
article img {
|
|
64
|
+
width: 100%;
|
|
65
|
+
max-height: 50vh;
|
|
66
|
+
min-width: 0;
|
|
67
|
+
object-fit: cover;
|
|
68
|
+
vertical-align: bottom;
|
|
69
|
+
border-top-left-radius: 8px;
|
|
70
|
+
border-top-right-radius: 8px;
|
|
71
|
+
}
|
|
72
|
+
</style>
|
|
73
|
+
</head>
|
|
74
|
+
|
|
75
|
+
<body>
|
|
76
|
+
<h1>{{data.info.client}}</h1>
|
|
77
|
+
<ul>
|
|
78
|
+
{{#each games}}
|
|
79
|
+
<li>
|
|
80
|
+
<article>
|
|
81
|
+
<a href="./{{this.info.page}}.html">
|
|
82
|
+
<div class="icon">
|
|
83
|
+
<img src="meta/{{this.info.id}}/icons/social-preview.jpg" />
|
|
84
|
+
</div>
|
|
85
|
+
<div class="content">
|
|
86
|
+
<h2>{{this.meta.title}}</h2>
|
|
87
|
+
<div>{{this.meta.description}}</div>
|
|
88
|
+
</div>
|
|
89
|
+
</a>
|
|
90
|
+
</article>
|
|
91
|
+
</li>
|
|
92
|
+
{{else}}
|
|
93
|
+
<li>
|
|
94
|
+
<article>
|
|
95
|
+
<main class="content">
|
|
96
|
+
<h2>404</h2>
|
|
97
|
+
<div>Geen games gevonden...</div>
|
|
98
|
+
</main>
|
|
99
|
+
</article>
|
|
100
|
+
</li>
|
|
101
|
+
{{/each}}
|
|
102
|
+
</ul>
|
|
103
|
+
</body>
|
|
104
|
+
<script>
|
|
105
|
+
// update links to include same params
|
|
106
|
+
const params = document.location.search;
|
|
107
|
+
for (const link of document.links) {
|
|
108
|
+
link.href = link.href + params;
|
|
109
|
+
}
|
|
110
|
+
</script>
|
|
111
|
+
|
|
112
|
+
</html>
|
package/dist/plugins/base.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { Plugin, PluginOption } from 'vite';
|
|
2
|
+
import type { ViteOptions } from '../utils/interfaces';
|
|
3
3
|
export declare function basePlugins(options: ViteOptions): Array<Plugin | PluginOption>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Plugin } from 'vite';
|
|
2
2
|
import type { ViteOptions } from '../../utils/interfaces';
|
|
3
|
-
export declare function handlebarsPlugin(
|
|
3
|
+
export declare function handlebarsPlugin(partialsDirectoryPaths: string | string[], options: ViteOptions): Plugin[];
|
package/dist/plugins/serve.d.ts
CHANGED
package/dist/public.d.ts
CHANGED
package/dist/utils/hash.d.ts
CHANGED
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/pkg.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { PackageConfig } from './interfaces';
|
|
2
2
|
export declare function getPackageConfig(): PackageConfig;
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@studiokloek/vite-config",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0-1",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"license": "MIT",
|
|
5
6
|
"author": "Martijn Swart <opensource@studiokloek.nl> (https://studiokloek.nl)",
|
|
6
7
|
"description": "Base Vite config for usage in our projects.",
|
|
7
8
|
"homepage": "https://github.com/studiokloek/vite-config/tree/main/#readme",
|
|
8
|
-
"type": "module",
|
|
9
9
|
"exports": {
|
|
10
10
|
".": "./dist/index.js",
|
|
11
11
|
"./package.json": "./package.json"
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"main": "dist/index.js",
|
|
14
14
|
"types": "dist/index.d.ts",
|
|
15
15
|
"bin": {
|
|
16
|
-
"kloek-
|
|
17
|
-
"kloek-
|
|
16
|
+
"kloek-build": "./bin/build.js",
|
|
17
|
+
"kloek-development": "./bin/development.js"
|
|
18
18
|
},
|
|
19
19
|
"repository": {
|
|
20
20
|
"type": "git",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"dev": "run-s build/clean build/watch",
|
|
28
28
|
"build": "run-s build/clean build/bundle types",
|
|
29
29
|
"build/clean": "rimraf dist",
|
|
30
|
-
"build/watch": "yarn
|
|
30
|
+
"build/watch": "yarn rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript --watch",
|
|
31
31
|
"build/bundle": "rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript",
|
|
32
32
|
"types": "run-s types/temp types/roll types/clean",
|
|
33
33
|
"types/temp": "tsc --project tsconfig.types.json",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"release/publish": "npx np"
|
|
38
38
|
},
|
|
39
39
|
"engines": {
|
|
40
|
-
"node": ">=
|
|
40
|
+
"node": ">=22"
|
|
41
41
|
},
|
|
42
42
|
"np": {
|
|
43
43
|
"tests": false
|
|
@@ -49,91 +49,65 @@
|
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
|
-
"xo": {
|
|
53
|
-
"prettier": true,
|
|
54
|
-
"rules": {
|
|
55
|
-
"import/extensions": [
|
|
56
|
-
1,
|
|
57
|
-
{
|
|
58
|
-
"ts": "never"
|
|
59
|
-
}
|
|
60
|
-
],
|
|
61
|
-
"n/prefer-global/process": [
|
|
62
|
-
"error",
|
|
63
|
-
"always"
|
|
64
|
-
]
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
52
|
"dependencies": {
|
|
68
|
-
"@sveltejs/vite-plugin-svelte": "^
|
|
69
|
-
"@
|
|
70
|
-
"@
|
|
71
|
-
"@
|
|
72
|
-
"@
|
|
73
|
-
"eslint": "^8.57.1",
|
|
74
|
-
"eslint-config-prettier": "^9.1.0",
|
|
75
|
-
"eslint-formatter-pretty": "^5.0.0",
|
|
76
|
-
"eslint-import-resolver-typescript": "^3.10.1",
|
|
77
|
-
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
78
|
-
"eslint-plugin-import": "^2.31.0",
|
|
79
|
-
"eslint-plugin-prettier": "^5.4.1",
|
|
80
|
-
"eslint-plugin-promise": "^6.6.0",
|
|
81
|
-
"eslint-plugin-svelte": "^2.46.1",
|
|
82
|
-
"eslint-plugin-unicorn": "^48.0.1",
|
|
53
|
+
"@sveltejs/vite-plugin-svelte": "^5.1.0",
|
|
54
|
+
"@vheemstra/vite-plugin-imagemin": "^2.0.0",
|
|
55
|
+
"@vitejs/plugin-basic-ssl": "^2.0.0",
|
|
56
|
+
"@vitejs/plugin-legacy": "^6.1.1",
|
|
57
|
+
"@yoichiro/vite-plugin-handlebars": "^1.4.0",
|
|
83
58
|
"filenamify": "^6.0.0",
|
|
84
59
|
"imagemin-mozjpeg": "^10.0.0",
|
|
85
60
|
"imagemin-optipng": "^8.0.0",
|
|
86
|
-
"imagemin-pngquant": "^
|
|
61
|
+
"imagemin-pngquant": "^10.0.0",
|
|
87
62
|
"meow": "12.0.1",
|
|
88
63
|
"npm-run-all": "^4.1.5",
|
|
89
|
-
"postcss": "^8.5.
|
|
90
|
-
"postcss-load-config": "^
|
|
91
|
-
"
|
|
92
|
-
"prettier-package-json": "^2.8.0",
|
|
93
|
-
"prettier-plugin-svelte": "^3.4.0",
|
|
94
|
-
"rollup-plugin-visualizer": "^5.14.0",
|
|
64
|
+
"postcss": "^8.5.6",
|
|
65
|
+
"postcss-load-config": "^6.0.1",
|
|
66
|
+
"rollup-plugin-visualizer": "^6.0.3",
|
|
95
67
|
"sass": "1.89.2",
|
|
96
|
-
"stylelint": "^
|
|
97
|
-
"svelte": "^
|
|
98
|
-
"svelte-preprocess": "^
|
|
99
|
-
"terser": "^5.
|
|
100
|
-
"vite": "
|
|
68
|
+
"stylelint": "^16.21.0",
|
|
69
|
+
"svelte": "^5.34.8",
|
|
70
|
+
"svelte-preprocess": "^6.0.3",
|
|
71
|
+
"terser": "^5.43.1",
|
|
72
|
+
"vite": "v6.3.5",
|
|
101
73
|
"vite-plugin-banner": "0.8.1",
|
|
102
74
|
"vite-plugin-checker": "^0.9.3",
|
|
103
75
|
"vite-plugin-full-reload": "^1.2.0",
|
|
104
|
-
"vite-plugin-handlebars": "
|
|
76
|
+
"vite-plugin-handlebars": "^2.0.0",
|
|
105
77
|
"vite-plugin-html": "3.2.2",
|
|
106
78
|
"vite-plugin-live-reload": "^3.0.4",
|
|
107
79
|
"vite-plugin-mkcert": "1.17.8",
|
|
108
|
-
"vite-tsconfig-paths": "^
|
|
80
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
109
81
|
"zip-a-folder": "^3.1.9"
|
|
110
82
|
},
|
|
111
83
|
"devDependencies": {
|
|
84
|
+
"@biomejs/biome": "^2.0.5",
|
|
112
85
|
"@microsoft/api-extractor": "7.52.8",
|
|
113
|
-
"@rollup/plugin-node-resolve": "^
|
|
114
|
-
"@rollup/plugin-typescript": "^
|
|
115
|
-
"@sveltejs/kit": "^
|
|
86
|
+
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
87
|
+
"@rollup/plugin-typescript": "^12.1.3",
|
|
88
|
+
"@sveltejs/kit": "^2.22.0",
|
|
116
89
|
"@types/ejs": "^3.1.5",
|
|
117
90
|
"@types/estree": "^1.0.8",
|
|
118
91
|
"@types/html-minifier-terser": "^7.0.2",
|
|
119
|
-
"@types/imagemin": "^
|
|
92
|
+
"@types/imagemin": "^9.0.1",
|
|
120
93
|
"@types/imagemin-mozjpeg": "^8.0.4",
|
|
121
94
|
"@types/imagemin-optipng": "^5.2.4",
|
|
122
|
-
"@types/node": "^
|
|
123
|
-
"rimraf": "^
|
|
124
|
-
"rollup": "^4.
|
|
125
|
-
"
|
|
126
|
-
"
|
|
95
|
+
"@types/node": "^22.15.33",
|
|
96
|
+
"rimraf": "^6.0.1",
|
|
97
|
+
"rollup": "^4.44.0",
|
|
98
|
+
"rollup-plugin-copy": "^3.5.0",
|
|
99
|
+
"tslib": "^2.8.1",
|
|
100
|
+
"typescript": "5.8.3"
|
|
127
101
|
},
|
|
128
102
|
"resolutions": {
|
|
129
103
|
"@types/estree": "^1.0.8",
|
|
130
|
-
"@types/imagemin": "^
|
|
131
|
-
"@types/node": "^
|
|
132
|
-
"vite": "
|
|
133
|
-
"rollup": "^4.
|
|
104
|
+
"@types/imagemin": "^9.0.1",
|
|
105
|
+
"@types/node": "^22.15.33",
|
|
106
|
+
"vite": "v6.3.5",
|
|
107
|
+
"rollup": "^4.44.0"
|
|
134
108
|
},
|
|
135
109
|
"volta": {
|
|
136
|
-
"node": "
|
|
110
|
+
"node": "22.16.0",
|
|
137
111
|
"yarn": "1.22.22"
|
|
138
112
|
}
|
|
139
113
|
}
|