projen 0.31.18 → 0.31.19

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.
Files changed (101) hide show
  1. package/.jsii +180 -14
  2. package/API.md +56 -0
  3. package/docs/programmatic-api.md +56 -0
  4. package/lib/awscdk-app-ts.js +1 -1
  5. package/lib/awscdk-construct.js +2 -2
  6. package/lib/cdk8s-app-ts.js +1 -1
  7. package/lib/cdk8s-construct.js +1 -1
  8. package/lib/cdktf-construct.js +1 -1
  9. package/lib/cli/cmds/new.js +23 -65
  10. package/lib/cli/util.d.ts +19 -0
  11. package/lib/cli/util.js +52 -0
  12. package/lib/component.js +1 -1
  13. package/lib/construct-lib.js +1 -1
  14. package/lib/deps/dependencies.js +1 -1
  15. package/lib/dev-env.js +1 -1
  16. package/lib/docker-compose.js +2 -2
  17. package/lib/eslint.js +1 -1
  18. package/lib/file.js +1 -1
  19. package/lib/git/gitattributes.js +1 -1
  20. package/lib/github/auto-approve.js +1 -1
  21. package/lib/github/auto-merge.js +1 -1
  22. package/lib/github/dependabot.js +1 -1
  23. package/lib/github/github.js +1 -1
  24. package/lib/github/mergify.js +1 -1
  25. package/lib/github/pr-template.js +1 -1
  26. package/lib/github/stale.js +1 -1
  27. package/lib/github/task-workflow.js +1 -1
  28. package/lib/github/workflows.js +1 -1
  29. package/lib/gitpod.js +1 -1
  30. package/lib/ignore-file.js +1 -1
  31. package/lib/index.d.ts +1 -0
  32. package/lib/index.js +2 -1
  33. package/lib/ini.js +1 -1
  34. package/lib/inventory.d.ts +15 -3
  35. package/lib/inventory.js +50 -25
  36. package/lib/java/java-project.js +1 -1
  37. package/lib/java/junit.js +1 -1
  38. package/lib/java/maven-compile.js +1 -1
  39. package/lib/java/maven-packaging.js +1 -1
  40. package/lib/java/maven-sample.js +1 -1
  41. package/lib/java/pom.js +1 -1
  42. package/lib/java/projenrc.js +1 -1
  43. package/lib/javascript/npm-config.js +1 -1
  44. package/lib/javascript/projenrc.js +3 -3
  45. package/lib/javascript/render-options.d.ts +5 -0
  46. package/lib/javascript/render-options.js +24 -21
  47. package/lib/jest.js +1 -1
  48. package/lib/jsii-project.js +1 -1
  49. package/lib/json/projenrc.js +1 -1
  50. package/lib/json/run-projenrc.task.js +6 -11
  51. package/lib/json.js +1 -1
  52. package/lib/license.js +1 -1
  53. package/lib/logger.js +1 -1
  54. package/lib/makefile.js +1 -1
  55. package/lib/node-package.js +1 -1
  56. package/lib/node-project.js +1 -1
  57. package/lib/object-file.js +1 -1
  58. package/lib/project.js +2 -2
  59. package/lib/projects.d.ts +80 -0
  60. package/lib/projects.js +81 -0
  61. package/lib/python/pip.js +1 -1
  62. package/lib/python/poetry.js +2 -2
  63. package/lib/python/projenrc.js +1 -1
  64. package/lib/python/pytest.js +1 -1
  65. package/lib/python/python-project.js +1 -1
  66. package/lib/python/python-sample.js +1 -1
  67. package/lib/python/requirements-file.js +1 -1
  68. package/lib/python/setuppy.js +1 -1
  69. package/lib/python/setuptools.js +1 -1
  70. package/lib/python/venv.js +1 -1
  71. package/lib/readme.js +1 -1
  72. package/lib/release/publisher.js +1 -1
  73. package/lib/release/release-trigger.js +1 -1
  74. package/lib/release/release.js +1 -1
  75. package/lib/sample-file.js +2 -2
  76. package/lib/semver.js +1 -1
  77. package/lib/source-code.js +1 -1
  78. package/lib/tasks/runtime.js +1 -1
  79. package/lib/tasks/task.js +1 -1
  80. package/lib/tasks/tasks.js +1 -1
  81. package/lib/textfile.js +1 -1
  82. package/lib/toml.js +1 -1
  83. package/lib/typescript/projenrc.js +3 -3
  84. package/lib/typescript-config.js +1 -1
  85. package/lib/typescript.js +3 -3
  86. package/lib/upgrade-dependencies.js +2 -2
  87. package/lib/util/synth.d.ts +4 -0
  88. package/lib/util/synth.js +35 -2
  89. package/lib/version.js +1 -1
  90. package/lib/vscode/devcontainer.js +1 -1
  91. package/lib/vscode/launch-config.js +1 -1
  92. package/lib/vscode/vscode.js +1 -1
  93. package/lib/web/next.js +3 -3
  94. package/lib/web/postcss.js +1 -1
  95. package/lib/web/react.js +4 -4
  96. package/lib/web/tailwind.js +1 -1
  97. package/lib/xmlfile.js +1 -1
  98. package/lib/yaml.js +1 -1
  99. package/package.json +1 -1
  100. package/lib/cli/create.d.ts +0 -41
  101. package/lib/cli/create.js +0 -48
@@ -4,11 +4,11 @@ const path = require("path");
4
4
  const fs = require("fs-extra");
5
5
  const yargs = require("yargs");
6
6
  const inventory = require("../../inventory");
7
- const logging = require("../../logging");
8
7
  const option_hints_1 = require("../../option-hints");
8
+ const projects_1 = require("../../projects");
9
9
  const util_1 = require("../../util");
10
- const create_1 = require("../create");
11
10
  const macros_1 = require("../macros");
