@studiokloek/vite-config 0.12.12 → 0.12.14

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 CHANGED
@@ -17,9 +17,9 @@ import imageminMozjpeg from 'imagemin-mozjpeg';
17
17
  import crypto from 'node:crypto';
18
18
  import imageminPngQuant from 'imagemin-pngquant';
19
19
  import imageminOptiPng from 'imagemin-optipng';
20
+ import checker from 'vite-plugin-checker';
20
21
  import fullReload from 'vite-plugin-full-reload';
21
22
  import mkcert from 'vite-plugin-mkcert';
22
- import checker from 'vite-plugin-checker';
23
23
  import { mkdir, unlink } from 'node:fs/promises';
24
24
  import { zip } from 'zip-a-folder';
25
25
  import filenamify from 'filenamify';
@@ -115,14 +115,14 @@ function getPageIdFromUrl(url) {
115
115
  return fileName.replace('.html', '');
116
116
  }
117
117
 
118
- const pkg$1 = readJSON(path.resolve(cwd, 'package.json'));
118
+ const package_ = readJSON(path.resolve(cwd, 'package.json'));
119
119
  const config = {
120
- vite: pkg$1.vite,
121
- browserslist: pkg$1.browserslist,
122
- settings: pkg$1.settings,
123
- version: pkg$1.version,
124
- name: pkg$1.name,
125
- description: pkg$1.description,
120
+ vite: package_.vite,
121
+ browserslist: package_.browserslist,
122
+ settings: package_.settings,
123
+ version: package_.version,
124
+ name: package_.name,
125
+ description: package_.description,
126
126
  };
127
127
  function getPackageConfig() {
128
128
  return config;
@@ -431,9 +431,13 @@ function buildPlugins(options) {
431
431
  return plugins.filter(plugin => plugin !== undefined);
432
432
  }
433
433
 
434
- function servePlugins() {
434
+ function servePlugins(settings) {
435
+ const fullReloadPaths = ['script/**/*.ts'];
436
+ if (settings?.fullReloadSvelte) {
437
+ fullReloadPaths.push('svelte/**/*.svelte');
438
+ }
435
439
  return [
436
- fullReload(['script/**/*.ts', 'svelte/**/*.svelte'], {
440
+ fullReload(fullReloadPaths, {
437
441
  root: path.join(path.resolve(cwd), 'source'),
438
442
  log: true,
439
443
  always: true,
@@ -447,26 +451,23 @@ function servePlugins() {
447
451
 
448
452
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
449
453
  async function defineKloekViteConfig(environment) {
450
- const pkg = getPackageConfig();
454
+ const package_ = getPackageConfig();
451
455
  const options = {
452
456
  root: path.resolve(cwd, 'source'),
453
- package: pkg,
457
+ package: package_,
454
458
  environment,
455
- settings: parsePackageGamesSettings(pkg.settings, pkg.version),
459
+ settings: parsePackageGamesSettings(package_.settings, package_.version),
456
460
  config: {
457
- ...pkg.vite,
458
- build: { ...pkg.vite.build, browserslist: pkg.browserslist },
461
+ ...package_.vite,
462
+ build: { ...package_.vite.build, browserslist: package_.browserslist },
459
463
  serve: {
460
- partials: [
461
- path.resolve(__dirname, 'partials'),
462
- path.resolve(cwd, 'source', 'partials'),
463
- ],
464
+ partials: [path.resolve(__dirname, 'partials'), path.resolve(cwd, 'source', 'partials')],
464
465
  },
465
466
  },
466
467
  };
467
468
  const config = {
468
469
  logLevel: 'info',
469
- base: pkg.vite.build.basePath,
470
+ base: package_.vite.build.basePath,
470
471
  root: options.root,
471
472
  envDir: path.resolve(cwd, 'env'),
472
473
  envPrefix: ['KLOEK_', 'VITE_'],
@@ -502,7 +503,7 @@ async function defineKloekViteConfig(environment) {
502
503
  'lodash-es',
503
504
  'overmind',
504
505
  'pixi-spine',
505
- 'pixi.js',
506
+ 'pixi',
506
507
  'pubsub-js',
507
508
  'random-js',
508
509
  'ress',
@@ -524,7 +525,7 @@ async function defineKloekViteConfig(environment) {
524
525
  plugins: [...basePlugins(options)],
525
526
  };
526
527
  switch (environment.command) {
527
- case 'serve':
528
+ case 'serve': {
528
529
  config.server = {
529
530
  host: true,
530
531
  cors: options.config.dev.cors ?? true,
@@ -533,16 +534,17 @@ async function defineKloekViteConfig(environment) {
533
534
  };
534
535
  config.plugins = [
535
536
  ...(config.plugins ? config.plugins : []),
536
- ...servePlugins(),
537
+ ...servePlugins({
538
+ fullReloadSvelte: package_.vite.dev.fullReloadSvelte ?? true,
539
+ }),
537
540
  ];
538
541
  break;
539
- case 'build':
542
+ }
543
+ case 'build': {
540
544
  config.build = defineBuildConfig(options);
541
- config.plugins = [
542
- ...(config.plugins ? config.plugins : []),
543
- ...buildPlugins(options),
544
- ];
545
+ config.plugins = [...(config.plugins ? config.plugins : []), ...buildPlugins(options)];
545
546
  break;
547
+ }
546
548
  }
547
549
  return config;
548
550
  }
@@ -603,4 +605,4 @@ async function kloekBuild(flags) {
603
605
  }
604
606
 
605
607
  export { kloekBuild, kloekDevelopment };
606
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9jd2QudHMiLCIuLi9zcmMvdXRpbHMvanNvbi50cyIsIi4uL3NyYy91dGlscy9idWlsZC50cyIsIi4uL3NyYy91dGlscy9nYW1lLnRzIiwiLi4vc3JjL3V0aWxzL3BrZy50cyIsIi4uL3NyYy91dGlscy96aXAudHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaGFuZGxlYmFycy1wbHVnaW4udHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaHRtbC1wbHVnaW4udHMiLCIuLi9zcmMvcGx1Z2lucy9iYXNlLnRzIiwiLi4vc3JjL3V0aWxzL2hhc2gudHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaW1hZ2UtcGx1Z2luLnRzIiwiLi4vc3JjL3BsdWdpbnMvbGliL21hbmlmZXN0LXBsdWdpbi50cyIsIi4uL3NyYy9wbHVnaW5zL2J1aWxkLnRzIiwiLi4vc3JjL3BsdWdpbnMvc2VydmUudHMiLCIuLi9zcmMvY29uZmlnLnRzIiwiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQge25vcm1hbGl6ZVBhdGh9IGZyb20gJ3ZpdGUnO1xuXG5leHBvcnQgY29uc3QgY3dkID0gbm9ybWFsaXplUGF0aChwcm9jZXNzLmN3ZCgpKTtcbiIsImltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdub2RlOmZzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRKU09OKHBhdGg6IHN0cmluZyk6IHVua25vd24ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSByZWFkRmlsZVN5bmMocGF0aCk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKTtcbiAgfSBjYXRjaCB7XG4gICAgLy9cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7QnVpbGRPcHRpb25zfSBmcm9tICd2aXRlJztcbmltcG9ydCB0eXBlIHtWaXRlT3B0aW9uc30gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUJ1aWxkQ29uZmlnKG9wdGlvbnM6IFZpdGVPcHRpb25zKTogQnVpbGRPcHRpb25zIHtcbiAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBmb3IgKGNvbnN0IGdhbWVJZCBvZiBPYmplY3Qua2V5cyhvcHRpb25zLnNldHRpbmdzLmdhbWVzKSkge1xuICAgIGlucHV0W2dhbWVJZF0gPSBwYXRoLnJlc29sdmUob3B0aW9ucy5yb290LCBgJHtnYW1lSWR9Lmh0bWxgKTtcbiAgfVxuXG4gIC8vIExpYnMgZGllIGFwYXJ0ZSBqcyBrcmlqZ2VuOlxuICAvLyBjb25zdCB2ZW5kb3JDaHVua3MgPSBbJ3BpeGknLCAnZmlyZWJhc2UnLCAnbG9kYXNoJywgJ2dzYXAnLCAnc3R1ZGlva2xvZWsnXTtcblxuICByZXR1cm4ge1xuICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiB0cnVlLFxuICAgIGNodW5rU2l6ZVdhcm5pbmdMaW1pdDogMjAwMCxcbiAgICBvdXREaXI6ICcuLi9wdWJsaWMnLFxuICAgIGFzc2V0c0RpcjogJ2dlbmVyYXRlZCcsXG4gICAgbWluaWZ5OiAndGVyc2VyJyxcbiAgICBzb3VyY2VtYXA6IG9wdGlvbnMuY29uZmlnLmJ1aWxkLnNvdXJjZU1hcHMgPz8gZmFsc2UsXG4gICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgaW5wdXQsXG4gICAgfSxcbiAgfTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7XG4gIEdhbWVTZXR0aW5ncyxcbiAgR2FtZVNldHRpbmdzUHJvcGVydHksXG4gIEdhbWVzU2V0dGluZ3MsXG4gIEdhbWVzU2V0dGluZ3NEYXRhLFxuICBLbG9la1ZpdGVDb25maWcsXG4gIFBhY2thZ2VHYW1lc1NldHRpbmdzLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5mdW5jdGlvbiBtZXJnZUdhbWVTZXR0aW5ncyhcbiAgZ2VuZXJpYzogR2FtZVNldHRpbmdzLFxuICBnYW1lOiBHYW1lU2V0dGluZ3MsXG4gIGluZm9UeXBlczogR2FtZVNldHRpbmdzUHJvcGVydHlbXSxcbik6IEdhbWVTZXR0aW5ncyB7XG4gIGNvbnN0IHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIC8vIEFsbGUgcHJvcHMgb3Agw6nDqW4gbGV2ZWwgZGllcCBtZXJnZW5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBpbmZvVHlwZXMpIHtcbiAgICBzZXR0aW5nc1twcm9wZXJ0eV0gPSB7XG4gICAgICAuLi5nZW5lcmljW3Byb3BlcnR5XSxcbiAgICAgIC4uLmdhbWVbcHJvcGVydHldLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0dGluZ3MgYXMgdW5rbm93biBhcyBHYW1lU2V0dGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhY2thZ2VHYW1lc1NldHRpbmdzKFxuICBwYWNrYWdlU2V0dGluZ3M6IFBhY2thZ2VHYW1lc1NldHRpbmdzLFxuICB2ZXJzaW9uOiBzdHJpbmdcbik6IEdhbWVzU2V0dGluZ3NEYXRhIHtcbiAgLy8gTWVyZ2Ugc2V0dGluZ3NcbiAgY29uc3QgaW5mb1R5cGVzID0gT2JqZWN0LmtleXMoXG4gICAgcGFja2FnZVNldHRpbmdzLmdlbmVyaWMsXG4gICkgYXMgR2FtZVNldHRpbmdzUHJvcGVydHlbXTtcbiAgY29uc3Qge2dlbmVyaWN9ID0gcGFja2FnZVNldHRpbmdzO1xuICBjb25zdCBhbGxTZXR0aW5nczogR2FtZXNTZXR0aW5nc0RhdGEgPSB7XG4gICAgZGV2ZWxvcG1lbnQ6IGdlbmVyaWMsXG4gICAgZ2FtZXM6IHt9LFxuICB9O1xuXG4gIGZvciAoY29uc3QgZ2FtZSBvZiBwYWNrYWdlU2V0dGluZ3MuZ2FtZXMgPz8gW10pIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IG1lcmdlR2FtZVNldHRpbmdzKGdlbmVyaWMsIGdhbWUsIGluZm9UeXBlcyk7XG5cbiAgICAvLyBab3JnIGVyIHZvb3IgZGF0IHBhZ2UgYWx0aWpkIGdlemV0IGlzXG4gICAgY29uc3QgcGFnZUlkID0gc2V0dGluZ3MuaW5mby5wYWdlID8/IHNldHRpbmdzLmluZm8uaWQgPz8gJ3Vua25vd24nO1xuICAgIHNldHRpbmdzLmluZm8ucGFnZSA9IHBhZ2VJZDtcblxuICAgIC8vIGVpZ2VuIHZlcnNpZSBudW1tZXIgb2YgZGUgZ2VuZXJpZWtlIHVpdCBkZSBwYWNrYWdlXG4gICAgc2V0dGluZ3MuaW5mby52ZXJzaW9uID0gc2V0dGluZ3MuaW5mby52ZXJzaW9uID8/IHZlcnNpb247XG5cbiAgICAvLyBTbGEgc2V0dGluZ3Mgb3Agb25kZXIgcGFnZSBpZFxuICAgIGFsbFNldHRpbmdzLmdhbWVzW3BhZ2VJZF0gPSBzZXR0aW5ncztcbiAgfVxuXG4gIHJldHVybiBhbGxTZXR0aW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb0dhbWVEYXRhKFxuICBmdWxsRmlsZVBhdGg6IHN0cmluZyxcbiAgc2V0dGluZ3M6IEdhbWVzU2V0dGluZ3MsXG4pOiBHYW1lU2V0dGluZ3MgfCB1bmRlZmluZWQge1xuICAvLyBEZXRlcm1pbmUgZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb25cbiAgbGV0IGZpbGVQYXRoID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZVBhdGgsIHBhdGguZXh0bmFtZShmdWxsRmlsZVBhdGgpKTtcblxuICAvLyBEZXRlcm1pbmUgZGlyICYgcmVtb3ZlIGxlYWRpbmcgc2xhc2hcbiAgbGV0IGZpbGVEaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZnVsbEZpbGVQYXRoKTtcbiAgZmlsZURpcmVjdG9yeSA9IGZpbGVEaXJlY3RvcnkucmVwbGFjZSgvXlxcLysvZywgJycpO1xuXG4gIGlmIChmaWxlRGlyZWN0b3J5KSB7XG4gICAgZmlsZVBhdGggPSBgJHtmaWxlRGlyZWN0b3J5fS8ke2ZpbGVQYXRofWA7XG4gIH1cblxuICByZXR1cm4gc2V0dGluZ3NbZmlsZVBhdGhdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZVRvU2VydmUoXG4gIGNvbmZpZzogS2xvZWtWaXRlQ29uZmlnLFxuICBzZXR0aW5nczogR2FtZXNTZXR0aW5ncyxcbik6IHN0cmluZyB7XG4gIC8vIEhvZXZlZWwgcGFnZXMgemlqbiBlcj9cbiAgY29uc3QgcGFnZUlkcyA9IE9iamVjdC5rZXlzKHNldHRpbmdzKTtcbiAgY29uc3QgcGFnZSA9IHBhZ2VJZHMubGVuZ3RoID09PSAxID8gcGFnZUlkc1swXSA6ICdkZXZlbG9wbWVudCc7XG5cbiAgcmV0dXJuIHBhdGgucG9zaXguam9pbihcbiAgICBjb25maWcuYnVpbGQuYmFzZVBhdGgsXG4gICAgYCR7cGFnZX0uaHRtbCR7Y29uZmlnLmRldi5zZXJ2ZVBhcmFtcyA/PyAnJ31gLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZUlkRnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IHBhdGhuYW1lOiBzdHJpbmc7XG5cbiAgdHJ5IHtcbiAgICBwYXRobmFtZSA9IG5ldyBVUkwodXJsLCAnaHR0cHM6Ly9zdHVkaW9rbG9lay5ubCcpLnBhdGhuYW1lO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBJZiByZXF1ZXN0IGlzIG5vdCBodG1sICwgZGlyZWN0bHkgcmV0dXJuIG5leHQoKVxuICBpZiAoIXBhdGhuYW1lLmVuZHNXaXRoKCcuaHRtbCcpICYmIHBhdGhuYW1lICE9PSAnLycpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBQYWdpbmEgaWQgb3B2cmFnZW5cbiAgY29uc3QgaW5kZXggPSBwYXRobmFtZS5sYXN0SW5kZXhPZignLycpO1xuICBjb25zdCBmaWxlTmFtZSA9IGluZGV4ID09PSAtMSA/IHBhdGhuYW1lIDogcGF0aG5hbWUuc2xpY2UoaW5kZXggKyAxKTtcblxuICByZXR1cm4gZmlsZU5hbWUucmVwbGFjZSgnLmh0bWwnLCAnJyk7XG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgY3dkLCByZWFkSlNPTiB9IGZyb20gJy4nO1xuaW1wb3J0IHsgS2xvZWtWaXRlQ29uZmlnLCBQYWNrYWdlQ29uZmlnLCBQYWNrYWdlR2FtZXNTZXR0aW5ncyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmNvbnN0IHBrZyA9IHJlYWRKU09OKHBhdGgucmVzb2x2ZShjd2QsICdwYWNrYWdlLmpzb24nKSkgYXMgUmVjb3JkPHN0cmluZyx1bmtub3duPjtcblxuY29uc3QgY29uZmlnOlBhY2thZ2VDb25maWcgPSB7XG4gIHZpdGU6IHBrZy52aXRlIGFzIEtsb2VrVml0ZUNvbmZpZyxcbiAgYnJvd3NlcnNsaXN0OiBwa2cuYnJvd3NlcnNsaXN0IGFzIHN0cmluZyB8IHN0cmluZ1tdLFxuICBzZXR0aW5nczogcGtnLnNldHRpbmdzIGFzIFBhY2thZ2VHYW1lc1NldHRpbmdzLFxuICB2ZXJzaW9uOiBwa2cudmVyc2lvbiBhcyBzdHJpbmcsXG4gIG5hbWU6IHBrZy5uYW1lIGFzIHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHBrZy5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZUNvbmZpZygpOiBQYWNrYWdlQ29uZmlnIHtcbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge21rZGlyLCB1bmxpbmt9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHt6aXB9IGZyb20gJ3ppcC1hLWZvbGRlcic7XG5pbXBvcnQgZmlsZW5hbWlmeSBmcm9tICdmaWxlbmFtaWZ5JztcbmltcG9ydCB7Y3dkLCBnZXRQYWNrYWdlQ29uZmlnfSBmcm9tICcuJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEJ1aWxkRm9sZGVyVG9aaXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBrZyA9IGdldFBhY2thZ2VDb25maWcoKTtcbiAgY29uc3Qgc291cmNlRGlyZWN0b3J5ID0gcGF0aC5qb2luKHBhdGgucmVzb2x2ZShjd2QpLCAncHVibGljJyk7XG4gIGNvbnN0IGRlc3RpbmF0aW9uRGlyZWN0b3J5ID0gcGF0aC5qb2luKHBhdGgucmVzb2x2ZShjd2QpLCAnemlwcycpO1xuICBjb25zdCBkZXN0aW5hdGlvbkZpbGUgPSBwYXRoLmpvaW4oXG4gICAgZGVzdGluYXRpb25EaXJlY3RvcnksXG4gICAgZmlsZW5hbWlmeShgJHtwa2cubmFtZX0tdiR7cGtnLnZlcnNpb259LnppcGAsIHtyZXBsYWNlbWVudDogJy0nfSksXG4gICk7XG5cbiAgLy8gRG9lcyB0aGUgZm9sZGVyIGV4aXN0P1xuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRlc3RpbmF0aW9uRGlyZWN0b3J5KTtcbiAgfSBjYXRjaCB7fVxuXG4gIC8vIFJlbW92ZSBwcmV2aW91cyB6aXAgZmlsZVxuICB0cnkge1xuICAgIGF3YWl0IHVubGluayhkZXN0aW5hdGlvbkZpbGUpO1xuICB9IGNhdGNoIHt9XG5cbiAgYXdhaXQgemlwKHNvdXJjZURpcmVjdG9yeSwgZGVzdGluYXRpb25GaWxlKTtcbn1cbiIsImltcG9ydCBvcyBmcm9tICdub2RlOm9zJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7UGx1Z2lufSBmcm9tICd2aXRlJztcbmltcG9ydCB2aXRlSGFuZGxlYmFyc1BsdWdpbiBmcm9tICd2aXRlLXBsdWdpbi1oYW5kbGViYXJzJztcbmltcG9ydCB0eXBlIHtWaXRlT3B0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQge2dldFBhZ2VJZEZyb21Vcmx9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLy8gSGVscGVycyB2b29yIGhhbmRsZWJhcnNcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGViYXJzUGx1Z2luKFxuICBwYXJ0aWFsRGlyZWN0b3J5OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgb3B0aW9uczogVml0ZU9wdGlvbnMsXG4pOiBQbHVnaW4ge1xuICByZXR1cm4gdml0ZUhhbmRsZWJhcnNQbHVnaW4oe1xuICAgIHBhcnRpYWxEaXJlY3RvcnksXG5cbiAgICBoZWxwZXJzOiB7XG4gICAgICBqc29uOiAob2JqZWN0OiBhbnksIGluZGVudCA9IDApID0+XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9iamVjdCwgdW5kZWZpbmVkLCBpbmRlbnQpLFxuICAgICAgY29uY2F0OiAoLi4uYXJndW1lbnRzXzogYW55W10pID0+IGFyZ3VtZW50c18uc2xpY2UoMCwgLTEpLmpvaW4oJycpLFxuICAgICAgZXE6IChhOiBhbnksIGI6IGFueSkgPT4gYSA9PT0gYixcbiAgICAgIG5lcTogKGE6IGFueSwgYjogYW55KSA9PiBhICE9PSBiLFxuICAgICAgaXNkZWZpbmVkOiAodmFsdWU6IHVuZGVmaW5lZCkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgICAgICdyZXNvbHZlLXJvb3QnKHA6IHN0cmluZykge1xuICAgICAgICAvLyBUaWpkZWxpamtlIGhhY2sgdm9vciBidWcgaW4gaGFuZGxlYmFycyBwbHVnaW5cbiAgICAgICAgLy8gemllIG9vayBodHRwczovL2dpdGh1Yi5jb20vYWxleGxhZnJvc2NpYS92aXRlLXBsdWdpbi1oYW5kbGViYXJzL3B1bGwvMTI5XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLnJvb3QsIHApO1xuICAgICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJyA/IGAvJHtyZXNvbHZlZFBhdGh9YCA6IHJlc29sdmVkUGF0aDtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGNvbnRleHQocGFnZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICAgIGNvbnN0IGdhbWVJZCA9IGdldFBhZ2VJZEZyb21VcmwocGFnZVBhdGgpO1xuXG4gICAgICBpZiAoIWdhbWVJZCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChnYW1lSWQgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgLy8gUGFnaW5hIHNldHRpbmdzIHRlcnVnZ2V2ZW5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbnY6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgZGF0YTogb3B0aW9ucy5zZXR0aW5ncy5kZXZlbG9wbWVudCxcbiAgICAgICAgICBnYW1lczogb3B0aW9ucy5zZXR0aW5ncy5nYW1lcyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gT3AgYmFzaXMgdmFuIHBhZCBkYXRhIGJlcGFsZW5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucy5zZXR0aW5ncy5nYW1lc1tnYW1lSWRdO1xuXG4gICAgICAvLyBQYWdpbmEgc2V0dGluZ3MgdGVydWdnZXZlblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW52OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBkYXRhOiBzZXR0aW5ncyA/PyB7fSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSk7XG59XG4iLCJpbXBvcnQge2V4aXN0c1N5bmMsIHByb21pc2VzfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7Q29uZmlnRW52LCBQbHVnaW4sIFVzZXJDb25maWcsIFZpdGVEZXZTZXJ2ZXJ9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHR5cGUge0dhbWVzU2V0dGluZ3N9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtjd2QsIGdldFBhZ2VJZEZyb21Vcmx9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuY29uc3QgUEFHRV9URU1QTEFURSA9ICd7ez4gZ2FtZSBkYXRhPWRhdGF9fSc7XG5jb25zdCBERVZFTE9QTUVOVF9URU1QTEFURSA9ICd7ez4gZGV2ZWxvcG1lbnQgZGF0YT1kYXRhfX0nO1xuXG5hc3luYyBmdW5jdGlvbiByZW5kZXJUZW1wb3JhcnlGaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gQmVzdGFhdCBkaWUgZmlsZSBub2cgbmlldD9cbiAgaWYgKCFleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgIC8vIEFhbm1ha2VuXG4gICAgYXdhaXQgcHJvbWlzZXMud3JpdGVGaWxlKGZpbGVQYXRoLCBQQUdFX1RFTVBMQVRFKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaHRtbFBsdWdpbihnYW1lczogR2FtZXNTZXR0aW5ncyk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3ZpdGUtcGx1Z2luLWtsb2VrLWh0bWwnLFxuICAgIGVuZm9yY2U6ICdwcmUnLFxuXG4gICAgYXN5bmMgY29uZmlnKF9jb25maWc6IFVzZXJDb25maWcsIGVudmlyb25tZW50OiBDb25maWdFbnYpIHtcbiAgICAgIC8vIEJpaiBlZW4gYnVpbGQgbWFrZW4gd2UgdGlqZGVsaWprIGZpbGVzIGFhblxuICAgICAgaWYgKGVudmlyb25tZW50LmNvbW1hbmQgPT09ICdidWlsZCcpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBhZ2VJZCBvZiBPYmplY3Qua2V5cyhnYW1lcykpIHtcbiAgICAgICAgICAvLyBQYWQgbmFhciBmaWxlXG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJywgYCR7cGFnZUlkfS5odG1sYCk7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKHJlbmRlclRlbXBvcmFyeUZpbGUoZmlsZVBhdGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGFjdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyOiBWaXRlRGV2U2VydmVyKSB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAvLyBab3JnIGVyIHZvb3IgZGF0IHRpamRlbnMgZGV2ZWxvcG1lbnQgZGUgcGFnaW5hIGdlLXJlbmRlcmVkIHRlcnVnIGdlZ2V2ZW4gd29yZHQgd29yZHRcbiAgICAgICAgc2VydmVyLm1pZGRsZXdhcmVzLnVzZSgnLycsIGFzeW5jIChyZXF1ZXN0LCByZXNwb25zZSwgbmV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVybCA9IHJlcXVlc3Q/LnVybCA/PyAnJztcbiAgICAgICAgICBjb25zdCBwYWdlSWQgPSBnZXRQYWdlSWRGcm9tVXJsKHVybCk7XG5cbiAgICAgICAgICBpZiAoIXBhZ2VJZCkge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYWdlSWQgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgICAgIC8vIERldmVsb3BtZW50PyBnZWVmIHRlcnVnLi4uXG4gICAgICAgICAgICByZXNwb25zZS5lbmQoXG4gICAgICAgICAgICAgIGF3YWl0IHNlcnZlci50cmFuc2Zvcm1JbmRleEh0bWwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIERFVkVMT1BNRU5UX1RFTVBMQVRFLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Qub3JpZ2luYWxVcmwsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoZ2FtZXMpLmluY2x1ZGVzKHBhZ2VJZCkpIHtcbiAgICAgICAgICAgIC8vIEJlc3RhYW5kZSBnYW1lPyB6b3JnIGVyIHZvb3IgZGF0IGRlIHRlbXBsYXRlIGdlLXJlbmRlcmVkIHdvcmR0XG4gICAgICAgICAgICByZXNwb25zZS5lbmQoXG4gICAgICAgICAgICAgIGF3YWl0IHNlcnZlci50cmFuc2Zvcm1JbmRleEh0bWwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIFBBR0VfVEVNUExBVEUsXG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vcmlnaW5hbFVybCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5pa3MgZ2V2b25kZW5cbiAgICAgICAgICAgIHJlc3BvbnNlLmVuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZUJ1bmRsZSgpIHtcbiAgICAgIC8vIFZlcndpamRlciBkZSBhYW5nZW1hYWt0ZSBmaWxlc1xuICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGFnZUlkIG9mIE9iamVjdC5rZXlzKGdhbWVzKSkge1xuICAgICAgICAvLyBQYWQgbmFhciBmaWxlXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsIGAke3BhZ2VJZH0uaHRtbGApO1xuICAgICAgICBpZiAoZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHByb21pc2VzLnJtKGZpbGVQYXRoKSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChhY3Rpb25zKTtcbiAgICB9LFxuICB9O1xufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7c3ZlbHRlfSBmcm9tICdAc3ZlbHRlanMvdml0ZS1wbHVnaW4tc3ZlbHRlJztcbmltcG9ydCB7dHlwZSBQbHVnaW4sIHR5cGUgUGx1Z2luT3B0aW9ufSBmcm9tICd2aXRlJztcbmltcG9ydCB0c2NvbmZpZ1BhdGhzUGx1Z2luIGZyb20gJ3ZpdGUtdHNjb25maWctcGF0aHMnO1xuaW1wb3J0IHN2ZWx0ZVByZXByb2Nlc3MgZnJvbSAnc3ZlbHRlLXByZXByb2Nlc3MnO1xuaW1wb3J0IHt0eXBlIFZpdGVPcHRpb25zfSBmcm9tICcuLi91dGlscy9pbnRlcmZhY2VzJztcbmltcG9ydCB7Y3dkfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2hhbmRsZWJhcnNQbHVnaW59IGZyb20gJy4vbGliL2hhbmRsZWJhcnMtcGx1Z2luJztcbmltcG9ydCB7aHRtbFBsdWdpbn0gZnJvbSAnLi9saWIvaHRtbC1wbHVnaW4nO1xuXG5leHBvcnQgZnVuY3Rpb24gYmFzZVBsdWdpbnMob3B0aW9uczogVml0ZU9wdGlvbnMpOiBBcnJheTxQbHVnaW4gfCBQbHVnaW5PcHRpb24+IHtcbiAgcmV0dXJuIFtcbiAgICBodG1sUGx1Z2luKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLFxuXG4gICAgLi4uc3ZlbHRlKHtcbiAgICAgIHByZXByb2Nlc3M6IHN2ZWx0ZVByZXByb2Nlc3MoKSxcblxuICAgICAgb253YXJuKHdhcm5pbmcsIHdhcm4pIHtcbiAgICAgICAgaWYgKCF3YXJuKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm8gYTExeSB3YXJuaW5ncy4uLlxuICAgICAgICBpZiAod2FybmluZy5jb2RlLnN0YXJ0c1dpdGgoJ2ExMXktJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuKHdhcm5pbmcpO1xuICAgICAgfSxcbiAgICB9KSxcblxuICAgIHRzY29uZmlnUGF0aHNQbHVnaW4oe1xuICAgICAgcm9vdDogcGF0aC5yZXNvbHZlKGN3ZCksXG4gICAgICAvLyBFeHRlbnNpb25zOiBbJy50cycsICcuanNvbiddLFxuICAgICAgbG9vc2U6IHRydWUsXG4gICAgfSksXG5cbiAgICBoYW5kbGViYXJzUGx1Z2luKG9wdGlvbnMuY29uZmlnLnNlcnZlLnBhcnRpYWxzLCBvcHRpb25zKSxcbiAgXTtcbn1cbiIsImltcG9ydCBjcnlwdG8sIHt0eXBlIEJpbmFyeUxpa2V9IGZyb20gJ25vZGU6Y3J5cHRvJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1kNShidWZmZXI6IEJpbmFyeUxpa2UpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShidWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUge0NvbmZpZ0VudiwgUGx1Z2lufSBmcm9tICd2aXRlJztcbmltcG9ydCB2aXRlSW1hZ2VtaW4gZnJvbSAnQHZoZWVtc3RyYS92aXRlLXBsdWdpbi1pbWFnZW1pbic7XG5pbXBvcnQgaW1hZ2VtaW5Nb3pqcGVnIGZyb20gJ2ltYWdlbWluLW1vempwZWcnO1xuaW1wb3J0IHR5cGUge0ltYWdlUXVhbGl0eUNvbmZpZ30gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQge2N3ZCwgcmVhZEpTT059IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7bWQ1fSBmcm9tICcuLi8uLi91dGlscy9oYXNoJztcblxuLy8gVGhlIG1pbmlmaWVycyB5b3Ugd2FudCB0byB1c2U6XG5pbXBvcnQgaW1hZ2VtaW5QbmdRdWFudCBmcm9tICdpbWFnZW1pbi1wbmdxdWFudCc7XG5pbXBvcnQgaW1hZ2VtaW5PcHRpUG5nIGZyb20gJ2ltYWdlbWluLW9wdGlwbmcnO1xuXG5jb25zdCBwa2cgPSByZWFkSlNPTihwYXRoLnJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJykpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgZnVuY3Rpb24gaW1hZ2VtaW5QbHVnaW4oXG4gIGVudmlyb25tZW50OiBDb25maWdFbnYsXG4gIG9wdGlvbnM6IEltYWdlUXVhbGl0eUNvbmZpZyxcbik6IFBsdWdpbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChlbnZpcm9ubWVudC5tb2RlICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdml0ZUltYWdlbWluKHtcbiAgICBza2lwSWZMYXJnZXI6IHRydWUsXG4gICAgdmVyYm9zZTogdHJ1ZSxcbiAgICBjYWNoZTogdHJ1ZSxcbiAgICBjYWNoZURpcjogcGF0aC5yZXNvbHZlKGN3ZCwgJy5jYWNoZS92aXRlLXBsdWdpbi1pbWFnZW1pbicpLFxuICAgIGNhY2hlS2V5OiBgJHtwa2cubmFtZX0tJHttZDUoSlNPTi5zdHJpbmdpZnkoey4uLm9wdGlvbnN9KSl9YCxcbiAgICByb290OiBwYXRoLmpvaW4ocGF0aC5yZXNvbHZlKGN3ZCksICdwdWJsaWMnKSxcbiAgICBwbHVnaW5zOiB7XG4gICAgICBqcGc6IFtcbiAgICAgICAgaW1hZ2VtaW5Nb3pqcGVnKHtcbiAgICAgICAgICBxdWFsaXR5OiBvcHRpb25zLmpwZWcgPz8gODAsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIHBuZzogW1xuICAgICAgICBpbWFnZW1pblBuZ1F1YW50KHtcbiAgICAgICAgICBzdHJpcDogdHJ1ZSxcbiAgICAgICAgICBzcGVlZDogMixcbiAgICAgICAgICBkaXRoZXJpbmc6IDAuMjUsXG4gICAgICAgICAgcXVhbGl0eTogb3B0aW9ucy5wbmcgPz8gWzAuNSwgMC43XSxcbiAgICAgICAgfSksXG4gICAgICAgIGltYWdlbWluT3B0aVBuZygpLFxuICAgICAgXSxcbiAgICB9LFxuICB9KSBhcyBQbHVnaW47XG59XG4iLCJpbXBvcnQgdHlwZSB7UGx1Z2luLCBSZXNvbHZlZENvbmZpZ30gZnJvbSAndml0ZSc7XG5pbXBvcnQgdHlwZSB7R2FtZVNldHRpbmdzLCBHYW1lc1NldHRpbmdzfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcmZhY2VzJztcblxuZnVuY3Rpb24gcmVuZGVyR2FtZU1hbmlmZXN0KFxuICBwYWdlSWQ6IHN0cmluZyxcbiAgc2V0dGluZ3M6IEdhbWVTZXR0aW5ncyxcbiAgY29uZmlnOiBSZXNvbHZlZENvbmZpZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hbmlmZXN0ID0ge1xuICAgIHNob3J0X25hbWU6IGAke3NldHRpbmdzLm1ldGEuYXBwdGl0bGV9YCxcbiAgICBuYW1lOiBgJHtzZXR0aW5ncy5tZXRhLnRpdGxlfWAsXG4gICAgZGVzY3JpcHRpb246IGAke3NldHRpbmdzLm1ldGEuZGVzY3JpcHRpb259YCxcbiAgICBzY29wZTogYCR7Y29uZmlnLmJhc2V9JHtwYWdlSWR9Lmh0bWxgLFxuICAgIHN0YXJ0X3VybDogYCR7Y29uZmlnLmJhc2V9JHtwYWdlSWR9Lmh0bWxgLFxuICAgIGRpc3BsYXk6ICdmdWxsc2NyZWVuJyxcbiAgICBvcmllbnRhdGlvbjogYCR7c2V0dGluZ3Mub3B0aW9ucy5vcmllbnRhdGlvbiA/PyAnbGFuZHNjYXBlJ31gLFxuICAgIGljb25zOiBbXG4gICAgICB7XG4gICAgICAgIHNyYzogYCR7Y29uZmlnLmJhc2V9bWV0YS8ke3NldHRpbmdzLmluZm8uaWR9L2ljb25zL2Nocm9tZS10b3VjaC1pY29uLTE5MngxOTIucG5nYCxcbiAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgIHNpemVzOiAnMTkyeDE5MicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzcmM6IGAke2NvbmZpZy5iYXNlfW1ldGEvJHtzZXR0aW5ncy5pbmZvLmlkfS9pY29ucy9pY29uLnBuZ2AsXG4gICAgICAgIHR5cGU6ICdpbWFnZS9wbmcnLFxuICAgICAgICBzaXplczogJzEwMjR4MTAyNCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYmFja2dyb3VuZF9jb2xvcjogYCR7c2V0dGluZ3Mub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3J9YCxcbiAgICB0aGVtZV9jb2xvcjogYCR7c2V0dGluZ3Mub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3J9YCxcbiAgfTtcblxuICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3QsIG51bGwsIDIpfVxcbmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYW5pZmVzdFBsdWdpbihnYW1lczogR2FtZXNTZXR0aW5ncyk6IFBsdWdpbiB7XG4gIGxldCBjb25maWc6IFJlc29sdmVkQ29uZmlnO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3ZpdGUtcGx1Z2luLWtsb2VrLW1hbmlmZXN0JyxcbiAgICBlbmZvcmNlOiAncG9zdCcsXG4gICAgYXBwbHk6ICdidWlsZCcsXG4gICAgYXN5bmMgY29uZmlnUmVzb2x2ZWQocmVzb2x2ZWRDb25maWc6IFJlc29sdmVkQ29uZmlnKSB7XG4gICAgICBjb25maWcgPSByZXNvbHZlZENvbmZpZztcbiAgICB9LFxuICAgIGdlbmVyYXRlQnVuZGxlKF8sIGJ1bmRsZSkge1xuICAgICAgLy8gVm9vciBpZWRlcmUgYXBwIGVlbiBtYW5pZmVzdCBtYWtlbjpcbiAgICAgIGZvciAoY29uc3QgW3BhZ2VJZCwgc2V0dGluZ3NdIG9mIE9iamVjdC5lbnRyaWVzKGdhbWVzKSkge1xuICAgICAgICBidW5kbGVbYCR7cGFnZUlkfS53ZWJtYW5pZmVzdGBdID0ge1xuICAgICAgICAgIG5lZWRzQ29kZVJlZmVyZW5jZTogZmFsc2UsXG4gICAgICAgICAgdHlwZTogJ2Fzc2V0JyxcbiAgICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgc291cmNlOiByZW5kZXJHYW1lTWFuaWZlc3QocGFnZUlkLCBzZXR0aW5ncywgY29uZmlnKSxcbiAgICAgICAgICBmaWxlTmFtZTogYCR7cGFnZUlkfS53ZWJtYW5pZmVzdGAsXG4gICAgICAgIH07XG5cbiAgICAgICAgYnVuZGxlW2Ake3BhZ2VJZH0tc2VydmljZXdvcmtlci5qc2BdID0ge1xuICAgICAgICAgIG5lZWRzQ29kZVJlZmVyZW5jZTogZmFsc2UsXG4gICAgICAgICAgdHlwZTogJ2Fzc2V0JyxcbiAgICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgc291cmNlOiBcInNlbGYuYWRkRXZlbnRMaXN0ZW5lcignZmV0Y2gnLCBmdW5jdGlvbigpIHsgcmV0dXJuOyB9KTtcIixcbiAgICAgICAgICBmaWxlTmFtZTogYCR7cGFnZUlkfS1zZXJ2aWNld29ya2VyLmpzYCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwiaW1wb3J0IGxlZ2FjeVBsdWdpbiBmcm9tICdAdml0ZWpzL3BsdWdpbi1sZWdhY3knO1xuaW1wb3J0IHsgdmlzdWFsaXplciB9IGZyb20gJ3JvbGx1cC1wbHVnaW4tdmlzdWFsaXplcic7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiwgUGx1Z2luT3B0aW9uIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgYmFubmVyUGx1Z2luIGZyb20gJ3ZpdGUtcGx1Z2luLWJhbm5lcic7XG5pbXBvcnQgeyBjcmVhdGVIdG1sUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4taHRtbCc7XG5pbXBvcnQgdHlwZSB7IFZpdGVPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpbWFnZW1pblBsdWdpbiB9IGZyb20gJy4vbGliL2ltYWdlLXBsdWdpbic7XG5pbXBvcnQgeyBtYW5pZmVzdFBsdWdpbiB9IGZyb20gJy4vbGliL21hbmlmZXN0LXBsdWdpbic7XG5cbi8vIEJ1aWxkIHBsdWdpbnNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBsdWdpbnMoXG4gIG9wdGlvbnM6IFZpdGVPcHRpb25zLFxuKTogQXJyYXk8UGx1Z2luIHwgUGx1Z2luT3B0aW9uPiB7XG4gIC8vIE5vIGJ1aWxkPyBubyBwbHVnaW5zLi5cbiAgaWYgKG9wdGlvbnMuZW52aXJvbm1lbnQuY29tbWFuZCAhPT0gJ2J1aWxkJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbnM6IEFycmF5PFBsdWdpbiB8IFBsdWdpbk9wdGlvbiB8IHVuZGVmaW5lZD4gPSBbXTtcblxuICBpZiAob3B0aW9ucy5jb25maWcuYnVpbGQubGVnYWN5KSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBwYWdlIHdvcmtzIGluIG9sZGVyIGJyb3dzZXJzXG4gICAgcGx1Z2lucy5wdXNoKFxuICAgICAgLi4ubGVnYWN5UGx1Z2luKHtcbiAgICAgICAgdGFyZ2V0czogKG9wdGlvbnMuY29uZmlnLmJ1aWxkLmJyb3dzZXJzbGlzdCBhcyBzdHJpbmdbXSkgPz8gJ2RlZmF1bHRzJyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYWdlcyA9IE9iamVjdC5rZXlzKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLm1hcCgoZ2FtZUlkKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVuYW1lOiBgJHtnYW1lSWR9Lmh0bWxgLFxuICAgICAgdGVtcGxhdGU6IGAke2dhbWVJZH0uaHRtbGAsXG4gICAgfTtcbiAgfSk7XG5cbiAgcGx1Z2lucy5wdXNoKFxuICAgIC8vIE1pbmlmeSBpbWFnZSBhc3NldHNcbiAgICBpbWFnZW1pblBsdWdpbihvcHRpb25zLmVudmlyb25tZW50LCBvcHRpb25zLmNvbmZpZy5idWlsZC5pbWFnZVF1YWxpdHkpLFxuXG4gICAgLy8gTWFrZSB0aGUgaHRtbCBvdXRwdXQgc21hbGxlclxuICAgIC4uLihjcmVhdGVIdG1sUGx1Z2luKHttaW5pZnk6IHRydWUsIHBhZ2VzfSkgYXMgUGx1Z2luW10pLFxuXG4gICAgLy8gQWRkIGEgYmFubmVyIHRvIGdlbmVyYXRlZCBqcy9jc3NcbiAgICBiYW5uZXJQbHVnaW4oe1xuICAgICAgb3V0RGlyOiAnLi4vcHVibGljJyxcbiAgICAgIGNvbnRlbnQ6YC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC5cblxuICAgICAgICAgX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgICAgICBfICAgICAgICAgICAgX1xuICAgICAgICAvICApICAgICAgICAgICAgICB8ICBvICAgICAgICAgL3wgICAvIHwgfCAgICAgICAgICB8IHxcbiAgICAgICAgXFxcXF9fIF98XyAgICAgICAgIF9ffCAgICAgIF9fICAgICB8X18vICB8IHwgIF9fICAgXyAgfCB8XG4gICAgICAgICAgIFxcXFwgfCAgfCAgIHwgIC8gIHwgIHwgIC8gIFxcXFxfICAgfCBcXFxcICAgfC8gIC8gIFxcXFxffC8gIHwvXylcbiAgICAgICAoX19fLyB8Xy8gXFxcXF8vfF8vXFxcXF8vfF8vfF8vXFxcXF9fLyAgICB8ICBcXFxcXy98X18vXFxcXF9fLyB8X18vfCBcXFxcXy9cblxuICAgICAgICBDb25jZXB0LCBvbnR3ZXJwICYgb250d2lra2VsaW5nXG4gICAgICAgIGh0dHBzOi8vc3R1ZGlva2xvZWsubmxcblxuICAgICAgICBTdHVkaW8gS2xvZWsg4p2kIFBpeGlKUywgR1NBUCAmIGhvd2xlci5qc1xuXG4gICAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLmB9XG4gICAgKSxcbiAgKTtcblxuICAvLyBDcmVhdGUgYSBtYW5pZmVzdCBhbmQgbWluaW1hbCB3ZWJ3b3JrZXIgZm9yIGV2ZXJ5IGdhbWVcbiAgaWYgKG9wdGlvbnMuY29uZmlnLmJ1aWxkLm1hbmlmZXN0KSB7XG4gICAgcGx1Z2lucy5wdXNoKG1hbmlmZXN0UGx1Z2luKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpKTtcbiAgfVxuXG4gIC8vIERvIHdlIG5lZWQgdG8gYW5hbHlzZSB0aGUgYnVpbGQ/XG4gIGlmIChvcHRpb25zLmNvbmZpZy5idWlsZC5hbmFseXplQnVuZGxlKSB7XG4gICAgcGx1Z2lucy5wdXNoKHZpc3VhbGl6ZXIoe1xuICAgICAgdGVtcGxhdGU6IFwidHJlZW1hcFwiLCAvLyBvciBzdW5idXJzdFxuICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgIGd6aXBTaXplOiB0cnVlLFxuICAgICAgZmlsZW5hbWU6IFwiYnVuZGxlLWFuYWx5c2UuaHRtbFwiLCAvLyB3aWxsIGJlIHNhdmVkIGluIHByb2plY3QncyByb290XG4gICAgfSkgYXMgUGx1Z2luT3B0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBwbHVnaW5zLmZpbHRlcihwbHVnaW4gPT4gcGx1Z2luICE9PSB1bmRlZmluZWQpO1xufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7dHlwZSBQbHVnaW4sIHR5cGUgUGx1Z2luT3B0aW9ufSBmcm9tICd2aXRlJztcbmltcG9ydCBmdWxsUmVsb2FkIGZyb20gJ3ZpdGUtcGx1Z2luLWZ1bGwtcmVsb2FkJztcbmltcG9ydCBta2NlcnQgZnJvbSAndml0ZS1wbHVnaW4tbWtjZXJ0JztcbmltcG9ydCBjaGVja2VyIGZyb20gJ3ZpdGUtcGx1Z2luLWNoZWNrZXInO1xuaW1wb3J0IHtjd2R9IGZyb20gJy4uL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZVBsdWdpbnMoKTogQXJyYXk8UGx1Z2luIHwgUGx1Z2luT3B0aW9uPiB7XG4gIHJldHVybiBbXG4gICAgZnVsbFJlbG9hZChbJ3NjcmlwdC8qKi8qLnRzJywgJ3N2ZWx0ZS8qKi8qLnN2ZWx0ZSddLCB7XG4gICAgICByb290OiBwYXRoLmpvaW4ocGF0aC5yZXNvbHZlKGN3ZCksICdzb3VyY2UnKSxcbiAgICAgIGxvZzogdHJ1ZSxcbiAgICAgIGFsd2F5czogdHJ1ZSxcbiAgICB9KSBhcyBQbHVnaW4sXG5cbiAgICBta2NlcnQoKSxcblxuICAgIGNoZWNrZXIoe1xuICAgICAgdHlwZXNjcmlwdDogdHJ1ZSxcbiAgICB9KSxcbiAgXTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHR5cGUgeyBDb25maWdFbnYsIFVzZXJDb25maWcgfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IGJhc2VQbHVnaW5zIH0gZnJvbSAnLi9wbHVnaW5zL2Jhc2UnO1xuaW1wb3J0IHsgYnVpbGRQbHVnaW5zIH0gZnJvbSAnLi9wbHVnaW5zL2J1aWxkJztcbmltcG9ydCB7IHNlcnZlUGx1Z2lucyB9IGZyb20gJy4vcGx1Z2lucy9zZXJ2ZSc7XG5pbXBvcnQge1xuICBjd2QsXG4gIGRlZmluZUJ1aWxkQ29uZmlnLFxuICBnZXRQYWNrYWdlQ29uZmlnLFxuICBnZXRQYWdlVG9TZXJ2ZSxcbiAgcGFyc2VQYWNrYWdlR2FtZXNTZXR0aW5nc1xufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB0eXBlIHtcbiAgUGFja2FnZUdhbWVzU2V0dGluZ3MsXG4gIFZpdGVPcHRpb25zXG59IGZyb20gJy4vdXRpbHMvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVmaW5lS2xvZWtWaXRlQ29uZmlnKFxuICBlbnZpcm9ubWVudDogQ29uZmlnRW52LFxuKTogUHJvbWlzZTxVc2VyQ29uZmlnPiB7XG4gIGNvbnN0IHBrZyA9IGdldFBhY2thZ2VDb25maWcoKTtcblxuICBjb25zdCBvcHRpb25zOiBWaXRlT3B0aW9ucyA9IHtcbiAgICByb290OiBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJyksXG4gICAgcGFja2FnZTogcGtnLFxuICAgIGVudmlyb25tZW50LFxuICAgIHNldHRpbmdzOiBwYXJzZVBhY2thZ2VHYW1lc1NldHRpbmdzKHBrZy5zZXR0aW5ncyBhcyBQYWNrYWdlR2FtZXNTZXR0aW5ncywgcGtnLnZlcnNpb24gYXMgc3RyaW5nKSxcbiAgICBjb25maWc6IHtcbiAgICAgIC4uLnBrZy52aXRlLFxuICAgICAgYnVpbGQ6IHsuLi5wa2cudml0ZS5idWlsZCwgYnJvd3NlcnNsaXN0OiBwa2cuYnJvd3NlcnNsaXN0fSxcbiAgICAgIHNlcnZlOiB7XG4gICAgICAgIHBhcnRpYWxzOiBbXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3BhcnRpYWxzJyksXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsICdwYXJ0aWFscycpLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpZzogVXNlckNvbmZpZyA9IHtcbiAgICBsb2dMZXZlbDogJ2luZm8nLFxuICAgIGJhc2U6IHBrZy52aXRlLmJ1aWxkLmJhc2VQYXRoLFxuICAgIHJvb3Q6IG9wdGlvbnMucm9vdCxcbiAgICBlbnZEaXI6IHBhdGgucmVzb2x2ZShjd2QsICdlbnYnKSxcbiAgICBlbnZQcmVmaXg6IFsnS0xPRUtfJywgJ1ZJVEVfJ10sXG4gICAgcHVibGljRGlyOiAnc3RhdGljJyxcbiAgICBkZWZpbmU6IHt9LFxuXG4gICAgZXNidWlsZDoge1xuICAgICAgbGVnYWxDb21tZW50czogJ25vbmUnLFxuICAgIH0sXG5cbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczoge1xuICAgICAgICBsb2Rhc2g6ICdsb2Rhc2gtZXMnLFxuICAgICAgICAnQG1ldGEnOiBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJywgJ3N0YXRpYycsICdtZXRhJyksXG4gICAgICAgICdAZm9udHMnOiBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJywgJ3N0YXRpYycsICdmb250cycpLFxuICAgICAgfSxcbiAgICAgIGRlZHVwZTogWyAgICAgICAgICAgIFxuICAgICAgICAnQHN0dWRpb2tsb2VrL3RzLWNvcmUtbGliJyxcbiAgICAgICAgJ0BjYXBhY2l0b3IvYXBwJyxcbiAgICAgICAgJ0BjYXBhY2l0b3IvY29yZScsXG4gICAgICAgICdAY2FwYWNpdG9yL2RldmljZScsXG4gICAgICAgICdAY2FwYWNpdG9yL25ldHdvcmsnLFxuICAgICAgICAnQGNhcGFjaXRvci9wcmVmZXJlbmNlcycsXG4gICAgICAgICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nLFxuICAgICAgICAnQGNhcGFjaXRvci9zdGF0dXMtYmFyJyxcbiAgICAgICAgJ2Jvd3NlcicsXG4gICAgICAgICdkYXRlLWZucy10eicsXG4gICAgICAgICdkYXRlLWZucycsXG4gICAgICAgICdlcnJvci1zdGFjay1wYXJzZXItZXMnLFxuICAgICAgICAnZmlyZWJhc2UnLFxuICAgICAgICAnZm9udGZhY2VvYnNlcnZlcicsXG4gICAgICAgICdnc2FwJyxcbiAgICAgICAgJ2hvd2xlcicsXG4gICAgICAgICdsb2Rhc2gtZGVjb3JhdG9ycy1lc20nLFxuICAgICAgICAnbG9kYXNoLWVzJyxcbiAgICAgICAgJ292ZXJtaW5kJyxcbiAgICAgICAgJ3BpeGktc3BpbmUnLFxuICAgICAgICAncGl4aS5qcycsXG4gICAgICAgICdwdWJzdWItanMnLFxuICAgICAgICAncmFuZG9tLWpzJyxcbiAgICAgICAgJ3Jlc3MnLFxuICAgICAgICAnc2x1Z2lmeScsXG4gICAgICAgICdzdXBlcmFnZW50JyxcbiAgICAgICAgJ3RzLWV2ZW50cycsXG4gICAgICAgICd0cy1taXhlcicsXG4gICAgICAgICd0c2xpYicsXG4gICAgICBdLFxuICAgIH0sXG5cbiAgICBjc3M6IHtcbiAgICAgIHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcbiAgICAgICAgc2Nzczoge1xuICAgICAgICAgIGNoYXJzZXQ6IGZhbHNlLFxuICAgICAgICAgIC8vIEFkZGl0aW9uYWxEYXRhOiBgQGNoYXJzZXQgXCJVVEYtOFwiYCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHBsdWdpbnM6IFsuLi5iYXNlUGx1Z2lucyhvcHRpb25zKV0sXG4gIH07XG5cbiAgc3dpdGNoIChlbnZpcm9ubWVudC5jb21tYW5kKSB7XG4gICAgY2FzZSAnc2VydmUnOlxuICAgICAgY29uZmlnLnNlcnZlciA9IHtcbiAgICAgICAgaG9zdDogdHJ1ZSxcbiAgICAgICAgY29yczogb3B0aW9ucy5jb25maWcuZGV2LmNvcnMgPz8gdHJ1ZSxcbiAgICAgICAgaHR0cHM6IG9wdGlvbnMuY29uZmlnLmRldi5odHRwcyA/PyB0cnVlLFxuICAgICAgICBvcGVuOiBnZXRQYWdlVG9TZXJ2ZShvcHRpb25zLmNvbmZpZywgb3B0aW9ucy5zZXR0aW5ncy5nYW1lcyksXG4gICAgICB9O1xuICAgICAgY29uZmlnLnBsdWdpbnMgPSBbXG4gICAgICAgIC4uLihjb25maWcucGx1Z2lucyA/IGNvbmZpZy5wbHVnaW5zIDogW10pLFxuICAgICAgICAuLi5zZXJ2ZVBsdWdpbnMoKSxcbiAgICAgIF07XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYnVpbGQnOlxuICAgICAgY29uZmlnLmJ1aWxkID0gZGVmaW5lQnVpbGRDb25maWcob3B0aW9ucyk7XG4gICAgICBjb25maWcucGx1Z2lucyA9IFtcbiAgICAgICAgLi4uKGNvbmZpZy5wbHVnaW5zID8gY29uZmlnLnBsdWdpbnMgOiBbXSksXG4gICAgICAgIC4uLmJ1aWxkUGx1Z2lucyhvcHRpb25zKSxcbiAgICAgIF07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwiaW1wb3J0IHt0eXBlIFR5cGVkRmxhZ3N9IGZyb20gJ21lb3cnO1xuaW1wb3J0IHtidWlsZCwgY3JlYXRlU2VydmVyLCB0eXBlIExvZ0xldmVsfSBmcm9tICd2aXRlJztcbmltcG9ydCB7ZGVmaW5lS2xvZWtWaXRlQ29uZmlnfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge2FkZEJ1aWxkRm9sZGVyVG9aaXAsIGdldFBhY2thZ2VDb25maWd9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2xvZWtEZXZlbG9wbWVudChcbiAgZmxhZ3M6IFR5cGVkRmxhZ3M8e1xuICAgIG1vZGU6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0Pzogc3RyaW5nO1xuICAgIH07XG4gIH0+LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGRlZmluZUtsb2VrVml0ZUNvbmZpZyh7XG4gICAgY29tbWFuZDogJ3NlcnZlJyxcbiAgICBtb2RlOiAnZGV2ZWxvcG1lbnQnLFxuICB9KTtcblxuICAvLyBEaWZmZXJlbnQgbW9kZVxuICBpZiAodHlwZW9mIGZsYWdzLm1vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnLm1vZGUgPSBmbGFncy5tb2RlO1xuICB9XG5cbiAgY29uc3Qgc2VydmVyID0gYXdhaXQgY3JlYXRlU2VydmVyKHtcbiAgICBjb25maWdGaWxlOiBmYWxzZSxcbiAgICAuLi5jb25maWcsXG4gIH0pO1xuXG4gIGF3YWl0IHNlcnZlci5saXN0ZW4oKTtcbiAgc2VydmVyLnByaW50VXJscygpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2xvZWtCdWlsZChcbiAgZmxhZ3M6IFR5cGVkRmxhZ3M8e1xuICAgIGJhc2U6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0OiBzdHJpbmc7XG4gICAgfTtcbiAgICBtb2RlOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJztcbiAgICAgIHNob3J0RmxhZzogc3RyaW5nO1xuICAgICAgZGVmYXVsdD86IHN0cmluZztcbiAgICB9O1xuICAgIGxvZ0xldmVsOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJztcbiAgICAgIHNob3J0RmxhZzogc3RyaW5nO1xuICAgICAgZGVmYXVsdD86IHN0cmluZztcbiAgICB9O1xuICAgIGVtcHR5T3V0RGlyOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbic7XG4gICAgICBzaG9ydEZsYWc6IHN0cmluZztcbiAgICAgIGRlZmF1bHQ6IHRydWU7XG4gICAgfTtcbiAgICBzb3VyY2VtYXBzOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbic7XG4gICAgICBzaG9ydEZsYWc6IHN0cmluZztcbiAgICAgIGRlZmF1bHQ6IGZhbHNlO1xuICAgIH07XG4gICAgaW5saW5lU291cmNlbWFwczoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0OiBmYWxzZTtcbiAgICB9O1xuICAgIGNyZWF0ZVppcDoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0OiBmYWxzZTtcbiAgICB9O1xuICB9Pixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBkZWZpbmVLbG9la1ZpdGVDb25maWcoe1xuICAgIGNvbW1hbmQ6ICdidWlsZCcsXG4gICAgbW9kZTogJ3Byb2R1Y3Rpb24nLFxuICB9KTtcblxuICAvLyBFbXB0eSBvdXQgdGhlIE91dHB1dCBkaXIgYmVmb3JlIGJ1aWxkaW5nP1xuICBpZiAoZmxhZ3MuZW1wdHlPdXREaXIgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZy5idWlsZCA9IHtcbiAgICAgIC4uLmNvbmZpZy5idWlsZCxcbiAgICAgIGVtcHR5T3V0RGlyOiBmbGFncy5lbXB0eU91dERpcixcbiAgICB9O1xuICB9XG5cbiAgLy8gQ3JlYXRlIHNvdXJjZW1hcHM/XG4gIGlmIChmbGFncy5zb3VyY2VtYXBzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25maWcuYnVpbGQgPSB7XG4gICAgICAuLi5jb25maWcuYnVpbGQsXG4gICAgICBzb3VyY2VtYXA6IGZsYWdzLnNvdXJjZW1hcHMgPyAoZmxhZ3MuaW5saW5lU291cmNlbWFwcyA/ICdpbmxpbmUnIDogdHJ1ZSkgOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gRGlmZmVyZW50IGJhc2UgcGF0aFxuICBpZiAodHlwZW9mIGZsYWdzLmJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnLmJhc2UgPSBmbGFncy5iYXNlO1xuICB9XG5cbiAgLy8gRGlmZmVyZW50IG1vZGVcbiAgaWYgKHR5cGVvZiBmbGFncy5tb2RlID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZy5tb2RlID0gZmxhZ3MubW9kZTtcbiAgfVxuXG4gIC8vIERpZmZlcmVudCBtb2RlXG4gIGNvbmZpZy5sb2dMZXZlbCA9IGZsYWdzLmxvZ0xldmVsIGFzIExvZ0xldmVsIHwgdW5kZWZpbmVkO1xuXG4gIGF3YWl0IGJ1aWxkKHtcbiAgICBjb25maWdGaWxlOiBmYWxzZSxcbiAgICAuLi5jb25maWcsXG4gIH0pO1xuXG4gIC8vIE1ha2VuIHdlIGVlbiB6aXAgYWFuP1xuICBpZiAoZmxhZ3MuY3JlYXRlWmlwIHx8IGdldFBhY2thZ2VDb25maWcoKS52aXRlLmJ1aWxkLmNyZWF0ZVppcCkge1xuICAgIGF3YWl0IGFkZEJ1aWxkRm9sZGVyVG9aaXAoKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInBrZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHTyxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDOztBQ0R6QyxTQUFVLFFBQVEsQ0FBQyxJQUFZLEVBQUE7SUFDbkMsSUFBSTtBQUNGLFFBQUEsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNwQyxLQUFBO0lBQUMsTUFBTTs7QUFFUCxLQUFBO0FBRUQsSUFBQSxPQUFPLEtBQUssQ0FBQztBQUNmOztBQ1BNLFNBQVUsaUJBQWlCLENBQUMsT0FBb0IsRUFBQTtJQUNwRCxNQUFNLEtBQUssR0FBMkIsRUFBRSxDQUFDO0FBRXpDLElBQUEsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDeEQsUUFBQSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUEsRUFBRyxNQUFNLENBQUEsS0FBQSxDQUFPLENBQUMsQ0FBQztBQUM5RCxLQUFBOzs7SUFLRCxPQUFPO0FBQ0wsUUFBQSxvQkFBb0IsRUFBRSxJQUFJO0FBQzFCLFFBQUEscUJBQXFCLEVBQUUsSUFBSTtBQUMzQixRQUFBLE1BQU0sRUFBRSxXQUFXO0FBQ25CLFFBQUEsU0FBUyxFQUFFLFdB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
608
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9jd2QudHMiLCIuLi9zcmMvdXRpbHMvanNvbi50cyIsIi4uL3NyYy91dGlscy9idWlsZC50cyIsIi4uL3NyYy91dGlscy9nYW1lLnRzIiwiLi4vc3JjL3V0aWxzL3BrZy50cyIsIi4uL3NyYy91dGlscy96aXAudHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaGFuZGxlYmFycy1wbHVnaW4udHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaHRtbC1wbHVnaW4udHMiLCIuLi9zcmMvcGx1Z2lucy9iYXNlLnRzIiwiLi4vc3JjL3V0aWxzL2hhc2gudHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvaW1hZ2UtcGx1Z2luLnRzIiwiLi4vc3JjL3BsdWdpbnMvbGliL21hbmlmZXN0LXBsdWdpbi50cyIsIi4uL3NyYy9wbHVnaW5zL2J1aWxkLnRzIiwiLi4vc3JjL3BsdWdpbnMvc2VydmUudHMiLCIuLi9zcmMvY29uZmlnLnRzIiwiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQge25vcm1hbGl6ZVBhdGh9IGZyb20gJ3ZpdGUnO1xuXG5leHBvcnQgY29uc3QgY3dkID0gbm9ybWFsaXplUGF0aChwcm9jZXNzLmN3ZCgpKTtcbiIsImltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdub2RlOmZzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRKU09OKHBhdGg6IHN0cmluZyk6IHVua25vd24ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSByZWFkRmlsZVN5bmMocGF0aCk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKTtcbiAgfSBjYXRjaCB7XG4gICAgLy9cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7QnVpbGRPcHRpb25zfSBmcm9tICd2aXRlJztcbmltcG9ydCB0eXBlIHtWaXRlT3B0aW9uc30gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUJ1aWxkQ29uZmlnKG9wdGlvbnM6IFZpdGVPcHRpb25zKTogQnVpbGRPcHRpb25zIHtcbiAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBmb3IgKGNvbnN0IGdhbWVJZCBvZiBPYmplY3Qua2V5cyhvcHRpb25zLnNldHRpbmdzLmdhbWVzKSkge1xuICAgIGlucHV0W2dhbWVJZF0gPSBwYXRoLnJlc29sdmUob3B0aW9ucy5yb290LCBgJHtnYW1lSWR9Lmh0bWxgKTtcbiAgfVxuXG4gIC8vIExpYnMgZGllIGFwYXJ0ZSBqcyBrcmlqZ2VuOlxuICAvLyBjb25zdCB2ZW5kb3JDaHVua3MgPSBbJ3BpeGknLCAnZmlyZWJhc2UnLCAnbG9kYXNoJywgJ2dzYXAnLCAnc3R1ZGlva2xvZWsnXTtcblxuICByZXR1cm4ge1xuICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiB0cnVlLFxuICAgIGNodW5rU2l6ZVdhcm5pbmdMaW1pdDogMjAwMCxcbiAgICBvdXREaXI6ICcuLi9wdWJsaWMnLFxuICAgIGFzc2V0c0RpcjogJ2dlbmVyYXRlZCcsXG4gICAgbWluaWZ5OiAndGVyc2VyJyxcbiAgICBzb3VyY2VtYXA6IG9wdGlvbnMuY29uZmlnLmJ1aWxkLnNvdXJjZU1hcHMgPz8gZmFsc2UsXG4gICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgaW5wdXQsXG4gICAgfSxcbiAgfTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7XG4gIEdhbWVTZXR0aW5ncyxcbiAgR2FtZVNldHRpbmdzUHJvcGVydHksXG4gIEdhbWVzU2V0dGluZ3MsXG4gIEdhbWVzU2V0dGluZ3NEYXRhLFxuICBLbG9la1ZpdGVDb25maWcsXG4gIFBhY2thZ2VHYW1lc1NldHRpbmdzLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5mdW5jdGlvbiBtZXJnZUdhbWVTZXR0aW5ncyhcbiAgZ2VuZXJpYzogR2FtZVNldHRpbmdzLFxuICBnYW1lOiBHYW1lU2V0dGluZ3MsXG4gIGluZm9UeXBlczogR2FtZVNldHRpbmdzUHJvcGVydHlbXSxcbik6IEdhbWVTZXR0aW5ncyB7XG4gIGNvbnN0IHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIC8vIEFsbGUgcHJvcHMgb3Agw6nDqW4gbGV2ZWwgZGllcCBtZXJnZW5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBpbmZvVHlwZXMpIHtcbiAgICBzZXR0aW5nc1twcm9wZXJ0eV0gPSB7XG4gICAgICAuLi5nZW5lcmljW3Byb3BlcnR5XSxcbiAgICAgIC4uLmdhbWVbcHJvcGVydHldLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0dGluZ3MgYXMgdW5rbm93biBhcyBHYW1lU2V0dGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhY2thZ2VHYW1lc1NldHRpbmdzKFxuICBwYWNrYWdlU2V0dGluZ3M6IFBhY2thZ2VHYW1lc1NldHRpbmdzLFxuICB2ZXJzaW9uOiBzdHJpbmdcbik6IEdhbWVzU2V0dGluZ3NEYXRhIHtcbiAgLy8gTWVyZ2Ugc2V0dGluZ3NcbiAgY29uc3QgaW5mb1R5cGVzID0gT2JqZWN0LmtleXMoXG4gICAgcGFja2FnZVNldHRpbmdzLmdlbmVyaWMsXG4gICkgYXMgR2FtZVNldHRpbmdzUHJvcGVydHlbXTtcbiAgY29uc3Qge2dlbmVyaWN9ID0gcGFja2FnZVNldHRpbmdzO1xuICBjb25zdCBhbGxTZXR0aW5nczogR2FtZXNTZXR0aW5nc0RhdGEgPSB7XG4gICAgZGV2ZWxvcG1lbnQ6IGdlbmVyaWMsXG4gICAgZ2FtZXM6IHt9LFxuICB9O1xuXG4gIGZvciAoY29uc3QgZ2FtZSBvZiBwYWNrYWdlU2V0dGluZ3MuZ2FtZXMgPz8gW10pIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IG1lcmdlR2FtZVNldHRpbmdzKGdlbmVyaWMsIGdhbWUsIGluZm9UeXBlcyk7XG5cbiAgICAvLyBab3JnIGVyIHZvb3IgZGF0IHBhZ2UgYWx0aWpkIGdlemV0IGlzXG4gICAgY29uc3QgcGFnZUlkID0gc2V0dGluZ3MuaW5mby5wYWdlID8/IHNldHRpbmdzLmluZm8uaWQgPz8gJ3Vua25vd24nO1xuICAgIHNldHRpbmdzLmluZm8ucGFnZSA9IHBhZ2VJZDtcblxuICAgIC8vIGVpZ2VuIHZlcnNpZSBudW1tZXIgb2YgZGUgZ2VuZXJpZWtlIHVpdCBkZSBwYWNrYWdlXG4gICAgc2V0dGluZ3MuaW5mby52ZXJzaW9uID0gc2V0dGluZ3MuaW5mby52ZXJzaW9uID8/IHZlcnNpb247XG5cbiAgICAvLyBTbGEgc2V0dGluZ3Mgb3Agb25kZXIgcGFnZSBpZFxuICAgIGFsbFNldHRpbmdzLmdhbWVzW3BhZ2VJZF0gPSBzZXR0aW5ncztcbiAgfVxuXG4gIHJldHVybiBhbGxTZXR0aW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb0dhbWVEYXRhKFxuICBmdWxsRmlsZVBhdGg6IHN0cmluZyxcbiAgc2V0dGluZ3M6IEdhbWVzU2V0dGluZ3MsXG4pOiBHYW1lU2V0dGluZ3MgfCB1bmRlZmluZWQge1xuICAvLyBEZXRlcm1pbmUgZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb25cbiAgbGV0IGZpbGVQYXRoID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZVBhdGgsIHBhdGguZXh0bmFtZShmdWxsRmlsZVBhdGgpKTtcblxuICAvLyBEZXRlcm1pbmUgZGlyICYgcmVtb3ZlIGxlYWRpbmcgc2xhc2hcbiAgbGV0IGZpbGVEaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZnVsbEZpbGVQYXRoKTtcbiAgZmlsZURpcmVjdG9yeSA9IGZpbGVEaXJlY3RvcnkucmVwbGFjZSgvXlxcLysvZywgJycpO1xuXG4gIGlmIChmaWxlRGlyZWN0b3J5KSB7XG4gICAgZmlsZVBhdGggPSBgJHtmaWxlRGlyZWN0b3J5fS8ke2ZpbGVQYXRofWA7XG4gIH1cblxuICByZXR1cm4gc2V0dGluZ3NbZmlsZVBhdGhdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZVRvU2VydmUoXG4gIGNvbmZpZzogS2xvZWtWaXRlQ29uZmlnLFxuICBzZXR0aW5nczogR2FtZXNTZXR0aW5ncyxcbik6IHN0cmluZyB7XG4gIC8vIEhvZXZlZWwgcGFnZXMgemlqbiBlcj9cbiAgY29uc3QgcGFnZUlkcyA9IE9iamVjdC5rZXlzKHNldHRpbmdzKTtcbiAgY29uc3QgcGFnZSA9IHBhZ2VJZHMubGVuZ3RoID09PSAxID8gcGFnZUlkc1swXSA6ICdkZXZlbG9wbWVudCc7XG5cbiAgcmV0dXJuIHBhdGgucG9zaXguam9pbihcbiAgICBjb25maWcuYnVpbGQuYmFzZVBhdGgsXG4gICAgYCR7cGFnZX0uaHRtbCR7Y29uZmlnLmRldi5zZXJ2ZVBhcmFtcyA/PyAnJ31gLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZUlkRnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IHBhdGhuYW1lOiBzdHJpbmc7XG5cbiAgdHJ5IHtcbiAgICBwYXRobmFtZSA9IG5ldyBVUkwodXJsLCAnaHR0cHM6Ly9zdHVkaW9rbG9lay5ubCcpLnBhdGhuYW1lO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBJZiByZXF1ZXN0IGlzIG5vdCBodG1sICwgZGlyZWN0bHkgcmV0dXJuIG5leHQoKVxuICBpZiAoIXBhdGhuYW1lLmVuZHNXaXRoKCcuaHRtbCcpICYmIHBhdGhuYW1lICE9PSAnLycpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBQYWdpbmEgaWQgb3B2cmFnZW5cbiAgY29uc3QgaW5kZXggPSBwYXRobmFtZS5sYXN0SW5kZXhPZignLycpO1xuICBjb25zdCBmaWxlTmFtZSA9IGluZGV4ID09PSAtMSA/IHBhdGhuYW1lIDogcGF0aG5hbWUuc2xpY2UoaW5kZXggKyAxKTtcblxuICByZXR1cm4gZmlsZU5hbWUucmVwbGFjZSgnLmh0bWwnLCAnJyk7XG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHt0eXBlIEtsb2VrVml0ZUNvbmZpZywgdHlwZSBQYWNrYWdlQ29uZmlnLCB0eXBlIFBhY2thZ2VHYW1lc1NldHRpbmdzfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtjd2QsIHJlYWRKU09OfSBmcm9tICcuJztcblxuY29uc3QgcGFja2FnZV8gPSByZWFkSlNPTihwYXRoLnJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJykpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5jb25zdCBjb25maWc6IFBhY2thZ2VDb25maWcgPSB7XG4gIHZpdGU6IHBhY2thZ2VfLnZpdGUgYXMgS2xvZWtWaXRlQ29uZmlnLFxuICBicm93c2Vyc2xpc3Q6IHBhY2thZ2VfLmJyb3dzZXJzbGlzdCBhcyBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgc2V0dGluZ3M6IHBhY2thZ2VfLnNldHRpbmdzIGFzIFBhY2thZ2VHYW1lc1NldHRpbmdzLFxuICB2ZXJzaW9uOiBwYWNrYWdlXy52ZXJzaW9uIGFzIHN0cmluZyxcbiAgbmFtZTogcGFja2FnZV8ubmFtZSBhcyBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBwYWNrYWdlXy5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZUNvbmZpZygpOiBQYWNrYWdlQ29uZmlnIHtcbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge21rZGlyLCB1bmxpbmt9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHt6aXB9IGZyb20gJ3ppcC1hLWZvbGRlcic7XG5pbXBvcnQgZmlsZW5hbWlmeSBmcm9tICdmaWxlbmFtaWZ5JztcbmltcG9ydCB7Y3dkLCBnZXRQYWNrYWdlQ29uZmlnfSBmcm9tICcuJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEJ1aWxkRm9sZGVyVG9aaXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBrZyA9IGdldFBhY2thZ2VDb25maWcoKTtcbiAgY29uc3Qgc291cmNlRGlyZWN0b3J5ID0gcGF0aC5qb2luKHBhdGgucmVzb2x2ZShjd2QpLCAncHVibGljJyk7XG4gIGNvbnN0IGRlc3RpbmF0aW9uRGlyZWN0b3J5ID0gcGF0aC5qb2luKHBhdGgucmVzb2x2ZShjd2QpLCAnemlwcycpO1xuICBjb25zdCBkZXN0aW5hdGlvbkZpbGUgPSBwYXRoLmpvaW4oXG4gICAgZGVzdGluYXRpb25EaXJlY3RvcnksXG4gICAgZmlsZW5hbWlmeShgJHtwa2cubmFtZX0tdiR7cGtnLnZlcnNpb259LnppcGAsIHtyZXBsYWNlbWVudDogJy0nfSksXG4gICk7XG5cbiAgLy8gRG9lcyB0aGUgZm9sZGVyIGV4aXN0P1xuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRlc3RpbmF0aW9uRGlyZWN0b3J5KTtcbiAgfSBjYXRjaCB7fVxuXG4gIC8vIFJlbW92ZSBwcmV2aW91cyB6aXAgZmlsZVxuICB0cnkge1xuICAgIGF3YWl0IHVubGluayhkZXN0aW5hdGlvbkZpbGUpO1xuICB9IGNhdGNoIHt9XG5cbiAgYXdhaXQgemlwKHNvdXJjZURpcmVjdG9yeSwgZGVzdGluYXRpb25GaWxlKTtcbn1cbiIsImltcG9ydCBvcyBmcm9tICdub2RlOm9zJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7UGx1Z2lufSBmcm9tICd2aXRlJztcbmltcG9ydCB2aXRlSGFuZGxlYmFyc1BsdWdpbiBmcm9tICd2aXRlLXBsdWdpbi1oYW5kbGViYXJzJztcbmltcG9ydCB0eXBlIHtWaXRlT3B0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQge2dldFBhZ2VJZEZyb21Vcmx9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLy8gSGVscGVycyB2b29yIGhhbmRsZWJhcnNcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGViYXJzUGx1Z2luKFxuICBwYXJ0aWFsRGlyZWN0b3J5OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgb3B0aW9uczogVml0ZU9wdGlvbnMsXG4pOiBQbHVnaW4ge1xuICByZXR1cm4gdml0ZUhhbmRsZWJhcnNQbHVnaW4oe1xuICAgIHBhcnRpYWxEaXJlY3RvcnksXG5cbiAgICBoZWxwZXJzOiB7XG4gICAgICBqc29uOiAob2JqZWN0OiBhbnksIGluZGVudCA9IDApID0+XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9iamVjdCwgdW5kZWZpbmVkLCBpbmRlbnQpLFxuICAgICAgY29uY2F0OiAoLi4uYXJndW1lbnRzXzogYW55W10pID0+IGFyZ3VtZW50c18uc2xpY2UoMCwgLTEpLmpvaW4oJycpLFxuICAgICAgZXE6IChhOiBhbnksIGI6IGFueSkgPT4gYSA9PT0gYixcbiAgICAgIG5lcTogKGE6IGFueSwgYjogYW55KSA9PiBhICE9PSBiLFxuICAgICAgaXNkZWZpbmVkOiAodmFsdWU6IHVuZGVmaW5lZCkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgICAgICdyZXNvbHZlLXJvb3QnKHA6IHN0cmluZykge1xuICAgICAgICAvLyBUaWpkZWxpamtlIGhhY2sgdm9vciBidWcgaW4gaGFuZGxlYmFycyBwbHVnaW5cbiAgICAgICAgLy8gemllIG9vayBodHRwczovL2dpdGh1Yi5jb20vYWxleGxhZnJvc2NpYS92aXRlLXBsdWdpbi1oYW5kbGViYXJzL3B1bGwvMTI5XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLnJvb3QsIHApO1xuICAgICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJyA/IGAvJHtyZXNvbHZlZFBhdGh9YCA6IHJlc29sdmVkUGF0aDtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGNvbnRleHQocGFnZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICAgIGNvbnN0IGdhbWVJZCA9IGdldFBhZ2VJZEZyb21VcmwocGFnZVBhdGgpO1xuXG4gICAgICBpZiAoIWdhbWVJZCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChnYW1lSWQgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgLy8gUGFnaW5hIHNldHRpbmdzIHRlcnVnZ2V2ZW5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbnY6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgZGF0YTogb3B0aW9ucy5zZXR0aW5ncy5kZXZlbG9wbWVudCxcbiAgICAgICAgICBnYW1lczogb3B0aW9ucy5zZXR0aW5ncy5nYW1lcyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gT3AgYmFzaXMgdmFuIHBhZCBkYXRhIGJlcGFsZW5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucy5zZXR0aW5ncy5nYW1lc1tnYW1lSWRdO1xuXG4gICAgICAvLyBQYWdpbmEgc2V0dGluZ3MgdGVydWdnZXZlblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW52OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBkYXRhOiBzZXR0aW5ncyA/PyB7fSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSk7XG59XG4iLCJpbXBvcnQge2V4aXN0c1N5bmMsIHByb21pc2VzfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7Q29uZmlnRW52LCBQbHVnaW4sIFVzZXJDb25maWcsIFZpdGVEZXZTZXJ2ZXJ9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHR5cGUge0dhbWVzU2V0dGluZ3N9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtjd2QsIGdldFBhZ2VJZEZyb21Vcmx9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuY29uc3QgUEFHRV9URU1QTEFURSA9ICd7ez4gZ2FtZSBkYXRhPWRhdGF9fSc7XG5jb25zdCBERVZFTE9QTUVOVF9URU1QTEFURSA9ICd7ez4gZGV2ZWxvcG1lbnQgZGF0YT1kYXRhfX0nO1xuXG5hc3luYyBmdW5jdGlvbiByZW5kZXJUZW1wb3JhcnlGaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gQmVzdGFhdCBkaWUgZmlsZSBub2cgbmlldD9cbiAgaWYgKCFleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgIC8vIEFhbm1ha2VuXG4gICAgYXdhaXQgcHJvbWlzZXMud3JpdGVGaWxlKGZpbGVQYXRoLCBQQUdFX1RFTVBMQVRFKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaHRtbFBsdWdpbihnYW1lczogR2FtZXNTZXR0aW5ncyk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3ZpdGUtcGx1Z2luLWtsb2VrLWh0bWwnLFxuICAgIGVuZm9yY2U6ICdwcmUnLFxuXG4gICAgYXN5bmMgY29uZmlnKF9jb25maWc6IFVzZXJDb25maWcsIGVudmlyb25tZW50OiBDb25maWdFbnYpIHtcbiAgICAgIC8vIEJpaiBlZW4gYnVpbGQgbWFrZW4gd2UgdGlqZGVsaWprIGZpbGVzIGFhblxuICAgICAgaWYgKGVudmlyb25tZW50LmNvbW1hbmQgPT09ICdidWlsZCcpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBhZ2VJZCBvZiBPYmplY3Qua2V5cyhnYW1lcykpIHtcbiAgICAgICAgICAvLyBQYWQgbmFhciBmaWxlXG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJywgYCR7cGFnZUlkfS5odG1sYCk7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKHJlbmRlclRlbXBvcmFyeUZpbGUoZmlsZVBhdGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGFjdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyOiBWaXRlRGV2U2VydmVyKSB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAvLyBab3JnIGVyIHZvb3IgZGF0IHRpamRlbnMgZGV2ZWxvcG1lbnQgZGUgcGFnaW5hIGdlLXJlbmRlcmVkIHRlcnVnIGdlZ2V2ZW4gd29yZHQgd29yZHRcbiAgICAgICAgc2VydmVyLm1pZGRsZXdhcmVzLnVzZSgnLycsIGFzeW5jIChyZXF1ZXN0LCByZXNwb25zZSwgbmV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVybCA9IHJlcXVlc3Q/LnVybCA/PyAnJztcbiAgICAgICAgICBjb25zdCBwYWdlSWQgPSBnZXRQYWdlSWRGcm9tVXJsKHVybCk7XG5cbiAgICAgICAgICBpZiAoIXBhZ2VJZCkge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYWdlSWQgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgICAgIC8vIERldmVsb3BtZW50PyBnZWVmIHRlcnVnLi4uXG4gICAgICAgICAgICByZXNwb25zZS5lbmQoXG4gICAgICAgICAgICAgIGF3YWl0IHNlcnZlci50cmFuc2Zvcm1JbmRleEh0bWwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIERFVkVMT1BNRU5UX1RFTVBMQVRFLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Qub3JpZ2luYWxVcmwsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoZ2FtZXMpLmluY2x1ZGVzKHBhZ2VJZCkpIHtcbiAgICAgICAgICAgIC8vIEJlc3RhYW5kZSBnYW1lPyB6b3JnIGVyIHZvb3IgZGF0IGRlIHRlbXBsYXRlIGdlLXJlbmRlcmVkIHdvcmR0XG4gICAgICAgICAgICByZXNwb25zZS5lbmQoXG4gICAgICAgICAgICAgIGF3YWl0IHNlcnZlci50cmFuc2Zvcm1JbmRleEh0bWwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIFBBR0VfVEVNUExBVEUsXG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vcmlnaW5hbFVybCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5pa3MgZ2V2b25kZW5cbiAgICAgICAgICAgIHJlc3BvbnNlLmVuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZUJ1bmRsZSgpIHtcbiAgICAgIC8vIFZlcndpamRlciBkZSBhYW5nZW1hYWt0ZSBmaWxlc1xuICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGFnZUlkIG9mIE9iamVjdC5rZXlzKGdhbWVzKSkge1xuICAgICAgICAvLyBQYWQgbmFhciBmaWxlXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsIGAke3BhZ2VJZH0uaHRtbGApO1xuICAgICAgICBpZiAoZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHByb21pc2VzLnJtKGZpbGVQYXRoKSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChhY3Rpb25zKTtcbiAgICB9LFxuICB9O1xufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7c3ZlbHRlfSBmcm9tICdAc3ZlbHRlanMvdml0ZS1wbHVnaW4tc3ZlbHRlJztcbmltcG9ydCB7dHlwZSBQbHVnaW4sIHR5cGUgUGx1Z2luT3B0aW9ufSBmcm9tICd2aXRlJztcbmltcG9ydCB0c2NvbmZpZ1BhdGhzUGx1Z2luIGZyb20gJ3ZpdGUtdHNjb25maWctcGF0aHMnO1xuaW1wb3J0IHN2ZWx0ZVByZXByb2Nlc3MgZnJvbSAnc3ZlbHRlLXByZXByb2Nlc3MnO1xuaW1wb3J0IHt0eXBlIFZpdGVPcHRpb25zfSBmcm9tICcuLi91dGlscy9pbnRlcmZhY2VzJztcbmltcG9ydCB7Y3dkfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2hhbmRsZWJhcnNQbHVnaW59IGZyb20gJy4vbGliL2hhbmRsZWJhcnMtcGx1Z2luJztcbmltcG9ydCB7aHRtbFBsdWdpbn0gZnJvbSAnLi9saWIvaHRtbC1wbHVnaW4nO1xuXG5leHBvcnQgZnVuY3Rpb24gYmFzZVBsdWdpbnMob3B0aW9uczogVml0ZU9wdGlvbnMpOiBBcnJheTxQbHVnaW4gfCBQbHVnaW5PcHRpb24+IHtcbiAgcmV0dXJuIFtcbiAgICBodG1sUGx1Z2luKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLFxuXG4gICAgLi4uc3ZlbHRlKHtcbiAgICAgIHByZXByb2Nlc3M6IHN2ZWx0ZVByZXByb2Nlc3MoKSxcblxuICAgICAgb253YXJuKHdhcm5pbmcsIHdhcm4pIHtcbiAgICAgICAgaWYgKCF3YXJuKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm8gYTExeSB3YXJuaW5ncy4uLlxuICAgICAgICBpZiAod2FybmluZy5jb2RlLnN0YXJ0c1dpdGgoJ2ExMXktJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuKHdhcm5pbmcpO1xuICAgICAgfSxcbiAgICB9KSxcblxuICAgIHRzY29uZmlnUGF0aHNQbHVnaW4oe1xuICAgICAgcm9vdDogcGF0aC5yZXNvbHZlKGN3ZCksXG4gICAgICAvLyBFeHRlbnNpb25zOiBbJy50cycsICcuanNvbiddLFxuICAgICAgbG9vc2U6IHRydWUsXG4gICAgfSksXG5cbiAgICBoYW5kbGViYXJzUGx1Z2luKG9wdGlvbnMuY29uZmlnLnNlcnZlLnBhcnRpYWxzLCBvcHRpb25zKSxcbiAgXTtcbn1cbiIsImltcG9ydCBjcnlwdG8sIHt0eXBlIEJpbmFyeUxpa2V9IGZyb20gJ25vZGU6Y3J5cHRvJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1kNShidWZmZXI6IEJpbmFyeUxpa2UpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShidWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUge0NvbmZpZ0VudiwgUGx1Z2lufSBmcm9tICd2aXRlJztcbmltcG9ydCB2aXRlSW1hZ2VtaW4gZnJvbSAnQHZoZWVtc3RyYS92aXRlLXBsdWdpbi1pbWFnZW1pbic7XG5pbXBvcnQgaW1hZ2VtaW5Nb3pqcGVnIGZyb20gJ2ltYWdlbWluLW1vempwZWcnO1xuaW1wb3J0IHR5cGUge0ltYWdlUXVhbGl0eUNvbmZpZ30gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQge2N3ZCwgcmVhZEpTT059IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7bWQ1fSBmcm9tICcuLi8uLi91dGlscy9oYXNoJztcblxuLy8gVGhlIG1pbmlmaWVycyB5b3Ugd2FudCB0byB1c2U6XG5pbXBvcnQgaW1hZ2VtaW5QbmdRdWFudCBmcm9tICdpbWFnZW1pbi1wbmdxdWFudCc7XG5pbXBvcnQgaW1hZ2VtaW5PcHRpUG5nIGZyb20gJ2ltYWdlbWluLW9wdGlwbmcnO1xuXG5jb25zdCBwa2cgPSByZWFkSlNPTihwYXRoLnJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJykpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgZnVuY3Rpb24gaW1hZ2VtaW5QbHVnaW4oXG4gIGVudmlyb25tZW50OiBDb25maWdFbnYsXG4gIG9wdGlvbnM6IEltYWdlUXVhbGl0eUNvbmZpZyxcbik6IFBsdWdpbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChlbnZpcm9ubWVudC5tb2RlICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdml0ZUltYWdlbWluKHtcbiAgICBza2lwSWZMYXJnZXI6IHRydWUsXG4gICAgdmVyYm9zZTogdHJ1ZSxcbiAgICBjYWNoZTogdHJ1ZSxcbiAgICBjYWNoZURpcjogcGF0aC5yZXNvbHZlKGN3ZCwgJy5jYWNoZS92aXRlLXBsdWdpbi1pbWFnZW1pbicpLFxuICAgIGNhY2hlS2V5OiBgJHtwa2cubmFtZX0tJHttZDUoSlNPTi5zdHJpbmdpZnkoey4uLm9wdGlvbnN9KSl9YCxcbiAgICByb290OiBwYXRoLmpvaW4ocGF0aC5yZXNvbHZlKGN3ZCksICdwdWJsaWMnKSxcbiAgICBwbHVnaW5zOiB7XG4gICAgICBqcGc6IFtcbiAgICAgICAgaW1hZ2VtaW5Nb3pqcGVnKHtcbiAgICAgICAgICBxdWFsaXR5OiBvcHRpb25zLmpwZWcgPz8gODAsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIHBuZzogW1xuICAgICAgICBpbWFnZW1pblBuZ1F1YW50KHtcbiAgICAgICAgICBzdHJpcDogdHJ1ZSxcbiAgICAgICAgICBzcGVlZDogMixcbiAgICAgICAgICBkaXRoZXJpbmc6IDAuMjUsXG4gICAgICAgICAgcXVhbGl0eTogb3B0aW9ucy5wbmcgPz8gWzAuNSwgMC43XSxcbiAgICAgICAgfSksXG4gICAgICAgIGltYWdlbWluT3B0aVBuZygpLFxuICAgICAgXSxcbiAgICB9LFxuICB9KSBhcyBQbHVnaW47XG59XG4iLCJpbXBvcnQgdHlwZSB7UGx1Z2luLCBSZXNvbHZlZENvbmZpZ30gZnJvbSAndml0ZSc7XG5pbXBvcnQgdHlwZSB7R2FtZVNldHRpbmdzLCBHYW1lc1NldHRpbmdzfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcmZhY2VzJztcblxuZnVuY3Rpb24gcmVuZGVyR2FtZU1hbmlmZXN0KFxuICBwYWdlSWQ6IHN0cmluZyxcbiAgc2V0dGluZ3M6IEdhbWVTZXR0aW5ncyxcbiAgY29uZmlnOiBSZXNvbHZlZENvbmZpZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hbmlmZXN0ID0ge1xuICAgIHNob3J0X25hbWU6IGAke3NldHRpbmdzLm1ldGEuYXBwdGl0bGV9YCxcbiAgICBuYW1lOiBgJHtzZXR0aW5ncy5tZXRhLnRpdGxlfWAsXG4gICAgZGVzY3JpcHRpb246IGAke3NldHRpbmdzLm1ldGEuZGVzY3JpcHRpb259YCxcbiAgICBzY29wZTogYCR7Y29uZmlnLmJhc2V9JHtwYWdlSWR9Lmh0bWxgLFxuICAgIHN0YXJ0X3VybDogYCR7Y29uZmlnLmJhc2V9JHtwYWdlSWR9Lmh0bWxgLFxuICAgIGRpc3BsYXk6ICdmdWxsc2NyZWVuJyxcbiAgICBvcmllbnRhdGlvbjogYCR7c2V0dGluZ3Mub3B0aW9ucy5vcmllbnRhdGlvbiA/PyAnbGFuZHNjYXBlJ31gLFxuICAgIGljb25zOiBbXG4gICAgICB7XG4gICAgICAgIHNyYzogYCR7Y29uZmlnLmJhc2V9bWV0YS8ke3NldHRpbmdzLmluZm8uaWR9L2ljb25zL2Nocm9tZS10b3VjaC1pY29uLTE5MngxOTIucG5nYCxcbiAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgIHNpemVzOiAnMTkyeDE5MicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzcmM6IGAke2NvbmZpZy5iYXNlfW1ldGEvJHtzZXR0aW5ncy5pbmZvLmlkfS9pY29ucy9pY29uLnBuZ2AsXG4gICAgICAgIHR5cGU6ICdpbWFnZS9wbmcnLFxuICAgICAgICBzaXplczogJzEwMjR4MTAyNCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYmFja2dyb3VuZF9jb2xvcjogYCR7c2V0dGluZ3Mub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3J9YCxcbiAgICB0aGVtZV9jb2xvcjogYCR7c2V0dGluZ3Mub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3J9YCxcbiAgfTtcblxuICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3QsIG51bGwsIDIpfVxcbmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYW5pZmVzdFBsdWdpbihnYW1lczogR2FtZXNTZXR0aW5ncyk6IFBsdWdpbiB7XG4gIGxldCBjb25maWc6IFJlc29sdmVkQ29uZmlnO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3ZpdGUtcGx1Z2luLWtsb2VrLW1hbmlmZXN0JyxcbiAgICBlbmZvcmNlOiAncG9zdCcsXG4gICAgYXBwbHk6ICdidWlsZCcsXG4gICAgYXN5bmMgY29uZmlnUmVzb2x2ZWQocmVzb2x2ZWRDb25maWc6IFJlc29sdmVkQ29uZmlnKSB7XG4gICAgICBjb25maWcgPSByZXNvbHZlZENvbmZpZztcbiAgICB9LFxuICAgIGdlbmVyYXRlQnVuZGxlKF8sIGJ1bmRsZSkge1xuICAgICAgLy8gVm9vciBpZWRlcmUgYXBwIGVlbiBtYW5pZmVzdCBtYWtlbjpcbiAgICAgIGZvciAoY29uc3QgW3BhZ2VJZCwgc2V0dGluZ3NdIG9mIE9iamVjdC5lbnRyaWVzKGdhbWVzKSkge1xuICAgICAgICBidW5kbGVbYCR7cGFnZUlkfS53ZWJtYW5pZmVzdGBdID0ge1xuICAgICAgICAgIG5lZWRzQ29kZVJlZmVyZW5jZTogZmFsc2UsXG4gICAgICAgICAgdHlwZTogJ2Fzc2V0JyxcbiAgICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgc291cmNlOiByZW5kZXJHYW1lTWFuaWZlc3QocGFnZUlkLCBzZXR0aW5ncywgY29uZmlnKSxcbiAgICAgICAgICBmaWxlTmFtZTogYCR7cGFnZUlkfS53ZWJtYW5pZmVzdGAsXG4gICAgICAgIH07XG5cbiAgICAgICAgYnVuZGxlW2Ake3BhZ2VJZH0tc2VydmljZXdvcmtlci5qc2BdID0ge1xuICAgICAgICAgIG5lZWRzQ29kZVJlZmVyZW5jZTogZmFsc2UsXG4gICAgICAgICAgdHlwZTogJ2Fzc2V0JyxcbiAgICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgc291cmNlOiBcInNlbGYuYWRkRXZlbnRMaXN0ZW5lcignZmV0Y2gnLCBmdW5jdGlvbigpIHsgcmV0dXJuOyB9KTtcIixcbiAgICAgICAgICBmaWxlTmFtZTogYCR7cGFnZUlkfS1zZXJ2aWNld29ya2VyLmpzYCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwiaW1wb3J0IGxlZ2FjeVBsdWdpbiBmcm9tICdAdml0ZWpzL3BsdWdpbi1sZWdhY3knO1xuaW1wb3J0IHsgdmlzdWFsaXplciB9IGZyb20gJ3JvbGx1cC1wbHVnaW4tdmlzdWFsaXplcic7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiwgUGx1Z2luT3B0aW9uIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgYmFubmVyUGx1Z2luIGZyb20gJ3ZpdGUtcGx1Z2luLWJhbm5lcic7XG5pbXBvcnQgeyBjcmVhdGVIdG1sUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4taHRtbCc7XG5pbXBvcnQgdHlwZSB7IFZpdGVPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpbWFnZW1pblBsdWdpbiB9IGZyb20gJy4vbGliL2ltYWdlLXBsdWdpbic7XG5pbXBvcnQgeyBtYW5pZmVzdFBsdWdpbiB9IGZyb20gJy4vbGliL21hbmlmZXN0LXBsdWdpbic7XG5cbi8vIEJ1aWxkIHBsdWdpbnNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBsdWdpbnMoXG4gIG9wdGlvbnM6IFZpdGVPcHRpb25zLFxuKTogQXJyYXk8UGx1Z2luIHwgUGx1Z2luT3B0aW9uPiB7XG4gIC8vIE5vIGJ1aWxkPyBubyBwbHVnaW5zLi5cbiAgaWYgKG9wdGlvbnMuZW52aXJvbm1lbnQuY29tbWFuZCAhPT0gJ2J1aWxkJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbnM6IEFycmF5PFBsdWdpbiB8IFBsdWdpbk9wdGlvbiB8IHVuZGVmaW5lZD4gPSBbXTtcblxuICBpZiAob3B0aW9ucy5jb25maWcuYnVpbGQubGVnYWN5KSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBwYWdlIHdvcmtzIGluIG9sZGVyIGJyb3dzZXJzXG4gICAgcGx1Z2lucy5wdXNoKFxuICAgICAgLi4ubGVnYWN5UGx1Z2luKHtcbiAgICAgICAgdGFyZ2V0czogKG9wdGlvbnMuY29uZmlnLmJ1aWxkLmJyb3dzZXJzbGlzdCBhcyBzdHJpbmdbXSkgPz8gJ2RlZmF1bHRzJyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYWdlcyA9IE9iamVjdC5rZXlzKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLm1hcCgoZ2FtZUlkKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVuYW1lOiBgJHtnYW1lSWR9Lmh0bWxgLFxuICAgICAgdGVtcGxhdGU6IGAke2dhbWVJZH0uaHRtbGAsXG4gICAgfTtcbiAgfSk7XG5cbiAgcGx1Z2lucy5wdXNoKFxuICAgIC8vIE1pbmlmeSBpbWFnZSBhc3NldHNcbiAgICBpbWFnZW1pblBsdWdpbihvcHRpb25zLmVudmlyb25tZW50LCBvcHRpb25zLmNvbmZpZy5idWlsZC5pbWFnZVF1YWxpdHkpLFxuXG4gICAgLy8gTWFrZSB0aGUgaHRtbCBvdXRwdXQgc21hbGxlclxuICAgIC4uLihjcmVhdGVIdG1sUGx1Z2luKHttaW5pZnk6IHRydWUsIHBhZ2VzfSkgYXMgUGx1Z2luW10pLFxuXG4gICAgLy8gQWRkIGEgYmFubmVyIHRvIGdlbmVyYXRlZCBqcy9jc3NcbiAgICBiYW5uZXJQbHVnaW4oe1xuICAgICAgb3V0RGlyOiAnLi4vcHVibGljJyxcbiAgICAgIGNvbnRlbnQ6YC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC5cblxuICAgICAgICAgX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgICAgICBfICAgICAgICAgICAgX1xuICAgICAgICAvICApICAgICAgICAgICAgICB8ICBvICAgICAgICAgL3wgICAvIHwgfCAgICAgICAgICB8IHxcbiAgICAgICAgXFxcXF9fIF98XyAgICAgICAgIF9ffCAgICAgIF9fICAgICB8X18vICB8IHwgIF9fICAgXyAgfCB8XG4gICAgICAgICAgIFxcXFwgfCAgfCAgIHwgIC8gIHwgIHwgIC8gIFxcXFxfICAgfCBcXFxcICAgfC8gIC8gIFxcXFxffC8gIHwvXylcbiAgICAgICAoX19fLyB8Xy8gXFxcXF8vfF8vXFxcXF8vfF8vfF8vXFxcXF9fLyAgICB8ICBcXFxcXy98X18vXFxcXF9fLyB8X18vfCBcXFxcXy9cblxuICAgICAgICBDb25jZXB0LCBvbnR3ZXJwICYgb250d2lra2VsaW5nXG4gICAgICAgIGh0dHBzOi8vc3R1ZGlva2xvZWsubmxcblxuICAgICAgICBTdHVkaW8gS2xvZWsg4p2kIFBpeGlKUywgR1NBUCAmIGhvd2xlci5qc1xuXG4gICAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLmB9XG4gICAgKSxcbiAgKTtcblxuICAvLyBDcmVhdGUgYSBtYW5pZmVzdCBhbmQgbWluaW1hbCB3ZWJ3b3JrZXIgZm9yIGV2ZXJ5IGdhbWVcbiAgaWYgKG9wdGlvbnMuY29uZmlnLmJ1aWxkLm1hbmlmZXN0KSB7XG4gICAgcGx1Z2lucy5wdXNoKG1hbmlmZXN0UGx1Z2luKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpKTtcbiAgfVxuXG4gIC8vIERvIHdlIG5lZWQgdG8gYW5hbHlzZSB0aGUgYnVpbGQ/XG4gIGlmIChvcHRpb25zLmNvbmZpZy5idWlsZC5hbmFseXplQnVuZGxlKSB7XG4gICAgcGx1Z2lucy5wdXNoKHZpc3VhbGl6ZXIoe1xuICAgICAgdGVtcGxhdGU6IFwidHJlZW1hcFwiLCAvLyBvciBzdW5idXJzdFxuICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgIGd6aXBTaXplOiB0cnVlLFxuICAgICAgZmlsZW5hbWU6IFwiYnVuZGxlLWFuYWx5c2UuaHRtbFwiLCAvLyB3aWxsIGJlIHNhdmVkIGluIHByb2plY3QncyByb290XG4gICAgfSkgYXMgUGx1Z2luT3B0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBwbHVnaW5zLmZpbHRlcihwbHVnaW4gPT4gcGx1Z2luICE9PSB1bmRlZmluZWQpO1xufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7dHlwZSBQbHVnaW4sIHR5cGUgUGx1Z2luT3B0aW9ufSBmcm9tICd2aXRlJztcbmltcG9ydCBjaGVja2VyIGZyb20gJ3ZpdGUtcGx1Z2luLWNoZWNrZXInO1xuaW1wb3J0IGZ1bGxSZWxvYWQgZnJvbSAndml0ZS1wbHVnaW4tZnVsbC1yZWxvYWQnO1xuaW1wb3J0IG1rY2VydCBmcm9tICd2aXRlLXBsdWdpbi1ta2NlcnQnO1xuaW1wb3J0IHtjd2R9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IHR5cGUgS2xvZWtDb25maWdTZXJ2ZVNldHRpbmdzID0ge1xuICBmdWxsUmVsb2FkU3ZlbHRlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZVBsdWdpbnMoc2V0dGluZ3M/OiBLbG9la0NvbmZpZ1NlcnZlU2V0dGluZ3MpOiBBcnJheTxQbHVnaW4gfCBQbHVnaW5PcHRpb24+IHtcbiAgY29uc3QgZnVsbFJlbG9hZFBhdGhzID0gWydzY3JpcHQvKiovKi50cyddO1xuICBpZiAoc2V0dGluZ3M/LmZ1bGxSZWxvYWRTdmVsdGUpIHtcbiAgICBmdWxsUmVsb2FkUGF0aHMucHVzaCgnc3ZlbHRlLyoqLyouc3ZlbHRlJyk7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIGZ1bGxSZWxvYWQoZnVsbFJlbG9hZFBhdGhzLCB7XG4gICAgICByb290OiBwYXRoLmpvaW4ocGF0aC5yZXNvbHZlKGN3ZCksICdzb3VyY2UnKSxcbiAgICAgIGxvZzogdHJ1ZSxcbiAgICAgIGFsd2F5czogdHJ1ZSxcbiAgICB9KSBhcyBQbHVnaW4sXG5cbiAgICBta2NlcnQoKSxcblxuICAgIGNoZWNrZXIoe1xuICAgICAgdHlwZXNjcmlwdDogdHJ1ZSxcbiAgICB9KSxcbiAgXTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB0eXBlIHtDb25maWdFbnYsIFVzZXJDb25maWd9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHtiYXNlUGx1Z2luc30gZnJvbSAnLi9wbHVnaW5zL2Jhc2UnO1xuaW1wb3J0IHtidWlsZFBsdWdpbnN9IGZyb20gJy4vcGx1Z2lucy9idWlsZCc7XG5pbXBvcnQge3NlcnZlUGx1Z2luc30gZnJvbSAnLi9wbHVnaW5zL3NlcnZlJztcbmltcG9ydCB7XG4gIGN3ZCxcbiAgZGVmaW5lQnVpbGRDb25maWcsXG4gIGdldFBhY2thZ2VDb25maWcsXG4gIGdldFBhZ2VUb1NlcnZlLFxuICBwYXJzZVBhY2thZ2VHYW1lc1NldHRpbmdzLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB0eXBlIHtWaXRlT3B0aW9uc30gZnJvbSAnLi91dGlscy9pbnRlcmZhY2VzJztcblxuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWZpbmVLbG9la1ZpdGVDb25maWcoZW52aXJvbm1lbnQ6IENvbmZpZ0Vudik6IFByb21pc2U8VXNlckNvbmZpZz4ge1xuICBjb25zdCBwYWNrYWdlXyA9IGdldFBhY2thZ2VDb25maWcoKTtcblxuICBjb25zdCBvcHRpb25zOiBWaXRlT3B0aW9ucyA9IHtcbiAgICByb290OiBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJyksXG4gICAgcGFja2FnZTogcGFja2FnZV8sXG4gICAgZW52aXJvbm1lbnQsXG4gICAgc2V0dGluZ3M6IHBhcnNlUGFja2FnZUdhbWVzU2V0dGluZ3MocGFja2FnZV8uc2V0dGluZ3MsIHBhY2thZ2VfLnZlcnNpb24pLFxuICAgIGNvbmZpZzoge1xuICAgICAgLi4ucGFja2FnZV8udml0ZSxcbiAgICAgIGJ1aWxkOiB7Li4ucGFja2FnZV8udml0ZS5idWlsZCwgYnJvd3NlcnNsaXN0OiBwYWNrYWdlXy5icm93c2Vyc2xpc3R9LFxuICAgICAgc2VydmU6IHtcbiAgICAgICAgcGFydGlhbHM6IFtwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAncGFydGlhbHMnKSwgcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsICdwYXJ0aWFscycpXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBjb25maWc6IFVzZXJDb25maWcgPSB7XG4gICAgbG9nTGV2ZWw6ICdpbmZvJyxcbiAgICBiYXNlOiBwYWNrYWdlXy52aXRlLmJ1aWxkLmJhc2VQYXRoLFxuICAgIHJvb3Q6IG9wdGlvbnMucm9vdCxcbiAgICBlbnZEaXI6IHBhdGgucmVzb2x2ZShjd2QsICdlbnYnKSxcbiAgICBlbnZQcmVmaXg6IFsnS0xPRUtfJywgJ1ZJVEVfJ10sXG4gICAgcHVibGljRGlyOiAnc3RhdGljJyxcbiAgICBkZWZpbmU6IHt9LFxuXG4gICAgZXNidWlsZDoge1xuICAgICAgbGVnYWxDb21tZW50czogJ25vbmUnLFxuICAgIH0sXG5cbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczoge1xuICAgICAgICBsb2Rhc2g6ICdsb2Rhc2gtZXMnLFxuICAgICAgICAnQG1ldGEnOiBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJywgJ3N0YXRpYycsICdtZXRhJyksXG4gICAgICAgICdAZm9udHMnOiBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJywgJ3N0YXRpYycsICdmb250cycpLFxuICAgICAgfSxcbiAgICAgIGRlZHVwZTogW1xuICAgICAgICAnQHN0dWRpb2tsb2VrL3RzLWNvcmUtbGliJyxcbiAgICAgICAgJ0BjYXBhY2l0b3IvYXBwJyxcbiAgICAgICAgJ0BjYXBhY2l0b3IvY29yZScsXG4gICAgICAgICdAY2FwYWNpdG9yL2RldmljZScsXG4gICAgICAgICdAY2FwYWNpdG9yL25ldHdvcmsnLFxuICAgICAgICAnQGNhcGFjaXRvci9wcmVmZXJlbmNlcycsXG4gICAgICAgICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nLFxuICAgICAgICAnQGNhcGFjaXRvci9zdGF0dXMtYmFyJyxcbiAgICAgICAgJ2Jvd3NlcicsXG4gICAgICAgICdkYXRlLWZucy10eicsXG4gICAgICAgICdkYXRlLWZucycsXG4gICAgICAgICdlcnJvci1zdGFjay1wYXJzZXItZXMnLFxuICAgICAgICAnZmlyZWJhc2UnLFxuICAgICAgICAnZm9udGZhY2VvYnNlcnZlcicsXG4gICAgICAgICdnc2FwJyxcbiAgICAgICAgJ2hvd2xlcicsXG4gICAgICAgICdsb2Rhc2gtZGVjb3JhdG9ycy1lc20nLFxuICAgICAgICAnbG9kYXNoLWVzJyxcbiAgICAgICAgJ292ZXJtaW5kJyxcbiAgICAgICAgJ3BpeGktc3BpbmUnLFxuICAgICAgICAncGl4aScsXG4gICAgICAgICdwdWJzdWItanMnLFxuICAgICAgICAncmFuZG9tLWpzJyxcbiAgICAgICAgJ3Jlc3MnLFxuICAgICAgICAnc2x1Z2lmeScsXG4gICAgICAgICdzdXBlcmFnZW50JyxcbiAgICAgICAgJ3RzLWV2ZW50cycsXG4gICAgICAgICd0cy1taXhlcicsXG4gICAgICAgICd0c2xpYicsXG4gICAgICBdLFxuICAgIH0sXG5cbiAgICBjc3M6IHtcbiAgICAgIHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcbiAgICAgICAgc2Nzczoge1xuICAgICAgICAgIGNoYXJzZXQ6IGZhbHNlLFxuICAgICAgICAgIC8vIEFkZGl0aW9uYWxEYXRhOiBgQGNoYXJzZXQgXCJVVEYtOFwiYCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHBsdWdpbnM6IFsuLi5iYXNlUGx1Z2lucyhvcHRpb25zKV0sXG4gIH07XG5cbiAgc3dpdGNoIChlbnZpcm9ubWVudC5jb21tYW5kKSB7XG4gICAgY2FzZSAnc2VydmUnOiB7XG4gICAgICBjb25maWcuc2VydmVyID0ge1xuICAgICAgICBob3N0OiB0cnVlLFxuICAgICAgICBjb3JzOiBvcHRpb25zLmNvbmZpZy5kZXYuY29ycyA/PyB0cnVlLFxuICAgICAgICBodHRwczogb3B0aW9ucy5jb25maWcuZGV2Lmh0dHBzID8/IHRydWUsXG4gICAgICAgIG9wZW46IGdldFBhZ2VUb1NlcnZlKG9wdGlvbnMuY29uZmlnLCBvcHRpb25zLnNldHRpbmdzLmdhbWVzKSxcbiAgICAgIH07XG4gICAgICBjb25maWcucGx1Z2lucyA9IFtcbiAgICAgICAgLi4uKGNvbmZpZy5wbHVnaW5zID8gY29uZmlnLnBsdWdpbnMgOiBbXSksXG4gICAgICAgIC4uLnNlcnZlUGx1Z2lucyh7XG4gICAgICAgICAgZnVsbFJlbG9hZFN2ZWx0ZTogcGFja2FnZV8udml0ZS5kZXYuZnVsbFJlbG9hZFN2ZWx0ZSA/PyB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgIF07XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgJ2J1aWxkJzoge1xuICAgICAgY29uZmlnLmJ1aWxkID0gZGVmaW5lQnVpbGRDb25maWcob3B0aW9ucyk7XG4gICAgICBjb25maWcucGx1Z2lucyA9IFsuLi4oY29uZmlnLnBsdWdpbnMgPyBjb25maWcucGx1Z2lucyA6IFtdKSwgLi4uYnVpbGRQbHVnaW5zKG9wdGlvbnMpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwiaW1wb3J0IHt0eXBlIFR5cGVkRmxhZ3N9IGZyb20gJ21lb3cnO1xuaW1wb3J0IHtidWlsZCwgY3JlYXRlU2VydmVyLCB0eXBlIExvZ0xldmVsfSBmcm9tICd2aXRlJztcbmltcG9ydCB7ZGVmaW5lS2xvZWtWaXRlQ29uZmlnfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge2FkZEJ1aWxkRm9sZGVyVG9aaXAsIGdldFBhY2thZ2VDb25maWd9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2xvZWtEZXZlbG9wbWVudChcbiAgZmxhZ3M6IFR5cGVkRmxhZ3M8e1xuICAgIG1vZGU6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0Pzogc3RyaW5nO1xuICAgIH07XG4gIH0+LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGRlZmluZUtsb2VrVml0ZUNvbmZpZyh7XG4gICAgY29tbWFuZDogJ3NlcnZlJyxcbiAgICBtb2RlOiAnZGV2ZWxvcG1lbnQnLFxuICB9KTtcblxuICAvLyBEaWZmZXJlbnQgbW9kZVxuICBpZiAodHlwZW9mIGZsYWdzLm1vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnLm1vZGUgPSBmbGFncy5tb2RlO1xuICB9XG5cbiAgY29uc3Qgc2VydmVyID0gYXdhaXQgY3JlYXRlU2VydmVyKHtcbiAgICBjb25maWdGaWxlOiBmYWxzZSxcbiAgICAuLi5jb25maWcsXG4gIH0pO1xuXG4gIGF3YWl0IHNlcnZlci5saXN0ZW4oKTtcbiAgc2VydmVyLnByaW50VXJscygpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2xvZWtCdWlsZChcbiAgZmxhZ3M6IFR5cGVkRmxhZ3M8e1xuICAgIGJhc2U6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0OiBzdHJpbmc7XG4gICAgfTtcbiAgICBtb2RlOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJztcbiAgICAgIHNob3J0RmxhZzogc3RyaW5nO1xuICAgICAgZGVmYXVsdD86IHN0cmluZztcbiAgICB9O1xuICAgIGxvZ0xldmVsOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJztcbiAgICAgIHNob3J0RmxhZzogc3RyaW5nO1xuICAgICAgZGVmYXVsdD86IHN0cmluZztcbiAgICB9O1xuICAgIGVtcHR5T3V0RGlyOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbic7XG4gICAgICBzaG9ydEZsYWc6IHN0cmluZztcbiAgICAgIGRlZmF1bHQ6IHRydWU7XG4gICAgfTtcbiAgICBzb3VyY2VtYXBzOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbic7XG4gICAgICBzaG9ydEZsYWc6IHN0cmluZztcbiAgICAgIGRlZmF1bHQ6IGZhbHNlO1xuICAgIH07XG4gICAgaW5saW5lU291cmNlbWFwczoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0OiBmYWxzZTtcbiAgICB9O1xuICAgIGNyZWF0ZVppcDoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nO1xuICAgICAgc2hvcnRGbGFnOiBzdHJpbmc7XG4gICAgICBkZWZhdWx0OiBmYWxzZTtcbiAgICB9O1xuICB9Pixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBkZWZpbmVLbG9la1ZpdGVDb25maWcoe1xuICAgIGNvbW1hbmQ6ICdidWlsZCcsXG4gICAgbW9kZTogJ3Byb2R1Y3Rpb24nLFxuICB9KTtcblxuICAvLyBFbXB0eSBvdXQgdGhlIE91dHB1dCBkaXIgYmVmb3JlIGJ1aWxkaW5nP1xuICBpZiAoZmxhZ3MuZW1wdHlPdXREaXIgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZy5idWlsZCA9IHtcbiAgICAgIC4uLmNvbmZpZy5idWlsZCxcbiAgICAgIGVtcHR5T3V0RGlyOiBmbGFncy5lbXB0eU91dERpcixcbiAgICB9O1xuICB9XG5cbiAgLy8gQ3JlYXRlIHNvdXJjZW1hcHM/XG4gIGlmIChmbGFncy5zb3VyY2VtYXBzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25maWcuYnVpbGQgPSB7XG4gICAgICAuLi5jb25maWcuYnVpbGQsXG4gICAgICBzb3VyY2VtYXA6IGZsYWdzLnNvdXJjZW1hcHMgPyAoZmxhZ3MuaW5saW5lU291cmNlbWFwcyA/ICdpbmxpbmUnIDogdHJ1ZSkgOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gRGlmZmVyZW50IGJhc2UgcGF0aFxuICBpZiAodHlwZW9mIGZsYWdzLmJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnLmJhc2UgPSBmbGFncy5iYXNlO1xuICB9XG5cbiAgLy8gRGlmZmVyZW50IG1vZGVcbiAgaWYgKHR5cGVvZiBmbGFncy5tb2RlID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZy5tb2RlID0gZmxhZ3MubW9kZTtcbiAgfVxuXG4gIC8vIERpZmZlcmVudCBtb2RlXG4gIGNvbmZpZy5sb2dMZXZlbCA9IGZsYWdzLmxvZ0xldmVsIGFzIExvZ0xldmVsIHwgdW5kZWZpbmVkO1xuXG4gIGF3YWl0IGJ1aWxkKHtcbiAgICBjb25maWdGaWxlOiBmYWxzZSxcbiAgICAuLi5jb25maWcsXG4gIH0pO1xuXG4gIC8vIE1ha2VuIHdlIGVlbiB6aXAgYWFuP1xuICBpZiAoZmxhZ3MuY3JlYXRlWmlwIHx8IGdldFBhY2thZ2VDb25maWcoKS52aXRlLmJ1aWxkLmNyZWF0ZVppcCkge1xuICAgIGF3YWl0IGFkZEJ1aWxkRm9sZGVyVG9aaXAoKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7QUNEekMsU0FBVSxRQUFRLENBQUMsSUFBWSxFQUFBO0lBQ25DLElBQUk7QUFDRixRQUFBLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDcEMsS0FBQTtJQUFDLE1BQU07O0FBRVAsS0FBQTtBQUVELElBQUEsT0FBTyxLQUFLLENBQUM7QUFDZjs7QUNQTSxTQUFVLGlCQUFpQixDQUFDLE9BQW9CLEVBQUE7SUFDcEQsTUFBTSxLQUFLLEdBQTJCLEVBQUUsQ0FBQztBQUV6QyxJQUFBLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFD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
@@ -1,2 +1,5 @@
1
1
  import { type Plugin, type PluginOption } from 'vite';
2
- export declare function servePlugins(): Array<Plugin | PluginOption>;
2
+ export type KloekConfigServeSettings = {
3
+ fullReloadSvelte?: boolean;
4
+ };
5
+ export declare function servePlugins(settings?: KloekConfigServeSettings): Array<Plugin | PluginOption>;
@@ -5,6 +5,7 @@ export type ImageQualityConfig = {
5
5
  };
6
6
  export type KloekViteDevConfig = {
7
7
  serveParams: string;
8
+ fullReloadSvelte?: boolean;
8
9
  cors?: boolean;
9
10
  https?: boolean;
10
11
  };
@@ -1,2 +1,2 @@
1
- import { PackageConfig } from './interfaces';
1
+ import { type PackageConfig } from './interfaces';
2
2
  export declare function getPackageConfig(): PackageConfig;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@studiokloek/vite-config",
3
- "version": "0.12.12",
3
+ "version": "0.12.14",
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.",
@@ -70,15 +70,15 @@
70
70
  "@typescript-eslint/parser": "^6.21.0",
71
71
  "@vheemstra/vite-plugin-imagemin": "^1.2.1",
72
72
  "@vitejs/plugin-legacy": "^4.1.1",
73
- "eslint": "^8.57.0",
73
+ "eslint": "^8.57.1",
74
74
  "eslint-config-prettier": "^9.1.0",
75
75
  "eslint-formatter-pretty": "^5.0.0",
76
76
  "eslint-import-resolver-typescript": "^3.6.3",
77
77
  "eslint-plugin-eslint-comments": "^3.2.0",
78
- "eslint-plugin-import": "^2.29.1",
78
+ "eslint-plugin-import": "^2.30.0",
79
79
  "eslint-plugin-prettier": "^5.2.1",
80
80
  "eslint-plugin-promise": "^6.6.0",
81
- "eslint-plugin-svelte": "^2.43.0",
81
+ "eslint-plugin-svelte": "^2.44.0",
82
82
  "eslint-plugin-unicorn": "^48.0.1",
83
83
  "filenamify": "^6.0.0",
84
84
  "imagemin-mozjpeg": "^10.0.0",
@@ -86,20 +86,20 @@
86
86
  "imagemin-pngquant": "^9.0.2",
87
87
  "meow": "12.0.1",
88
88
  "npm-run-all": "^4.1.5",
89
- "postcss": "^8.4.41",
89
+ "postcss": "^8.4.47",
90
90
  "postcss-load-config": "^4.0.2",
91
91
  "prettier": "^3.3.3",
92
92
  "prettier-package-json": "^2.8.0",
93
93
  "prettier-plugin-svelte": "^3.2.6",
94
94
  "rollup-plugin-visualizer": "^5.12.0",
95
- "sass": "1.77.6",
95
+ "sass": "1.79.1",
96
96
  "stylelint": "^15.11.0",
97
97
  "svelte": "^3.59.2",
98
98
  "svelte-preprocess": "^5.1.4",
99
- "terser": "^5.31.6",
100
- "vite": "v4.5.3",
101
- "vite-plugin-banner": "^0.7.1",
102
- "vite-plugin-checker": "^0.7.2",
99
+ "terser": "^5.33.0",
100
+ "vite": "v4.5.5",
101
+ "vite-plugin-banner": "0.7.1",
102
+ "vite-plugin-checker": "^0.8.0",
103
103
  "vite-plugin-full-reload": "^1.2.0",
104
104
  "vite-plugin-handlebars": "naranjamecanica/vite-plugin-handlebars#tmp-release",
105
105
  "vite-plugin-html": "3.2.2",
@@ -109,26 +109,26 @@
109
109
  "zip-a-folder": "^3.1.7"
110
110
  },
111
111
  "devDependencies": {
112
- "@microsoft/api-extractor": "7.47.7",
112
+ "@microsoft/api-extractor": "7.47.9",
113
113
  "@rollup/plugin-node-resolve": "^15.2.3",
114
114
  "@rollup/plugin-typescript": "^11.1.6",
115
115
  "@sveltejs/kit": "^1.30.4",
116
116
  "@types/ejs": "^3.1.5",
117
- "@types/estree": "^1.0.5",
117
+ "@types/estree": "^1.0.6",
118
118
  "@types/html-minifier-terser": "^7.0.2",
119
119
  "@types/imagemin": "^8.0.5",
120
120
  "@types/imagemin-mozjpeg": "^8.0.4",
121
121
  "@types/imagemin-optipng": "^5.2.4",
122
- "@types/node": "^20.16.2",
122
+ "@types/node": "^20.16.5",
123
123
  "rimraf": "^5.0.10",
124
- "rollup": "^4.21.1",
124
+ "rollup": "^4.21.3",
125
125
  "typescript": "4.9.5",
126
- "xo": "^0.59.3"
126
+ "xo": "0.58.0"
127
127
  },
128
128
  "resolutions": {
129
- "@types/estree": "^1.0.5",
130
- "@types/node": "^20.16.2",
131
- "vite": "v4.5.3"
129
+ "@types/estree": "^1.0.6",
130
+ "@types/node": "^20.16.5",
131
+ "vite": "v4.5.5"
132
132
  },
133
133
  "volta": {
134
134
  "node": "20.17.0",