11
+ const util_2 = require("../util");
12
12
  class Command {
13
13
  constructor() {
14
14
  this.command = 'new [PROJECT-TYPE-NAME] [OPTIONS]';
@@ -29,7 +29,7 @@ class Command {
29
29
  var _a, _b, _c;
30
30
  cargs.showHelpOnFail(false);
31
31
  for (const option of (_a = type.options) !== null && _a !== void 0 ? _a : []) {
32
- if (option.type !== 'string' && option.type !== 'number' && option.type !== 'boolean' && option.kind !== 'enum') {
32
+ if (option.simpleType !== 'string' && option.simpleType !== 'number' && option.simpleType !== 'boolean' && option.kind !== 'enum') {
33
33
  continue; // we only support primitive and enum fields as command line options
34
34
  }
35
35
  let desc = [(_c = (_b = option.docs) === null || _b === void 0 ? void 0 : _b.replace(/\ *\.$/, '')) !== null && _c !== void 0 ? _c : ''];
@@ -46,7 +46,7 @@ class Command {
46
46
  defaultValue = renderDefault(process.cwd(), option.default);
47
47
  }
48
48
  }
49
- const argType = option.kind === 'enum' ? 'string' : option.type;
49
+ const argType = option.kind === 'enum' ? 'string' : option.simpleType;
50
50
  cargs.option(option.switch, {
51
51
  group: required ? 'Required:' : 'Optional:',
52
52
  type: argType,
@@ -136,7 +136,7 @@ function commandLineToProps(cwd, type, argv) {
136
136
  async function newProjectFromModule(baseDir, spec, args) {
137
137
  var _a, _b;
138
138
  const projenVersion = (_a = args.projenVersion) !== null && _a !== void 0 ? _a : 'latest';
139
- const installCommand = renderInstallCommand(baseDir, `projen@${projenVersion}`);
139
+ const installCommand = util_2.renderInstallCommand(baseDir, `projen@${projenVersion}`);
140
140
  if (args.projenVersion) {
141
141
  util_1.exec(installCommand, { cwd: baseDir });
142
142
  }
@@ -144,7 +144,7 @@ async function newProjectFromModule(baseDir, spec, args) {
144
144
  // do not overwrite existing installation
145
145
  util_1.exec(`npm ls --prefix=${baseDir} --depth=0 --pattern projen || ${installCommand}`, { cwd: baseDir });
146
146
  }
147
- const moduleName = installPackage(baseDir, spec);
147
+ const moduleName = util_2.installPackage(baseDir, spec);
148
148
  // Find the just installed package and discover the rest recursively from this package folder
149
149
  const moduleDir = path.dirname(require.resolve(`${moduleName}/.jsii`, {
150
150
  paths: [
@@ -170,15 +170,15 @@ async function newProjectFromModule(baseDir, spec, args) {
170
170
  throw new Error(`Project type ${requested} not found. Found ${types.join(',')}`);
171
171
  }
172
172
  for (const option of (_b = type.options) !== null && _b !== void 0 ? _b : []) {
173
- if (option.type !== 'string' && option.type !== 'number' && option.type !== 'boolean') {
173
+ if (option.simpleType !== 'string' && option.simpleType !== 'number' && option.simpleType !== 'boolean') {
174
174
  continue; // we don't support non-primitive fields as command line options
175
175
  }
176
176
  if (args[option.name] !== undefined) {
177
- if (option.type === 'number') {
177
+ if (option.simpleType === 'number') {
178
178
  args[option.name] = parseInt(args[option.name]);
179
179
  args[option.switch] = args[option.name];
180
180
  }
181
- else if (option.type === 'boolean') {
181
+ else if (option.simpleType === 'boolean') {
182
182
  const raw = args[option.name];
183
183
  const safe = typeof raw === 'string' ? util_1.isTruthy(raw) : raw;
184
184
  args[option.name] = safe;
@@ -195,9 +195,9 @@ async function newProjectFromModule(baseDir, spec, args) {
195
195
  }
196
196
  }
197
197
  // include a dev dependency for the external module
198
- await newProject(baseDir, type, args, {
199
- devDeps: [spec],
200
- });
198
+ args.devDeps = [spec];
199
+ args['dev-deps'] = [spec];
200
+ await newProject(baseDir, type, args);
201
201
  }
202
202
  /**
203
203
  * Generates a new project.
@@ -205,21 +205,21 @@ async function newProjectFromModule(baseDir, spec, args) {
205
205
  * @param args Command line arguments
206
206
  * @param additionalProps Additional parameters to include in .projenrc.js
207
207
  */
208
- async function newProject(baseDir, type, args, additionalProps) {
208
+ async function newProject(baseDir, type, args) {
209
+ var _a;
209
210
  // convert command line arguments to project props using type information
210
211
  const props = commandLineToProps(baseDir, type, args);
211
- // merge in additional props if specified
212
- for (const [k, v] of Object.entries(additionalProps !== null && additionalProps !== void 0 ? additionalProps : {})) {
213
- props[k] = v;
214
- }
215
- create_1.createProject({
216
- dir: baseDir,
217
- type,
218
- params: props,
219
- comments: args.comments ? option_hints_1.NewProjectOptionHints.FEATURED : option_hints_1.NewProjectOptionHints.NONE,
212
+ projects_1.Projects.createProject({
213
+ dir: (_a = props.outdir) !== null && _a !== void 0 ? _a : baseDir,
214
+ projectFqn: type.fqn,
215
+ projectOptions: props,
216
+ optionHints: args.comments ? option_hints_1.NewProjectOptionHints.FEATURED : option_hints_1.NewProjectOptionHints.NONE,
220
217
  synth: args.synth,
221
218
  post: args.post,
222
219
  });
220
+ if (fs.existsSync(path.join(baseDir, 'package.json')) && args.post) {
221
+ util_1.exec('npm run eslint --if-present', { cwd: baseDir });
222
+ }
223
223
  if (args.git) {
224
224
  const git = (cmd) => util_1.exec(`git ${cmd}`, { cwd: baseDir });
225
225
  git('init');
@@ -228,47 +228,5 @@ async function newProject(baseDir, type, args, additionalProps) {
228
228
  git('branch -M main');
229
229
  }
230
230
  }
231
- /**
232
- * Installs the npm module (through `npm install`) to node_modules under `projectDir`.
233
- * @param spec The npm package spec (e.g. `foo@^1.2` or `foo@/var/folders/8k/qcw0ls5pv_ph0000gn/T/projen-RYurCw/pkg.tgz`)
234
- * @returns The installed package name (e.g. `@foo/bar`)
235
- */
236
- function installPackage(baseDir, spec) {
237
- const packageJsonPath = path.join(baseDir, 'package.json');
238
- const packageJsonExisted = fs.existsSync(packageJsonPath);
239
- if (!packageJsonExisted) {
240
- // Make sure we have a package.json to read from later
241
- util_1.exec('npm init --yes', { cwd: baseDir });
242
- }
243
- logging.info(`installing external module ${spec}...`);
244
- util_1.exec(renderInstallCommand(baseDir, spec), { cwd: baseDir });
245
- // Get the true installed package name
246
- const packageJson = fs.readJsonSync(packageJsonPath);
247
- const packageName = Object.keys(packageJson.devDependencies).find(name => name !== 'projen');
248
- if (!packageName) {
249
- throw new Error(`Unable to resolve package name from spec ${spec}`);
250
- }
251
- // if package.json did not exist before calling `npm install`, we should remove it
252
- // so we can start off clean.
253
- if (!packageJsonExisted) {
254
- fs.removeSync(packageJsonPath);
255
- }
256
- return packageName;
257
- }
258
- /**
259
- * Render a command to install an npm package.
260
- *
261
- * Engine checks are ignorred at this point so that the module can be installed
262
- * regardless of the environment. This was needed to unblock the upgrade of the
263
- * minimum node version of projen, but also okay generally because engine checks
264
- * will be performed later and for all eternety.
265
- *
266
- * @param dir Base directory
267
- * @param module The module to install (e.g. foo@^1.2)
268
- * @returns The string that includes the install command ("npm install ...")
269
- */
270
- function renderInstallCommand(dir, module) {
271
- return `npm install --save-dev -f --no-package-lock --prefix=${dir} ${module}`;
272
- }
273
231
  module.exports = new Command();
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL25ldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsK0JBQStCO0FBQy9CLDZDQUE2QztBQUM3Qyx5Q0FBeUM7QUFDekMscURBQTJEO0FBQzNELHFDQUE0QztBQUM1QyxzQ0FBMEM7QUFDMUMsc0NBQTRDO0FBRTVDLE1BQU0sT0FBTztJQUFiO1FBQ2tCLFlBQU8sR0FBRyxtQ0FBbUMsQ0FBQztRQUM5QyxhQUFRLEdBQUcsOEJBQThCLENBQUM7SUE0RTVELENBQUM7SUExRVEsT0FBTyxDQUFDLElBQWdCOztRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsUUFBUSxFQUFFLDZGQUE2RixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xLLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSx3Q0FBd0MsRUFBRSxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLDhFQUE4RSxFQUFFLENBQUMsQ0FBQztRQUNsSixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsc0hBQXNILEVBQUUsQ0FBQyxDQUFDO1FBQ2xMLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSx1RUFBdUUsRUFBRSxDQUFDLENBQUM7UUFDdEksSUFBSSxD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Q3JELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztJQUU3RixJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLElBQUksRUFBRSxDQUFDLENBQUM7S0FDckU7SUFFRCxrRkFBa0Y7SUFDbEYsNkJBQTZCO0lBQzdCLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtRQUN2QixFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ2hDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxHQUFXLEVBQUUsTUFBYztJQUN2RCxPQUFPLHdEQUF3RCxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7QUFDakYsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5pbXBvcnQgKiBhcyBpbnZlbnRvcnkgZnJvbSAnLi4vLi4vaW52ZW50b3J5JztcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSAnLi4vLi4vbG9nZ2luZyc7XG5pbXBvcnQgeyBOZXdQcm9qZWN0T3B0aW9uSGludHMgfSBmcm9tICcuLi8uLi9vcHRpb24taGludHMnO1xuaW1wb3J0IHsgZXhlYywgaXNUcnV0aHkgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IGNyZWF0ZVByb2plY3QgfSBmcm9tICcuLi9jcmVhdGUnO1xuaW1wb3J0IHsgdHJ5UHJvY2Vzc01hY3JvIH0gZnJvbSAnLi4vbWFjcm9zJztcblxuY2xhc3MgQ29tbWFuZCBpbXBsZW1lbnRzIHlhcmdzLkNvbW1hbmRNb2R1bGUge1xuICBwdWJsaWMgcmVhZG9ubHkgY29tbWFuZCA9ICduZXcgW1BST0pFQ1QtVFlQRS1OQU1FXSBbT1BUSU9OU10nO1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpYmUgPSAnQ3JlYXRlcyBhIG5ldyBwcm9qZW4gcHJvamVjdCc7XG5cbiAgcHVibGljIGJ1aWxkZXIoYXJnczogeWFyZ3MuQXJndikge1xuICAgIGFyZ3MucG9zaXRpb25hbCgnUFJPSkVDVC1UWVBFLU5BTUUnLCB7IGRlc2NyaWJlOiAnb3B0aW9uYWwgb25seSB3aGVuIC0tZnJvbSBpcyB1c2VkIGFuZCB0aGVyZSBpcyBhIHNpbmdsZSBwcm9qZWN0IHR5cGUgaW4gdGhlIGV4dGVybmFsIG1vZHVsZScsIHR5cGU6ICdzdHJpbmcnIH0pO1xuICAgIGFyZ3Mub3B0aW9uKCdzeW50aCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlLCBkZXNjOiAnU3ludGhlc2l6ZSBhZnRlciBjcmVhdGluZyAucHJvamVucmMuanMnIH0pO1xuICAgIGFyZ3Mub3B0aW9uKCdjb21tZW50cycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlLCBkZXNjOiAnSW5jbHVkZSBjb21tZW50ZWQgb3V0IG9wdGlvbnMgaW4gLnByb2plbnJjLmpzICh1c2UgLS1uby1jb21tZW50cyB0byBkaXNhYmxlKScgfSk7XG4gICAgYXJncy5vcHRpb24oJ2Zyb20nLCB7IHR5cGU6ICdzdHJpbmcnLCBhbGlhczogJ2YnLCBkZXNjOiAnRXh0ZXJuYWwganNpaSBucG0gbW9kdWxlIHRvIGNyZWF0ZSBwcm9qZWN0IGZyb20uIFN1cHBvcnRzIGFueSBwYWNrYWdlIHNwZWMgc3VwcG9ydGVkIGJ5IG5wbSAoc3VjaCBhcyBcIm15LXBhY2tAXjIuMFwiKScgfSk7XG4gICAgYXJncy5vcHRpb24oJ2dpdCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlLCBkZXNjOiAnUnVuIGBnaXQgaW5pdGAgYW5kIGNyZWF0ZSBhbiBpbml0aWFsIGNvbW1pdCAodXNlIC0tbm8tZ2l0IHRvIGRpc2FibGUpJyB9KTtcbiAgICBhcmdzLmV4YW1wbGUoJ3Byb2plbiBuZXcgYXdzY2RrLWFwcC10cycsICdDcmVhdGVzIGEgbmV3IHByb2plY3Qgb2YgYnVpbHQtaW4gdHlwZSBcImF3c2Nkay1hcHAtdHNcIicpO1xuICAgIGFyZ3MuZXhhbXBsZSgncHJvamVuIG5ldyAtLWZyb20gcHJvamVuLXZ1ZUBeMicsICdDcmVhdGVzIGEgbmV3IHByb2plY3QgZnJvbSBhbiBleHRlcm5hbCBtb2R1bGUgXCJwcm9qZW4tdnVlXCIgd2l0aCB0aGUgc3BlY2lmaWVkIHZlcnNpb24nKTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiBpbnZlbnRvcnkuZGlzY292ZXIoKSkge1xuICAgICAgYXJncy5jb21tYW5kKHR5cGUucGppZCwgdHlwZS5kb2NzID8/ICcnLCB7XG4gICAgICAgIGJ1aWxkZXI6IGNhcmdzID0+IHtcbiAgICAgICAgICBjYXJncy5zaG93SGVscE9uRmFpbChmYWxzZSk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB0eXBlLm9wdGlvbnMgPz8gW10pIHtcbiAgICAgICAgICAgIGlmIChvcHRpb24udHlwZSAhPT0gJ3N0cmluZycgJiYgb3B0aW9uLnR5cGUgIT09ICdudW1iZXInICYmIG9wdGlvbi50eXBlICE9PSAnYm9vbGVhbicgJiYgb3B0aW9uLmtpbmQgIT09ICdlbnVtJykge1xuICAgICAgICAgICAgICBjb250aW51ZTsgLy8gd2Ugb25seSBzdXBwb3J0IHByaW1pdGl2ZSBhbmQgZW51bSBmaWVsZHMgYXMgY29tbWFuZCBsaW5lIG9wdGlvbnNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRlc2MgPSBbb3B0aW9uLmRvY3M/LnJlcGxhY2UoL1xcICpcXC4kLywgJycpID8/ICcnXTtcblxuICAgICAgICAgICAgY29uc3QgcmVxdWlyZWQgPSAhb3B0aW9uLm9wdGlvbmFsO1xuICAgICAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbi5kZWZhdWx0ICYmIG9wdGlvbi5kZWZhdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBpZiAoIXJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGZpZWxkIGlzIG5vdCByZXF1aXJlZCwganVzdCBkZXNjcmliZSB0aGUgZGVmYXVsdCBidXQgZG9uJ3QgYWN0dWFsbHkgYXNzaWduIGEgdmFsdWVcbiAgICAgICAgICAgICAgICBkZXNjLnB1c2goYFtkZWZhdWx0OiAke29wdGlvbi5kZWZhdWx0LnJlcGxhY2UoL15cXCAqLS8sICcnKS5yZXBsYWNlKC9cXC4kLywgJycpLnRyaW0oKX1dYCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCB3ZSBoYXZlIGEgQGRlZmF1bHQsIHRoZW4gYXNzaWduXG4gICAgICAgICAgICAgICAgLy8gdGhlIHZhbHVlIGhlcmUgc28gaXQgYXBwZWFycyBpbiBgLS1oZWxwYFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHJlbmRlckRlZmF1bHQocHJvY2Vzcy5jd2QoKSwgb3B0aW9uLmRlZmF1bHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFyZ1R5cGUgPSBvcHRpb24ua2luZCA9PT0gJ2VudW0nID8gJ3N0cmluZycgOiBvcHRpb24udHlwZTtcblxuICAgICAgICAgICAgY2FyZ3Mub3B0aW9uKG9wdGlvbi5zd2l0Y2gsIHtcbiAgICAgICAgICAgICAgZ3JvdXA6IHJlcXVpcmVkID8gJ1JlcXVpcmVkOicgOiAnT3B0aW9uYWw6JyxcbiAgICAgICAgICAgICAgdHlwZTogKGFyZ1R5cGUgYXMgJ3N0cmluZycgfCAnYm9vbGVhbicgfCAnbnVtYmVyJyksXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjLmpvaW4oJyAnKSxcbiAgICAgICAgICAgICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjYXJncztcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcjogYXJndiA9PiBuZXdQcm9qZWN0KHByb2Nlc3MuY3dkKCksIHR5cGUsIGFyZ3YpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlcihhcmdzOiBhbnkpIHtcbiAgICAvLyBoYW5kbGUgLS1mcm9tIHdoaWNoIG1lYW5zIHdlIHdhbnQgdG8gZmlyc3QgaW5zdGFsbCBhIGpzaWkgbW9kdWxlIGFuZCB0aGVuXG4gICAgLy8gY3JlYXRlIGEgcHJvamVjdCBkZWZpbmVkIHdpdGhpbiB0aGlzIG1vZHVsZS5cbiAgICBpZiAoYXJncy5mcm9tKSB7XG4gICAgICByZXR1cm4gbmV3UHJvamVjdEZyb21Nb2R1bGUocHJvY2Vzcy5jd2QoKSwgYXJncy5mcm9tLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvLyBwcm9qZWN0IHR5cGUgaXMgZGVmaW5lZCBidXQgd2FzIG5vdCBtYXRjaGVkIGJ5IHlhcmdzLCBzbyBwcmludCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgdHlwZXNcbiAgICBpZiAoYXJncy5wcm9qZWN0VHlwZU5hbWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBJbnZhbGlkIHByb2plY3QgdHlwZSAke2FyZ3MucHJvamVjdFR5cGVOYW1lfS4gU3VwcG9ydGVkIHR5cGVzOmApO1xuICAgICAgZm9yIChjb25zdCBwamlkIG9mIGludmVudG9yeS5kaXNjb3ZlcigpLm1hcCh4ID0+IHgucGppZCkpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtwamlkfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZXMgdGhlIHVzZSBjYXNlIHRoYXQgbm90aGluZyB3YXMgc3BlY2lmaWVkIHNpbmNlIFBST0pFQ1QtVFlQRSBpcyBub3cgYW4gb3B0aW9uYWwgcG9zaXRpb25hbCBwYXJhbWV0ZXJcbiAgICB5YXJncy5zaG93SGVscCgpO1xuICB9XG59XG5cblxuLyoqXG4gKiBHaXZlbiBhIHZhbHVlIGZyb20gXCJAZGVmYXVsdFwiLCBwcm9jZXNzZXMgbWFjcm9zIGFuZCByZXR1cm5zIGEgc3RyaW5naWZpZWRcbiAqIChxdW90ZWQpIHJlc3VsdC5cbiAqXG4gKiBAcmV0dXJucyBhIGphdmFzY3JpcHQgcHJpbWl0aXZlIChjb3VsZCBiZSBhIHN0cmluZywgbnVtYmVyIG9yIGJvb2xlYW4pXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckRlZmF1bHQoY3dkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHRyeVByb2Nlc3NNYWNybyhjd2QsIHZhbHVlKSA/PyBKU09OLnBhcnNlKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB5YXJncyBjb21tYW5kIGxpbmUgc3dpdGNoZXMgdG8gcHJvamVjdCB0eXBlIHByb3BzLlxuICogQHBhcmFtIHR5cGUgUHJvamVjdCB0eXBlXG4gKiBAcGFyYW0gYXJndiBDb21tYW5kIGxpbmUgc3dpdGNoZXNcbiAqL1xuZnVuY3Rpb24gY29tbWFuZExpbmVUb1Byb3BzKGN3ZDogc3RyaW5nLCB0eXBlOiBpbnZlbnRvcnkuUHJvamVjdFR5cGUsIGFyZ3Y6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGNvbnN0IHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgLy8gaW5pdGlhbGl6ZSBwcm9wcyB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gIGZvciAoY29uc3QgcHJvcCBvZiB0eXBlLm9wdGlvbnMpIHtcbiAgICBpZiAocHJvcC5kZWZhdWx0ICYmIHByb3AuZGVmYXVsdCAhPT0gJ3VuZGVmaW5lZCcgJiYgIXByb3Aub3B0aW9uYWwpIHtcbiAgICAgIHByb3BzW3Byb3AubmFtZV0gPSByZW5kZXJEZWZhdWx0KGN3ZCwgcHJvcC5kZWZhdWx0KTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IFthcmcsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhcmd2KSkge1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiB0eXBlLm9wdGlvbnMpIHtcbiAgICAgIGlmIChwcm9wLnN3aXRjaCA9PT0gYXJnKSB7XG4gICAgICAgIGxldCBjdXJyID0gcHJvcHM7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gWy4uLnByb3AucGF0aF07XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3QgcCA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY3VycltwXSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyW3BdID0gY3VycltwXSA/PyB7fTtcbiAgICAgICAgICAgIGN1cnIgPSBjdXJyW3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9wcztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgcHJvamVjdCBmcm9tIGFuIGV4dGVybmFsIG1vZHVsZS5cbiAqXG4gKiBAcGFyYW0gc3BlYyBUaGUgbmFtZSBvZiB0aGUgZXh0ZXJuYWwgbW9kdWxlIHRvIGxvYWRcbiAqIEBwYXJhbSBhcmdzIENvbW1hbmQgbGluZSBhcmd1bWVudHMgKGluY2wuIHByb2plY3QgdHlwZSlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbmV3UHJvamVjdEZyb21Nb2R1bGUoYmFzZURpcjogc3RyaW5nLCBzcGVjOiBzdHJpbmcsIGFyZ3M6IGFueSkge1xuICBjb25zdCBwcm9qZW5WZXJzaW9uID0gYXJncy5wcm9qZW5WZXJzaW9uID8/ICdsYXRlc3QnO1xuICBjb25zdCBpbnN0YWxsQ29tbWFuZCA9IHJlbmRlckluc3RhbGxDb21tYW5kKGJhc2VEaXIsIGBwcm9qZW5AJHtwcm9qZW5WZXJzaW9ufWApO1xuICBpZiAoYXJncy5wcm9qZW5WZXJzaW9uKSB7XG4gICAgZXhlYyhpbnN0YWxsQ29tbWFuZCwgeyBjd2Q6IGJhc2VEaXIgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZG8gbm90IG92ZXJ3cml0ZSBleGlzdGluZyBpbnN0YWxsYXRpb25cbiAgICBleGVjKGBucG0gbHMgLS1wcmVmaXg9JHtiYXNlRGlyfSAtLWRlcHRoPTAgLS1wYXR0ZXJuIHByb2plbiB8fCAke2luc3RhbGxDb21tYW5kfWAsIHsgY3dkOiBiYXNlRGlyIH0pO1xuICB9XG5cbiAgY29uc3QgbW9kdWxlTmFtZSA9IGluc3RhbGxQYWNrYWdlKGJhc2VEaXIsIHNwZWMpO1xuXG4gIC8vIEZpbmQgdGhlIGp1c3QgaW5zdGFsbGVkIHBhY2thZ2UgYW5kIGRpc2NvdmVyIHRoZSByZXN0IHJlY3Vyc2l2ZWx5IGZyb20gdGhpcyBwYWNrYWdlIGZvbGRlclxuICBjb25zdCBtb2R1bGVEaXIgPSBwYXRoLmRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKGAke21vZHVsZU5hbWV9Ly5qc2lpYCwge1xuICAgIHBhdGhzOiBbXG4gICAgICBiYXNlRGlyLFxuICAgIF0sXG4gIH0pKTtcblxuICAvLyBPbmx5IGxlYXZlIHByb2plY3RzIGZyb20gdGhlIG1haW4gKHJlcXVlc3RlZCkgcGFja2FnZVxuICBjb25zdCBwcm9qZWN0cyA9IGludmVudG9yeVxuICAgIC5kaXNjb3Zlcihtb2R1bGVEaXIpXG4gICAgLmZpbHRlcih4ID0+IHgubW9kdWxlTmFtZSA9PT0gbW9kdWxlTmFtZSk7IC8vIE9ubHkgbGlzdCBwcm9qZWN0IHR5cGVzIGZyb20gdGhlIHJlcXVlc3RlZCAnZnJvbScgbW9kdWxlXG5cbiAgaWYgKHByb2plY3RzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHByb2plY3RzIGZvdW5kIGFmdGVyIGluc3RhbGxpbmcgJHtzcGVjfS4gVGhlIG1vZHVsZSBtdXN0IGV4cG9ydCBhdCBsZWFzdCBvbmUgY2xhc3Mgd2hpY2ggZXh0ZW5kcyBwcm9qZW4uUHJvamVjdGApO1xuICB9XG5cbiAgY29uc3QgcmVxdWVzdGVkID0gYXJncy5wcm9qZWN0VHlwZU5hbWU7XG4gIGNvbnN0IHR5cGVzID0gcHJvamVjdHMubWFwKHAgPT4gcC5wamlkKTtcblxuICAvLyBpZiB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhIHByb2plY3QgdHlwZSBidXQgdGhlIG1vZHVsZSBoYXMgbW9yZSB0aGFuIG9uZSwgd2UgbmVlZCB0aGVtIHRvIHRlbGwgdXMgd2hpY2ggb25lLi4uXG4gIGlmICghcmVxdWVzdGVkICYmIHByb2plY3RzLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGxlIHByb2plY3RzIGZvdW5kIGFmdGVyIGluc3RhbGxpbmcgJHtzcGVjfTogJHt0eXBlcy5qb2luKCcsJyl9LiBQbGVhc2Ugc3BlY2lmeSBhIHByb2plY3QgbmFtZS5cXG5FeGFtcGxlOiBucHggcHJvamVuIG5ldyAtLWZyb20gJHtzcGVjfSAke3R5cGVzWzBdfWApO1xuICB9XG5cbiAgLy8gaWYgdXNlciBkaWQgbm90IHNwZWNpZnkgYSB0eXBlIChhbmQgd2Uga25vdyB3ZSBoYXZlIG9ubHkgb25lKSwgdGhlIHNlbGVjdCBpdC4gb3RoZXJ3aXNlLCBzZWFyY2ggYnkgcGppZC5cbiAgY29uc3QgdHlwZSA9ICFyZXF1ZXN0ZWQgPyBwcm9qZWN0c1swXSA6IHByb2plY3RzLmZpbmQocCA9PiBwLnBqaWQgPT09IHJlcXVlc3RlZCk7XG4gIGlmICghdHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUHJvamVjdCB0eXBlICR7cmVxdWVzdGVkfSBub3QgZm91bmQuIEZvdW5kICR7dHlwZXMuam9pbignLCcpfWApO1xuICB9XG5cbiAgZm9yIChjb25zdCBvcHRpb24gb2YgdHlwZS5vcHRpb25zID8/IFtdKSB7XG4gICAgaWYgKG9wdGlvbi50eXBlICE9PSAnc3RyaW5nJyAmJiBvcHRpb24udHlwZSAhPT0gJ251bWJlcicgJiYgb3B0aW9uLnR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgY29udGludWU7IC8vIHdlIGRvbid0IHN1cHBvcnQgbm9uLXByaW1pdGl2ZSBmaWVsZHMgYXMgY29tbWFuZCBsaW5lIG9wdGlvbnNcbiAgICB9XG5cbiAgICBpZiAoYXJnc1tvcHRpb24ubmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbi50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICBhcmdzW29wdGlvbi5uYW1lXSA9IHBhcnNlSW50KGFyZ3Nbb3B0aW9uLm5hbWVdKTtcbiAgICAgICAgYXJnc1tvcHRpb24uc3dpdGNoXSA9IGFyZ3Nbb3B0aW9uLm5hbWVdO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGFyZ3Nbb3B0aW9uLm5hbWVdO1xuICAgICAgICBjb25zdCBzYWZlID0gdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyBpc1RydXRoeShyYXcpIDogcmF3O1xuICAgICAgICBhcmdzW29wdGlvbi5uYW1lXSA9IHNhZmU7XG4gICAgICAgIGFyZ3Nbb3B0aW9uLnN3aXRjaF0gPSBzYWZlO1xuICAgICAgfVxuICAgICAgY29udGludWU7IC8vIGRvIG5vdCBvdmVyd3JpdGUgcGFzc2VkIGFyZ3VtZW50c1xuICAgIH1cblxuICAgIGlmIChvcHRpb24uZGVmYXVsdCAmJiBvcHRpb24uZGVmYXVsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICghb3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHJlbmRlckRlZmF1bHQoYmFzZURpciwgb3B0aW9uLmRlZmF1bHQpO1xuICAgICAgICBhcmdzW29wdGlvbi5uYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgYXJnc1tvcHRpb24uc3dpdGNoXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBpbmNsdWRlIGEgZGV2IGRlcGVuZGVuY3kgZm9yIHRoZSBleHRlcm5hbCBtb2R1bGVcbiAgYXdhaXQgbmV3UHJvamVjdChiYXNlRGlyLCB0eXBlLCBhcmdzLCB7XG4gICAgZGV2RGVwczogW3NwZWNdLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgcHJvamVjdC5cbiAqIEBwYXJhbSB0eXBlIFByb2plY3QgdHlwZVxuICogQHBhcmFtIGFyZ3MgQ29tbWFuZCBsaW5lIGFyZ3VtZW50c1xuICogQHBhcmFtIGFkZGl0aW9uYWxQcm9wcyBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gaW5jbHVkZSBpbiAucHJvamVucmMuanNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbmV3UHJvamVjdChiYXNlRGlyOiBzdHJpbmcsIHR5cGU6IGludmVudG9yeS5Qcm9qZWN0VHlwZSwgYXJnczogYW55LCBhZGRpdGlvbmFsUHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gIC8vIGNvbnZlcnQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBwcm9qZWN0IHByb3BzIHVzaW5nIHR5cGUgaW5mb3JtYXRpb25cbiAgY29uc3QgcHJvcHMgPSBjb21tYW5kTGluZVRvUHJvcHMoYmFzZURpciwgdHlwZSwgYXJncyk7XG5cbiAgLy8gbWVyZ2UgaW4gYWRkaXRpb25hbCBwcm9wcyBpZiBzcGVjaWZpZWRcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoYWRkaXRpb25hbFByb3BzID8/IHt9KSkge1xuICAgIHByb3BzW2tdID0gdjtcbiAgfVxuXG4gIGNyZWF0ZVByb2plY3Qoe1xuICAgIGRpcjogYmFzZURpcixcbiAgICB0eXBlLFxuICAgIHBhcmFtczogcHJvcHMsXG4gICAgY29tbWVudHM6IGFyZ3MuY29tbWVudHMgPyBOZXdQcm9qZWN0T3B0aW9uSGludHMuRkVBVFVSRUQgOiBOZXdQcm9qZWN0T3B0aW9uSGludHMuTk9ORSxcbiAgICBzeW50aDogYXJncy5zeW50aCxcbiAgICBwb3N0OiBhcmdzLnBvc3QsXG4gIH0pO1xuXG4gIGlmIChhcmdzLmdpdCkge1xuICAgIGNvbnN0IGdpdCA9IChjbWQ6IHN0cmluZykgPT4gZXhlYyhgZ2l0ICR7Y21kfWAsIHsgY3dkOiBiYXNlRGlyIH0pO1xuICAgIGdpdCgnaW5pdCcpO1xuICAgIGdpdCgnYWRkIC4nKTtcbiAgICBnaXQoJ2NvbW1pdCAtLWFsbG93LWVtcHR5IC1tIFwiY2hvcmU6IHByb2plY3QgY3JlYXRlZCB3aXRoIHByb2plblwiJyk7XG4gICAgZ2l0KCdicmFuY2ggLU0gbWFpbicpO1xuICB9XG59XG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIG5wbSBtb2R1bGUgKHRocm91Z2ggYG5wbSBpbnN0YWxsYCkgdG8gbm9kZV9tb2R1bGVzIHVuZGVyIGBwcm9qZWN0RGlyYC5cbiAqIEBwYXJhbSBzcGVjIFRoZSBucG0gcGFja2FnZSBzcGVjIChlLmcuIGBmb29AXjEuMmAgb3IgYGZvb0AvdmFyL2ZvbGRlcnMvOGsvcWN3MGxzNXB2X3BoMDAwMGduL1QvcHJvamVuLVJZdXJDdy9wa2cudGd6YClcbiAqIEByZXR1cm5zIFRoZSBpbnN0YWxsZWQgcGFja2FnZSBuYW1lIChlLmcuIGBAZm9vL2JhcmApXG4gKi9cbmZ1bmN0aW9uIGluc3RhbGxQYWNrYWdlKGJhc2VEaXI6IHN0cmluZywgc3BlYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGJhc2VEaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgY29uc3QgcGFja2FnZUpzb25FeGlzdGVkID0gZnMuZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpO1xuXG4gIGlmICghcGFja2FnZUpzb25FeGlzdGVkKSB7XG4gICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBwYWNrYWdlLmpzb24gdG8gcmVhZCBmcm9tIGxhdGVyXG4gICAgZXhlYygnbnBtIGluaXQgLS15ZXMnLCB7IGN3ZDogYmFzZURpciB9KTtcbiAgfVxuXG4gIGxvZ2dpbmcuaW5mbyhgaW5zdGFsbGluZyBleHRlcm5hbCBtb2R1bGUgJHtzcGVjfS4uLmApO1xuICBleGVjKHJlbmRlckluc3RhbGxDb21tYW5kKGJhc2VEaXIsIHNwZWMpLCB7IGN3ZDogYmFzZURpciB9KTtcblxuICAvLyBHZXQgdGhlIHRydWUgaW5zdGFsbGVkIHBhY2thZ2UgbmFtZVxuICBjb25zdCBwYWNrYWdlSnNvbiA9IGZzLnJlYWRKc29uU3luYyhwYWNrYWdlSnNvblBhdGgpO1xuICBjb25zdCBwYWNrYWdlTmFtZSA9IE9iamVjdC5rZXlzKHBhY2thZ2VKc29uLmRldkRlcGVuZGVuY2llcykuZmluZChuYW1lID0+IG5hbWUgIT09ICdwcm9qZW4nKTtcblxuICBpZiAoIXBhY2thZ2VOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSBwYWNrYWdlIG5hbWUgZnJvbSBzcGVjICR7c3BlY31gKTtcbiAgfVxuXG4gIC8vIGlmIHBhY2thZ2UuanNvbiBkaWQgbm90IGV4aXN0IGJlZm9yZSBjYWxsaW5nIGBucG0gaW5zdGFsbGAsIHdlIHNob3VsZCByZW1vdmUgaXRcbiAgLy8gc28gd2UgY2FuIHN0YXJ0IG9mZiBjbGVhbi5cbiAgaWYgKCFwYWNrYWdlSnNvbkV4aXN0ZWQpIHtcbiAgICBmcy5yZW1vdmVTeW5jKHBhY2thZ2VKc29uUGF0aCk7XG4gIH1cblxuICByZXR1cm4gcGFja2FnZU5hbWU7XG59XG5cbi8qKlxuICogUmVuZGVyIGEgY29tbWFuZCB0byBpbnN0YWxsIGFuIG5wbSBwYWNrYWdlLlxuICpcbiAqIEVuZ2luZSBjaGVja3MgYXJlIGlnbm9ycmVkIGF0IHRoaXMgcG9pbnQgc28gdGhhdCB0aGUgbW9kdWxlIGNhbiBiZSBpbnN0YWxsZWRcbiAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGVudmlyb25tZW50LiBUaGlzIHdhcyBuZWVkZWQgdG8gdW5ibG9jayB0aGUgdXBncmFkZSBvZiB0aGVcbiAqIG1pbmltdW0gbm9kZSB2ZXJzaW9uIG9mIHByb2plbiwgYnV0IGFsc28gb2theSBnZW5lcmFsbHkgYmVjYXVzZSBlbmdpbmUgY2hlY2tzXG4gKiB3aWxsIGJlIHBlcmZvcm1lZCBsYXRlciBhbmQgZm9yIGFsbCBldGVybmV0eS5cbiAqXG4gKiBAcGFyYW0gZGlyIEJhc2UgZGlyZWN0b3J5XG4gKiBAcGFyYW0gbW9kdWxlIFRoZSBtb2R1bGUgdG8gaW5zdGFsbCAoZS5nLiBmb29AXjEuMilcbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUgaW5zdGFsbCBjb21tYW5kIChcIm5wbSBpbnN0YWxsIC4uLlwiKVxuICovXG5mdW5jdGlvbiByZW5kZXJJbnN0YWxsQ29tbWFuZChkaXI6IHN0cmluZywgbW9kdWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYG5wbSBpbnN0YWxsIC0tc2F2ZS1kZXYgLWYgLS1uby1wYWNrYWdlLWxvY2sgLS1wcmVmaXg9JHtkaXJ9ICR7bW9kdWxlfWA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IENvbW1hbmQoKTtcbiJdfQ==
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL25ldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsK0JBQStCO0FBQy9CLDZDQUE2QztBQUM3QyxxREFBMkQ7QUFDM0QsNkNBQTBDO0FBQzFDLHFDQUE0QztBQUM1QyxzQ0FBNEM7QUFDNUMsa0NBQStEO0FBRS9ELE1BQU0sT0FBTztJQUFiO1FBQ2tCLFlBQU8sR0FBRyxtQ0FBbUMsQ0FBQztRQUM5QyxhQUFRLEdBQUcsOEJBQThCLENBQUM7SUE0RTVELENBQUM7SUExRVEsT0FBTyxDQUFDLElBQWdCOztRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsUUFBUSxFQUFFLDZGQUE2RixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xLLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSx3Q0FBd0MsRUFBRSxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLDhFQUE4RSxFQUFFLENBQUMsQ0FBQztRQUNsSixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsc0hBQXNILEVBQUUsQ0FBQyxDQUFDO1FBQ2xMLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSx1RUFBdUUsRUFBRSxDQUFDLENBQUM7UUFDdEksSUFBSSxD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LENBQUMsS0FBSztRQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7S0FDaEIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtRQUNsRSxXQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUN2RDtJQUVELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNaLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNaLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNiLEdBQUcsQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1FBQ3BFLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3ZCO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5pbXBvcnQgKiBhcyBpbnZlbnRvcnkgZnJvbSAnLi4vLi4vaW52ZW50b3J5JztcbmltcG9ydCB7IE5ld1Byb2plY3RPcHRpb25IaW50cyB9IGZyb20gJy4uLy4uL29wdGlvbi1oaW50cyc7XG5pbXBvcnQgeyBQcm9qZWN0cyB9IGZyb20gJy4uLy4uL3Byb2plY3RzJztcbmltcG9ydCB7IGV4ZWMsIGlzVHJ1dGh5IH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyB0cnlQcm9jZXNzTWFjcm8gfSBmcm9tICcuLi9tYWNyb3MnO1xuaW1wb3J0IHsgaW5zdGFsbFBhY2thZ2UsIHJlbmRlckluc3RhbGxDb21tYW5kIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmNsYXNzIENvbW1hbmQgaW1wbGVtZW50cyB5YXJncy5Db21tYW5kTW9kdWxlIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQgPSAnbmV3IFtQUk9KRUNULVRZUEUtTkFNRV0gW09QVElPTlNdJztcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaWJlID0gJ0NyZWF0ZXMgYSBuZXcgcHJvamVuIHByb2plY3QnO1xuXG4gIHB1YmxpYyBidWlsZGVyKGFyZ3M6IHlhcmdzLkFyZ3YpIHtcbiAgICBhcmdzLnBvc2l0aW9uYWwoJ1BST0pFQ1QtVFlQRS1OQU1FJywgeyBkZXNjcmliZTogJ29wdGlvbmFsIG9ubHkgd2hlbiAtLWZyb20gaXMgdXNlZCBhbmQgdGhlcmUgaXMgYSBzaW5nbGUgcHJvamVjdCB0eXBlIGluIHRoZSBleHRlcm5hbCBtb2R1bGUnLCB0eXBlOiAnc3RyaW5nJyB9KTtcbiAgICBhcmdzLm9wdGlvbignc3ludGgnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogdHJ1ZSwgZGVzYzogJ1N5bnRoZXNpemUgYWZ0ZXIgY3JlYXRpbmcgLnByb2plbnJjLmpzJyB9KTtcbiAgICBhcmdzLm9wdGlvbignY29tbWVudHMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogdHJ1ZSwgZGVzYzogJ0luY2x1ZGUgY29tbWVudGVkIG91dCBvcHRpb25zIGluIC5wcm9qZW5yYy5qcyAodXNlIC0tbm8tY29tbWVudHMgdG8gZGlzYWJsZSknIH0pO1xuICAgIGFyZ3Mub3B0aW9uKCdmcm9tJywgeyB0eXBlOiAnc3RyaW5nJywgYWxpYXM6ICdmJywgZGVzYzogJ0V4dGVybmFsIGpzaWkgbnBtIG1vZHVsZSB0byBjcmVhdGUgcHJvamVjdCBmcm9tLiBTdXBwb3J0cyBhbnkgcGFja2FnZSBzcGVjIHN1cHBvcnRlZCBieSBucG0gKHN1Y2ggYXMgXCJteS1wYWNrQF4yLjBcIiknIH0pO1xuICAgIGFyZ3Mub3B0aW9uKCdnaXQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogdHJ1ZSwgZGVzYzogJ1J1biBgZ2l0IGluaXRgIGFuZCBjcmVhdGUgYW4gaW5pdGlhbCBjb21taXQgKHVzZSAtLW5vLWdpdCB0byBkaXNhYmxlKScgfSk7XG4gICAgYXJncy5leGFtcGxlKCdwcm9qZW4gbmV3IGF3c2Nkay1hcHAtdHMnLCAnQ3JlYXRlcyBhIG5ldyBwcm9qZWN0IG9mIGJ1aWx0LWluIHR5cGUgXCJhd3NjZGstYXBwLXRzXCInKTtcbiAgICBhcmdzLmV4YW1wbGUoJ3Byb2plbiBuZXcgLS1mcm9tIHByb2plbi12dWVAXjInLCAnQ3JlYXRlcyBhIG5ldyBwcm9qZWN0IGZyb20gYW4gZXh0ZXJuYWwgbW9kdWxlIFwicHJvamVuLXZ1ZVwiIHdpdGggdGhlIHNwZWNpZmllZCB2ZXJzaW9uJyk7XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgaW52ZW50b3J5LmRpc2NvdmVyKCkpIHtcbiAgICAgIGFyZ3MuY29tbWFuZCh0eXBlLnBqaWQsIHR5cGUuZG9jcyA/PyAnJywge1xuICAgICAgICBidWlsZGVyOiBjYXJncyA9PiB7XG4gICAgICAgICAgY2FyZ3Muc2hvd0hlbHBPbkZhaWwoZmFsc2UpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgdHlwZS5vcHRpb25zID8/IFtdKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uLnNpbXBsZVR5cGUgIT09ICdzdHJpbmcnICYmIG9wdGlvbi5zaW1wbGVUeXBlICE9PSAnbnVtYmVyJyAmJiBvcHRpb24uc2ltcGxlVHlwZSAhPT0gJ2Jvb2xlYW4nICYmIG9wdGlvbi5raW5kICE9PSAnZW51bScpIHtcbiAgICAgICAgICAgICAgY29udGludWU7IC8vIHdlIG9ubHkgc3VwcG9ydCBwcmltaXRpdmUgYW5kIGVudW0gZmllbGRzIGFzIGNvbW1hbmQgbGluZSBvcHRpb25zXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBkZXNjID0gW29wdGlvbi5kb2NzPy5yZXBsYWNlKC9cXCAqXFwuJC8sICcnKSA/PyAnJ107XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkID0gIW9wdGlvbi5vcHRpb25hbDtcbiAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb24uZGVmYXVsdCAmJiBvcHRpb24uZGVmYXVsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgaWYgKCFyZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBmaWVsZCBpcyBub3QgcmVxdWlyZWQsIGp1c3QgZGVzY3JpYmUgdGhlIGRlZmF1bHQgYnV0IGRvbid0IGFjdHVhbGx5IGFzc2lnbiBhIHZhbHVlXG4gICAgICAgICAgICAgICAgZGVzYy5wdXNoKGBbZGVmYXVsdDogJHtvcHRpb24uZGVmYXVsdC5yZXBsYWNlKC9eXFwgKi0vLCAnJykucmVwbGFjZSgvXFwuJC8sICcnKS50cmltKCl9XWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBmaWVsZCBpcyByZXF1aXJlZCBhbmQgd2UgaGF2ZSBhIEBkZWZhdWx0LCB0aGVuIGFzc2lnblxuICAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBoZXJlIHNvIGl0IGFwcGVhcnMgaW4gYC0taGVscGBcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSByZW5kZXJEZWZhdWx0KHByb2Nlc3MuY3dkKCksIG9wdGlvbi5kZWZhdWx0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhcmdUeXBlID0gb3B0aW9uLmtpbmQgPT09ICdlbnVtJyA/ICdzdHJpbmcnIDogb3B0aW9uLnNpbXBsZVR5cGU7XG5cbiAgICAgICAgICAgIGNhcmdzLm9wdGlvbihvcHRpb24uc3dpdGNoLCB7XG4gICAgICAgICAgICAgIGdyb3VwOiByZXF1aXJlZCA/ICdSZXF1aXJlZDonIDogJ09wdGlvbmFsOicsXG4gICAgICAgICAgICAgIHR5cGU6IChhcmdUeXBlIGFzICdzdHJpbmcnIHwgJ2Jvb2xlYW4nIHwgJ251bWJlcicpLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzYy5qb2luKCcgJyksXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY2FyZ3M7XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXI6IGFyZ3YgPT4gbmV3UHJvamVjdChwcm9jZXNzLmN3ZCgpLCB0eXBlLCBhcmd2KSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZXIoYXJnczogYW55KSB7XG4gICAgLy8gaGFuZGxlIC0tZnJvbSB3aGljaCBtZWFucyB3ZSB3YW50IHRvIGZpcnN0IGluc3RhbGwgYSBqc2lpIG1vZHVsZSBhbmQgdGhlblxuICAgIC8vIGNyZWF0ZSBhIHByb2plY3QgZGVmaW5lZCB3aXRoaW4gdGhpcyBtb2R1bGUuXG4gICAgaWYgKGFyZ3MuZnJvbSkge1xuICAgICAgcmV0dXJuIG5ld1Byb2plY3RGcm9tTW9kdWxlKHByb2Nlc3MuY3dkKCksIGFyZ3MuZnJvbSwgYXJncyk7XG4gICAgfVxuXG4gICAgLy8gcHJvamVjdCB0eXBlIGlzIGRlZmluZWQgYnV0IHdhcyBub3QgbWF0Y2hlZCBieSB5YXJncywgc28gcHJpbnQgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHR5cGVzXG4gICAgaWYgKGFyZ3MucHJvamVjdFR5cGVOYW1lKSB7XG4gICAgICBjb25zb2xlLmxvZyhgSW52YWxpZCBwcm9qZWN0IHR5cGUgJHthcmdzLnByb2plY3RUeXBlTmFtZX0uIFN1cHBvcnRlZCB0eXBlczpgKTtcbiAgICAgIGZvciAoY29uc3QgcGppZCBvZiBpbnZlbnRvcnkuZGlzY292ZXIoKS5tYXAoeCA9PiB4LnBqaWQpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7cGppZH1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGVzIHRoZSB1c2UgY2FzZSB0aGF0IG5vdGhpbmcgd2FzIHNwZWNpZmllZCBzaW5jZSBQUk9KRUNULVRZUEUgaXMgbm93IGFuIG9wdGlvbmFsIHBvc2l0aW9uYWwgcGFyYW1ldGVyXG4gICAgeWFyZ3Muc2hvd0hlbHAoKTtcbiAgfVxufVxuXG5cbi8qKlxuICogR2l2ZW4gYSB2YWx1ZSBmcm9tIFwiQGRlZmF1bHRcIiwgcHJvY2Vzc2VzIG1hY3JvcyBhbmQgcmV0dXJucyBhIHN0cmluZ2lmaWVkXG4gKiAocXVvdGVkKSByZXN1bHQuXG4gKlxuICogQHJldHVybnMgYSBqYXZhc2NyaXB0IHByaW1pdGl2ZSAoY291bGQgYmUgYSBzdHJpbmcsIG51bWJlciBvciBib29sZWFuKVxuICovXG5mdW5jdGlvbiByZW5kZXJEZWZhdWx0KGN3ZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gIHJldHVybiB0cnlQcm9jZXNzTWFjcm8oY3dkLCB2YWx1ZSkgPz8gSlNPTi5wYXJzZSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgeWFyZ3MgY29tbWFuZCBsaW5lIHN3aXRjaGVzIHRvIHByb2plY3QgdHlwZSBwcm9wcy5cbiAqIEBwYXJhbSB0eXBlIFByb2plY3QgdHlwZVxuICogQHBhcmFtIGFyZ3YgQ29tbWFuZCBsaW5lIHN3aXRjaGVzXG4gKi9cbmZ1bmN0aW9uIGNvbW1hbmRMaW5lVG9Qcm9wcyhjd2Q6IHN0cmluZywgdHlwZTogaW52ZW50b3J5LlByb2plY3RUeXBlLCBhcmd2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8vIGluaXRpYWxpemUgcHJvcHMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICBmb3IgKGNvbnN0IHByb3Agb2YgdHlwZS5vcHRpb25zKSB7XG4gICAgaWYgKHByb3AuZGVmYXVsdCAmJiBwcm9wLmRlZmF1bHQgIT09ICd1bmRlZmluZWQnICYmICFwcm9wLm9wdGlvbmFsKSB7XG4gICAgICBwcm9wc1twcm9wLm5hbWVdID0gcmVuZGVyRGVmYXVsdChjd2QsIHByb3AuZGVmYXVsdCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbYXJnLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXJndikpIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgdHlwZS5vcHRpb25zKSB7XG4gICAgICBpZiAocHJvcC5zd2l0Y2ggPT09IGFyZykge1xuICAgICAgICBsZXQgY3VyciA9IHByb3BzO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IFsuLi5wcm9wLnBhdGhdO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IHAgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGN1cnJbcF0gPSB2YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycltwXSA9IGN1cnJbcF0gPz8ge307XG4gICAgICAgICAgICBjdXJyID0gY3VycltwXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvcHM7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmV3IHByb2plY3QgZnJvbSBhbiBleHRlcm5hbCBtb2R1bGUuXG4gKlxuICogQHBhcmFtIHNwZWMgVGhlIG5hbWUgb2YgdGhlIGV4dGVybmFsIG1vZHVsZSB0byBsb2FkXG4gKiBAcGFyYW0gYXJncyBDb21tYW5kIGxpbmUgYXJndW1lbnRzIChpbmNsLiBwcm9qZWN0IHR5cGUpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG5ld1Byb2plY3RGcm9tTW9kdWxlKGJhc2VEaXI6IHN0cmluZywgc3BlYzogc3RyaW5nLCBhcmdzOiBhbnkpIHtcbiAgY29uc3QgcHJvamVuVmVyc2lvbiA9IGFyZ3MucHJvamVuVmVyc2lvbiA/PyAnbGF0ZXN0JztcbiAgY29uc3QgaW5zdGFsbENvbW1hbmQgPSByZW5kZXJJbnN0YWxsQ29tbWFuZChiYXNlRGlyLCBgcHJvamVuQCR7cHJvamVuVmVyc2lvbn1gKTtcbiAgaWYgKGFyZ3MucHJvamVuVmVyc2lvbikge1xuICAgIGV4ZWMoaW5zdGFsbENvbW1hbmQsIHsgY3dkOiBiYXNlRGlyIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIGRvIG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcgaW5zdGFsbGF0aW9uXG4gICAgZXhlYyhgbnBtIGxzIC0tcHJlZml4PSR7YmFzZURpcn0gLS1kZXB0aD0wIC0tcGF0dGVybiBwcm9qZW4gfHwgJHtpbnN0YWxsQ29tbWFuZH1gLCB7IGN3ZDogYmFzZURpciB9KTtcbiAgfVxuXG4gIGNvbnN0IG1vZHVsZU5hbWUgPSBpbnN0YWxsUGFja2FnZShiYXNlRGlyLCBzcGVjKTtcblxuICAvLyBGaW5kIHRoZSBqdXN0IGluc3RhbGxlZCBwYWNrYWdlIGFuZCBkaXNjb3ZlciB0aGUgcmVzdCByZWN1cnNpdmVseSBmcm9tIHRoaXMgcGFja2FnZSBmb2xkZXJcbiAgY29uc3QgbW9kdWxlRGlyID0gcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShgJHttb2R1bGVOYW1lfS8uanNpaWAsIHtcbiAgICBwYXRoczogW1xuICAgICAgYmFzZURpcixcbiAgICBdLFxuICB9KSk7XG5cbiAgLy8gT25seSBsZWF2ZSBwcm9qZWN0cyBmcm9tIHRoZSBtYWluIChyZXF1ZXN0ZWQpIHBhY2thZ2VcbiAgY29uc3QgcHJvamVjdHMgPSBpbnZlbnRvcnlcbiAgICAuZGlzY292ZXIobW9kdWxlRGlyKVxuICAgIC5maWx0ZXIoeCA9PiB4Lm1vZHVsZU5hbWUgPT09IG1vZHVsZU5hbWUpOyAvLyBPbmx5IGxpc3QgcHJvamVjdCB0eXBlcyBmcm9tIHRoZSByZXF1ZXN0ZWQgJ2Zyb20nIG1vZHVsZVxuXG4gIGlmIChwcm9qZWN0cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBwcm9qZWN0cyBmb3VuZCBhZnRlciBpbnN0YWxsaW5nICR7c3BlY30uIFRoZSBtb2R1bGUgbXVzdCBleHBvcnQgYXQgbGVhc3Qgb25lIGNsYXNzIHdoaWNoIGV4dGVuZHMgcHJvamVuLlByb2plY3RgKTtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RlZCA9IGFyZ3MucHJvamVjdFR5cGVOYW1lO1xuICBjb25zdCB0eXBlcyA9IHByb2plY3RzLm1hcChwID0+IHAucGppZCk7XG5cbiAgLy8gaWYgdXNlciBkaWQgbm90IHNwZWNpZnkgYSBwcm9qZWN0IHR5cGUgYnV0IHRoZSBtb2R1bGUgaGFzIG1vcmUgdGhhbiBvbmUsIHdlIG5lZWQgdGhlbSB0byB0ZWxsIHVzIHdoaWNoIG9uZS4uLlxuICBpZiAoIXJlcXVlc3RlZCAmJiBwcm9qZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBsZSBwcm9qZWN0cyBmb3VuZCBhZnRlciBpbnN0YWxsaW5nICR7c3BlY306ICR7dHlwZXMuam9pbignLCcpfS4gUGxlYXNlIHNwZWNpZnkgYSBwcm9qZWN0IG5hbWUuXFxuRXhhbXBsZTogbnB4IHByb2plbiBuZXcgLS1mcm9tICR7c3BlY30gJHt0eXBlc1swXX1gKTtcbiAgfVxuXG4gIC8vIGlmIHVzZXIgZGlkIG5vdCBzcGVjaWZ5IGEgdHlwZSAoYW5kIHdlIGtub3cgd2UgaGF2ZSBvbmx5IG9uZSksIHRoZSBzZWxlY3QgaXQuIG90aGVyd2lzZSwgc2VhcmNoIGJ5IHBqaWQuXG4gIGNvbnN0IHR5cGUgPSAhcmVxdWVzdGVkID8gcHJvamVjdHNbMF0gOiBwcm9qZWN0cy5maW5kKHAgPT4gcC5wamlkID09PSByZXF1ZXN0ZWQpO1xuICBpZiAoIXR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2plY3QgdHlwZSAke3JlcXVlc3RlZH0gbm90IGZvdW5kLiBGb3VuZCAke3R5cGVzLmpvaW4oJywnKX1gKTtcbiAgfVxuXG4gIGZvciAoY29uc3Qgb3B0aW9uIG9mIHR5cGUub3B0aW9ucyA/PyBbXSkge1xuICAgIGlmIChvcHRpb24uc2ltcGxlVHlwZSAhPT0gJ3N0cmluZycgJiYgb3B0aW9uLnNpbXBsZVR5cGUgIT09ICdudW1iZXInICYmIG9wdGlvbi5zaW1wbGVUeXBlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIGNvbnRpbnVlOyAvLyB3ZSBkb24ndCBzdXBwb3J0IG5vbi1wcmltaXRpdmUgZmllbGRzIGFzIGNvbW1hbmQgbGluZSBvcHRpb25zXG4gICAgfVxuXG4gICAgaWYgKGFyZ3Nbb3B0aW9uLm5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb24uc2ltcGxlVHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYXJnc1tvcHRpb24ubmFtZV0gPSBwYXJzZUludChhcmdzW29wdGlvbi5uYW1lXSk7XG4gICAgICAgIGFyZ3Nbb3B0aW9uLnN3aXRjaF0gPSBhcmdzW29wdGlvbi5uYW1lXTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uLnNpbXBsZVR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICBjb25zdCByYXcgPSBhcmdzW29wdGlvbi5uYW1lXTtcbiAgICAgICAgY29uc3Qgc2FmZSA9IHR5cGVvZiByYXcgPT09ICdzdHJpbmcnID8gaXNUcnV0aHkocmF3KSA6IHJhdztcbiAgICAgICAgYXJnc1tvcHRpb24ubmFtZV0gPSBzYWZlO1xuICAgICAgICBhcmdzW29wdGlvbi5zd2l0Y2hdID0gc2FmZTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlOyAvLyBkbyBub3Qgb3ZlcndyaXRlIHBhc3NlZCBhcmd1bWVudHNcbiAgICB9XG5cbiAgICBpZiAob3B0aW9uLmRlZmF1bHQgJiYgb3B0aW9uLmRlZmF1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoIW9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSByZW5kZXJEZWZhdWx0KGJhc2VEaXIsIG9wdGlvbi5kZWZhdWx0KTtcbiAgICAgICAgYXJnc1tvcHRpb24ubmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIGFyZ3Nbb3B0aW9uLnN3aXRjaF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaW5jbHVkZSBhIGRldiBkZXBlbmRlbmN5IGZvciB0aGUgZXh0ZXJuYWwgbW9kdWxlXG4gIGFyZ3MuZGV2RGVwcyA9IFtzcGVjXTtcbiAgYXJnc1snZGV2LWRlcHMnXSA9IFtzcGVjXTtcblxuICBhd2FpdCBuZXdQcm9qZWN0KGJhc2VEaXIsIHR5cGUsIGFyZ3MpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG5ldyBwcm9qZWN0LlxuICogQHBhcmFtIHR5cGUgUHJvamVjdCB0eXBlXG4gKiBAcGFyYW0gYXJncyBDb21tYW5kIGxpbmUgYXJndW1lbnRzXG4gKiBAcGFyYW0gYWRkaXRpb25hbFByb3BzIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byBpbmNsdWRlIGluIC5wcm9qZW5yYy5qc1xuICovXG5hc3luYyBmdW5jdGlvbiBuZXdQcm9qZWN0KGJhc2VEaXI6IHN0cmluZywgdHlwZTogaW52ZW50b3J5LlByb2plY3RUeXBlLCBhcmdzOiBhbnkpIHtcbiAgLy8gY29udmVydCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIHByb2plY3QgcHJvcHMgdXNpbmcgdHlwZSBpbmZvcm1hdGlvblxuICBjb25zdCBwcm9wcyA9IGNvbW1hbmRMaW5lVG9Qcm9wcyhiYXNlRGlyLCB0eXBlLCBhcmdzKTtcblxuICBQcm9qZWN0cy5jcmVhdGVQcm9qZWN0KHtcbiAgICBkaXI6IHByb3BzLm91dGRpciA/PyBiYXNlRGlyLFxuICAgIHByb2plY3RGcW46IHR5cGUuZnFuLFxuICAgIHByb2plY3RPcHRpb25zOiBwcm9wcyxcbiAgICBvcHRpb25IaW50czogYXJncy5jb21tZW50cyA/IE5ld1Byb2plY3RPcHRpb25IaW50cy5GRUFUVVJFRCA6IE5ld1Byb2plY3RPcHRpb25IaW50cy5OT05FLFxuICAgIHN5bnRoOiBhcmdzLnN5bnRoLFxuICAgIHBvc3Q6IGFyZ3MucG9zdCxcbiAgfSk7XG5cbiAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKGJhc2VEaXIsICdwYWNrYWdlLmpzb24nKSkgJiYgYXJncy5wb3N0KSB7XG4gICAgZXhlYygnbnBtIHJ1biBlc2xpbnQgLS1pZi1wcmVzZW50JywgeyBjd2Q6IGJhc2VEaXIgfSk7XG4gIH1cblxuICBpZiAoYXJncy5naXQpIHtcbiAgICBjb25zdCBnaXQgPSAoY21kOiBzdHJpbmcpID0+IGV4ZWMoYGdpdCAke2NtZH1gLCB7IGN3ZDogYmFzZURpciB9KTtcbiAgICBnaXQoJ2luaXQnKTtcbiAgICBnaXQoJ2FkZCAuJyk7XG4gICAgZ2l0KCdjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBcImNob3JlOiBwcm9qZWN0IGNyZWF0ZWQgd2l0aCBwcm9qZW5cIicpO1xuICAgIGdpdCgnYnJhbmNoIC1NIG1haW4nKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBDb21tYW5kKCk7XG4iXX0=
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Installs the npm module (through `npm install`) to node_modules under `projectDir`.
3
+ * @param spec The npm package spec (e.g. `foo@^1.2` or `foo@/var/folders/8k/qcw0ls5pv_ph0000gn/T/projen-RYurCw/pkg.tgz`)
4
+ * @returns The installed package name (e.g. `@foo/bar`)
5
+ */
6
+ export declare function installPackage(baseDir: string, spec: string): string;
7
+ /**
8
+ * Render a command to install an npm package.
9
+ *
10
+ * Engine checks are ignorred at this point so that the module can be installed
11
+ * regardless of the environment. This was needed to unblock the upgrade of the
12
+ * minimum node version of projen, but also okay generally because engine checks
13
+ * will be performed later and for all eternety.
14
+ *
15
+ * @param dir Base directory
16
+ * @param module The module to install (e.g. foo@^1.2)
17
+ * @returns The string that includes the install command ("npm install ...")
18
+ */
19
+ export declare function renderInstallCommand(dir: string, module: string): string;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderInstallCommand = exports.installPackage = void 0;
4
+ const path = require("path");
5
+ const fs = require("fs-extra");
6
+ const logging = require("../logging");
7
+ const util_1 = require("../util");
8
+ /**
9
+ * Installs the npm module (through `npm install`) to node_modules under `projectDir`.
10
+ * @param spec The npm package spec (e.g. `foo@^1.2` or `foo@/var/folders/8k/qcw0ls5pv_ph0000gn/T/projen-RYurCw/pkg.tgz`)
11
+ * @returns The installed package name (e.g. `@foo/bar`)
12
+ */
13
+ function installPackage(baseDir, spec) {
14
+ const packageJsonPath = path.join(baseDir, 'package.json');
15
+ const packageJsonExisted = fs.existsSync(packageJsonPath);
16
+ if (!packageJsonExisted) {
17
+ // Make sure we have a package.json to read from later
18
+ util_1.exec('npm init --yes', { cwd: baseDir });
19
+ }
20
+ logging.info(`installing external module ${spec}...`);
21
+ util_1.exec(renderInstallCommand(baseDir, spec), { cwd: baseDir });
22
+ // Get the true installed package name
23
+ const packageJson = fs.readJsonSync(packageJsonPath);
24
+ const packageName = Object.keys(packageJson.devDependencies).find(name => name !== 'projen');
25
+ if (!packageName) {
26
+ throw new Error(`Unable to resolve package name from spec ${spec}`);
27
+ }
28
+ // if package.json did not exist before calling `npm install`, we should remove it
29
+ // so we can start off clean.
30
+ if (!packageJsonExisted) {
31
+ fs.removeSync(packageJsonPath);
32
+ }
33
+ return packageName;
34
+ }
35
+ exports.installPackage = installPackage;
36
+ /**
37
+ * Render a command to install an npm package.
38
+ *
39
+ * Engine checks are ignorred at this point so that the module can be installed
40
+ * regardless of the environment. This was needed to unblock the upgrade of the
41
+ * minimum node version of projen, but also okay generally because engine checks
42
+ * will be performed later and for all eternety.
43
+ *
44
+ * @param dir Base directory
45
+ * @param module The module to install (e.g. foo@^1.2)
46
+ * @returns The string that includes the install command ("npm install ...")
47
+ */
48
+ function renderInstallCommand(dir, module) {
49
+ return `npm install --save-dev -f --no-package-lock --prefix=${dir} ${module}`;
50
+ }
51
+ exports.renderInstallCommand = renderInstallCommand;
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLHNDQUFzQztBQUN0QyxrQ0FBK0I7QUFFL0I7Ozs7R0FJRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxPQUFlLEVBQUUsSUFBWTtJQUMxRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMzRCxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFMUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1FBQ3ZCLHNEQUFzRDtRQUN0RCxXQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUMxQztJQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsOEJBQThCLElBQUksS0FBSyxDQUFDLENBQUM7SUFDdEQsV0FBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRTVELHNDQUFzQztJQUN0QyxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztJQUU3RixJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLElBQUksRUFBRSxDQUFDLENBQUM7S0FDckU7SUFFRCxrRkFBa0Y7SUFDbEYsNkJBQTZCO0lBQzdCLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtRQUN2QixFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ2hDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQTNCRCx3Q0EyQkM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLEdBQVcsRUFBRSxNQUFjO0lBQzlELE9BQU8sd0RBQXdELEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNqRixDQUFDO0FBRkQsb0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tICcuLi9sb2dnaW5nJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgbnBtIG1vZHVsZSAodGhyb3VnaCBgbnBtIGluc3RhbGxgKSB0byBub2RlX21vZHVsZXMgdW5kZXIgYHByb2plY3REaXJgLlxuICogQHBhcmFtIHNwZWMgVGhlIG5wbSBwYWNrYWdlIHNwZWMgKGUuZy4gYGZvb0BeMS4yYCBvciBgZm9vQC92YXIvZm9sZGVycy84ay9xY3cwbHM1cHZfcGgwMDAwZ24vVC9wcm9qZW4tUll1ckN3L3BrZy50Z3pgKVxuICogQHJldHVybnMgVGhlIGluc3RhbGxlZCBwYWNrYWdlIG5hbWUgKGUuZy4gYEBmb28vYmFyYClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxQYWNrYWdlKGJhc2VEaXI6IHN0cmluZywgc3BlYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGJhc2VEaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgY29uc3QgcGFja2FnZUpzb25FeGlzdGVkID0gZnMuZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpO1xuXG4gIGlmICghcGFja2FnZUpzb25FeGlzdGVkKSB7XG4gICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBwYWNrYWdlLmpzb24gdG8gcmVhZCBmcm9tIGxhdGVyXG4gICAgZXhlYygnbnBtIGluaXQgLS15ZXMnLCB7IGN3ZDogYmFzZURpciB9KTtcbiAgfVxuXG4gIGxvZ2dpbmcuaW5mbyhgaW5zdGFsbGluZyBleHRlcm5hbCBtb2R1bGUgJHtzcGVjfS4uLmApO1xuICBleGVjKHJlbmRlckluc3RhbGxDb21tYW5kKGJhc2VEaXIsIHNwZWMpLCB7IGN3ZDogYmFzZURpciB9KTtcblxuICAvLyBHZXQgdGhlIHRydWUgaW5zdGFsbGVkIHBhY2thZ2UgbmFtZVxuICBjb25zdCBwYWNrYWdlSnNvbiA9IGZzLnJlYWRKc29uU3luYyhwYWNrYWdlSnNvblBhdGgpO1xuICBjb25zdCBwYWNrYWdlTmFtZSA9IE9iamVjdC5rZXlzKHBhY2thZ2VKc29uLmRldkRlcGVuZGVuY2llcykuZmluZChuYW1lID0+IG5hbWUgIT09ICdwcm9qZW4nKTtcblxuICBpZiAoIXBhY2thZ2VOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSBwYWNrYWdlIG5hbWUgZnJvbSBzcGVjICR7c3BlY31gKTtcbiAgfVxuXG4gIC8vIGlmIHBhY2thZ2UuanNvbiBkaWQgbm90IGV4aXN0IGJlZm9yZSBjYWxsaW5nIGBucG0gaW5zdGFsbGAsIHdlIHNob3VsZCByZW1vdmUgaXRcbiAgLy8gc28gd2UgY2FuIHN0YXJ0IG9mZiBjbGVhbi5cbiAgaWYgKCFwYWNrYWdlSnNvbkV4aXN0ZWQpIHtcbiAgICBmcy5yZW1vdmVTeW5jKHBhY2thZ2VKc29uUGF0aCk7XG4gIH1cblxuICByZXR1cm4gcGFja2FnZU5hbWU7XG59XG5cbi8qKlxuICogUmVuZGVyIGEgY29tbWFuZCB0byBpbnN0YWxsIGFuIG5wbSBwYWNrYWdlLlxuICpcbiAqIEVuZ2luZSBjaGVja3MgYXJlIGlnbm9ycmVkIGF0IHRoaXMgcG9pbnQgc28gdGhhdCB0aGUgbW9kdWxlIGNhbiBiZSBpbnN0YWxsZWRcbiAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGVudmlyb25tZW50LiBUaGlzIHdhcyBuZWVkZWQgdG8gdW5ibG9jayB0aGUgdXBncmFkZSBvZiB0aGVcbiAqIG1pbmltdW0gbm9kZSB2ZXJzaW9uIG9mIHByb2plbiwgYnV0IGFsc28gb2theSBnZW5lcmFsbHkgYmVjYXVzZSBlbmdpbmUgY2hlY2tzXG4gKiB3aWxsIGJlIHBlcmZvcm1lZCBsYXRlciBhbmQgZm9yIGFsbCBldGVybmV0eS5cbiAqXG4gKiBAcGFyYW0gZGlyIEJhc2UgZGlyZWN0b3J5XG4gKiBAcGFyYW0gbW9kdWxlIFRoZSBtb2R1bGUgdG8gaW5zdGFsbCAoZS5nLiBmb29AXjEuMilcbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUgaW5zdGFsbCBjb21tYW5kIChcIm5wbSBpbnN0YWxsIC4uLlwiKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySW5zdGFsbENvbW1hbmQoZGlyOiBzdHJpbmcsIG1vZHVsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBucG0gaW5zdGFsbCAtLXNhdmUtZGV2IC1mIC0tbm8tcGFja2FnZS1sb2NrIC0tcHJlZml4PSR7ZGlyfSAke21vZHVsZX1gO1xufVxuIl19
package/lib/component.js CHANGED
@@ -39,5 +39,5 @@ class Component {
39
39
  }
40
40
  exports.Component = Component;
41
41
  _a = JSII_RTTI_SYMBOL_1;
42
- Component[_a] = { fqn: "projen.Component", version: "0.31.18" };
42
+ Component[_a] = { fqn: "projen.Component", version: "0.31.19" };
43
43
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBR0EsTUFBYSxTQUFTOzs7O0lBQ3BCLFlBQTRCLE9BQWdCO1FBQWhCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDMUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDOzs7Ozs7SUFHTSxhQUFhLEtBQUssQ0FBQzs7Ozs7O0lBR25CLFVBQVUsS0FBSSxDQUFDOzs7Ozs7OztJQUdmLGNBQWMsS0FBSSxDQUFDOztBQVo1Qiw4QkFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuL3Byb2plY3QnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgcHJvamVjdDogUHJvamVjdCkge1xuICAgIHByb2plY3QuX2FkZENvbXBvbmVudCh0aGlzKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpIHsgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBzeW50aGVzaXplKCkge31cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcG9zdFN5bnRoZXNpemUoKSB7fVxufSJdfQ==
@@ -26,5 +26,5 @@ class ConstructLibrary extends jsii_project_1.JsiiProject {
26
26
  }
27
27
  exports.ConstructLibrary = ConstructLibrary;
28
28
  _a = JSII_RTTI_SYMBOL_1;
29
- ConstructLibrary[_a] = { fqn: "projen.ConstructLibrary", version: "0.31.18" };
29
+ ConstructLibrary[_a] = { fqn: "projen.ConstructLibrary", version: "0.31.19" };
30
30
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LWxpYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdHJ1Y3QtbGliLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaURBQWlFOzs7Ozs7QUFnQmpFLE1BQXNCLGdCQUFpQixTQUFRLDBCQUFXOzs7O0lBQ3hELFlBQVksT0FBZ0M7UUFDMUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtRQUNsRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO2dCQUNoQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPO2dCQUNoQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRO2FBQ25DLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7QUFYSCw0Q0FZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpzaWlQcm9qZWN0LCBKc2lpUHJvamVjdE9wdGlvbnMgfSBmcm9tICcuL2pzaWktcHJvamVjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RydWN0TGlicmFyeU9wdGlvbnMgZXh0ZW5kcyBKc2lpUHJvamVjdE9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY2F0YWxvZz86IENhdGFsb2c7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0YWxvZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHR3aXR0ZXI/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFubm91bmNlPzogYm9vbGVhbjtcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbnN0cnVjdExpYnJhcnkgZXh0ZW5kcyBKc2lpUHJvamVjdCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbnN0cnVjdExpYnJhcnlPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmFkZEtleXdvcmRzKCdjZGsnKTsgLy8gcHVibGlzaCB0byB0aGUgY2F0YWxvZ1xuICAgIGlmIChvcHRpb25zLmNhdGFsb2cpIHtcbiAgICAgIHRoaXMucGFja2FnZS5hZGRGaWVsZCgnYXdzY2RraW8nLCB7XG4gICAgICAgIHR3aXR0ZXI6IG9wdGlvbnMuY2F0YWxvZy50d2l0dGVyLFxuICAgICAgICBhbm5vdW5jZTogb3B0aW9ucy5jYXRhbG9nLmFubm91bmNlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -156,7 +156,7 @@ class Dependencies extends component_1.Component {
156
156
  }
157
157
  exports.Dependencies = Dependencies;
158
158
  _a = JSII_RTTI_SYMBOL_1;
159
- Dependencies[_a] = { fqn: "projen.deps.Dependencies", version: "0.31.18" };
159
+ Dependencies[_a] = { fqn: "projen.deps.Dependencies", version: "0.31.19" };
160
160
  /**
161
161
  * (experimental) The project-relative path of the deps manifest file.
162
162
  *
package/lib/dev-env.js CHANGED
@@ -37,5 +37,5 @@ class DevEnvironmentDockerImage {
37
37
  }
38
38
  exports.DevEnvironmentDockerImage = DevEnvironmentDockerImage;
39
39
  _a = JSII_RTTI_SYMBOL_1;
40
- DevEnvironmentDockerImage[_a] = { fqn: "projen.DevEnvironmentDockerImage", version: "0.31.18" };
40
+ DevEnvironmentDockerImage[_a] = { fqn: "projen.DevEnvironmentDockerImage", version: "0.31.19" };
41
41
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LWVudi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXYtZW52LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFrQkEsTUFBYSx5QkFBeUI7SUFpQnBDLGdCQUF3QixDQUFDOzs7Ozs7Ozs7O0lBZmxCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBYTtRQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDbkIsQ0FBQzs7Ozs7Ozs7OztJQUdNLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBa0I7UUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3hCLENBQUM7O0FBVEgsOERBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFzayB9IGZyb20gJy4vdGFza3MnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIERldkVudmlyb25tZW50T3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRvY2tlckltYWdlPzogRGV2RW52aXJvbm1lbnREb2NrZXJJbWFnZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdGFza3M/OiBUYXNrW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHBvcnRzPzogc3RyaW5nW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB2c2NvZGVFeHRlbnNpb25zPzogc3RyaW5nW107XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgRGV2RW52aXJvbm1lbnREb2NrZXJJbWFnZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHN0YXRpYyBmcm9tSW1hZ2UoaW1hZ2U6IHN0cmluZyk6IERldkVudmlyb25tZW50RG9ja2VySW1hZ2Uge1xuICAgIHJldHVybiB7IGltYWdlIH07XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgc3RhdGljIGZyb21GaWxlKGRvY2tlckZpbGU6IHN0cmluZyk6IERldkVudmlyb25tZW50RG9ja2VySW1hZ2Uge1xuICAgIHJldHVybiB7IGRvY2tlckZpbGUgfTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGltYWdlPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGRvY2tlckZpbGU/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHsgfVxufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBJRGV2RW52aXJvbm1lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBhZGREb2NrZXJJbWFnZShpbWFnZTogRGV2RW52aXJvbm1lbnREb2NrZXJJbWFnZSk6IHZvaWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIGFkZFRhc2tzKC4uLnRhc2tzOiBUYXNrW10pOiB2b2lkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBhZGRQb3J0cyguLi5wb3J0czogc3RyaW5nW10pOiB2b2lkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIGFkZFZzY29kZUV4dGVuc2lvbnMoLi4uZXh0ZW5zaW9uczogc3RyaW5nW10pOiB2b2lkO1xufVxuIl19
@@ -129,7 +129,7 @@ class DockerCompose extends component_1.Component {
129
129
  }
130
130
  exports.DockerCompose = DockerCompose;
131
131
  _a = JSII_RTTI_SYMBOL_1;
132
- DockerCompose[_a] = { fqn: "projen.DockerCompose", version: "0.31.18" };
132
+ DockerCompose[_a] = { fqn: "projen.DockerCompose", version: "0.31.19" };
133
133
  /**
134
134
  * (experimental) A docker-compose service.
135
135
  *
@@ -195,7 +195,7 @@ class DockerComposeService {
195
195
  }
196
196
  exports.DockerComposeService = DockerComposeService;
197
197
  _b = JSII_RTTI_SYMBOL_1;
198
- DockerComposeService[_b] = { fqn: "projen.DockerComposeService", version: "0.31.18" };
198
+ DockerComposeService[_b] = { fqn: "projen.DockerComposeService", version: "0.31.19" };
199
199
  /**
200
200
  * (experimental) Network protocol for port mapping.
201
201
  *
package/lib/eslint.js CHANGED
@@ -245,5 +245,5 @@ class Eslint extends component_1.Component {
245
245
  }
246
246
  exports.Eslint = Eslint;
247
247
  _a = JSII_RTTI_SYMBOL_1;
248
- Eslint[_a] = { fqn: "projen.Eslint", version: "0.31.18" };
248
+ Eslint[_a] = { fqn: "projen.Eslint", version: "0.31.19" };
249
249
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2VzbGludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFDQUFxQztBQUNyQywyQ0FBd0M7QUFDeEMsaUNBQWtDOzs7O0FBMENsQyxNQUFhLE1BQU8sU0FBUSxxQkFBUzs7OztJQWVuQyxZQUFZLE9BQW9CLEVBQUUsT0FBc0I7O1FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLE9BQU8sQ0FBQyxVQUFVLENBQ2hCLFFBQVEsRUFDUixrQ0FBa0MsRUFDbEMsMkJBQTJCLEVBQzNCLDZCQUE2QixFQUM3QixtQ0FBbUMsRUFDbkMsc0JBQXNCLEVBQ3RCLGFBQWEsQ0FDZCxDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxVQUFVLENBQ2hCLFVBQVUsRUFDVix3QkFBd0IsRUFDeEIsd0JBQXdCLENBQ3pCLENBQUM7U0FDSDtRQUVELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNwQixPQUFPLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDcEQ7UUFFRCxNQUFNLE9BQU8sU0FBRyxPQUFPLENBQUMsT0FBTyxtQ0FBSSxFQUFFLENBQUM7UUFFdEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUMzQyxNQUFNLGNBQWMsU0FBRyxPQUFPLENBQUMsY0FBYyxtQ0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFaEUsTUFBTSxZQUFZLFNBQUcsT0FBTyxDQUFDLFlBQVksbUNBQUksSUFBSSxD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QyxFQUFFO1lBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25CO0lBQ0gsQ0FBQzs7Ozs7O0lBR00sV0FBVyxDQUFDLFFBQXdCO1FBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7OztJQUdNLGdCQUFnQixDQUFDLE9BQWU7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7Ozs7OztJQUdNLFlBQVksQ0FBQyxPQUFlO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7O0FBelJILHdCQTBSQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBST0pFTl9SQyB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50JztcbmltcG9ydCB7IEpzb25GaWxlIH0gZnJvbSAnLi9qc29uJztcbmltcG9ydCB7IE5vZGVQcm9qZWN0IH0gZnJvbSAnLi9ub2RlLXByb2plY3QnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXNsaW50T3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRpcnM6IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkZXZkaXJzPzogc3RyaW5nW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGZpbGVFeHRlbnNpb25zPzogc3RyaW5nW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGlnbm9yZVBhdHRlcm5zPzogc3RyaW5nW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBsaW50UHJvamVuUmM/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHJldHRpZXI/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhbGlhc01hcD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFsaWFzRXh0ZW5zaW9ucz86IHN0cmluZ1tdO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBFc2xpbnRPdmVycmlkZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGZpbGVzOiBzdHJpbmdbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHJ1bGVzOiB7IFtydWxlOiBzdHJpbmddOiBhbnkgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEVzbGludCBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IHJ1bGVzOiB7IFtydWxlOiBzdHJpbmddOiBhbnlbXSB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBvdmVycmlkZXM6IEVzbGludE92ZXJyaWRlW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogYW55O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgaWdub3JlUGF0dGVybnM6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FsbG93RGV2RGVwczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogTm9kZVByb2plY3QsIG9wdGlvbnM6IEVzbGludE9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHByb2plY3QuYWRkRGV2RGVwcyhcbiAgICAgICdlc2xpbnQnLFxuICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luJyxcbiAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyJyxcbiAgICAgICdlc2xpbnQtaW1wb3J0LXJlc29sdmVyLW5vZGUnLFxuICAgICAgJ2VzbGludC1pbXBvcnQtcmVzb2x2ZXItdHlwZXNjcmlwdCcsXG4gICAgICAnZXNsaW50LXBsdWdpbi1pbXBvcnQnLFxuICAgICAgJ2pzb24tc2NoZW1hJyxcbiAgICApO1xuXG4gICAgaWYgKG9wdGlvbnMucHJldHRpZXIpIHtcbiAgICAgIHByb2plY3QuYWRkRGV2RGVwcyhcbiAgICAgICAgJ3ByZXR0aWVyJyxcbiAgICAgICAgJ2VzbGludC1wbHVnaW4tcHJldHRpZXInLFxuICAgICAgICAnZXNsaW50LWNvbmZpZy1wcmV0dGllcicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmFsaWFzTWFwKSB7XG4gICAgICBwcm9qZWN0LmFkZERldkRlcHMoJ2VzbGludC1pbXBvcnQtcmVzb2x2ZXItYWxpYXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXZkaXJzID0gb3B0aW9ucy5kZXZkaXJzID8/IFtdO1xuXG4gICAgY29uc3QgZGlycyA9IFsuLi5vcHRpb25zLmRpcnMsIC4uLmRldmRpcnNdO1xuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gb3B0aW9ucy5maWxlRXh0ZW5zaW9ucyA/PyBbJy50cyddO1xuXG4gICAgdGhpcy5fYWxsb3dEZXZEZXBzID0gKGRldmRpcnMgPz8gW10pLm1hcChkaXIgPT4gYCoqLyR7ZGlyfS8qKmApO1xuXG4gICAgY29uc3QgbGludFByb2plblJjID0gb3B0aW9ucy5saW50UHJvamVuUmMgPz8gdHJ1ZTtcblxuICAgIGNvbnN0IGVzbGludCA9IHByb2plY3QuYWRkVGFzaygnZXNsaW50Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdSdW5zIGVzbGludCBhZ2FpbnN0IHRoZSBjb2RlYmFzZScsXG4gICAgICBleGVjOiBbXG4gICAgICAgICdlc2xpbnQnLFxuICAgICAgICBgLS1leHQgJHtmaWxlRXh0ZW5zaW9ucy5qb2luKCcsJyl9YCxcbiAgICAgICAgJy0tZml4JyxcbiAgICAgICAgJy0tbm8tZXJyb3Itb24tdW5tYXRjaGVkLXBhdHRlcm4nLFxuICAgICAgICAuLi5kaXJzLFxuICAgICAgICAuLi5saW50UHJvamVuUmMgPyBbUFJPSkVOX1JDXSA6IFtdLFxuICAgICAgXS5qb2luKCcgJyksXG4gICAgfSk7XG5cbiAgICBwcm9qZWN0LnRlc3RUYXNrLnNwYXduKGVzbGludCk7XG5cbiAgICAvLyBleGNsdWRlIHNvbWUgZmlsZXNcbiAgICBwcm9qZWN0Lm5wbWlnbm9yZT8uZXhjbHVkZSgnLy5lc2xpbnRyYy5qc29uJyk7XG5cbiAgICBjb25zdCBmb3JtYXR0aW5nUnVsZXM6IHsgW3J1bGU6IHN0cmluZ106IGFueSB9ID0gb3B0aW9ucy5wcmV0dGllciA/IHtcbiAgICAgICdwcmV0dGllci9wcmV0dGllcic6IFsnZXJyb3InXSxcbiAgICB9IDoge1xuICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90eXBlc2NyaXB0LWVzbGludC90eXBlc2NyaXB0LWVzbGludC9ibG9iL21hc3Rlci9wYWNrYWdlcy9lc2xpbnQtcGx1Z2luL2RvY3MvcnVsZXMvaW5kZW50Lm1kXG4gICAgICAnaW5kZW50JzogWydvZmYnXSxcbiAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50JzogWydlcnJvcicsIDJdLFxuXG4gICAgICAvLyBTdHlsZVxuICAgICAgJ3F1b3Rlcyc6IFsnZXJyb3InLCAnc2luZ2xlJywgeyBhdm9pZEVzY2FwZTogdHJ1ZSB9XSxcbiAgICAgICdjb21tYS1kYW5nbGUnOiBbJ2Vycm9yJywgJ2Fsd2F5cy1tdWx0aWxpbmUnXSwgLy8gZW5zdXJlcyBjbGVhbiBkaWZmcywgc2VlIGh0dHBzOi8vbWVkaXVtLmNvbS9AbmlrZ3JhZi93aHkteW91LXNob3VsZC1lbmZvcmNlLWRhbmdsaW5nLWNvbW1hcy1mb3ItbXVsdGlsaW5lLXN0YXRlbWVudHMtZDAzNGM5OGUzNmY4XG4gICAgICAnY29tbWEtc3BhY2luZyc6IFsnZXJyb3InLCB7IGJlZm9yZTogZmFsc2UsIGFmdGVyOiB0cnVlIH1dLCAvLyBzcGFjZSBhZnRlciwgbm8gc3BhY2UgYmVmb3JlXG4gICAgICAnbm8tbXVsdGktc3BhY2VzJzogWydlcnJvcicsIHsgaWdub3JlRU9MQ29tbWVudHM6IGZhbHNlIH1dLCAvLyBubyBtdWx0aSBzcGFjZXNcbiAgICAgICdhcnJheS1icmFja2V0LXNwYWNpbmcnOiBbJ2Vycm9yJywgJ25ldmVyJ10sIC8vIFsxLCAyLCAzXVxuICAgICAgJ2FycmF5LWJyYWNrZXQtbmV3bGluZSc6IFsnZXJyb3InLCAnY29uc2lzdGVudCddLCAvLyBlbmZvcmNlIGNvbnNpc3RlbnQgbGluZSBicmVha3MgYmV0d2VlbiBicmFja2V0c1xuICAgICAgJ29iamVjdC1jdXJseS1zcGFjaW5nJzogWydlcnJvcicsICdhbHdheXMnXSwgLy8geyBrZXk6ICd2YWx1ZScgfVxuICAgICAgJ29iamVjdC1jdXJseS1uZXdsaW5lJzogWydlcnJvcicsIHsgbXVsdGlsaW5lOiB0cnVlLCBjb25zaXN0ZW50OiB0cnVlIH1dLCAvLyBlbmZvcmNlIGNvbnNpc3RlbnQgbGluZSBicmVha3MgYmV0d2VlbiBicmFjZXNcbiAgICAgICdvYmplY3QtcHJvcGVydHktbmV3bGluZSc6IFsnZXJyb3InLCB7IGFsbG93QWxsUHJvcGVydGllc09uU2FtZUxpbmU6IHRydWUgfV0sIC8vIGVuZm9yY2UgXCJzYW1lIGxpbmVcIiBvciBcIm11bHRpcGxlIGxpbmVcIiBvbiBvYmplY3QgcHJvcGVydGllc1xuICAgICAgJ2tleXdvcmQtc3BhY2luZyc6IFsnZXJyb3InXSwgLy8gcmVxdWlyZSBhIHNwYWNlIGJlZm9yZSAmIGFmdGVyIGtleXdvcmRzXG4gICAgICAnYnJhY2Utc3R5bGUnOiBbJ2Vycm9yJywgJzF0YnMnLCB7IGFsbG93U2luZ2xlTGluZTogdHJ1ZSB9XSwgLy8gZW5mb3JjZSBvbmUgdHJ1ZSBicmFjZSBzdHlsZVxuICAgICAgJ3NwYWNlLWJlZm9yZS1ibG9ja3MnOiBbJ2Vycm9yJ10sIC8vIHJlcXVpcmUgc3BhY2UgYmVmb3JlIGJsb2Nrc1xuICAgICAgJ2N1cmx5JzogWydlcnJvcicsICdtdWx0aS1saW5lJywgJ2NvbnNpc3RlbnQnXSwgLy8gcmVxdWlyZSBjdXJseSBicmFjZXMgZm9yIG11bHRpbGluZSBjb250cm9sIHN0YXRlbWVudHNcbiAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLWRlbGltaXRlci1zdHlsZSc6IFsnZXJyb3InXSxcblxuICAgICAgLy8gUmVxdWlyZSBzZW1pY29sb25zXG4gICAgICAnc2VtaSc6IFsnZXJyb3InLCAnYWx3YXlzJ10sXG5cbiAgICAgIC8vIE1heCBsaW5lIGxlbmd0aHNcbiAgICAgICdtYXgtbGVuJzogWydlcnJvcicsIHtcbiAgICAgICAgY29kZTogMTUwLFxuICAgICAgICBpZ25vcmVVcmxzOiB0cnVlLCAvLyBNb3N0IGNvbW1vbiByZWFzb24gdG8gZGlzYWJsZSBpdFxuICAgICAgICBpZ25vcmVTdHJpbmdzOiB0cnVlLCAvLyBUaGVzZSBhcmUgbm90IGZhbnRhc3RpYyBidXQgbmVjZXNzYXJ5IGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgICBpZ25vcmVUZW1wbGF0ZUxpdGVyYWxzOiB0cnVlLFxuICAgICAgICBpZ25vcmVDb21tZW50czogdHJ1ZSxcbiAgICAgICAgaWdub3JlUmVnRXhwTGl0ZXJhbHM6IHRydWUsXG4gICAgICB9XSxcblxuICAgICAgLy8gRG9uJ3QgdW5uZWNlc3NhcmlseSBxdW90ZSBwcm9wZXJ0aWVzXG4gICAgICAncXVvdGUtcHJvcHMnOiBbJ2Vycm9yJywgJ2NvbnNpc3RlbnQtYXMtbmVlZGVkJ10sXG4gICAgfTtcblxuICAgIHRoaXMucnVsZXMgPSB7XG4gICAgICAuLi5mb3JtYXR0aW5nUnVsZXMsXG4gICAgICAvLyBSZXF1aXJlIHVzZSBvZiB0aGUgYGltcG9ydCB7IGZvbyB9IGZyb20gJ2Jhcic7YCBmb3JtIGluc3RlYWQgb2YgYGltcG9ydCBmb28gPSByZXF1aXJlKCdiYXInKTtgXG4gICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyc6IFsnZXJyb3InXSxcblxuICAgICAgLy8gUmVxdWlyZSBhbGwgaW1wb3J0ZWQgZGVwZW5kZW5jaWVzIGFyZSBhY3R1YWxseSBkZWNsYXJlZCBpbiBwYWNrYWdlLmpzb25cbiAgICAgICdpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnOiBbXG4gICAgICAgICdlcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBPbmx5IGFsbG93IGltcG9ydGluZyBkZXZEZXBlbmRlbmNpZXMgZnJvbSBcImRldmRpcnNcIi5cbiAgICAgICAgICBkZXZEZXBlbmRlbmNpZXM6ICgpID0+IHRoaXMucmVuZGVyRGV2RGVwc0FsbG93TGlzdCgpLFxuICAgICAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiBmYWxzZSwgLy8gRGlzYWxsb3cgaW1wb3J0aW5nIG9wdGlvbmFsIGRlcGVuZGVuY2llcyAodGhvc2Ugc2hvdWxkbid0IGJlIGluIHVzZSBpbiB0aGUgcHJvamVjdClcbiAgICAgICAgICBwZWVyRGVwZW5kZW5jaWVzOiB0cnVlLCAvLyBBbGxvdyBpbXBvcnRpbmcgcGVlciBkZXBlbmRlbmNpZXMgKHRoYXQgYXJlbid0IGFsc28gZGlyZWN0IGRlcGVuZGVuY2llcylcbiAgICAgICAgfSxcbiAgICAgIF0sXG5cbiAgICAgIC8vIFJlcXVpcmUgYWxsIGltcG9ydGVkIGxpYnJhcmllcyBhY3R1YWxseSByZXNvbHZlICghIXJlcXVpcmVkIGZvciBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgdG8gd29yayEhKVxuICAgICAgJ2ltcG9ydC9uby11bnJlc29sdmVkJzogWydlcnJvciddLFxuXG4gICAgICAvLyBSZXF1aXJlIGFuIG9yZGVyaW5nIG9uIGFsbCBpbXBvcnRzXG4gICAgICAnaW1wb3J0L29yZGVyJzogWyd3YXJuJywge1xuICAgICAgICBncm91cHM6IFsnYnVpbHRpbicsICdleHRlcm5hbCddLFxuICAgICAgICBhbHBoYWJldGl6ZTogeyBvcmRlcjogJ2FzYycsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9LFxuICAgICAgfV0sXG5cbiAgICAgIC8vIENhbm5vdCBpbXBvcnQgZnJvbSB0aGUgc2FtZSBtb2R1bGUgdHdpY2VcbiAgICAgICduby1kdXBsaWNhdGUtaW1wb3J0cyc6IFsnZXJyb3InXSxcblxuICAgICAgLy8gQ2Fubm90IHNoYWRvdyBuYW1lc1xuICAgICAgJ25vLXNoYWRvdyc6IFsnb2ZmJ10sXG4gICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyc6IFsnZXJyb3InXSxcblxuICAgICAgLy8gUmVxdWlyZWQgc3BhY2luZyBpbiBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgKGNvcGllZCBmcm9tIFRTTGludCwgZGVmYXVsdHMgYXJlIGdvb2QpXG4gICAgICAna2V5LXNwYWNpbmcnOiBbJ2Vycm9yJ10sXG5cbiAgICAgIC8vIE5vIG11bHRpcGxlIGVtcHR5IGxpbmVzXG4gICAgICAnbm8tbXVsdGlwbGUtZW1wdHktbGluZXMnOiBbJ2Vycm9yJ10sXG5cbiAgICAgIC8vIE9uZSBvZiB0aGUgZWFzaWVzdCBtaXN0YWtlcyB0byBtYWtlXG4gICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzJzogWydlcnJvciddLFxuXG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpbnNpZGUgdHJ5L2NhdGNoIGJsb2NrcywgcHJvbWlzZXMgYXJlICdyZXR1cm4gYXdhaXQnZWRcbiAgICAgIC8vIChtdXN0IGRpc2FibGUgdGhlIGJhc2UgcnVsZSBhcyBpdCBjYW4gcmVwb3J0IGluY29ycmVjdCBlcnJvcnMpXG4gICAgICAnbm8tcmV0dXJuLWF3YWl0JzogWydvZmYnXSxcbiAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvcmV0dXJuLWF3YWl0JzogWydlcnJvciddLFxuXG4gICAgICAvLyBVc2VsZXNzIGRpZmYgcmVzdWx0c1xuICAgICAgJ25vLXRyYWlsaW5nLXNwYWNlcyc6IFsnZXJyb3InXSxcblxuICAgICAgLy8gTXVzdCB1c2UgZm9vLmJhciBpbnN0ZWFkIG9mIGZvb1snYmFyJ10gaWYgcG9zc2libGVcbiAgICAgICdkb3Qtbm90YXRpb24nOiBbJ2Vycm9yJ10sXG5cbiAgICAgIC8vIEFyZSB5b3Ugc3VyZSB8IGlzIG5vdCBhIHR5cG8gZm9yIHx8ID9cbiAgICAgICduby1iaXR3aXNlJzogWydlcnJvciddLFxuXG4gICAgICAvLyBNZW1iZXIgb3JkZXJpbmdcbiAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nJzogWydlcnJvcicsIHtcbiAgICAgICAgZGVmYXVsdDogW1xuICAgICAgICAgICdwdWJsaWMtc3RhdGljLWZpZWxkJyxcbiAgICAgICAgICAncHVibGljLXN0YXRpYy1tZXRob2QnLFxuICAgICAgICAgICdwcm90ZWN0ZWQtc3RhdGljLWZpZWxkJyxcbiAgICAgICAgICAncHJvdGVjdGVkLXN0YXRpYy1tZXRob2QnLFxuICAgICAgICAgICdwcml2YXRlLXN0YXRpYy1maWVsZCcsXG4gICAgICAgICAgJ3ByaXZhdGUtc3RhdGljLW1ldGhvZCcsXG5cbiAgICAgICAgICAnZmllbGQnLFxuXG4gICAgICAgICAgLy8gQ29uc3RydWN0b3JzXG4gICAgICAgICAgJ2NvbnN0cnVjdG9yJywgLy8gPSBbXCJwdWJsaWMtY29uc3RydWN0b3JcIiwgXCJwcm90ZWN0ZWQtY29uc3RydWN0b3JcIiwgXCJwcml2YXRlLWNvbnN0cnVjdG9yXCJdXG5cbiAgICAgICAgICAvLyBNZXRob2RzXG4gICAgICAgICAgJ21ldGhvZCcsXG4gICAgICAgIF0sXG4gICAgICB9XSxcbiAgICB9O1xuXG4gICAgLy8gT3ZlcnJpZGVzIGZvciAucHJvamVucmMuanNcbiAgICB0aGlzLm92ZXJyaWRlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgZmlsZXM6IFtQUk9KRU5fUkNdLFxuICAgICAgICBydWxlczoge1xuICAgICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzJzogJ29mZicsXG4gICAgICAgICAgJ2ltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyc6ICdvZmYnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgdGhpcy5pZ25vcmVQYXR0ZXJucyA9IG9wdGlvbnMuaWdub3JlUGF0dGVybnMgPz8gW1xuICAgICAgJyouanMnLFxuICAgICAgYCEke1BST0pFTl9SQ31gLFxuICAgICAgJyouZC50cycsXG4gICAgICAnbm9kZV9tb2R1bGVzLycsXG4gICAgICAnKi5nZW5lcmF0ZWQudHMnLFxuICAgICAgJ2NvdmVyYWdlJyxcbiAgICBdO1xuXG4gICAgY29uc3QgdHNjb25maWcgPSBvcHRpb25zLnRzY29uZmlnUGF0aCA/PyAnLi90c2NvbmZpZy5qc29uJztcblxuICAgIGNvbnN0IHBsdWdpbnMgPSBbXG4gICAgICAnQHR5cGVzY3JpcHQtZXNsaW50JyxcbiAgICAgICdpbXBvcnQnLFxuICAgICAgLi4uKG9wdGlvbnMucHJldHRpZXIgPyBbJ3ByZXR0aWVyJ10gOiBbXSksXG4gICAgXTtcblxuICAgIGNvbnN0IGV4dGVuZHNDb25mID0gW1xuICAgICAgJ3BsdWdpbjppbXBvcnQvdHlwZXNjcmlwdCcsXG4gICAgICAuLi4ob3B0aW9ucy5wcmV0dGllciA/IFtcbiAgICAgICAgJ3ByZXR0aWVyJyxcbiAgICAgICAgJ3BsdWdpbjpwcmV0dGllci9yZWNvbW1lbmRlZCcsXG4gICAgICBdIDogW10pLFxuICAgIF07XG5cbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGVudjoge1xuICAgICAgICBqZXN0OiB0cnVlLFxuICAgICAgICBub2RlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHJvb3Q6IHRydWUsXG4gICAgICBwbHVnaW5zLFxuICAgICAgcGFyc2VyOiAnQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlcicsXG4gICAgICBwYXJzZXJPcHRpb25zOiB7XG4gICAgICAgIGVjbWFWZXJzaW9uOiAyMDE4LFxuICAgICAgICBzb3VyY2VUeXBlOiAnbW9kdWxlJyxcbiAgICAgICAgcHJvamVjdDogdHNjb25maWcsXG4gICAgICB9LFxuICAgICAgZXh0ZW5kczogZXh0ZW5kc0NvbmYsXG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICAnaW1wb3J0L3BhcnNlcnMnOiB7XG4gICAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9wYXJzZXInOiBbJy50cycsICcudHN4J10sXG4gICAgICAgIH0sXG4gICAgICAgICdpbXBvcnQvcmVzb2x2ZXInOiB7XG4gICAgICAgICAgLi4uKCBvcHRpb25zLmFsaWFzTWFwICYmIHtcbiAgICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAgIG1hcDogT2JqZWN0LmVudHJpZXMob3B0aW9ucy5hbGlhc01hcCkubWFwKChbaywgdl0pID0+IFtrLCB2XSksXG4gICAgICAgICAgICAgIGV4dGVuc2lvbnM6IG9wdGlvbnMuYWxpYXNFeHRlbnNpb25zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub2RlOiB7fSxcbiAgICAgICAgICB0eXBlc2NyaXB0OiB7XG4gICAgICAgICAgICBwcm9qZWN0OiB0c2NvbmZpZyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGlnbm9yZVBhdHRlcm5zOiB0aGlzLmlnbm9yZVBhdHRlcm5zLFxuICAgICAgcnVsZXM6IHRoaXMucnVsZXMsXG4gICAgICBvdmVycmlkZXM6IHRoaXMub3ZlcnJpZGVzLFxuICAgIH07XG5cbiAgICBuZXcgSnNvbkZpbGUocHJvamVjdCwgJy5lc2xpbnRyYy5qc29uJywgeyBvYmo6IHRoaXMuY29uZmlnLCBtYXJrZXI6IGZhbHNlIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkUnVsZXMocnVsZXM6IHsgW3J1bGU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocnVsZXMpKSB7XG4gICAgICB0aGlzLnJ1bGVzW2tdID0gdjtcbiAgICB9XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkT3ZlcnJpZGUob3ZlcnJpZGU6IEVzbGludE92ZXJyaWRlKSB7XG4gICAgdGhpcy5vdmVycmlkZXMucHVzaChvdmVycmlkZSk7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFkZElnbm9yZVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5pZ25vcmVQYXR0ZXJucy5wdXNoKHBhdHRlcm4pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFsbG93RGV2RGVwcyhwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hbGxvd0RldkRlcHMucHVzaChwYXR0ZXJuKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRGV2RGVwc0FsbG93TGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dEZXZEZXBzO1xuICB9XG59XG4iXX0=
package/lib/file.js CHANGED
@@ -63,7 +63,7 @@ class FileBase extends component_1.Component {
63
63
  }
64
64
  exports.FileBase = FileBase;
65
65
  _a = JSII_RTTI_SYMBOL_1;
66
- FileBase[_a] = { fqn: "projen.FileBase", version: "0.31.18" };
66
+ FileBase[_a] = { fqn: "projen.FileBase", version: "0.31.19" };
67
67
  /**
68
68
  * (experimental) The marker to embed in files in order to identify them as projen files.
69
69
  *
@@ -58,5 +58,5 @@ class GitAttributesFile extends file_1.FileBase {
58
58
  }
59
59
  exports.GitAttributesFile = GitAttributesFile;
60
60
  _a = JSII_RTTI_SYMBOL_1;
61
- GitAttributesFile[_a] = { fqn: "projen.git.GitAttributesFile", version: "0.31.18" };
61
+ GitAttributesFile[_a] = { fqn: "projen.git.GitAttributesFile", version: "0.31.19" };
62
62
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0YXR0cmlidXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9naXQvZ2l0YXR0cmlidXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGtDQUE4Qzs7Ozs7OztBQUk5QyxNQUFhLGlCQUFrQixTQUFRLGVBQVE7Ozs7SUFHN0MsWUFBbUIsT0FBZ0I7UUFDakMsS0FBSyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRTtZQUMvQixhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDLENBQUM7UUFMWSxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7SUFNN0QsQ0FBQzs7Ozs7Ozs7SUFHTSxhQUFhLENBQUMsSUFBWSxFQUFFLEdBQUcsVUFBb0I7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDdEM7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQztRQUN2QyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtZQUNsQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQzs7Ozs7O0lBRVMsaUJBQWlCLENBQUMsQ0FBWTtRQUN0Qyw2Q0FBNkM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEIsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE9BQU87WUFDTCxLQUFLLGVBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDN0IsRUFBRTtZQUNGLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7U0FDM0csQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDOztBQW5DSCw4Q0FvQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUmVzb2x2ZXIsIEZpbGVCYXNlIH0gZnJvbSAnLi4vZmlsZSc7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vcHJvamVjdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgR2l0QXR0cmlidXRlc0ZpbGUgZXh0ZW5kcyBGaWxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXR0cmlidXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCkge1xuICAgIHN1cGVyKHByb2plY3QsICcuZ2l0YXR0cmlidXRlcycsIHtcbiAgICAgIGVkaXRHaXRpZ25vcmU6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkQXR0cmlidXRlcyhnbG9iOiBzdHJpbmcsIC4uLmF0dHJpYnV0ZXM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKCF0aGlzLmF0dHJpYnV0ZXMuaGFzKGdsb2IpKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZXMuc2V0KGdsb2IsIG5ldyBTZXQoKSk7XG4gICAgfVxuICAgIGNvbnN0IHNldCA9IHRoaXMuYXR0cmlidXRlcy5nZXQoZ2xvYikhO1xuICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgIHNldC5hZGQoYXR0cmlidXRlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUNvbnRlbnQoXzogSVJlc29sdmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBXZSBjYW4gYXNzdW1lIHRoZSBmaWxlIG1hcCBpcyBuZXZlciBlbXB0eS5cbiAgICBjb25zdCBlbnRyaWVzID0gQXJyYXkuZnJvbSh0aGlzLmF0dHJpYnV0ZXMuZW50cmllcygpKVxuICAgICAgLnNvcnQoKFtsXSwgW3JdKSA9PiBsLmxvY2FsZUNvbXBhcmUocikpO1xuXG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG1heExlbiA9IE1hdGgubWF4KC4uLmVudHJpZXMubWFwKChbZ2xvYl0pID0+IGdsb2IubGVuZ3RoKSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIGAjICR7RmlsZUJhc2UuUFJPSkVOX01BUktFUn1gLFxuICAgICAgJycsXG4gICAgICAuLi5lbnRyaWVzLm1hcCgoW25hbWUsIGF0dHJpYnV0ZXNdKSA9PiBgJHtuYW1lLnBhZEVuZChtYXhMZW4sICcgJyl9XFx0JHtBcnJheS5mcm9tKGF0dHJpYnV0ZXMpLmpvaW4oJyAnKX1gKSxcbiAgICBdLmpvaW4oJ1xcbicpO1xuICB9XG59XG4iXX0=
@@ -59,5 +59,5 @@ class AutoApprove extends component_1.Component {
59
59
  }
60
60
  exports.AutoApprove = AutoApprove;
61
61
  _a = JSII_RTTI_SYMBOL_1;
62
- AutoApprove[_a] = { fqn: "projen.github.AutoApprove", version: "0.31.18" };
62
+ AutoApprove[_a] = { fqn: "projen.github.AutoApprove", version: "0.31.19" };
63
63
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1hcHByb3ZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi9hdXRvLWFwcHJvdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBeUM7QUFFekMsdURBQXVEOzs7Ozs7QUFldkQsTUFBYSxXQUFZLFNBQVEscUJBQVM7Ozs7SUFHeEMsWUFBWSxNQUFjLEVBQUUsT0FBMkI7O1FBQ3JELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEIsSUFBSSxDQUFDLEtBQUssU0FBRyxPQUFPLENBQUMsS0FBSyxtQ0FBSSxjQUFjLENBQUM7UUFDN0MsTUFBTSxTQUFTLFNBQUcsT0FBTyxDQUFDLGdCQUFnQixtQ0FBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFdEUsSUFBSSxTQUFTLEdBQUcsc0RBQXNELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztRQUNyRixJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLFNBQVMsSUFBSSxPQUFPLENBQUM7WUFDckIsU0FBUyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyw0Q0FBNEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0YsU0FBUyxJQUFJLEdBQUcsQ0FBQztTQUNsQjtRQUVELE1BQU0sVUFBVSxHQUFRO1lBQ3RCLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLFdBQVcsRUFBRTtnQkFDWCxZQUFZLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2FBQ2xDO1lBQ0QsRUFBRSxFQUFFLFNBQVM7WUFDYixLQUFLLEVBQUUsQ0FBQztvQkFDTixJQUFJLEVBQUUsa0NBQWtDO29CQUN4QyxJQUFJLEVBQUU7d0JBQ0osY0FBYyxFQUFFLGdCQUFnQixPQUFPLENBQUMsTUFBTSxLQUFLO3FCQUNwRDtpQkFDRixDQUFDO1NBQ0gsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNWLDhFQUE4RTtZQUM5RSxpRkFBaUY7WUFDakYsaUZBQWlGO1lBQ2pGLG1GQUFtRjtZQUNuRixtRkFBbUY7WUFDbkYsd0NBQXdDO1lBQ3hDLEVBQUU7WUFDRixrRkFBa0Y7WUFDbEYsd0ZBQXdGO1lBQ3hGLGdGQUFnRjtZQUNoRixpQkFBaUIsRUFBRTtnQkFDakIsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixDQUFDO2FBQzVFO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7O0FBL0NILGtDQWdEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBHaXRIdWIgfSBmcm9tICcuL2dpdGh1Yic7XG5pbXBvcnQgeyBKb2IsIEpvYlBlcm1pc3Npb24gfSBmcm9tICcuL3dvcmtmbG93cy1tb2RlbCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBBdXRvQXBwcm92ZU9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYWxsb3dlZFVzZXJuYW1lcz86IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGxhYmVsPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHNlY3JldDogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgQXV0b0FwcHJvdmUgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihnaXRodWI6IEdpdEh1Yiwgb3B0aW9uczogQXV0b0FwcHJvdmVPcHRpb25zKSB7XG4gICAgc3VwZXIoZ2l0aHViLnByb2plY3QpO1xuXG4gICAgdGhpcy5sYWJlbCA9IG9wdGlvbnMubGFiZWwgPz8gJ2F1dG8tYXBwcm92ZSc7XG4gICAgY29uc3QgdXNlcm5hbWVzID0gb3B0aW9ucy5hbGxvd2VkVXNlcm5hbWVzID8/IFsnZ2l0aHViLWFjdGlvbnNbYm90XSddO1xuXG4gICAgbGV0IGNvbmRpdGlvbiA9IGBjb250YWlucyhnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LmxhYmVscy4qLm5hbWUsICcke3RoaXMubGFiZWx9JylgO1xuICAgIGlmICh1c2VybmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uZGl0aW9uICs9ICcgJiYgKCc7XG4gICAgICBjb25kaXRpb24gKz0gdXNlcm5hbWVzLm1hcCh1ID0+IGBnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LnVzZXIubG9naW4gPT0gJyR7dX0nYCkuam9pbignIHx8ICcpO1xuICAgICAgY29uZGl0aW9uICs9ICcpJztcbiAgICB9XG5cbiAgICBjb25zdCBhcHByb3ZlSm9iOiBKb2IgPSB7XG4gICAgICBydW5zT246ICd1YnVudHUtbGF0ZXN0JyxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgIH0sXG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgc3RlcHM6IFt7XG4gICAgICAgIHVzZXM6ICdobWFyci9hdXRvLWFwcHJvdmUtYWN0aW9uQHYyLjEuMCcsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAnZ2l0aHViLXRva2VuJzogYFxcJHt7IHNlY3JldHMuJHtvcHRpb25zLnNlY3JldH0gfX1gLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfTtcblxuICAgIGNvbnN0IHdvcmtmbG93ID0gZ2l0aHViLmFkZFdvcmtmbG93KCdhdXRvLWFwcHJvdmUnKTtcbiAgICB3b3JrZmxvdy5vbih7XG4gICAgICAvLyBUaGUgJ3B1bGwgcmVxdWVzdCcgZXZlbnQgZ2l2ZXMgdGhlIHdvcmtmbG93ICdyZWFkLW9ubHknIHBlcm1pc3Npb25zIG9uIHNvbWVcbiAgICAgIC8vIHB1bGwgcmVxdWVzdHMgKHN1Y2ggYXMgdGhlIG9uZXMgZnJvbSBkZXBlbmRhYm90KSB3aGVuIHVzaW5nIHRoZSBgR0lUSFVCX1RPS0VOYFxuICAgICAgLy8gc2VjdXJpdHkgdG9rZW4uIFRoaXMgcHJldmVudHMgdGhlIHdvcmtmbG93IGZyb20gYXBwcm92aW5nIHRoZXNlIHB1bGwgcmVxdWVzdHMuXG4gICAgICAvLyBHaXRodWIgaGFzIHBsYWNlZCB0aGlzIGd1YXJkIHNvIGFzIHRvIHByZXZlbnQgc2VjdXJpdHkgYXR0YWNrcyBieSBzaW1wbHkgb3BlbmluZ1xuICAgICAgLy8gYSBwdWxsIHJlcXVlc3QgYW5kIHRyaWdnZXJpbmcgYSB3b3JrZmxvdyBvbiBhIGNvbW1pdCB0aGF0IHdhcyBub3QgdmV0dGVkIHRvIG1ha2VcbiAgICAgIC8vIHVuaW50ZW5kZWQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeS5cbiAgICAgIC8vXG4gICAgICAvLyBJbnN0ZWFkIHVzZSB0aGUgJ3B1bGwgcmVxdWVzdCB0YXJnZXQnIGV2ZW50IGhlcmUgdGhhdCBnaXZlcyB0aGUgR2l0aHViIHdvcmtmbG93XG4gICAgICAvLyAncmVhZC13cml0ZScgcGVybWlzc2lvbnMuIFRoaXMgaXMgc2FmZSBiZWNhdXNlLCB0aGlzIGV2ZW50LCB1bmxpa2UgdGhlICdwdWxsIHJlcXVlc3QnXG4gICAgICAvLyBldmVudCByZWZlcmVuY2VzIHRoZSBCQVNFIGNvbW1pdCBvZiB0aGUgcHVsbCByZXF1ZXN0IGFuZCBub3QgdGhlIEhFQUQgY29tbWl0LlxuICAgICAgcHVsbFJlcXVlc3RUYXJnZXQ6IHtcbiAgICAgICAgdHlwZXM6IFsnbGFiZWxlZCcsICdvcGVuZWQnLCAnc3luY2hyb25pemUnLCAncmVvcGVuZWQnLCAncmVhZHlfZm9yX3JldmlldyddLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB3b3JrZmxvdy5hZGRKb2JzKHsgYXBwcm92ZTogYXBwcm92ZUpvYiB9KTtcbiAgfVxufVxuIl19
@@ -59,5 +59,5 @@ class AutoMerge extends component_1.Component {
59
59
  }
60
60
  exports.AutoMerge = AutoMerge;
61
61
  _a = JSII_RTTI_SYMBOL_1;
62
- AutoMerge[_a] = { fqn: "projen.github.AutoMerge", version: "0.31.18" };
62
+ AutoMerge[_a] = { fqn: "projen.github.AutoMerge", version: "0.31.19" };
63
63
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1tZXJnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9naXRodWIvYXV0by1tZXJnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUF5Qzs7Ozs7Ozs7Ozs7O0FBZXpDLE1BQWEsU0FBVSxTQUFRLHFCQUFTOzs7O0lBQ3RDLFlBQVksTUFBYyxFQUFFLE9BQXlCOztRQUNuRCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztTQUNoRTtRQUVELE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxRQUFRO1lBQ3RDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLE1BQU0sY0FBYyxTQUFHLE9BQU8sQ0FBQyxjQUFjLG1DQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEUsTUFBTSxpQkFBaUIsR0FBRyxDQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxNQUFNLEVBQzlDLENBQUMsQ0FBQyxDQUFDLFlBQVksY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFUCxNQUFNLFdBQVcsR0FBRztZQUNsQixLQUFLLEVBQUU7Z0JBQ1AsdURBQXVEO2dCQUNyRCxNQUFNLEVBQUUsUUFBUTtnQkFFaEIsMENBQTBDO2dCQUMxQyxjQUFjLEVBQUUsWUFBWTtnQkFFNUIscURBQXFEO2dCQUNyRCxNQUFNLEVBQUUsT0FBTztnQkFDZixhQUFhLEVBQUUsT0FBTzthQUN2QjtZQUVELGtCQUFrQixFQUFFLEVBQUc7U0FDeEIsQ0FBQztRQUVGLE1BQU0sZUFBZSxTQUFHLE9BQU8sQ0FBQyxlQUFlLG1DQUFJLENBQUMsQ0FBQztRQUVyRCxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ2QsSUFBSSxFQUFFLGtEQUFrRDtZQUN4RCxPQUFPLEVBQUUsV0FBVztZQUNwQixVQUFVLEVBQUU7Z0JBQ1YseUJBQXlCLGVBQWUsRUFBRTtnQkFDMUMsR0FBRyxpQkFBaUI7Z0JBQ3BCLEdBQUcsZUFBZTthQUNuQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDakQsQ0FBQzs7QUEvQ0gsOEJBZ0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50JztcbmltcG9ydCB7IEdpdEh1YiB9IGZyb20gJy4vZ2l0aHViJztcblxuZXhwb3J0IGludGVyZmFjZSBBdXRvTWVyZ2VPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBidWlsZEpvYj86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYXBwcm92ZWRSZXZpZXdzPzogbnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGJsb2NraW5nTGFiZWxzPzogc3RyaW5nW107XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgQXV0b01lcmdlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZ2l0aHViOiBHaXRIdWIsIG9wdGlvbnM6IEF1dG9NZXJnZU9wdGlvbnMpIHtcbiAgICBzdXBlcihnaXRodWIucHJvamVjdCk7XG5cbiAgICBjb25zdCBtZXJnaWZ5ID0gZ2l0aHViLm1lcmdpZnk7XG4gICAgaWYgKCFtZXJnaWZ5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dG8gbWVyZ2luZyByZXF1aXJlcyBtZXJnaWZ5IHRvIGJlIGVuYWJsZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWNjZXNzZnVsQnVpbGQgPSBvcHRpb25zLmJ1aWxkSm9iXG4gICAgICA/IFtgc3RhdHVzLXN1Y2Nlc3M9JHtvcHRpb25zLmJ1aWxkSm9ifWBdXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgYmxvY2tpbmdMYWJlbHMgPSBvcHRpb25zLmJsb2NraW5nTGFiZWxzID8/IFsnZG8tbm90LW1lcmdlJ107XG4gICAgY29uc3QgYmxvY2tpbmdDb25kaXRpb24gPSBibG9ja2luZ0xhYmVscz8ubGVuZ3RoXG4gICAgICA/IFtgLWxhYmVsfj0oJHtibG9ja2luZ0xhYmVscy5qb2luKCd8Jyl9KWBdXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgbWVyZ2VBY3Rpb24gPSB7XG4gICAgICBtZXJnZToge1xuICAgICAgLy8gc3F1YXNoIGFsbCBjb21taXRzIGludG8gYSBzaW5nbGUgY29tbWl0IHdoZW4gbWVyZ2luZ1xuICAgICAgICBtZXRob2Q6ICdzcXVhc2gnLFxuXG4gICAgICAgIC8vIHVzZSBQUiB0aXRsZStib2R5IGFzIHRoZSBjb21taXQgbWVzc2FnZVxuICAgICAgICBjb21taXRfbWVzc2FnZTogJ3RpdGxlK2JvZHknLFxuXG4gICAgICAgIC8vIHVwZGF0ZSBQUiBicmFuY2ggc28gaXQncyB1cC10by1kYXRlIGJlZm9yZSBtZXJnaW5nXG4gICAgICAgIHN0cmljdDogJ3NtYXJ0JyxcbiAgICAgICAgc3RyaWN0X21ldGhvZDogJ21lcmdlJyxcbiAgICAgIH0sXG5cbiAgICAgIGRlbGV0ZV9oZWFkX2JyYW5jaDogeyB9LFxuICAgIH07XG5cbiAgICBjb25zdCBhcHByb3ZlZFJldmlld3MgPSBvcHRpb25zLmFwcHJvdmVkUmV2aWV3cyA/PyAxO1xuXG4gICAgbWVyZ2lmeS5hZGRSdWxlKHtcbiAgICAgIG5hbWU6ICdBdXRvbWF0aWMgbWVyZ2Ugb24gYXBwcm92YWwgYW5kIHN1Y2Nlc3NmdWwgYnVpbGQnLFxuICAgICAgYWN0aW9uczogbWVyZ2VBY3Rpb24sXG4gICAgICBjb25kaXRpb25zOiBbXG4gICAgICAgIGAjYXBwcm92ZWQtcmV2aWV3cy1ieT49JHthcHByb3ZlZFJldmlld3N9YCxcbiAgICAgICAgLi4uYmxvY2tpbmdDb25kaXRpb24sXG4gICAgICAgIC4uLnN1Y2Nlc3NmdWxCdWlsZCxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2plY3QuYWRkUGFja2FnZUlnbm9yZSgnLy5tZXJnaWZ5LnltbCcpO1xuICB9XG59XG4iXX0=
@@ -115,5 +115,5 @@ class Dependabot extends component_1.Component {
115
115
  }
116
116
  exports.Dependabot = Dependabot;
117
117
  _a = JSII_RTTI_SYMBOL_1;
118
- Dependabot[_a] = { fqn: "projen.github.Dependabot", version: "0.31.18" };
118
+ Dependabot[_a] = { fqn: "projen.github.Dependabot", version: "0.31.19" };
119
119
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kYWJvdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9naXRodWIvZGVwZW5kYWJvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUF5QztBQUN6QyxrQ0FBd0M7QUFDeEMsa0NBQW1DOzs7Ozs7Ozs7QUFtRG5DLElBQVksc0JBOEJYO0FBOUJELFdBQVksc0JBQXNCO0lBRWhDLGlFQUF1QyxDQUFBO0lBR3ZDLDZEQUFtQyxDQUFBO0lBR25DLHFDQUFXLENBQUE7SUFHWCwrREFBcUMsQ0FBQTtJQUdyQywrREFBcUMsQ0FBQTtJQUdyQyx1REFBNkIsQ0FBQTtJQUc3QixtREFBeUIsQ0FBQTtJQUd6Qix1REFBNkIsQ0FBQTtJQUc3Qiw2REFBbUMsQ0FBQTtJQUduQyxtRUFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBOUJXLHNCQUFzQixHQUF0Qiw4QkFBc0IsS0FBdEIsOEJBQXNCLFFBOEJqQzs7Ozs7O0FBWUQsSUFBWSwwQkFTWDtBQVRELFdBQVksMEJBQTBCO0lBRXBDLDZDQUFlLENBQUE7SUFHZiwrQ0FBaUIsQ0FBQTtJQUdqQixpREFBbUIsQ0FBQTtBQUNyQixDQUFDLEVBVFcsMEJBQTBCLEdBQTFCLGtDQUEwQixLQUExQixrQ0FBMEIsUUFTckM7Ozs7OztBQUdELElBQVksa0JBZVg7QUFmRCxXQUFZLGtCQUFrQjtJQUU1QixxREFBK0IsQ0FBQTtJQUcvQixtQ0FBYSxDQUFBO0lBR2IscUNBQWUsQ0FBQTtJQUdmLDJDQUFxQixDQUFBO0lBR3JCLHFFQUErQyxDQUFBO0FBQ2pELENBQUMsRUFmVyxrQkFBa0IsR0FBbEIsMEJBQWtCLEtBQWxCLDBCQUFrQixRQWU3Qjs7Ozs7Ozs7OztBQUdELE1BQWEsVUFBVyxTQUFRLHFCQUFTOzs7O0lBU3ZDLFlBQVksTUFBYyxFQUFFLFVBQTZCLEVBQUU7O1FBQ3pELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUUvQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsYUFBYSxTQUFHLE9BQU8sQ0FBQyxZQUFZLG1DQUFJLElBQUksQ0FBQztRQUVsRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxvQkFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRXRGLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixPQUFPLEVBQUUsQ0FBQztZQUNWLFVBQVU7WUFDVixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsbUJBQW1CLEVBQUUsS0FBSztvQkFDMUIscUJBQXFCLEVBQUUsZUFBZTtvQkFDdEMsV0FBVyxFQUFFLEdBQUc7b0JBQ2hCLFVBQVUsRUFBRTt3QkFDVixRQUFRLFFBQUUsT0FBTyxDQUFDLGdCQUFnQixtQ0FBSSwwQkFBMEIsQ0FBQyxLQUFLO3FCQUN2RTtvQkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO29CQUNoRSxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztvQkFDckQsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDL0Q7YUFDRjtTQUNGLENBQUM7UUFFRixJQUFJLGVBQVEsQ0FBQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUU7WUFDOUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ2hCLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxDQUFDLFVBQUksT0FBTyxDQUFDLE1BQU0sbUNBQUksRUFBRSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxHQUFHLE9BQUMsQ0FBQyxDQUFDLFFBQVEsbUNBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN6RDtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQzs7Ozs7Ozs7SUFHTSxTQUFTLENBQUMsY0FBc0IsRUFBRSxHQUFHLFFBQWtCO1FBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2YsaUJBQWlCLEVBQUUsY0FBYztZQUNqQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM3RCxDQUFDLENBQUM7SUFDTCxDQUFDOztBQXpESCxnQ0EwREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQnO1xuaW1wb3J0IHsga2ViYWJDYXNlS2V5cyB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgWWFtbEZpbGUgfSBmcm9tICcuLi95YW1sJztcbmltcG9ydCB7IEdpdEh1YiB9IGZyb20gJy4vZ2l0aHViJztcblxuZXhwb3J0IGludGVyZmFjZSBEZXBlbmRhYm90T3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBzY2hlZHVsZUludGVydmFsPzogRGVwZW5kYWJvdFNjaGVkdWxlSW50ZXJ2YWw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdmVyc2lvbmluZ1N0cmF0ZWd5PzogVmVyc2lvbmluZ1N0cmF0ZWd5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgaWdub3JlPzogRGVwZW5kYWJvdElnbm9yZVtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBpZ25vcmVQcm9qZW4/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGxhYmVscz86IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcmVnaXN0cmllcz86IHsgW25hbWU6IHN0cmluZ106IERlcGVuZGFib3RSZWdpc3RyeSB9O1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgRGVwZW5kYWJvdFJlZ2lzdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHR5cGU6IERlcGVuZGFib3RSZWdpc3RyeVR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdXNlcm5hbWU/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHBhc3N3b3JkPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdG9rZW4/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcmVwbGFjZXNCYXNlPzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uPzogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgZW51bSBEZXBlbmRhYm90UmVnaXN0cnlUeXBlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIENPTVBPU0VSX1JFR0lTVFJZID0gJ2NvbXBvc2VyLXJlZ2lzdHJ5JyxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBET0NLRVJfUkVHSVNUUlkgPSAnZG9ja2VyLXJlZ2lzdHJ5JyxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgR0lUID0gJ2dpdCcsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBIRVhfT1JHQU5JWkFUSU9OID0gJ2hleC1vcmdhbml6YXRpb24nLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBNQVZFTl9SRVBPU0lUT1JZID0gJ21hdmVuLXJlcG9zaXRvcnknLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgTlBNX1JFR0lTVFJZID0gJ25wbS1yZWdpc3RyeScsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIE5VR0VUX0ZFRUQgPSAnbnVnZXQtZmVlZCcsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBQWVRIT05fSU5ERVggPSAncHl0aG9uLWluZGV4JyxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIFJVQllHRU1TX1NFUlZFUiA9ICdydWJ5Z2Vtcy1zZXJ2ZXInLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgVEVSUkFGT1JNX1JFR0lTVFJZID0gJ3RlcnJhZm9ybS1yZWdpc3RyeSdcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgRGVwZW5kYWJvdElnbm9yZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRlcGVuZGVuY3lOYW1lOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB2ZXJzaW9ucz86IHN0cmluZ1tdO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgZW51bSBEZXBlbmRhYm90U2NoZWR1bGVJbnRlcnZhbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgREFJTFkgPSAnZGFpbHknLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBXRUVLTFkgPSAnd2Vla2x5JyxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgTU9OVEhMWSA9ICdtb250aGx5J1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBlbnVtIFZlcnNpb25pbmdTdHJhdGVneSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIExPQ0tGSUxFX09OTFkgPSAnbG9ja2ZpbGUtb25seScsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgQVVUTyA9ICdhdXRvJyxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV0lERU4gPSAnd2lkZW4nLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIElOQ1JFQVNFID0gJ2luY3JlYXNlJyxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBJTkNSRUFTRV9JRl9ORUNFU1NBUlkgPSAnaW5jcmVhc2UtaWYtbmVjZXNzYXJ5Jyxcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBEZXBlbmRhYm90IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogYW55O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgaWdub3Jlc1Byb2plbjogYm9vbGVhbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlnbm9yZTogYW55W107XG5cbiAgY29uc3RydWN0b3IoZ2l0aHViOiBHaXRIdWIsIG9wdGlvbnM6IERlcGVuZGFib3RPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihnaXRodWIucHJvamVjdCk7XG5cbiAgICBjb25zdCBwcm9qZWN0ID0gZ2l0aHViLnByb2plY3Q7XG5cbiAgICB0aGlzLmlnbm9yZSA9IFtdO1xuICAgIHRoaXMuaWdub3Jlc1Byb2plbiA9IG9wdGlvbnMuaWdub3JlUHJvamVuID8/IHRydWU7XG5cbiAgICBjb25zdCByZWdpc3RyaWVzID0gb3B0aW9ucy5yZWdpc3RyaWVzID8ga2ViYWJDYXNlS2V5cyhvcHRpb25zLnJlZ2lzdHJpZXMpIDogdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICB2ZXJzaW9uOiAyLFxuICAgICAgcmVnaXN0cmllcyxcbiAgICAgIHVwZGF0ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICdwYWNrYWdlLWVjb3N5c3RlbSc6ICducG0nLFxuICAgICAgICAgICd2ZXJzaW9uaW5nLXN0cmF0ZWd5JzogJ2xvY2tmaWxlLW9ubHknLFxuICAgICAgICAgICdkaXJlY3RvcnknOiAnLycsXG4gICAgICAgICAgJ3NjaGVkdWxlJzoge1xuICAgICAgICAgICAgaW50ZXJ2YWw6IG9wdGlvbnMuc2NoZWR1bGVJbnRlcnZhbCA/PyBEZXBlbmRhYm90U2NoZWR1bGVJbnRlcnZhbC5EQUlMWSxcbiAgICAgICAgICB9LFxuICAgICAgICAgICdpZ25vcmUnOiAoKSA9PiB0aGlzLmlnbm9yZS5sZW5ndGggPiAwID8gdGhpcy5pZ25vcmUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgJ2xhYmVscyc6IG9wdGlvbnMubGFiZWxzID8gb3B0aW9ucy5sYWJlbHMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgJ3JlZ2lzdHJpZXMnOiByZWdpc3RyaWVzID8gT2JqZWN0LmtleXMocmVnaXN0cmllcykgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBuZXcgWWFtbEZpbGUocHJvamVjdCwgJy5naXRodWIvZGVwZW5kYWJvdC55bWwnLCB7XG4gICAgICBvYmo6IHRoaXMuY29uZmlnLFxuICAgICAgY29tbWl0dGVkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBpIG9mIG9wdGlvbnMuaWdub3JlID8/IFtdKSB7XG4gICAgICB0aGlzLmFkZElnbm9yZShpLmRlcGVuZGVuY3lOYW1lLCAuLi4oaS52ZXJzaW9ucyA/PyBbXSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlnbm9yZXNQcm9qZW4pIHtcbiAgICAgIHRoaXMuYWRkSWdub3JlKCdwcm9qZW4nKTtcbiAgICB9XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFkZElnbm9yZShkZXBlbmRlbmN5TmFtZTogc3RyaW5nLCAuLi52ZXJzaW9uczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmlnbm9yZS5wdXNoKHtcbiAgICAgICdkZXBlbmRlbmN5LW5hbWUnOiBkZXBlbmRlbmN5TmFtZSxcbiAgICAgICd2ZXJzaW9ucyc6ICgpID0+IHZlcnNpb25zLmxlbmd0aCA+IDAgPyB2ZXJzaW9ucyA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxufVxuIl19