@macedon-technologies/batman 1.24.2 → 1.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,6 +21,7 @@ class SoftwareFactoryArchitectureRules {
21
21
  ' */',
22
22
  "import * as fs from 'node:fs';",
23
23
  "import * as path from 'node:path';",
24
+ "import { execFileSync } from 'node:child_process';",
24
25
  "import rulesFile from './rules.json';",
25
26
  '',
26
27
  'interface ForbiddenImportCheck {',
@@ -31,12 +32,22 @@ class SoftwareFactoryArchitectureRules {
31
32
  ' forbid: string[];',
32
33
  '}',
33
34
  '',
35
+ 'interface RequiredCompanionCheck {',
36
+ " type: 'required-companion';",
37
+ ' // Glob patterns selecting changed files that trigger the requirement.',
38
+ ' from: string[];',
39
+ ' // Glob patterns -- at least one CHANGED file must match one of these.',
40
+ ' requireOneOf: string[];',
41
+ " // Optional -- 'from' files matching these globs don't trigger the requirement.",
42
+ ' exempt?: string[];',
43
+ '}',
44
+ '',
34
45
  'interface Rule {',
35
46
  ' id: string;',
36
47
  ' description: string;',
37
48
  ' enabled: boolean;',
38
49
  " severity: 'low' | 'medium' | 'high' | 'critical';",
39
- ' check: ForbiddenImportCheck;',
50
+ ' check: ForbiddenImportCheck | RequiredCompanionCheck;',
40
51
  '}',
41
52
  '',
42
53
  'interface Violation {',
@@ -47,6 +58,7 @@ class SoftwareFactoryArchitectureRules {
47
58
  '',
48
59
  "const REPO_ROOT = path.resolve(__dirname, '..');",
49
60
  "const IGNORED_DIRS = new Set(['node_modules', '.git', '.swamp', 'cdk.out', 'lib', 'build', 'dist']);",
61
+ "const BASE_REF = process.env.ARCHITECTURE_RULES_BASE_REF || 'origin/main';",
50
62
  '',
51
63
  '// Minimal glob -> RegExp: supports "*", "**", "**/" and literal path segments.',
52
64
  '// No new dependency for this — the only pattern shapes rules.json ever needs',
@@ -84,6 +96,26 @@ class SoftwareFactoryArchitectureRules {
84
96
  " return path.relative(REPO_ROOT, absPath).split(path.sep).join('/');",
85
97
  '}',
86
98
  '',
99
+ '// Files changed relative to baseRef, sourced from git rather than the whole-tree',
100
+ '// walk() below -- required-companion checks care about what a PR touched, not',
101
+ '// the full repo. Throws (rather than returning []) if baseRef cannot be resolved,',
102
+ '// so an unfetched base ref fails the check instead of silently reporting no violations.',
103
+ 'function getChangedFiles(baseRef: string): string[] {',
104
+ ' let output: string;',
105
+ ' try {',
106
+ " output = execFileSync('git', ['diff', '--name-only', '--diff-filter=ACMR', `${baseRef}...HEAD`], {",
107
+ ' cwd: REPO_ROOT,',
108
+ " encoding: 'utf8',",
109
+ ' });',
110
+ ' } catch (err) {',
111
+ ' throw new Error(',
112
+ ' `architecture-rules: failed to compute the changed-file set against base ref "${baseRef}" -- ` +',
113
+ ' `is it fetched and resolvable in this checkout? (${(err as Error).message})`,',
114
+ ' );',
115
+ ' }',
116
+ " return output.split('\\n').map((line) => line.trim()).filter((line) => line.length > 0);",
117
+ '}',
118
+ '',
87
119
  'function walk(dir: string, acc: string[] = []): string[] {',
88
120
  ' for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {',
89
121
  ' if (IGNORED_DIRS.has(entry.name)) continue;',
@@ -118,7 +150,7 @@ class SoftwareFactoryArchitectureRules {
118
150
  '}',
119
151
  '',
120
152
  'function evaluateForbiddenImport(rule: Rule): Violation[] {',
121
- ' const { from, forbid } = rule.check;',
153
+ ' const { from, forbid } = rule.check as ForbiddenImportCheck;',
122
154
  ' if (from.length === 0 || forbid.length === 0) return [];',
123
155
  '',
124
156
  ' const violations: Violation[] = [];',
@@ -141,10 +173,34 @@ class SoftwareFactoryArchitectureRules {
141
173
  ' return violations;',
142
174
  '}',
143
175
  '',
176
+ 'function evaluateRequiredCompanion(rule: Rule): Violation[] {',
177
+ ' const { from, requireOneOf, exempt } = rule.check as RequiredCompanionCheck;',
178
+ ' if (from.length === 0 || requireOneOf.length === 0) return [];',
179
+ '',
180
+ ' const changedFiles = getChangedFiles(BASE_REF);',
181
+ ' const triggering = changedFiles.filter(',
182
+ ' (file) => matchesAny(file, from) && !(exempt && matchesAny(file, exempt)),',
183
+ ' );',
184
+ ' if (triggering.length === 0) return [];',
185
+ '',
186
+ ' const satisfied = changedFiles.some((file) => matchesAny(file, requireOneOf));',
187
+ ' if (satisfied) return [];',
188
+ '',
189
+ ' return [',
190
+ ' {',
191
+ ' ruleId: rule.id,',
192
+ ' severity: rule.severity,',
193
+ ' message: `changed file(s) ${triggering.join(\', \')} match rule "${rule.id}"\'s "from" patterns, but no changed file matches its "requireOneOf" patterns`,',
194
+ ' },',
195
+ ' ];',
196
+ '}',
197
+ '',
144
198
  'function evaluateRule(rule: Rule): Violation[] {',
145
199
  ' switch (rule.check.type) {',
146
200
  " case 'forbidden-import':",
147
201
  ' return evaluateForbiddenImport(rule);',
202
+ " case 'required-companion':",
203
+ ' return evaluateRequiredCompanion(rule);',
148
204
  ' default:',
149
205
  ' throw new Error(`architecture-rules: unknown check.type "${(rule.check as { type: string }).type}" on rule "${rule.id}"`);',
150
206
  ' }',
@@ -203,6 +259,9 @@ class SoftwareFactoryArchitectureRules {
203
259
  '',
204
260
  '## Rule shape',
205
261
  '',
262
+ 'Two `check.type`s are implemented: `forbidden-import` (whole-repo import-graph',
263
+ 'check) and `required-companion` (diff-based co-change check).',
264
+ '',
206
265
  '```json',
207
266
  '{',
208
267
  ' "id": "unique-id",',
@@ -217,6 +276,56 @@ class SoftwareFactoryArchitectureRules {
217
276
  '}',
218
277
  '```',
219
278
  '',
279
+ '```json',
280
+ '{',
281
+ ' "id": "unique-id",',
282
+ ' "description": "What this enforces and why.",',
283
+ ' "enabled": true,',
284
+ ' "severity": "low" | "medium" | "high" | "critical",',
285
+ ' "check": {',
286
+ ' "type": "required-companion",',
287
+ ' "from": ["glob patterns selecting changed files that trigger the requirement"],',
288
+ ' "requireOneOf": ["glob patterns -- at least one CHANGED file must match one of these"],',
289
+ ' "exempt": ["optional -- from-files matching these globs don\'t trigger the requirement"]',
290
+ ' }',
291
+ '}',
292
+ '```',
293
+ '',
294
+ '`required-companion` evaluates the set of files changed in the current diff',
295
+ '(`git diff --name-only --diff-filter=ACMR <baseRef>...HEAD`), not the whole',
296
+ 'repo tree: if any changed file matches `from` (and doesn\'t match `exempt`) but',
297
+ 'no changed file matches `requireOneOf`, that\'s a violation. The base ref',
298
+ 'defaults to `origin/main` and can be overridden with the',
299
+ '`ARCHITECTURE_RULES_BASE_REF` environment variable. This means the checkout',
300
+ 'running `pnpm validate:architecture` must have that base ref fetched and',
301
+ 'resolvable (a shallow, single-branch checkout will make the check fail closed',
302
+ 'with an error rather than silently reporting no violations) — make sure',
303
+ 'whatever runs this task fetches enough history for `git diff <baseRef>...HEAD`',
304
+ 'to succeed.',
305
+ '',
306
+ '`from`/`requireOneOf`/`exempt` globs are matched against the paths `git',
307
+ 'diff --name-only` reports, which are relative to the git repository\'s',
308
+ 'top-level directory. This lines up with `from`\'s own directory (the parent of',
309
+ '`architecture-rules/`) in the common case — a single project generated at the',
310
+ 'repo root — but if `architecture-rules/` instead lives under a nested',
311
+ 'subdirectory of a larger git repo, write globs relative to the git root, not',
312
+ 'to that subdirectory.',
313
+ '',
314
+ '**`required-companion` is a coverage check, not a correctness check.** It only',
315
+ 'confirms that *some* changed file matches `requireOneOf` — it can\'t tell',
316
+ 'whether that change is actually related to the triggering `from` change (a',
317
+ 'trivial or unrelated edit to a file under `requireOneOf` satisfies the rule',
318
+ 'just as well as a substantive one), and it can\'t tell whether a given `from`',
319
+ 'change genuinely needed a companion at all (a pure refactor might not).',
320
+ '`exempt` covers *known, glob-expressible* exceptions, but not every false',
321
+ 'positive is expressible as a glob — that judgment call still belongs to the',
322
+ 'rule author (scoping `from`/`exempt`) and the reviewer (reading the companion',
323
+ 'diff, not just trusting that the check passed). Also note that `main()`',
324
+ 'fails the whole run on *any* violation regardless of `severity` — `severity`',
325
+ 'is informational only, not a leniency lever — so start with a narrowly',
326
+ 'scoped `from` (or `enabled: false`) and widen it as the convention proves',
327
+ 'itself, the same guidance as for `forbidden-import`.',
328
+ '',
220
329
  '`enabled: false` rules are skipped (reported as "deferred") rather than',
221
330
  "evaluated — use this for a rule you've named and described but don't yet",
222
331
  'have a concrete convention to check.',
@@ -229,11 +338,13 @@ class SoftwareFactoryArchitectureRules {
229
338
  '',
230
339
  '## Adding a check type',
231
340
  '',
232
- '`forbidden-import` is the only implemented `check.type`. If a future rule',
233
- 'needs something it can\'t express (e.g. "every aggregate file must have a',
234
- 'matching events file"), add a new `type` value, a matching interface, and a',
235
- 'case in `evaluateRule()` in `check.ts` — keep the engine itself generic;',
236
- 'rule-specific knowledge belongs in `rules.json`.',
341
+ '`forbidden-import` (whole-repo import graph) and `required-companion`',
342
+ '(diff-based co-change) are the implemented `check.type`s. If a future rule',
343
+ 'needs a data source neither provides (e.g. "every aggregate file must have a',
344
+ 'matching events file", which is a repo-wide naming convention rather than',
345
+ 'either an import-graph or a diff check), add a new `type` value, a matching',
346
+ 'interface, and a case in `evaluateRule()` in `check.ts` — keep the engine',
347
+ 'itself generic; rule-specific knowledge belongs in `rules.json`.',
237
348
  ],
238
349
  });
239
350
  new projen_1.SampleFile(project, 'architecture-rules/rules.json', {
@@ -242,4 +353,4 @@ class SoftwareFactoryArchitectureRules {
242
353
  }
243
354
  }
244
355
  exports.SoftwareFactoryArchitectureRules = SoftwareFactoryArchitectureRules;
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHdhcmVGYWN0b3J5QXJjaGl0ZWN0dXJlUnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU29mdHdhcmVGYWN0b3J5QXJjaGl0ZWN0dXJlUnVsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXdEO0FBR3hEOzs7OztHQUtHO0FBQ0gsTUFBYSxnQ0FBZ0M7SUFDM0MsWUFBWSxPQUFvQjtRQUM5QixJQUFJLGlCQUFRLENBQUMsT0FBTyxFQUFFLDZCQUE2QixFQUFFO1lBQ25ELE1BQU0sRUFBRSxJQUFJO1lBQ1osS0FBSyxFQUFFO2dCQUNMLEtBQUs7Z0JBQ0wsK0VBQStFO2dCQUMvRSw4RUFBOEU7Z0JBQzlFLGdGQUFnRjtnQkFDaEYsOEJBQThCO2dCQUM5QixLQUFLO2dCQUNMLGdDQUFnQztnQkFDaEMsb0NBQW9DO2dCQUNwQyx1Q0FBdUM7Z0JBQ3ZDLEVBQUU7Z0JBQ0Ysa0NBQWtDO2dCQUNsQyw2QkFBNkI7Z0JBQzdCLG9GQUFvRjtnQkFDcEYsbUJBQW1CO2dCQUNuQixtRkFBbUY7Z0JBQ25GLHFCQUFxQjtnQkFDckIsR0FBRztnQkFDSCxFQUFFO2dCQUNGLGtCQUFrQjtnQkFDbEIsZUFBZTtnQkFDZix3QkFBd0I7Z0JBQ3hCLHFCQUFxQjtnQkFDckIscURBQXFEO2dCQUNyRCxnQ0FBZ0M7Z0JBQ2hDLEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRix1QkFBdUI7Z0JBQ3ZCLG1CQUFtQjtnQkFDbkIscUJBQXFCO2dCQUNyQixvQkFBb0I7Z0JBQ3BCLEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRixrREFBa0Q7Z0JBQ2xELHNHQUFzRztnQkFDdEcsRUFBRTtnQkFDRixpRkFBaUY7Z0JBQ2pGLCtFQUErRTtnQkFDL0UsaUVBQWlFO2dCQUNqRSwrQ0FBK0M7Z0JBQy9DLGlCQUFpQjtnQkFDakIsMkNBQTJDO2dCQUMzQyx3QkFBd0I7Z0JBQ3hCLDZDQUE2QztnQkFDN0MsWUFBWTtnQkFDWixrQ0FBa0M7Z0JBQ2xDLDRC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QUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFO1lBQ3BELE1BQU0sRUFBRSxJQUFJO1lBQ1osS0FBSyxFQUFFO2dCQUNMLHNCQUFzQjtnQkFDdEIsRUFBRTtnQkFDRixrRUFBa0U7Z0JBQ2xFLHlFQUF5RTtnQkFDekUsNkVBQTZFO2dCQUM3RSwyRUFBMkU7Z0JBQzNFLDJFQUEyRTtnQkFDM0Usc0NBQXNDO2dCQUN0QyxFQUFFO2dCQUNGLGVBQWU7Z0JBQ2YsRUFBRTtnQkFDRixTQUFTO2dCQUNULEdBQUc7Z0JBQ0gsc0JBQXNCO2dCQUN0QixpREFBaUQ7Z0JBQ2pELG9CQUFvQjtnQkFDcEIsdURBQXVEO2dCQUN2RCxjQUFjO2dCQUNkLGlDQUFpQztnQkFDakMsbUVBQW1FO2dCQUNuRSxpRUFBaUU7Z0JBQ2pFLEtBQUs7Z0JBQ0wsR0FBRztnQkFDSCxLQUFLO2dCQUNMLEVBQUU7Z0JBQ0YseUVBQXlFO2dCQUN6RSwwRUFBMEU7Z0JBQzFFLHNDQUFzQztnQkFDdEMsRUFBRTtnQkFDRixrQkFBa0I7Z0JBQ2xCLEVBQUU7Z0JBQ0Ysc0VBQXNFO2dCQUN0RSxzRUFBc0U7Z0JBQ3RFLGtFQUFrRTtnQkFDbEUsRUFBRTtnQkFDRix3QkFBd0I7Z0JBQ3hCLEVBQUU7Z0JBQ0YsMkVBQTJFO2dCQUMzRSwyRUFBMkU7Z0JBQzNFLDZFQUE2RTtnQkFDN0UsMEVBQTBFO2dCQUMxRSxrREFBa0Q7YUFDbkQ7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLCtCQUErQixFQUFFO1lBQ3ZELFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJO1NBQ3hELENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNPRCw0RUEyT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKc29uRmlsZSwgU2FtcGxlRmlsZSwgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgTm9kZVByb2plY3QgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuXG4vKipcbiAqIFRoZSBnZW5lcmljLCBkYXRhLWRyaXZlbiBhcmNoaXRlY3R1cmUgcnVsZSBlbmdpbmUgcGx1cyBhbiBlbXB0eSBzZWVkXG4gKiBydWxlcy5qc29uLiBgY2hlY2sudHNgL2B0c2NvbmZpZy5qc29uYC9gUkVBRE1FLm1kYCBhcmUgbWFuYWdlZCAoQmF0bWFuXG4gKiBvd25zIHRoZSBlbmdpbmUpOyBgcnVsZXMuanNvbmAgaXMgYSBgU2FtcGxlRmlsZWAg4oCUIGVhY2ggcmVwbydzIG93biBydWxlc1xuICogYXJlIGRhdGEgdGhlIHRlYW0gb3ducywgbm90IHNvbWV0aGluZyBCYXRtYW4gc2hvdWxkIG92ZXJ3cml0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNvZnR3YXJlRmFjdG9yeUFyY2hpdGVjdHVyZVJ1bGVzIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogTm9kZVByb2plY3QpIHtcbiAgICBuZXcgVGV4dEZpbGUocHJvamVjdCwgJ2FyY2hpdGVjdHVyZS1ydWxlcy9jaGVjay50cycsIHtcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgICcvKionLFxuICAgICAgICAnICogR2VuZXJpYyBhcmNoaXRlY3R1cmUtcnVsZSBlbmdpbmUuIFJ1bGVzIGxpdmUgZW50aXJlbHkgaW4gcnVsZXMuanNvbiDigJQgdGhpcycsXG4gICAgICAgICcgKiBmaWxlIG9ubHkga25vd3MgaG93IHRvIGV2YWx1YXRlIHRoZSBjaGVjayBcInR5cGVzXCIgdGhhdCBydWxlcyBjYW4gZGVjbGFyZS4nLFxuICAgICAgICAnICogQWRkIGEgbmV3IHJ1bGUgYnkgYWRkaW5nIGEgcnVsZXMuanNvbiBlbnRyeTsgYWRkIGEgbmV3IGNoZWNrIHR5cGUgYnkgYWRkaW5nJyxcbiAgICAgICAgJyAqIGEgY2FzZSBpbiBldmFsdWF0ZVJ1bGUoKS4nLFxuICAgICAgICAnICovJyxcbiAgICAgICAgXCJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcIixcbiAgICAgICAgXCJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XCIsXG4gICAgICAgIFwiaW1wb3J0IHJ1bGVzRmlsZSBmcm9tICcuL3J1bGVzLmpzb24nO1wiLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2ludGVyZmFjZSBGb3JiaWRkZW5JbXBvcnRDaGVjayB7JyxcbiAgICAgICAgXCIgIHR5cGU6ICdmb3JiaWRkZW4taW1wb3J0JztcIixcbiAgICAgICAgJyAgLy8gR2xvYiBwYXR0ZXJucyAocmVsYXRpdmUgdG8gcmVwbyByb290KSBzZWxlY3RpbmcgdGhlIGZpbGVzIHRoaXMgcnVsZSBpbnNwZWN0cy4nLFxuICAgICAgICAnICBmcm9tOiBzdHJpbmdbXTsnLFxuICAgICAgICAnICAvLyBHbG9iIHBhdHRlcm5zIChyZWxhdGl2ZSB0byByZXBvIHJvb3QpIHRoYXQgXCJmcm9tXCIgZmlsZXMgbWF5IG5vdCBpbXBvcnQgZnJvbS4nLFxuICAgICAgICAnICBmb3JiaWQ6IHN0cmluZ1tdOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdpbnRlcmZhY2UgUnVsZSB7JyxcbiAgICAgICAgJyAgaWQ6IHN0cmluZzsnLFxuICAgICAgICAnICBkZXNjcmlwdGlvbjogc3RyaW5nOycsXG4gICAgICAgICcgIGVuYWJsZWQ6IGJvb2xlYW47JyxcbiAgICAgICAgXCIgIHNldmVyaXR5OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJztcIixcbiAgICAgICAgJyAgY2hlY2s6IEZvcmJpZGRlbkltcG9ydENoZWNrOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdpbnRlcmZhY2UgVmlvbGF0aW9uIHsnLFxuICAgICAgICAnICBydWxlSWQ6IHN0cmluZzsnLFxuICAgICAgICAnICBzZXZlcml0eTogc3RyaW5nOycsXG4gICAgICAgICcgIG1lc3NhZ2U6IHN0cmluZzsnLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICBcImNvbnN0IFJFUE9fUk9PVCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicpO1wiLFxuICAgICAgICBcImNvbnN0IElHTk9SRURfRElSUyA9IG5ldyBTZXQoWydub2RlX21vZHVsZXMnLCAnLmdpdCcsICcuc3dhbXAnLCAnY2RrLm91dCcsICdsaWInLCAnYnVpbGQnLCAnZGlzdCddKTtcIixcbiAgICAgICAgJycsXG4gICAgICAgICcvLyBNaW5pbWFsIGdsb2IgLT4gUmVnRXhwOiBzdXBwb3J0cyBcIipcIiwgXCIqKlwiLCBcIioqL1wiIGFuZCBsaXRlcmFsIHBhdGggc2VnbWVudHMuJyxcbiAgICAgICAgJy8vIE5vIG5ldyBkZXBlbmRlbmN5IGZvciB0aGlzIOKAlCB0aGUgb25seSBwYXR0ZXJuIHNoYXBlcyBydWxlcy5qc29uIGV2ZXIgbmVlZHMnLFxuICAgICAgICAnLy8gYXJlIGRpcmVjdG9yeS1wcmVmaXggZ2xvYnMgbGlrZSBcInNyYy9kb21haW5zLyovY29tbWFuZHMvKipcIi4nLFxuICAgICAgICAnZnVuY3Rpb24gZ2xvYlRvUmVnRXhwKGdsb2I6IHN0cmluZyk6IFJlZ0V4cCB7JyxcbiAgICAgICAgXCIgIGxldCBvdXQgPSAnJztcIixcbiAgICAgICAgJyAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iLmxlbmd0aDsgaSsrKSB7JyxcbiAgICAgICAgJyAgICBjb25zdCBjID0gZ2xvYltpXTsnLFxuICAgICAgICBcIiAgICBpZiAoYyA9PT0gJyonICYmIGdsb2JbaSArIDFdID09PSAnKicpIHtcIixcbiAgICAgICAgJyAgICAgIGkrKzsnLFxuICAgICAgICBcIiAgICAgIGlmIChnbG9iW2kgKyAxXSA9PT0gJy8nKSB7XCIsXG4gICAgICAgIFwiICAgICAgICBvdXQgKz0gJyg/Oi4qLyk/JztcIixcbiAgICAgICAgJyAgICAgICAgaSsrOycsXG4gICAgICAgICcgICAgICB9IGVsc2UgeycsXG4gICAgICAgIFwiICAgICAgICBvdXQgKz0gJy4qJztcIixcbiAgICAgICAgJyAgICAgIH0nLFxuICAgICAgICBcIiAgICB9IGVsc2UgaWYgKGMgPT09ICcqJykge1wiLFxuICAgICAgICBcIiAgICAgIG91dCArPSAnW14vXSonO1wiLFxuICAgICAgICBcIiAgICB9IGVsc2UgaWYgKGMgPT09ICc/Jykge1wiLFxuICAgICAgICBcIiAgICAgIG91dCArPSAnW14vXSc7XCIsXG4gICAgICAgIFwiICAgIH0gZWxzZSBpZiAoJy4rXiR7fSgpfFtdXFxcXFxcXFwnLmluY2x1ZGVzKGMpKSB7XCIsXG4gICAgICAgICcgICAgICBvdXQgKz0gYFxcXFxcXFxcJHtjfWA7JyxcbiAgICAgICAgJyAgICB9IGVsc2UgeycsXG4gICAgICAgICcgICAgICBvdXQgKz0gYzsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJyAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke291dH0kYCk7JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2Z1bmN0aW9uIG1hdGNoZXNBbnkocmVsRmlsZTogc3RyaW5nLCBnbG9iczogc3RyaW5nW10pOiBib29sZWFuIHsnLFxuICAgICAgICAnICByZXR1cm4gZ2xvYnMuc29tZSgoZ2xvYikgPT4gZ2xvYlRvUmVnRXhwKGdsb2IpLnRlc3QocmVsRmlsZSkpOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdmdW5jdGlvbiB0b1JlcG9SZWxhdGl2ZShhYnNQYXRoOiBzdHJpbmcpOiBzdHJpbmcgeycsXG4gICAgICAgIFwiICByZXR1cm4gcGF0aC5yZWxhdGl2ZShSRVBPX1JPT1QsIGFic1BhdGgpLnNwbGl0KHBhdGguc2VwKS5qb2luKCcvJyk7XCIsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdmdW5jdGlvbiB3YWxrKGRpcjogc3RyaW5nLCBhY2M6IHN0cmluZ1tdID0gW10pOiBzdHJpbmdbXSB7JyxcbiAgICAgICAgJyAgZm9yIChjb25zdCBlbnRyeSBvZiBmcy5yZWFkZGlyU3luYyhkaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkgeycsXG4gICAgICAgICcgICAgaWYgKElHTk9SRURfRElSUy5oYXMoZW50cnkubmFtZSkpIGNvbnRpbnVlOycsXG4gICAgICAgICcgICAgY29uc3QgZnVsbCA9IHBhdGguam9pbihkaXIsIGVudHJ5Lm5hbWUpOycsXG4gICAgICAgICcgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHsnLFxuICAgICAgICAnICAgICAgd2FsayhmdWxsLCBhY2MpOycsXG4gICAgICAgIFwiICAgIH0gZWxzZSBpZiAoZW50cnkuaXNGaWxlKCkgJiYgKGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy50cycpIHx8IGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy50c3gnKSkpIHtcIixcbiAgICAgICAgJyAgICAgIGFjYy5wdXNoKGZ1bGwpOycsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnICByZXR1cm4gYWNjOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiY29uc3QgUkVMQVRJVkVfSU1QT1JUX1JFID0gLyg/OmltcG9ydHxleHBvcnQpXFxcXHMrKD86W14nXFxcIjtdKj9cXFxcYmZyb21cXFxccyspP1snXFxcIl0oXFxcXC5bXidcXFwiXSspWydcXFwiXS9nO1wiLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2Z1bmN0aW9uIGZpbmRSZWxhdGl2ZUltcG9ydHMoc291cmNlOiBzdHJpbmcpOiBzdHJpbmdbXSB7JyxcbiAgICAgICAgJyAgY29uc3Qgc3BlY3M6IHN0cmluZ1tdID0gW107JyxcbiAgICAgICAgJyAgUkVMQVRJVkVfSU1QT1JUX1JFLmxhc3RJbmRleCA9IDA7JyxcbiAgICAgICAgJyAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsOycsXG4gICAgICAgICcgIHdoaWxlICgobWF0Y2ggPSBSRUxBVElWRV9JTVBPUlRfUkUuZXhlYyhzb3VyY2UpKSkgeycsXG4gICAgICAgICcgICAgc3BlY3MucHVzaChtYXRjaFsxXSk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcgIHJldHVybiBzcGVjczsnLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnLy8gQW4gaW1wb3J0IHNwZWMgcmVzb2x2ZXMgdG8gYSBtb2R1bGUsIG5vdCBhIHNwZWNpZmljIGZpbGUgZXh0ZW5zaW9uLCBzbyBhJyxcbiAgICAgICAgJy8vIGZvcmJpZCBnbG9iIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgYmFyZSByZXNvbHZlZCBwYXRoIHBsdXMgaXRzIC50cy9pbmRleC50cycsXG4gICAgICAgICcvLyB2YXJpYW50cy4nLFxuICAgICAgICAnZnVuY3Rpb24gcmVzb2x2ZWRDYW5kaWRhdGVzKGZyb21GaWxlOiBzdHJpbmcsIHNwZWM6IHN0cmluZyk6IHN0cmluZ1tdIHsnLFxuICAgICAgICAnICBjb25zdCByZXNvbHZlZCA9IHRvUmVwb1JlbGF0aXZlKHBhdGgubm9ybWFsaXplKHBhdGguam9pbihwYXRoLmRpcm5hbWUoZnJvbUZpbGUpLCBzcGVjKSkpOycsXG4gICAgICAgICcgIHJldHVybiBbcmVzb2x2ZWQsIGAke3Jlc29sdmVkfS50c2AsIGAke3Jlc29sdmVkfS9pbmRleC50c2BdOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdmdW5jdGlvbiBldmFsdWF0ZUZvcmJpZGRlbkltcG9ydChydWxlOiBSdWxlKTogVmlvbGF0aW9uW10geycsXG4gICAgICAgICcgIGNvbnN0IHsgZnJvbSwgZm9yYmlkIH0gPSBydWxlLmNoZWNrOycsXG4gICAgICAgICcgIGlmIChmcm9tLmxlbmd0aCA9PT0gMCB8fCBmb3JiaWQubGVuZ3RoID09PSAwKSByZXR1cm4gW107JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107JyxcbiAgICAgICAgJyAgZm9yIChjb25zdCBmaWxlIG9mIHdhbGsoUkVQT19ST09UKSkgeycsXG4gICAgICAgICcgICAgY29uc3QgcmVsRmlsZSA9IHRvUmVwb1JlbGF0aXZlKGZpbGUpOycsXG4gICAgICAgICcgICAgaWYgKCFtYXRjaGVzQW55KHJlbEZpbGUsIGZyb20pKSBjb250aW51ZTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgXCIgICAgY29uc3Qgc291cmNlID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4Jyk7XCIsXG4gICAgICAgICcgICAgZm9yIChjb25zdCBzcGVjIG9mIGZpbmRSZWxhdGl2ZUltcG9ydHMoc291cmNlKSkgeycsXG4gICAgICAgICcgICAgICBjb25zdCBjYW5kaWRhdGVzID0gcmVzb2x2ZWRDYW5kaWRhdGVzKGZpbGUsIHNwZWMpOycsXG4gICAgICAgICcgICAgICBpZiAoY2FuZGlkYXRlcy5zb21lKChjYW5kaWRhdGUpID0+IG1hdGNoZXNBbnkoY2FuZGlkYXRlLCBmb3JiaWQpKSkgeycsXG4gICAgICAgICcgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7JyxcbiAgICAgICAgJyAgICAgICAgICBydWxlSWQ6IHJ1bGUuaWQsJyxcbiAgICAgICAgJyAgICAgICAgICBzZXZlcml0eTogcnVsZS5zZXZlcml0eSwnLFxuICAgICAgICAnICAgICAgICAgIG1lc3NhZ2U6IGAke3JlbEZpbGV9IGltcG9ydHMgXCIke3NwZWN9XCIsIHdoaWNoIHJlc29sdmVzIHVuZGVyIGEgcGF0aCBmb3JiaWRkZW4gYnkgcnVsZSBcIiR7cnVsZS5pZH1cImAsJyxcbiAgICAgICAgJyAgICAgICAgfSk7JyxcbiAgICAgICAgJyAgICAgIH0nLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJyAgcmV0dXJuIHZpb2xhdGlvbnM7JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2Z1bmN0aW9uIGV2YWx1YXRlUnVsZShydWxlOiBSdWxlKTogVmlvbGF0aW9uW10geycsXG4gICAgICAgICcgIHN3aXRjaCAocnVsZS5jaGVjay50eXBlKSB7JyxcbiAgICAgICAgXCIgICAgY2FzZSAnZm9yYmlkZGVuLWltcG9ydCc6XCIsXG4gICAgICAgICcgICAgICByZXR1cm4gZXZhbHVhdGVGb3JiaWRkZW5JbXBvcnQocnVsZSk7JyxcbiAgICAgICAgJyAgICBkZWZhdWx0OicsXG4gICAgICAgICcgICAgICB0aHJvdyBuZXcgRXJyb3IoYGFyY2hpdGVjdHVyZS1ydWxlczogdW5rbm93biBjaGVjay50eXBlIFwiJHsocnVsZS5jaGVjayBhcyB7IHR5cGU6IHN0cmluZyB9KS50eXBlfVwiIG9uIHJ1bGUgXCIke3J1bGUuaWR9XCJgKTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2Z1bmN0aW9uIG1haW4oKTogbnVtYmVyIHsnLFxuICAgICAgICAnICBjb25zdCBydWxlcyA9IChydWxlc0ZpbGUgYXMgeyBydWxlczogUnVsZVtdIH0pLnJ1bGVzOycsXG4gICAgICAgICcgIGxldCBldmFsdWF0ZWQgPSAwOycsXG4gICAgICAgICcgIGxldCBkZWZlcnJlZCA9IDA7JyxcbiAgICAgICAgJyAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7JyxcbiAgICAgICAgJyAgICBpZiAoIXJ1bGUuZW5hYmxlZCkgeycsXG4gICAgICAgICcgICAgICBkZWZlcnJlZCsrOycsXG4gICAgICAgICcgICAgICBjb25zb2xlLmxvZyhgW2RlZmVycmVkXSAke3J1bGUuaWR9OiAke3J1bGUuZGVzY3JpcHRpb259YCk7JyxcbiAgICAgICAgJyAgICAgIGNvbnRpbnVlOycsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcgICAgZXZhbHVhdGVkKys7JyxcbiAgICAgICAgJyAgICB2aW9sYXRpb25zLnB1c2goLi4uZXZhbHVhdGVSdWxlKHJ1bGUpKTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIGNvbnNvbGUubG9nKGBcXFxcbmFyY2hpdGVjdHVyZS1ydWxlczogJHtldmFsdWF0ZWR9IHJ1bGUocykgZXZhbHVhdGVkLCAke2RlZmVycmVkfSBkZWZlcnJlZCwgJHt2aW9sYXRpb25zLmxlbmd0aH0gdmlvbGF0aW9uKHMpYCk7JyxcbiAgICAgICAgJyAgZm9yIChjb25zdCB2aW9sYXRpb24gb2YgdmlvbGF0aW9ucykgeycsXG4gICAgICAgICcgICAgY29uc29sZS5lcnJvcihgICBbJHt2aW9sYXRpb24uc2V2ZXJpdHl9XSAke3Zpb2xhdGlvbi5ydWxlSWR9OiAke3Zpb2xhdGlvbi5tZXNzYWdlfWApOycsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgcmV0dXJuIHZpb2xhdGlvbnMubGVuZ3RoID4gMCA/IDEgOiAwOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdwcm9jZXNzLmV4aXQobWFpbigpKTsnLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIG5ldyBKc29uRmlsZShwcm9qZWN0LCAnYXJjaGl0ZWN0dXJlLXJ1bGVzL3RzY29uZmlnLmpzb24nLCB7XG4gICAgICBtYXJrZXI6IGZhbHNlLFxuICAgICAgb2JqOiB7XG4gICAgICAgIGV4dGVuZHM6ICcuLi90c2NvbmZpZy5qc29uJyxcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgbm9FbWl0OiB0cnVlLFxuICAgICAgICAgIHJvb3REaXI6ICcuJyxcbiAgICAgICAgfSxcbiAgICAgICAgaW5jbHVkZTogWycqLnRzJywgJyouanNvbiddLFxuICAgICAgICBleGNsdWRlOiBbJ25vZGVfbW9kdWxlcyddLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIG5ldyBUZXh0RmlsZShwcm9qZWN0LCAnYXJjaGl0ZWN0dXJlLXJ1bGVzL1JFQURNRS5tZCcsIHtcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgICcjIEFyY2hpdGVjdHVyZSBydWxlcycsXG4gICAgICAgICcnLFxuICAgICAgICAnQSBkYXRhLWRyaXZlbiByZWdpc3RyeSBvZiBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzLCBlbmZvcmNlZCBieScsXG4gICAgICAgICdgcG5wbSB2YWxpZGF0ZTphcmNoaXRlY3R1cmVgIGFuZCBydW4gYXMgcGFydCBvZiB0aGUgcHJlLVBSIHZlcmlmaWNhdGlvbicsXG4gICAgICAgICd3b3JrZmxvdyAoYHdvcmtmbG93cy93b3JrZmxvdy1wcmUtcHItdmVyaWZ5LnlhbWxgKSBiZWZvcmUgdGhlIHN3YW1wIGZhY3RvcnknLFxuICAgICAgICAnb3BlbnMgYSBQUi4gTmV3IHJ1bGVzIGFyZSBuZXcgZW50cmllcyBpbiBgcnVsZXMuanNvbmAsIG5vdCBuZXcgY29kZSDigJQgdGhlJyxcbiAgICAgICAgJ2VuZ2luZSAoYGNoZWNrLnRzYCkgb25seSBuZWVkcyBhIG5ldyBjYXNlIGluIGBldmFsdWF0ZVJ1bGUoKWAgd2hlbiBhIHJ1bGUnLFxuICAgICAgICAnbmVlZHMgYSBnZW51aW5lbHkgbmV3IGtpbmQgb2YgY2hlY2suJyxcbiAgICAgICAgJycsXG4gICAgICAgICcjIyBSdWxlIHNoYXBlJyxcbiAgICAgICAgJycsXG4gICAgICAgICdgYGBqc29uJyxcbiAgICAgICAgJ3snLFxuICAgICAgICAnICBcImlkXCI6IFwidW5pcXVlLWlkXCIsJyxcbiAgICAgICAgJyAgXCJkZXNjcmlwdGlvblwiOiBcIldoYXQgdGhpcyBlbmZvcmNlcyBhbmQgd2h5LlwiLCcsXG4gICAgICAgICcgIFwiZW5hYmxlZFwiOiB0cnVlLCcsXG4gICAgICAgICcgIFwic2V2ZXJpdHlcIjogXCJsb3dcIiB8IFwibWVkaXVtXCIgfCBcImhpZ2hcIiB8IFwiY3JpdGljYWxcIiwnLFxuICAgICAgICAnICBcImNoZWNrXCI6IHsnLFxuICAgICAgICAnICAgIFwidHlwZVwiOiBcImZvcmJpZGRlbi1pbXBvcnRcIiwnLFxuICAgICAgICAnICAgIFwiZnJvbVwiOiBbXCJnbG9iIHBhdHRlcm5zIHNlbGVjdGluZyBmaWxlcyB0aGlzIHJ1bGUgaW5zcGVjdHNcIl0sJyxcbiAgICAgICAgJyAgICBcImZvcmJpZFwiOiBbXCJnbG9iIHBhdHRlcm5zIHRob3NlIGZpbGVzIG1heSBub3QgaW1wb3J0IGZyb21cIl0nLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnYGBgJyxcbiAgICAgICAgJycsXG4gICAgICAgICdgZW5hYmxlZDogZmFsc2VgIHJ1bGVzIGFyZSBza2lwcGVkIChyZXBvcnRlZCBhcyBcImRlZmVycmVkXCIpIHJhdGhlciB0aGFuJyxcbiAgICAgICAgXCJldmFsdWF0ZWQg4oCUIHVzZSB0aGlzIGZvciBhIHJ1bGUgeW91J3ZlIG5hbWVkIGFuZCBkZXNjcmliZWQgYnV0IGRvbid0IHlldFwiLFxuICAgICAgICAnaGF2ZSBhIGNvbmNyZXRlIGNvbnZlbnRpb24gdG8gY2hlY2suJyxcbiAgICAgICAgJycsXG4gICAgICAgICcjIyBDdXJyZW50IHJ1bGVzJyxcbiAgICAgICAgJycsXG4gICAgICAgICdOb25lIHlldCDigJQgYHJ1bGVzLmpzb25gIHNoaXBzIGVtcHR5LiBBZGQgcnVsZXMgYXMgeW91ciBkb21haW4gbW9kdWxlJyxcbiAgICAgICAgJ2NvbnZlbnRpb25zIHNvbGlkaWZ5IChlLmcuIGFuIGV2ZW50LXNvdXJjZWQvQ1FSUyBtb2R1bGUgbGF5b3V0IHVuZGVyJyxcbiAgICAgICAgJ2BzcmMvZG9tYWlucy88bmFtZT4ve2NvbW1hbmRzLGV2ZW50cyxhZ2dyZWdhdGVzLHByb2plY3Rpb25zfS9gKS4nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyMjIEFkZGluZyBhIGNoZWNrIHR5cGUnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2Bmb3JiaWRkZW4taW1wb3J0YCBpcyB0aGUgb25seSBpbXBsZW1lbnRlZCBgY2hlY2sudHlwZWAuIElmIGEgZnV0dXJlIHJ1bGUnLFxuICAgICAgICAnbmVlZHMgc29tZXRoaW5nIGl0IGNhblxcJ3QgZXhwcmVzcyAoZS5nLiBcImV2ZXJ5IGFnZ3JlZ2F0ZSBmaWxlIG11c3QgaGF2ZSBhJyxcbiAgICAgICAgJ21hdGNoaW5nIGV2ZW50cyBmaWxlXCIpLCBhZGQgYSBuZXcgYHR5cGVgIHZhbHVlLCBhIG1hdGNoaW5nIGludGVyZmFjZSwgYW5kIGEnLFxuICAgICAgICAnY2FzZSBpbiBgZXZhbHVhdGVSdWxlKClgIGluIGBjaGVjay50c2Ag4oCUIGtlZXAgdGhlIGVuZ2luZSBpdHNlbGYgZ2VuZXJpYzsnLFxuICAgICAgICAncnVsZS1zcGVjaWZpYyBrbm93bGVkZ2UgYmVsb25ncyBpbiBgcnVsZXMuanNvbmAuJyxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBuZXcgU2FtcGxlRmlsZShwcm9qZWN0LCAnYXJjaGl0ZWN0dXJlLXJ1bGVzL3J1bGVzLmpzb24nLCB7XG4gICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoeyBydWxlczogW10gfSwgbnVsbCwgMikgKyAnXFxuJyxcbiAgICB9KTtcbiAgfVxufVxuIl19
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHdhcmVGYWN0b3J5QXJjaGl0ZWN0dXJlUnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU29mdHdhcmVGYWN0b3J5QXJjaGl0ZWN0dXJlUnVsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXdEO0FBR3hEOzs7OztHQUtHO0FBQ0gsTUFBYSxnQ0FBZ0M7SUFDM0MsWUFBWSxPQUFvQjtRQUM5QixJQUFJLGlCQUFRLENBQUMsT0FBTyxFQUFFLDZCQUE2QixFQUFFO1lBQ25ELE1BQU0sRUFBRSxJQUFJO1lBQ1osS0FBSyxFQUFFO2dCQUNMLEtBQUs7Z0JBQ0wsK0VBQStFO2dCQUMvRSw4RUFBOEU7Z0JBQzlFLGdGQUFnRjtnQkFDaEYsOEJBQThCO2dCQUM5QixLQUFLO2dCQUNMLGdDQUFnQztnQkFDaEMsb0NBQW9DO2dCQUNwQyxvREFBb0Q7Z0JBQ3BELHVDQUF1QztnQkFDdkMsRUFBRTtnQkFDRixrQ0FBa0M7Z0JBQ2xDLDZCQUE2QjtnQkFDN0Isb0ZBQW9GO2dCQUNwRixtQkFBbUI7Z0JBQ25CLG1GQUFtRjtnQkFDbkYscUJBQXFCO2dCQUNyQixHQUFHO2dCQUNILEVBQUU7Z0JBQ0Ysb0NBQW9DO2dCQUNwQywrQkFBK0I7Z0JBQy9CLDBFQUEwRTtnQkFDMUUsbUJBQW1CO2dCQUNuQiwwRUFBMEU7Z0JBQzFFLDJCQUEyQjtnQkFDM0IsbUZBQW1GO2dCQUNuRixzQkFBc0I7Z0JBQ3RCLEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRixrQkFBa0I7Z0JBQ2xCLGVBQWU7Z0JBQ2Ysd0JBQXdCO2dCQUN4QixxQkFBcUI7Z0JBQ3JCLHFEQUFxRDtnQkFDckQseURBQXlEO2dCQUN6RCxHQUFHO2dCQUNILEVBQUU7Z0JBQ0YsdUJBQXVCO2dCQUN2QixtQkFBbUI7Z0JBQ25CLHFCQUFxQjtnQkFDckIsb0JBQW9CO2dCQUNwQixHQUFHO2dCQUNILEVBQUU7Z0JBQ0Ysa0RBQWtEO2dCQUNsRCxzR0FBc0c7Z0JBQ3RHLDRF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RDtnQkFDdEQsRUFBRTtnQkFDRix5RUFBeUU7Z0JBQ3pFLDBFQUEwRTtnQkFDMUUsc0NBQXNDO2dCQUN0QyxFQUFFO2dCQUNGLGtCQUFrQjtnQkFDbEIsRUFBRTtnQkFDRixzRUFBc0U7Z0JBQ3RFLHNFQUFzRTtnQkFDdEUsa0VBQWtFO2dCQUNsRSxFQUFFO2dCQUNGLHdCQUF3QjtnQkFDeEIsRUFBRTtnQkFDRix1RUFBdUU7Z0JBQ3ZFLDRFQUE0RTtnQkFDNUUsOEVBQThFO2dCQUM5RSwyRUFBMkU7Z0JBQzNFLDZFQUE2RTtnQkFDN0UsMkVBQTJFO2dCQUMzRSxrRUFBa0U7YUFDbkU7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLCtCQUErQixFQUFFO1lBQ3ZELFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJO1NBQ3hELENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTFWRCw0RUEwVkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKc29uRmlsZSwgU2FtcGxlRmlsZSwgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgTm9kZVByb2plY3QgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuXG4vKipcbiAqIFRoZSBnZW5lcmljLCBkYXRhLWRyaXZlbiBhcmNoaXRlY3R1cmUgcnVsZSBlbmdpbmUgcGx1cyBhbiBlbXB0eSBzZWVkXG4gKiBydWxlcy5qc29uLiBgY2hlY2sudHNgL2B0c2NvbmZpZy5qc29uYC9gUkVBRE1FLm1kYCBhcmUgbWFuYWdlZCAoQmF0bWFuXG4gKiBvd25zIHRoZSBlbmdpbmUpOyBgcnVsZXMuanNvbmAgaXMgYSBgU2FtcGxlRmlsZWAg4oCUIGVhY2ggcmVwbydzIG93biBydWxlc1xuICogYXJlIGRhdGEgdGhlIHRlYW0gb3ducywgbm90IHNvbWV0aGluZyBCYXRtYW4gc2hvdWxkIG92ZXJ3cml0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNvZnR3YXJlRmFjdG9yeUFyY2hpdGVjdHVyZVJ1bGVzIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogTm9kZVByb2plY3QpIHtcbiAgICBuZXcgVGV4dEZpbGUocHJvamVjdCwgJ2FyY2hpdGVjdHVyZS1ydWxlcy9jaGVjay50cycsIHtcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgICcvKionLFxuICAgICAgICAnICogR2VuZXJpYyBhcmNoaXRlY3R1cmUtcnVsZSBlbmdpbmUuIFJ1bGVzIGxpdmUgZW50aXJlbHkgaW4gcnVsZXMuanNvbiDigJQgdGhpcycsXG4gICAgICAgICcgKiBmaWxlIG9ubHkga25vd3MgaG93IHRvIGV2YWx1YXRlIHRoZSBjaGVjayBcInR5cGVzXCIgdGhhdCBydWxlcyBjYW4gZGVjbGFyZS4nLFxuICAgICAgICAnICogQWRkIGEgbmV3IHJ1bGUgYnkgYWRkaW5nIGEgcnVsZXMuanNvbiBlbnRyeTsgYWRkIGEgbmV3IGNoZWNrIHR5cGUgYnkgYWRkaW5nJyxcbiAgICAgICAgJyAqIGEgY2FzZSBpbiBldmFsdWF0ZVJ1bGUoKS4nLFxuICAgICAgICAnICovJyxcbiAgICAgICAgXCJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcIixcbiAgICAgICAgXCJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XCIsXG4gICAgICAgIFwiaW1wb3J0IHsgZXhlY0ZpbGVTeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcIixcbiAgICAgICAgXCJpbXBvcnQgcnVsZXNGaWxlIGZyb20gJy4vcnVsZXMuanNvbic7XCIsXG4gICAgICAgICcnLFxuICAgICAgICAnaW50ZXJmYWNlIEZvcmJpZGRlbkltcG9ydENoZWNrIHsnLFxuICAgICAgICBcIiAgdHlwZTogJ2ZvcmJpZGRlbi1pbXBvcnQnO1wiLFxuICAgICAgICAnICAvLyBHbG9iIHBhdHRlcm5zIChyZWxhdGl2ZSB0byByZXBvIHJvb3QpIHNlbGVjdGluZyB0aGUgZmlsZXMgdGhpcyBydWxlIGluc3BlY3RzLicsXG4gICAgICAgICcgIGZyb206IHN0cmluZ1tdOycsXG4gICAgICAgICcgIC8vIEdsb2IgcGF0dGVybnMgKHJlbGF0aXZlIHRvIHJlcG8gcm9vdCkgdGhhdCBcImZyb21cIiBmaWxlcyBtYXkgbm90IGltcG9ydCBmcm9tLicsXG4gICAgICAgICcgIGZvcmJpZDogc3RyaW5nW107JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2ludGVyZmFjZSBSZXF1aXJlZENvbXBhbmlvbkNoZWNrIHsnLFxuICAgICAgICBcIiAgdHlwZTogJ3JlcXVpcmVkLWNvbXBhbmlvbic7XCIsXG4gICAgICAgICcgIC8vIEdsb2IgcGF0dGVybnMgc2VsZWN0aW5nIGNoYW5nZWQgZmlsZXMgdGhhdCB0cmlnZ2VyIHRoZSByZXF1aXJlbWVudC4nLFxuICAgICAgICAnICBmcm9tOiBzdHJpbmdbXTsnLFxuICAgICAgICAnICAvLyBHbG9iIHBhdHRlcm5zIC0tIGF0IGxlYXN0IG9uZSBDSEFOR0VEIGZpbGUgbXVzdCBtYXRjaCBvbmUgb2YgdGhlc2UuJyxcbiAgICAgICAgJyAgcmVxdWlyZU9uZU9mOiBzdHJpbmdbXTsnLFxuICAgICAgICBcIiAgLy8gT3B0aW9uYWwgLS0gJ2Zyb20nIGZpbGVzIG1hdGNoaW5nIHRoZXNlIGdsb2JzIGRvbid0IHRyaWdnZXIgdGhlIHJlcXVpcmVtZW50LlwiLFxuICAgICAgICAnICBleGVtcHQ/OiBzdHJpbmdbXTsnLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnaW50ZXJmYWNlIFJ1bGUgeycsXG4gICAgICAgICcgIGlkOiBzdHJpbmc7JyxcbiAgICAgICAgJyAgZGVzY3JpcHRpb246IHN0cmluZzsnLFxuICAgICAgICAnICBlbmFibGVkOiBib29sZWFuOycsXG4gICAgICAgIFwiICBzZXZlcml0eTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XCIsXG4gICAgICAgICcgIGNoZWNrOiBGb3JiaWRkZW5JbXBvcnRDaGVjayB8IFJlcXVpcmVkQ29tcGFuaW9uQ2hlY2s7JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2ludGVyZmFjZSBWaW9sYXRpb24geycsXG4gICAgICAgICcgIHJ1bGVJZDogc3RyaW5nOycsXG4gICAgICAgICcgIHNldmVyaXR5OiBzdHJpbmc7JyxcbiAgICAgICAgJyAgbWVzc2FnZTogc3RyaW5nOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiY29uc3QgUkVQT19ST09UID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJyk7XCIsXG4gICAgICAgIFwiY29uc3QgSUdOT1JFRF9ESVJTID0gbmV3IFNldChbJ25vZGVfbW9kdWxlcycsICcuZ2l0JywgJy5zd2FtcCcsICdjZGsub3V0JywgJ2xpYicsICdidWlsZCcsICdkaXN0J10pO1wiLFxuICAgICAgICBcImNvbnN0IEJBU0VfUkVGID0gcHJvY2Vzcy5lbnYuQVJDSElURUNUVVJFX1JVTEVTX0JBU0VfUkVGIHx8ICdvcmlnaW4vbWFpbic7XCIsXG4gICAgICAgICcnLFxuICAgICAgICAnLy8gTWluaW1hbCBnbG9iIC0+IFJlZ0V4cDogc3VwcG9ydHMgXCIqXCIsIFwiKipcIiwgXCIqKi9cIiBhbmQgbGl0ZXJhbCBwYXRoIHNlZ21lbnRzLicsXG4gICAgICAgICcvLyBObyBuZXcgZGVwZW5kZW5jeSBmb3IgdGhpcyDigJQgdGhlIG9ubHkgcGF0dGVybiBzaGFwZXMgcnVsZXMuanNvbiBldmVyIG5lZWRzJyxcbiAgICAgICAgJy8vIGFyZSBkaXJlY3RvcnktcHJlZml4IGdsb2JzIGxpa2UgXCJzcmMvZG9tYWlucy8qL2NvbW1hbmRzLyoqXCIuJyxcbiAgICAgICAgJ2Z1bmN0aW9uIGdsb2JUb1JlZ0V4cChnbG9iOiBzdHJpbmcpOiBSZWdFeHAgeycsXG4gICAgICAgIFwiICBsZXQgb3V0ID0gJyc7XCIsXG4gICAgICAgICcgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYi5sZW5ndGg7IGkrKykgeycsXG4gICAgICAgICcgICAgY29uc3QgYyA9IGdsb2JbaV07JyxcbiAgICAgICAgXCIgICAgaWYgKGMgPT09ICcqJyAmJiBnbG9iW2kgKyAxXSA9PT0gJyonKSB7XCIsXG4gICAgICAgICcgICAgICBpKys7JyxcbiAgICAgICAgXCIgICAgICBpZiAoZ2xvYltpICsgMV0gPT09ICcvJykge1wiLFxuICAgICAgICBcIiAgICAgICAgb3V0ICs9ICcoPzouKi8pPyc7XCIsXG4gICAgICAgICcgICAgICAgIGkrKzsnLFxuICAgICAgICAnICAgICAgfSBlbHNlIHsnLFxuICAgICAgICBcIiAgICAgICAgb3V0ICs9ICcuKic7XCIsXG4gICAgICAgICcgICAgICB9JyxcbiAgICAgICAgXCIgICAgfSBlbHNlIGlmIChjID09PSAnKicpIHtcIixcbiAgICAgICAgXCIgICAgICBvdXQgKz0gJ1teL10qJztcIixcbiAgICAgICAgXCIgICAgfSBlbHNlIGlmIChjID09PSAnPycpIHtcIixcbiAgICAgICAgXCIgICAgICBvdXQgKz0gJ1teL10nO1wiLFxuICAgICAgICBcIiAgICB9IGVsc2UgaWYgKCcuK14ke30oKXxbXVxcXFxcXFxcJy5pbmNsdWRlcyhjKSkge1wiLFxuICAgICAgICAnICAgICAgb3V0ICs9IGBcXFxcXFxcXCR7Y31gOycsXG4gICAgICAgICcgICAgfSBlbHNlIHsnLFxuICAgICAgICAnICAgICAgb3V0ICs9IGM7JyxcbiAgICAgICAgJyAgICB9JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcgIHJldHVybiBuZXcgUmVnRXhwKGBeJHtvdXR9JGApOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdmdW5jdGlvbiBtYXRjaGVzQW55KHJlbEZpbGU6IHN0cmluZywgZ2xvYnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7JyxcbiAgICAgICAgJyAgcmV0dXJuIGdsb2JzLnNvbWUoKGdsb2IpID0+IGdsb2JUb1JlZ0V4cChnbG9iKS50ZXN0KHJlbEZpbGUpKTsnLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnZnVuY3Rpb24gdG9SZXBvUmVsYXRpdmUoYWJzUGF0aDogc3RyaW5nKTogc3RyaW5nIHsnLFxuICAgICAgICBcIiAgcmV0dXJuIHBhdGgucmVsYXRpdmUoUkVQT19ST09ULCBhYnNQYXRoKS5zcGxpdChwYXRoLnNlcCkuam9pbignLycpO1wiLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnLy8gRmlsZXMgY2hhbmdlZCByZWxhdGl2ZSB0byBiYXNlUmVmLCBzb3VyY2VkIGZyb20gZ2l0IHJhdGhlciB0aGFuIHRoZSB3aG9sZS10cmVlJyxcbiAgICAgICAgJy8vIHdhbGsoKSBiZWxvdyAtLSByZXF1aXJlZC1jb21wYW5pb24gY2hlY2tzIGNhcmUgYWJvdXQgd2hhdCBhIFBSIHRvdWNoZWQsIG5vdCcsXG4gICAgICAgICcvLyB0aGUgZnVsbCByZXBvLiBUaHJvd3MgKHJhdGhlciB0aGFuIHJldHVybmluZyBbXSkgaWYgYmFzZVJlZiBjYW5ub3QgYmUgcmVzb2x2ZWQsJyxcbiAgICAgICAgJy8vIHNvIGFuIHVuZmV0Y2hlZCBiYXNlIHJlZiBmYWlscyB0aGUgY2hlY2sgaW5zdGVhZCBvZiBzaWxlbnRseSByZXBvcnRpbmcgbm8gdmlvbGF0aW9ucy4nLFxuICAgICAgICAnZnVuY3Rpb24gZ2V0Q2hhbmdlZEZpbGVzKGJhc2VSZWY6IHN0cmluZyk6IHN0cmluZ1tdIHsnLFxuICAgICAgICAnICBsZXQgb3V0cHV0OiBzdHJpbmc7JyxcbiAgICAgICAgJyAgdHJ5IHsnLFxuICAgICAgICBcIiAgICBvdXRwdXQgPSBleGVjRmlsZVN5bmMoJ2dpdCcsIFsnZGlmZicsICctLW5hbWUtb25seScsICctLWRpZmYtZmlsdGVyPUFDTVInLCBgJHtiYXNlUmVmfS4uLkhFQURgXSwge1wiLFxuICAgICAgICAnICAgICAgY3dkOiBSRVBPX1JPT1QsJyxcbiAgICAgICAgXCIgICAgICBlbmNvZGluZzogJ3V0ZjgnLFwiLFxuICAgICAgICAnICAgIH0pOycsXG4gICAgICAgICcgIH0gY2F0Y2ggKGVycikgeycsXG4gICAgICAgICcgICAgdGhyb3cgbmV3IEVycm9yKCcsXG4gICAgICAgICcgICAgICBgYXJjaGl0ZWN0dXJlLXJ1bGVzOiBmYWlsZWQgdG8gY29tcHV0ZSB0aGUgY2hhbmdlZC1maWxlIHNldCBhZ2FpbnN0IGJhc2UgcmVmIFwiJHtiYXNlUmVmfVwiIC0tIGAgKycsXG4gICAgICAgICcgICAgICAgIGBpcyBpdCBmZXRjaGVkIGFuZCByZXNvbHZhYmxlIGluIHRoaXMgY2hlY2tvdXQ/ICgkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9KWAsJyxcbiAgICAgICAgJyAgICApOycsXG4gICAgICAgICcgIH0nLFxuICAgICAgICBcIiAgcmV0dXJuIG91dHB1dC5zcGxpdCgnXFxcXG4nKS5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUubGVuZ3RoID4gMCk7XCIsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdmdW5jdGlvbiB3YWxrKGRpcjogc3RyaW5nLCBhY2M6IHN0cmluZ1tdID0gW10pOiBzdHJpbmdbXSB7JyxcbiAgICAgICAgJyAgZm9yIChjb25zdCBlbnRyeSBvZiBmcy5yZWFkZGlyU3luYyhkaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkgeycsXG4gICAgICAgICcgICAgaWYgKElHTk9SRURfRElSUy5oYXMoZW50cnkubmFtZSkpIGNvbnRpbnVlOycsXG4gICAgICAgICcgICAgY29uc3QgZnVsbCA9IHBhdGguam9pbihkaXIsIGVudHJ5Lm5hbWUpOycsXG4gICAgICAgICcgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHsnLFxuICAgICAgICAnICAgICAgd2FsayhmdWxsLCBhY2MpOycsXG4gICAgICAgIFwiICAgIH0gZWxzZSBpZiAoZW50cnkuaXNGaWxlKCkgJiYgKGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy50cycpIHx8IGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy50c3gnKSkpIHtcIixcbiAgICAgICAgJyAgICAgIGFjYy5wdXNoKGZ1bGwpOycsXG4gICAgICAgICcgICAgfScsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnICByZXR1cm4gYWNjOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiY29uc3QgUkVMQVRJVkVfSU1QT1JUX1JFID0gLyg/OmltcG9ydHxleHBvcnQpXFxcXHMrKD86W14nXFxcIjtdKj9cXFxcYmZyb21cXFxccyspP1snXFxcIl0oXFxcXC5bXidcXFwiXSspWydcXFwiXS9nO1wiLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2Z1bmN0aW9uIGZpbmRSZWxhdGl2ZUltcG9ydHMoc291cmNlOiBzdHJpbmcpOiBzdHJpbmdbXSB7JyxcbiAgICAgICAgJyAgY29uc3Qgc3BlY3M6IHN0cmluZ1tdID0gW107JyxcbiAgICAgICAgJyAgUkVMQVRJVkVfSU1QT1JUX1JFLmxhc3RJbmRleCA9IDA7JyxcbiAgICAgICAgJyAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsOycsXG4gICAgICAgICcgIHdoaWxlICgobWF0Y2ggPSBSRUxBVElWRV9JTVBPUlRfUkUuZXhlYyhzb3VyY2UpKSkgeycsXG4gICAgICAgICcgICAgc3BlY3MucHVzaChtYXRjaFsxXSk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcgIHJldHVybiBzcGVjczsnLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAnLy8gQW4gaW1wb3J0IHNwZWMgcmVzb2x2ZXMgdG8gYSBtb2R1bGUsIG5vdCBhIHNwZWNpZmljIGZpbGUgZXh0ZW5zaW9uLCBzbyBhJyxcbiAgICAgICAgJy8vIGZvcmJpZCBnbG9iIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgYmFyZSByZXNvbHZlZCBwYXRoIHBsdXMgaXRzIC50cy9pbmRleC50cycsXG4gICAgICAgICcvLyB2YXJpYW50cy4nLFxuICAgICAgICAnZnVuY3Rpb24gcmVzb2x2ZWRDYW5kaWRhdGVzKGZyb21GaWxlOiBzdHJpbmcsIHNwZWM6IHN0cmluZyk6IHN0cmluZ1tdIHsnLFxuICAgICAgICAnICBjb25zdCByZXNvbHZlZCA9IHRvUmVwb1JlbGF0aXZlKHBhdGgubm9ybWFsaXplKHBhdGguam9pbihwYXRoLmRpcm5hbWUoZnJvbUZpbGUpLCBzcGVjKSkpOycsXG4gICAgICAgICcgIHJldHVybiBbcmVzb2x2ZWQsIGAke3Jlc29sdmVkfS50c2AsIGAke3Jlc29sdmVkfS9pbmRleC50c2BdOycsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdmdW5jdGlvbiBldmFsdWF0ZUZvcmJpZGRlbkltcG9ydChydWxlOiBSdWxlKTogVmlvbGF0aW9uW10geycsXG4gICAgICAgICcgIGNvbnN0IHsgZnJvbSwgZm9yYmlkIH0gPSBydWxlLmNoZWNrIGFzIEZvcmJpZGRlbkltcG9ydENoZWNrOycsXG4gICAgICAgICcgIGlmIChmcm9tLmxlbmd0aCA9PT0gMCB8fCBmb3JiaWQubGVuZ3RoID09PSAwKSByZXR1cm4gW107JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107JyxcbiAgICAgICAgJyAgZm9yIChjb25zdCBmaWxlIG9mIHdhbGsoUkVQT19ST09UKSkgeycsXG4gICAgICAgICcgICAgY29uc3QgcmVsRmlsZSA9IHRvUmVwb1JlbGF0aXZlKGZpbGUpOycsXG4gICAgICAgICcgICAgaWYgKCFtYXRjaGVzQW55KHJlbEZpbGUsIGZyb20pKSBjb250aW51ZTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgXCIgICAgY29uc3Qgc291cmNlID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4Jyk7XCIsXG4gICAgICAgICcgICAgZm9yIChjb25zdCBzcGVjIG9mIGZpbmRSZWxhdGl2ZUltcG9ydHMoc291cmNlKSkgeycsXG4gICAgICAgICcgICAgICBjb25zdCBjYW5kaWRhdGVzID0gcmVzb2x2ZWRDYW5kaWRhdGVzKGZpbGUsIHNwZWMpOycsXG4gICAgICAgICcgICAgICBpZiAoY2FuZGlkYXRlcy5zb21lKChjYW5kaWRhdGUpID0+IG1hdGNoZXNBbnkoY2FuZGlkYXRlLCBmb3JiaWQpKSkgeycsXG4gICAgICAgICcgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7JyxcbiAgICAgICAgJyAgICAgICAgICBydWxlSWQ6IHJ1bGUuaWQsJyxcbiAgICAgICAgJyAgICAgICAgICBzZXZlcml0eTogcnVsZS5zZXZlcml0eSwnLFxuICAgICAgICAnICAgICAgICAgIG1lc3NhZ2U6IGAke3JlbEZpbGV9IGltcG9ydHMgXCIke3NwZWN9XCIsIHdoaWNoIHJlc29sdmVzIHVuZGVyIGEgcGF0aCBmb3JiaWRkZW4gYnkgcnVsZSBcIiR7cnVsZS5pZH1cImAsJyxcbiAgICAgICAgJyAgICAgICAgfSk7JyxcbiAgICAgICAgJyAgICAgIH0nLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJyAgcmV0dXJuIHZpb2xhdGlvbnM7JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2Z1bmN0aW9uIGV2YWx1YXRlUmVxdWlyZWRDb21wYW5pb24ocnVsZTogUnVsZSk6IFZpb2xhdGlvbltdIHsnLFxuICAgICAgICAnICBjb25zdCB7IGZyb20sIHJlcXVpcmVPbmVPZiwgZXhlbXB0IH0gPSBydWxlLmNoZWNrIGFzIFJlcXVpcmVkQ29tcGFuaW9uQ2hlY2s7JyxcbiAgICAgICAgJyAgaWYgKGZyb20ubGVuZ3RoID09PSAwIHx8IHJlcXVpcmVPbmVPZi5sZW5ndGggPT09IDApIHJldHVybiBbXTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgY29uc3QgY2hhbmdlZEZpbGVzID0gZ2V0Q2hhbmdlZEZpbGVzKEJBU0VfUkVGKTsnLFxuICAgICAgICAnICBjb25zdCB0cmlnZ2VyaW5nID0gY2hhbmdlZEZpbGVzLmZpbHRlcignLFxuICAgICAgICAnICAgIChmaWxlKSA9PiBtYXRjaGVzQW55KGZpbGUsIGZyb20pICYmICEoZXhlbXB0ICYmIG1hdGNoZXNBbnkoZmlsZSwgZXhlbXB0KSksJyxcbiAgICAgICAgJyAgKTsnLFxuICAgICAgICAnICBpZiAodHJpZ2dlcmluZy5sZW5ndGggPT09IDApIHJldHVybiBbXTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgY29uc3Qgc2F0aXNmaWVkID0gY2hhbmdlZEZpbGVzLnNvbWUoKGZpbGUpID0+IG1hdGNoZXNBbnkoZmlsZSwgcmVxdWlyZU9uZU9mKSk7JyxcbiAgICAgICAgJyAgaWYgKHNhdGlzZmllZCkgcmV0dXJuIFtdOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICByZXR1cm4gWycsXG4gICAgICAgICcgICAgeycsXG4gICAgICAgICcgICAgICBydWxlSWQ6IHJ1bGUuaWQsJyxcbiAgICAgICAgJyAgICAgIHNldmVyaXR5OiBydWxlLnNldmVyaXR5LCcsXG4gICAgICAgICcgICAgICBtZXNzYWdlOiBgY2hhbmdlZCBmaWxlKHMpICR7dHJpZ2dlcmluZy5qb2luKFxcJywgXFwnKX0gbWF0Y2ggcnVsZSBcIiR7cnVsZS5pZH1cIlxcJ3MgXCJmcm9tXCIgcGF0dGVybnMsIGJ1dCBubyBjaGFuZ2VkIGZpbGUgbWF0Y2hlcyBpdHMgXCJyZXF1aXJlT25lT2ZcIiBwYXR0ZXJuc2AsJyxcbiAgICAgICAgJyAgICB9LCcsXG4gICAgICAgICcgIF07JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2Z1bmN0aW9uIGV2YWx1YXRlUnVsZShydWxlOiBSdWxlKTogVmlvbGF0aW9uW10geycsXG4gICAgICAgICcgIHN3aXRjaCAocnVsZS5jaGVjay50eXBlKSB7JyxcbiAgICAgICAgXCIgICAgY2FzZSAnZm9yYmlkZGVuLWltcG9ydCc6XCIsXG4gICAgICAgICcgICAgICByZXR1cm4gZXZhbHVhdGVGb3JiaWRkZW5JbXBvcnQocnVsZSk7JyxcbiAgICAgICAgXCIgICAgY2FzZSAncmVxdWlyZWQtY29tcGFuaW9uJzpcIixcbiAgICAgICAgJyAgICAgIHJldHVybiBldmFsdWF0ZVJlcXVpcmVkQ29tcGFuaW9uKHJ1bGUpOycsXG4gICAgICAgICcgICAgZGVmYXVsdDonLFxuICAgICAgICAnICAgICAgdGhyb3cgbmV3IEVycm9yKGBhcmNoaXRlY3R1cmUtcnVsZXM6IHVua25vd24gY2hlY2sudHlwZSBcIiR7KHJ1bGUuY2hlY2sgYXMgeyB0eXBlOiBzdHJpbmcgfSkudHlwZX1cIiBvbiBydWxlIFwiJHtydWxlLmlkfVwiYCk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdmdW5jdGlvbiBtYWluKCk6IG51bWJlciB7JyxcbiAgICAgICAgJyAgY29uc3QgcnVsZXMgPSAocnVsZXNGaWxlIGFzIHsgcnVsZXM6IFJ1bGVbXSB9KS5ydWxlczsnLFxuICAgICAgICAnICBsZXQgZXZhbHVhdGVkID0gMDsnLFxuICAgICAgICAnICBsZXQgZGVmZXJyZWQgPSAwOycsXG4gICAgICAgICcgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykgeycsXG4gICAgICAgICcgICAgaWYgKCFydWxlLmVuYWJsZWQpIHsnLFxuICAgICAgICAnICAgICAgZGVmZXJyZWQrKzsnLFxuICAgICAgICAnICAgICAgY29uc29sZS5sb2coYFtkZWZlcnJlZF0gJHtydWxlLmlkfTogJHtydWxlLmRlc2NyaXB0aW9ufWApOycsXG4gICAgICAgICcgICAgICBjb250aW51ZTsnLFxuICAgICAgICAnICAgIH0nLFxuICAgICAgICAnICAgIGV2YWx1YXRlZCsrOycsXG4gICAgICAgICcgICAgdmlvbGF0aW9ucy5wdXNoKC4uLmV2YWx1YXRlUnVsZShydWxlKSk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICBjb25zb2xlLmxvZyhgXFxcXG5hcmNoaXRlY3R1cmUtcnVsZXM6ICR7ZXZhbHVhdGVkfSBydWxlKHMpIGV2YWx1YXRlZCwgJHtkZWZlcnJlZH0gZGVmZXJyZWQsICR7dmlvbGF0aW9ucy5sZW5ndGh9IHZpb2xhdGlvbihzKWApOycsXG4gICAgICAgICcgIGZvciAoY29uc3QgdmlvbGF0aW9uIG9mIHZpb2xhdGlvbnMpIHsnLFxuICAgICAgICAnICAgIGNvbnNvbGUuZXJyb3IoYCAgWyR7dmlvbGF0aW9uLnNldmVyaXR5fV0gJHt2aW9sYXRpb24ucnVsZUlkfTogJHt2aW9sYXRpb24ubWVzc2FnZX1gKTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIHJldHVybiB2aW9sYXRpb25zLmxlbmd0aCA+IDAgPyAxIDogMDsnLFxuICAgICAgICAnfScsXG4gICAgICAgICcnLFxuICAgICAgICAncHJvY2Vzcy5leGl0KG1haW4oKSk7JyxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBuZXcgSnNvbkZpbGUocHJvamVjdCwgJ2FyY2hpdGVjdHVyZS1ydWxlcy90c2NvbmZpZy5qc29uJywge1xuICAgICAgbWFya2VyOiBmYWxzZSxcbiAgICAgIG9iajoge1xuICAgICAgICBleHRlbmRzOiAnLi4vdHNjb25maWcuanNvbicsXG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIG5vRW1pdDogdHJ1ZSxcbiAgICAgICAgICByb290RGlyOiAnLicsXG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGU6IFsnKi50cycsICcqLmpzb24nXSxcbiAgICAgICAgZXhjbHVkZTogWydub2RlX21vZHVsZXMnXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBuZXcgVGV4dEZpbGUocHJvamVjdCwgJ2FyY2hpdGVjdHVyZS1ydWxlcy9SRUFETUUubWQnLCB7XG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgICBsaW5lczogW1xuICAgICAgICAnIyBBcmNoaXRlY3R1cmUgcnVsZXMnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ0EgZGF0YS1kcml2ZW4gcmVnaXN0cnkgb2YgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cywgZW5mb3JjZWQgYnknLFxuICAgICAgICAnYHBucG0gdmFsaWRhdGU6YXJjaGl0ZWN0dXJlYCBhbmQgcnVuIGFzIHBhcnQgb2YgdGhlIHByZS1QUiB2ZXJpZmljYXRpb24nLFxuICAgICAgICAnd29ya2Zsb3cgKGB3b3JrZmxvd3Mvd29ya2Zsb3ctcHJlLXByLXZlcmlmeS55YW1sYCkgYmVmb3JlIHRoZSBzd2FtcCBmYWN0b3J5JyxcbiAgICAgICAgJ29wZW5zIGEgUFIuIE5ldyBydWxlcyBhcmUgbmV3IGVudHJpZXMgaW4gYHJ1bGVzLmpzb25gLCBub3QgbmV3IGNvZGUg4oCUIHRoZScsXG4gICAgICAgICdlbmdpbmUgKGBjaGVjay50c2ApIG9ubHkgbmVlZHMgYSBuZXcgY2FzZSBpbiBgZXZhbHVhdGVSdWxlKClgIHdoZW4gYSBydWxlJyxcbiAgICAgICAgJ25lZWRzIGEgZ2VudWluZWx5IG5ldyBraW5kIG9mIGNoZWNrLicsXG4gICAgICAgICcnLFxuICAgICAgICAnIyMgUnVsZSBzaGFwZScsXG4gICAgICAgICcnLFxuICAgICAgICAnVHdvIGBjaGVjay50eXBlYHMgYXJlIGltcGxlbWVudGVkOiBgZm9yYmlkZGVuLWltcG9ydGAgKHdob2xlLXJlcG8gaW1wb3J0LWdyYXBoJyxcbiAgICAgICAgJ2NoZWNrKSBhbmQgYHJlcXVpcmVkLWNvbXBhbmlvbmAgKGRpZmYtYmFzZWQgY28tY2hhbmdlIGNoZWNrKS4nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2BgYGpzb24nLFxuICAgICAgICAneycsXG4gICAgICAgICcgIFwiaWRcIjogXCJ1bmlxdWUtaWRcIiwnLFxuICAgICAgICAnICBcImRlc2NyaXB0aW9uXCI6IFwiV2hhdCB0aGlzIGVuZm9yY2VzIGFuZCB3aHkuXCIsJyxcbiAgICAgICAgJyAgXCJlbmFibGVkXCI6IHRydWUsJyxcbiAgICAgICAgJyAgXCJzZXZlcml0eVwiOiBcImxvd1wiIHwgXCJtZWRpdW1cIiB8IFwiaGlnaFwiIHwgXCJjcml0aWNhbFwiLCcsXG4gICAgICAgICcgIFwiY2hlY2tcIjogeycsXG4gICAgICAgICcgICAgXCJ0eXBlXCI6IFwiZm9yYmlkZGVuLWltcG9ydFwiLCcsXG4gICAgICAgICcgICAgXCJmcm9tXCI6IFtcImdsb2IgcGF0dGVybnMgc2VsZWN0aW5nIGZpbGVzIHRoaXMgcnVsZSBpbnNwZWN0c1wiXSwnLFxuICAgICAgICAnICAgIFwiZm9yYmlkXCI6IFtcImdsb2IgcGF0dGVybnMgdGhvc2UgZmlsZXMgbWF5IG5vdCBpbXBvcnQgZnJvbVwiXScsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnfScsXG4gICAgICAgICdgYGAnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2BgYGpzb24nLFxuICAgICAgICAneycsXG4gICAgICAgICcgIFwiaWRcIjogXCJ1bmlxdWUtaWRcIiwnLFxuICAgICAgICAnICBcImRlc2NyaXB0aW9uXCI6IFwiV2hhdCB0aGlzIGVuZm9yY2VzIGFuZCB3aHkuXCIsJyxcbiAgICAgICAgJyAgXCJlbmFibGVkXCI6IHRydWUsJyxcbiAgICAgICAgJyAgXCJzZXZlcml0eVwiOiBcImxvd1wiIHwgXCJtZWRpdW1cIiB8IFwiaGlnaFwiIHwgXCJjcml0aWNhbFwiLCcsXG4gICAgICAgICcgIFwiY2hlY2tcIjogeycsXG4gICAgICAgICcgICAgXCJ0eXBlXCI6IFwicmVxdWlyZWQtY29tcGFuaW9uXCIsJyxcbiAgICAgICAgJyAgICBcImZyb21cIjogW1wiZ2xvYiBwYXR0ZXJucyBzZWxlY3RpbmcgY2hhbmdlZCBmaWxlcyB0aGF0IHRyaWdnZXIgdGhlIHJlcXVpcmVtZW50XCJdLCcsXG4gICAgICAgICcgICAgXCJyZXF1aXJlT25lT2ZcIjogW1wiZ2xvYiBwYXR0ZXJucyAtLSBhdCBsZWFzdCBvbmUgQ0hBTkdFRCBmaWxlIG11c3QgbWF0Y2ggb25lIG9mIHRoZXNlXCJdLCcsXG4gICAgICAgICcgICAgXCJleGVtcHRcIjogW1wib3B0aW9uYWwgLS0gZnJvbS1maWxlcyBtYXRjaGluZyB0aGVzZSBnbG9icyBkb25cXCd0IHRyaWdnZXIgdGhlIHJlcXVpcmVtZW50XCJdJyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICd9JyxcbiAgICAgICAgJ2BgYCcsXG4gICAgICAgICcnLFxuICAgICAgICAnYHJlcXVpcmVkLWNvbXBhbmlvbmAgZXZhbHVhdGVzIHRoZSBzZXQgb2YgZmlsZXMgY2hhbmdlZCBpbiB0aGUgY3VycmVudCBkaWZmJyxcbiAgICAgICAgJyhgZ2l0IGRpZmYgLS1uYW1lLW9ubHkgLS1kaWZmLWZpbHRlcj1BQ01SIDxiYXNlUmVmPi4uLkhFQURgKSwgbm90IHRoZSB3aG9sZScsXG4gICAgICAgICdyZXBvIHRyZWU6IGlmIGFueSBjaGFuZ2VkIGZpbGUgbWF0Y2hlcyBgZnJvbWAgKGFuZCBkb2VzblxcJ3QgbWF0Y2ggYGV4ZW1wdGApIGJ1dCcsXG4gICAgICAgICdubyBjaGFuZ2VkIGZpbGUgbWF0Y2hlcyBgcmVxdWlyZU9uZU9mYCwgdGhhdFxcJ3MgYSB2aW9sYXRpb24uIFRoZSBiYXNlIHJlZicsXG4gICAgICAgICdkZWZhdWx0cyB0byBgb3JpZ2luL21haW5gIGFuZCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZScsXG4gICAgICAgICdgQVJDSElURUNUVVJFX1JVTEVTX0JBU0VfUkVGYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gVGhpcyBtZWFucyB0aGUgY2hlY2tvdXQnLFxuICAgICAgICAncnVubmluZyBgcG5wbSB2YWxpZGF0ZTphcmNoaXRlY3R1cmVgIG11c3QgaGF2ZSB0aGF0IGJhc2UgcmVmIGZldGNoZWQgYW5kJyxcbiAgICAgICAgJ3Jlc29sdmFibGUgKGEgc2hhbGxvdywgc2luZ2xlLWJyYW5jaCBjaGVja291dCB3aWxsIG1ha2UgdGhlIGNoZWNrIGZhaWwgY2xvc2VkJyxcbiAgICAgICAgJ3dpdGggYW4gZXJyb3IgcmF0aGVyIHRoYW4gc2lsZW50bHkgcmVwb3J0aW5nIG5vIHZpb2xhdGlvbnMpIOKAlCBtYWtlIHN1cmUnLFxuICAgICAgICAnd2hhdGV2ZXIgcnVucyB0aGlzIHRhc2sgZmV0Y2hlcyBlbm91Z2ggaGlzdG9yeSBmb3IgYGdpdCBkaWZmIDxiYXNlUmVmPi4uLkhFQURgJyxcbiAgICAgICAgJ3RvIHN1Y2NlZWQuJyxcbiAgICAgICAgJycsXG4gICAgICAgICdgZnJvbWAvYHJlcXVpcmVPbmVPZmAvYGV4ZW1wdGAgZ2xvYnMgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgcGF0aHMgYGdpdCcsXG4gICAgICAgICdkaWZmIC0tbmFtZS1vbmx5YCByZXBvcnRzLCB3aGljaCBhcmUgcmVsYXRpdmUgdG8gdGhlIGdpdCByZXBvc2l0b3J5XFwncycsXG4gICAgICAgICd0b3AtbGV2ZWwgZGlyZWN0b3J5LiBUaGlzIGxpbmVzIHVwIHdpdGggYGZyb21gXFwncyBvd24gZGlyZWN0b3J5ICh0aGUgcGFyZW50IG9mJyxcbiAgICAgICAgJ2BhcmNoaXRlY3R1cmUtcnVsZXMvYCkgaW4gdGhlIGNvbW1vbiBjYXNlIOKAlCBhIHNpbmdsZSBwcm9qZWN0IGdlbmVyYXRlZCBhdCB0aGUnLFxuICAgICAgICAncmVwbyByb290IOKAlCBidXQgaWYgYGFyY2hpdGVjdHVyZS1ydWxlcy9gIGluc3RlYWQgbGl2ZXMgdW5kZXIgYSBuZXN0ZWQnLFxuICAgICAgICAnc3ViZGlyZWN0b3J5IG9mIGEgbGFyZ2VyIGdpdCByZXBvLCB3cml0ZSBnbG9icyByZWxhdGl2ZSB0byB0aGUgZ2l0IHJvb3QsIG5vdCcsXG4gICAgICAgICd0byB0aGF0IHN1YmRpcmVjdG9yeS4nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyoqYHJlcXVpcmVkLWNvbXBhbmlvbmAgaXMgYSBjb3ZlcmFnZSBjaGVjaywgbm90IGEgY29ycmVjdG5lc3MgY2hlY2suKiogSXQgb25seScsXG4gICAgICAgICdjb25maXJtcyB0aGF0ICpzb21lKiBjaGFuZ2VkIGZpbGUgbWF0Y2hlcyBgcmVxdWlyZU9uZU9mYCDigJQgaXQgY2FuXFwndCB0ZWxsJyxcbiAgICAgICAgJ3doZXRoZXIgdGhhdCBjaGFuZ2UgaXMgYWN0dWFsbHkgcmVsYXRlZCB0byB0aGUgdHJpZ2dlcmluZyBgZnJvbWAgY2hhbmdlIChhJyxcbiAgICAgICAgJ3RyaXZpYWwgb3IgdW5yZWxhdGVkIGVkaXQgdG8gYSBmaWxlIHVuZGVyIGByZXF1aXJlT25lT2ZgIHNhdGlzZmllcyB0aGUgcnVsZScsXG4gICAgICAgICdqdXN0IGFzIHdlbGwgYXMgYSBzdWJzdGFudGl2ZSBvbmUpLCBhbmQgaXQgY2FuXFwndCB0ZWxsIHdoZXRoZXIgYSBnaXZlbiBgZnJvbWAnLFxuICAgICAgICAnY2hhbmdlIGdlbnVpbmVseSBuZWVkZWQgYSBjb21wYW5pb24gYXQgYWxsIChhIHB1cmUgcmVmYWN0b3IgbWlnaHQgbm90KS4nLFxuICAgICAgICAnYGV4ZW1wdGAgY292ZXJzICprbm93biwgZ2xvYi1leHByZXNzaWJsZSogZXhjZXB0aW9ucywgYnV0IG5vdCBldmVyeSBmYWxzZScsXG4gICAgICAgICdwb3NpdGl2ZSBpcyBleHByZXNzaWJsZSBhcyBhIGdsb2Ig4oCUIHRoYXQganVkZ21lbnQgY2FsbCBzdGlsbCBiZWxvbmdzIHRvIHRoZScsXG4gICAgICAgICdydWxlIGF1dGhvciAoc2NvcGluZyBgZnJvbWAvYGV4ZW1wdGApIGFuZCB0aGUgcmV2aWV3ZXIgKHJlYWRpbmcgdGhlIGNvbXBhbmlvbicsXG4gICAgICAgICdkaWZmLCBub3QganVzdCB0cnVzdGluZyB0aGF0IHRoZSBjaGVjayBwYXNzZWQpLiBBbHNvIG5vdGUgdGhhdCBgbWFpbigpYCcsXG4gICAgICAgICdmYWlscyB0aGUgd2hvbGUgcnVuIG9uICphbnkqIHZpb2xhdGlvbiByZWdhcmRsZXNzIG9mIGBzZXZlcml0eWAg4oCUIGBzZXZlcml0eWAnLFxuICAgICAgICAnaXMgaW5mb3JtYXRpb25hbCBvbmx5LCBub3QgYSBsZW5pZW5jeSBsZXZlciDigJQgc28gc3RhcnQgd2l0aCBhIG5hcnJvd2x5JyxcbiAgICAgICAgJ3Njb3BlZCBgZnJvbWAgKG9yIGBlbmFibGVkOiBmYWxzZWApIGFuZCB3aWRlbiBpdCBhcyB0aGUgY29udmVudGlvbiBwcm92ZXMnLFxuICAgICAgICAnaXRzZWxmLCB0aGUgc2FtZSBndWlkYW5jZSBhcyBmb3IgYGZvcmJpZGRlbi1pbXBvcnRgLicsXG4gICAgICAgICcnLFxuICAgICAgICAnYGVuYWJsZWQ6IGZhbHNlYCBydWxlcyBhcmUgc2tpcHBlZCAocmVwb3J0ZWQgYXMgXCJkZWZlcnJlZFwiKSByYXRoZXIgdGhhbicsXG4gICAgICAgIFwiZXZhbHVhdGVkIOKAlCB1c2UgdGhpcyBmb3IgYSBydWxlIHlvdSd2ZSBuYW1lZCBhbmQgZGVzY3JpYmVkIGJ1dCBkb24ndCB5ZXRcIixcbiAgICAgICAgJ2hhdmUgYSBjb25jcmV0ZSBjb252ZW50aW9uIHRvIGNoZWNrLicsXG4gICAgICAgICcnLFxuICAgICAgICAnIyMgQ3VycmVudCBydWxlcycsXG4gICAgICAgICcnLFxuICAgICAgICAnTm9uZSB5ZXQg4oCUIGBydWxlcy5qc29uYCBzaGlwcyBlbXB0eS4gQWRkIHJ1bGVzIGFzIHlvdXIgZG9tYWluIG1vZHVsZScsXG4gICAgICAgICdjb252ZW50aW9ucyBzb2xpZGlmeSAoZS5nLiBhbiBldmVudC1zb3VyY2VkL0NRUlMgbW9kdWxlIGxheW91dCB1bmRlcicsXG4gICAgICAgICdgc3JjL2RvbWFpbnMvPG5hbWU+L3tjb21tYW5kcyxldmVudHMsYWdncmVnYXRlcyxwcm9qZWN0aW9uc30vYCkuJyxcbiAgICAgICAgJycsXG4gICAgICAgICcjIyBBZGRpbmcgYSBjaGVjayB0eXBlJyxcbiAgICAgICAgJycsXG4gICAgICAgICdgZm9yYmlkZGVuLWltcG9ydGAgKHdob2xlLXJlcG8gaW1wb3J0IGdyYXBoKSBhbmQgYHJlcXVpcmVkLWNvbXBhbmlvbmAnLFxuICAgICAgICAnKGRpZmYtYmFzZWQgY28tY2hhbmdlKSBhcmUgdGhlIGltcGxlbWVudGVkIGBjaGVjay50eXBlYHMuIElmIGEgZnV0dXJlIHJ1bGUnLFxuICAgICAgICAnbmVlZHMgYSBkYXRhIHNvdXJjZSBuZWl0aGVyIHByb3ZpZGVzIChlLmcuIFwiZXZlcnkgYWdncmVnYXRlIGZpbGUgbXVzdCBoYXZlIGEnLFxuICAgICAgICAnbWF0Y2hpbmcgZXZlbnRzIGZpbGVcIiwgd2hpY2ggaXMgYSByZXBvLXdpZGUgbmFtaW5nIGNvbnZlbnRpb24gcmF0aGVyIHRoYW4nLFxuICAgICAgICAnZWl0aGVyIGFuIGltcG9ydC1ncmFwaCBvciBhIGRpZmYgY2hlY2spLCBhZGQgYSBuZXcgYHR5cGVgIHZhbHVlLCBhIG1hdGNoaW5nJyxcbiAgICAgICAgJ2ludGVyZmFjZSwgYW5kIGEgY2FzZSBpbiBgZXZhbHVhdGVSdWxlKClgIGluIGBjaGVjay50c2Ag4oCUIGtlZXAgdGhlIGVuZ2luZScsXG4gICAgICAgICdpdHNlbGYgZ2VuZXJpYzsgcnVsZS1zcGVjaWZpYyBrbm93bGVkZ2UgYmVsb25ncyBpbiBgcnVsZXMuanNvbmAuJyxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBuZXcgU2FtcGxlRmlsZShwcm9qZWN0LCAnYXJjaGl0ZWN0dXJlLXJ1bGVzL3J1bGVzLmpzb24nLCB7XG4gICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoeyBydWxlczogW10gfSwgbnVsbCwgMikgKyAnXFxuJyxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -31,7 +31,7 @@ const DEFAULT_GITHUB_OWNER = 'macedon-technologies';
31
31
  * workflows that wire them together) is templated.
32
32
  */
33
33
  class SoftwareFactoryFiles {
34
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.SoftwareFactoryFiles", version: "1.24.2" };
34
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.SoftwareFactoryFiles", version: "1.25.1" };
35
35
  constructor(project, options) {
36
36
  const { repoName, actionVersions } = options;
37
37
  const githubOwner = options.githubOwner || DEFAULT_GITHUB_OWNER;
@@ -24,6 +24,25 @@ class SoftwareFactoryWorkflows {
24
24
  const shellModel = `${repoName}-shell`;
25
25
  const shellArchitectureModel = `${repoName}-shell-architecture`;
26
26
  const shellManifestModel = `${repoName}-shell-manifest`;
27
+ // Each job step's `run:` below executes through swamp's command/shell model, which runs
28
+ // the string through the host's native shell — bash/sh on macOS/Linux, but Windows
29
+ // PowerShell 5.1 on a Windows dev machine. PowerShell 5.1 has no `&&`/`||` chain operators
30
+ // and aliases `rm` to `Remove-Item` (whose `-f` is ambiguous with `-Filter`). If a step
31
+ // here needs more than one command, prefer a single package.json script that does the
32
+ // sequencing, or use `;` to separate commands (accepted by both shells, though it does not
33
+ // short-circuit on failure — rely on the workflow's own assert step for that). To
34
+ // force-delete a file portably, use `node -e "require('fs').rmSync('<path>', {force:
35
+ // true})"` instead of `rm -f <path>` (see shellPortableSequence/shellPortableForceDelete
36
+ // in utils.ts).
37
+ const shellPortabilityNote = `# Portability note: \`run:\` below executes through swamp's command/shell model, which runs
38
+ # the string through the host's native shell — bash/sh on macOS/Linux, but Windows
39
+ # PowerShell 5.1 on a Windows dev machine. PowerShell 5.1 has no \`&&\`/\`||\` chain operators
40
+ # and aliases \`rm\` to \`Remove-Item\` (whose \`-f\` is ambiguous with \`-Filter\`). If a step here
41
+ # needs more than one command, prefer a single package.json script that does the
42
+ # sequencing, or use \`;\` to separate commands (accepted by both shells, though it does not
43
+ # short-circuit on failure — rely on the workflow's own assert step for that). To
44
+ # force-delete a file portably, use \`node -e "require('fs').rmSync('<path>', {force: true})"\`
45
+ # instead of \`rm -f <path>\`.`;
27
46
  new projen_1.SampleFile(project, 'workflows/workflow-openspec-plan-verify.yaml', {
28
47
  contents: `id: ${(0, crypto_1.randomUUID)()}
29
48
  name: openspec-plan-verify
@@ -40,6 +59,7 @@ inputs:
40
59
  changeSlug:
41
60
  type: string
42
61
  description: The openspec change name (openspec/changes/<changeSlug>/).
62
+ ${shellPortabilityNote}
43
63
  jobs:
44
64
  - name: verify
45
65
  description: Validate the OpenSpec change is complete and well-formed
@@ -95,6 +115,7 @@ inputs:
95
115
  changeSlug:
96
116
  type: string
97
117
  description: The openspec change name (openspec/changes/<changeSlug>/).
118
+ ${shellPortabilityNote}
98
119
  jobs:
99
120
  - name: verify
100
121
  description: Check every task in the change's tasks.md is complete
@@ -152,6 +173,7 @@ inputs:
152
173
  branch:
153
174
  type: string
154
175
  description: Same as commit, but for @swamp/verification-attestation's subject.branch.
176
+ ${shellPortabilityNote}
155
177
  jobs:
156
178
  - name: verify
157
179
  description: Build/test/lint plus architecture-rule checks, gating PR creation
@@ -324,4 +346,4 @@ version: 1
324
346
  }
325
347
  }
326
348
  exports.SoftwareFactoryWorkflows = SoftwareFactoryWorkflows;
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHdhcmVGYWN0b3J5V29ya2Zsb3dzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NvZnR3YXJlRmFjdG9yeVdvcmtmbG93cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFDcEMsbUNBQThDO0FBQzlDLHNEQUF3RTtBQUN4RSxtQ0FBMkQ7QUFDM0QscUVBQXlGO0FBZXpGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBYSx3QkFBd0I7SUFDbkMsWUFBWSxPQUFvQixFQUFFLE9BQXdDO1FBQ3hFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsR0FBRyxRQUFRLFFBQVEsQ0FBQztRQUN2QyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsUUFBUSxxQkFBcUIsQ0FBQztRQUNoRSxNQUFNLGtCQUFrQixHQUFHLEdBQUcsUUFBUSxpQkFBaUIsQ0FBQztRQUV4RCxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLDhDQUE4QyxFQUFFO1lBQ3RFLFFBQVEsRUFBRSxPQUFPLElBQUEsbUJBQVUsR0FBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBdUJSLFVBQVU7Ozs7Ozs7Ozs7Ozt3Q0FZRyxVQUFVOzs7O3FEQUlHLFVBQVU7Ozs7Ozs7Ozs7OztDQVk5RDtTQUNJLENBQUMsQ0FBQztRQUVILElBQUksbUJBQVUsQ0FBQyxPQUFPLEVBQUUsK0NBQStDLEVBQUU7WUFDdkUsUUFBUSxFQUFFLE9BQU8sSUFBQSxtQkFBVSxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBd0JSLFVBQVU7Ozs7Ozs7Ozs7Ozt3Q0FZRyxVQUFVOzs7NkRBR1csVUFBVTs7Ozs7Ozs7Ozs7O0NBWXRFO1NBQ0ksQ0FBQyxDQUFDO1FBRUgsSUFBSSxtQkFBVSxDQUFDLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRTtZQUMvRCxRQUFRLEVBQUUsT0FBTyxJQUFBLG1CQUFVLEdBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQkEyQlIsVUFBVTs7Ozs7Ozs7Ozs7O3dDQVlHLFVBQVU7OztvRUFHa0IsVUFBVTs7Ozs7Ozs7Ozs7OzsyQkFhbkQsc0JBQXNCOzs7Ozs7Ozs7Ozs7Ozs7d0NBZVQsc0JBQXNCOzs7NkRBR0QsVUFBVTs7Ozs7Ozs7Ozs7Ozs7OzJCQWU1QyxrQkFBa0I7Ozs7Ozs7Ozs7Ozs7Ozt3Q0FlTCxrQkFBa0I7Ozs7Y0FJNUMsa0JBQWtCOzs7Ozs7Ozs7OztDQVcvQjtTQUNJLENBQUMsQ0FBQztRQUVILE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQ3RELE1BQU0sY0FBYyxHQUFHLElBQUEsOENBQXFCLEVBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXJFLElBQUksaUJBQVEsQ0FBQyxPQUFPLEVBQUUsMENBQTBDLEVBQUU7WUFDaEUsTUFBTSxFQUFFLElBQUk7WUFDWixRQUFRLEVBQUUsSUFBSTtZQUNkLEdBQUcsRUFBRTtnQkFDSCxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixFQUFFLEVBQUU7b0JBQ0YsWUFBWSxFQUFFO3dCQUNaLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDO3FCQUM3QztpQkFDRjtnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLGVBQWUsRUFBRSxNQUFNO2lCQUN4QjtnQkFDRCxJQUFJLEVBQUU7b0JBQ0osTUFBTSxFQUFFO3dCQUNOLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixPQUFPLEVBQUU7NEJBQ1A7Z0NBQ0UsSUFBSSxFQUFFLFVBQVU7Z0NBQ2hCLElBQUksRUFBRSxjQUFjLENBQUMsUUFBUTtnQ0FDN0IsSUFBSSxFQUFFO29DQUNKLEtBQUssRUFBRSwyQ0FBMkM7b0NBQ2xELHFCQUFxQixFQUFFLEtBQUs7aUNBQzdCOzZCQUNGOzRCQUNELEdBQUcsQ0FBQyxjQUFjLEtBQUssK0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUNoRCxJQUFJLEVBQUUsWUFBWTtvQ0FDbEIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlO2lDQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDUjtnQ0FDRSxJQUFJLEVBQUUsZUFBZTtnQ0FDckIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxTQUFTO2dDQUM5QixJQUFJLEVBQUU7b0NBQ0osY0FBYyxFQUFFLElBQUk7b0NBQ3BCLHVCQUF1QixFQUFFLEtBQUs7aUNBQy9COzZCQUNGOzRCQUNEO2dDQUNFLElBQUksRUFBRSxzQkFBc0I7Z0NBQzVCLEdBQUcsRUFBRSxJQUFBLHNCQUFjLEVBQUMsY0FBYyxDQUFDOzZCQUNwQzs0QkFDRDtnQ0FDRSxJQUFJLEVBQUUsZUFBZTtnQ0FDckIsR0FBRyxFQUFFO29DQUNILFFBQVEsRUFBRSw2QkFBNkI7aUNBQ3hDO2dDQUNELEdBQUcsRUFBRTtvQ0FDSCx1REFBdUQ7b0NBQ3ZELHNDQUFzQztvQ0FDdEMsMENBQTBDO2lDQUMzQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NkJBQ2I7NEJBQ0Q7Z0NBQ0UsSUFBSSxFQUFFLG9CQUFvQjtnQ0FDMUIsR0FBRyxFQUFFO29DQUNILEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxjQUFjLEVBQUUsb0JBQW9CLENBQUMsUUFBUTtvQ0FDakUsa0NBQWtDO29DQUNsQyxzREFBc0Q7aUNBQ3ZELENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs2QkFDYjt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBclRELDREQXFUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgU2FtcGxlRmlsZSwgWWFtbEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgTm9kZVBhY2thZ2VNYW5hZ2VyLCBOb2RlUHJvamVjdCB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBpbnN0YWxsQ29tbWFuZCwgcnVuU2NyaXB0Q29tbWFuZCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgcmVzb2x2ZUFjdGlvblZlcnNpb25zLCBXb3JrZmxvd0FjdGlvblZlcnNpb25zIH0gZnJvbSAnLi9Xb3JrZmxvd0FjdGlvblZlcnNpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBTb2Z0d2FyZUZhY3RvcnlXb3JrZmxvd3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBiYXJlIHJlcG8gbmFtZSwgdXNlZCB0byBkZXJpdmUgdGhlIGA8cmVwb05hbWU+LXNoZWxsWy1hcmNoaXRlY3R1cmV8LW1hbmlmZXN0XWBcbiAgICogbW9kZWwgbmFtZXMgdGhlc2Ugd29ya2Zsb3dzIGRpc3BhdGNoIHNoZWxsIGNvbW1hbmRzIHRocm91Z2guXG4gICAqL1xuICByZWFkb25seSByZXBvTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgZm9yIHRoZSBwaW5uZWQgYWN0aW9uIHZlcnNpb25zIHVzZWQgYnkgYHZlcmlmeS1hdHRlc3RhdGlvbi55bWxgLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uVmVyc2lvbnM/OiBXb3JrZmxvd0FjdGlvblZlcnNpb25zO1xufVxuXG4vKipcbiAqIFRoZSAzIHN3YW1wIHdvcmtmbG93cyB0aGUgZmFjdG9yeSdzIGdhdGUgc3RhZ2VzIHJ1biAob3BlbnNwZWMtcGxhbi12ZXJpZnksXG4gKiBvcGVuc3BlYy10YXNrcy12ZXJpZnksIHByZS1wci12ZXJpZnkpLCBwbHVzIHRoZSBHaXRIdWIgQWN0aW9uIHRoYXRcbiAqIHJlLXZlcmlmaWVzIGEgUFIncyBlbWJlZGRlZCBhdHRlc3RhdGlvbiBhdCBtZXJnZSB0aW1lLlxuICpcbiAqIFRoZSBzd2FtcCB3b3JrZmxvdyBZQU1McyBjYXJyeSBhIHN3YW1wLWFzc2lnbmVkIGBpZGAgdGhhdCBtdXN0IHN0YXkgc3RhYmxlXG4gKiBhY3Jvc3Mgc3ludGhzIChzd2FtcCB1c2VzIGl0IGFzIHRoZSB3b3JrZmxvdydzIGlkZW50aXR5KSwgc28g4oCUIGxpa2UgdGhlXG4gKiBtb2RlbCBpbnN0YW5jZXMgaW4gYFNvZnR3YXJlRmFjdG9yeU1vZGVsc2Ag4oCUIHRoZXkncmUgYFNhbXBsZUZpbGVgcywgd3JpdHRlblxuICogb25jZSBhbmQgdGhlbiBvd25lZCBieSB0aGUgdGVhbS4gYHZlcmlmeS1hdHRlc3RhdGlvbi55bWxgIGhhcyBubyBzdWNoXG4gKiBpZGVudGl0eSBjb25zdHJhaW50IGFuZCBpcyBhIHBsYWluIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93LCBzbyBpdCdzIGJ1aWx0XG4gKiB0aGUgc2FtZSBtYW5hZ2VkIHdheSBgUHJEZXBsb3lXb3JrZmxvd2AgaXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTb2Z0d2FyZUZhY3RvcnlXb3JrZmxvd3Mge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBOb2RlUHJvamVjdCwgb3B0aW9uczogU29mdHdhcmVGYWN0b3J5V29ya2Zsb3dzT3B0aW9ucykge1xuICAgIGNvbnN0IHsgcmVwb05hbWUgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc2hlbGxNb2RlbCA9IGAke3JlcG9OYW1lfS1zaGVsbGA7XG4gICAgY29uc3Qgc2hlbGxBcmNoaXRlY3R1cmVNb2RlbCA9IGAke3JlcG9OYW1lfS1zaGVsbC1hcmNoaXRlY3R1cmVgO1xuICAgIGNvbnN0IHNoZWxsTWFuaWZlc3RNb2RlbCA9IGAke3JlcG9OYW1lfS1zaGVsbC1tYW5pZmVzdGA7XG5cbiAgICBuZXcgU2FtcGxlRmlsZShwcm9qZWN0LCAnd29ya2Zsb3dzL3dvcmtmbG93LW9wZW5zcGVjLXBsYW4tdmVyaWZ5LnlhbWwnLCB7XG4gICAgICBjb250ZW50czogYGlkOiAke3JhbmRvbVVVSUQoKX1cbm5hbWU6IG9wZW5zcGVjLXBsYW4tdmVyaWZ5XG5kZXNjcmlwdGlvbjogPi1cbiAgRmFpbHMgdW5sZXNzIHRoZSBuYW1lZCBPcGVuU3BlYyBjaGFuZ2UgaXMgd2VsbC1mb3JtZWQgKHByb3Bvc2FsLCBkZXNpZ24sXG4gIHNwZWNzIHdpdGggZGVsdGFzLCB0YXNrcyBhbGwgcHJlc2VudCkgdmlhIFxcYG9wZW5zcGVjIHZhbGlkYXRlXFxgLiBHYXRlcyB0aGVcbiAgZmFjdG9yeSdzIHBsYW5uaW5nIHN0YWdlOiBhIHJlcXVlc3QgY2FuJ3QgcHJvY2VlZCB0byBpbXBsZW1lbnRhdGlvbiB1bnRpbFxuICBpdCdzIGEgcmVhbCBPcGVuU3BlYyBjaGFuZ2UsIG5vdCBqdXN0IHByb3NlIGluIGEgc3dhbXAgYXJ0aWZhY3QuXG50YWdzOiB7fVxuaW5wdXRzOlxuICB0eXBlOiBvYmplY3RcbiAgcmVxdWlyZWQ6IFtjaGFuZ2VTbHVnXVxuICBwcm9wZXJ0aWVzOlxuICAgIGNoYW5nZVNsdWc6XG4gICAgICB0eXBlOiBzdHJpbmdcbiAgICAgIGRlc2NyaXB0aW9uOiBUaGUgb3BlbnNwZWMgY2hhbmdlIG5hbWUgKG9wZW5zcGVjL2NoYW5nZXMvPGNoYW5nZVNsdWc+LykuXG5qb2JzOlxuICAtIG5hbWU6IHZlcmlmeVxuICAgIGRlc2NyaXB0aW9uOiBWYWxpZGF0ZSB0aGUgT3BlblNwZWMgY2hhbmdlIGlzIGNvbXBsZXRlIGFuZCB3ZWxsLWZvcm1lZFxuICAgIHN0ZXBzOlxuICAgICAgLSBuYW1lOiB2YWxpZGF0ZVxuICAgICAgICBkZXNjcmlwdGlvbjogb3BlbnNwZWMgdmFsaWRhdGUgPGNoYW5nZVNsdWc+IC0tdHlwZSBjaGFuZ2VcbiAgICAgICAgdGFzazpcbiAgICAgICAgICB0eXBlOiBtb2RlbF9tZXRob2RcbiAgICAgICAgICBtb2RlbElkT3JOYW1lOiAke3NoZWxsTW9kZWx9XG4gICAgICAgICAgbWV0aG9kTmFtZTogZXhlY3V0ZVxuICAgICAgICAgIGlucHV0czpcbiAgICAgICAgICAgIHJ1bjogJ29wZW5zcGVjIHZhbGlkYXRlIFxcJHt7IGlucHV0cy5jaGFuZ2VTbHVnIH19IC0tdHlwZSBjaGFuZ2UnXG4gICAgICAgIGRlcGVuZHNPbjogW11cbiAgICAgICAgd2VpZ2h0OiAwXG4gICAgICAgIGFsbG93RmFpbHVyZTogZmFsc2VcbiAgICAgIC0gbmFtZTogYXNzZXJ0LXZhbGlkXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcGVuc3BlYyB2YWxpZGF0ZSBtdXN0IGV4aXQgMFxuICAgICAgICB0YXNrOlxuICAgICAgICAgIHR5cGU6IGFzc2VydFxuICAgICAgICAgIGV4cHI6ID4tXG4gICAgICAgICAgICBkYXRhLnF1ZXJ5KCdtb2RlbE5hbWUgPT0gXCIke3NoZWxsTW9kZWx9XCIgJiYgbmFtZSA9PSBcInJlc3VsdFwiICYmXG4gICAgICAgICAgICB3b3JrZmxvd1J1bklkID09IFwiJyArIHJ1bi5pZCArICdcIicpWzBdLmF0dHJpYnV0ZXMuZXhpdENvZGUgPT0gMFxuICAgICAgICAgIG1lc3NhZ2U6ID4tXG4gICAgICAgICAgICBPcGVuU3BlYyBjaGFuZ2UgaXMgbm90IHZhbGlkL2NvbXBsZXRlIChtaXNzaW5nIHByb3Bvc2FsLCBkZXNpZ24sXG4gICAgICAgICAgICBzcGVjcyB3aXRoIGRlbHRhcywgb3IgdGFza3MpIOKAlCBzZWUgdGhlICR7c2hlbGxNb2RlbH0gcmVzdWx0IGRhdGFcbiAgICAgICAgICAgIGZvciBvcGVuc3BlYydzIG93biByZW1lZGlhdGlvbiBvdXRwdXRcbiAgICAgICAgICBzZXZlcml0eTogaGlnaFxuICAgICAgICBkZXBlbmRzT246XG4gICAgICAgICAgLSBzdGVwOiB2YWxpZGF0ZVxuICAgICAgICAgICAgY29uZGl0aW9uOlxuICAgICAgICAgICAgICB0eXBlOiBzdWNjZWVkZWRcbiAgICAgICAgd2VpZ2h0OiAwXG4gICAgICAgIGFsbG93RmFpbHVyZTogZmFsc2VcbiAgICBkZXBlbmRzT246IFtdXG4gICAgd2VpZ2h0OiAwXG52ZXJzaW9uOiAxXG5gLFxuICAgIH0pO1xuXG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgJ3dvcmtmbG93cy93b3JrZmxvdy1vcGVuc3BlYy10YXNrcy12ZXJpZnkueWFtbCcsIHtcbiAgICAgIGNvbnRlbnRzOiBgaWQ6ICR7cmFuZG9tVVVJRCgpfVxubmFtZTogb3BlbnNwZWMtdGFza3MtdmVyaWZ5XG5kZXNjcmlwdGlvbjogPi1cbiAgRmFpbHMgdW5sZXNzIGV2ZXJ5IHRhc2sgaW4gdGhlIG5hbWVkIE9wZW5TcGVjIGNoYW5nZSdzIHRhc2tzLm1kIGlzIGNoZWNrZWRcbiAgb2ZmIChvcGVuc3BlYy1nYXRlcy9jaGVjay10YXNrcy1jb21wbGV0ZS50cywgdmlhIFxcYHBucG0gcnVuXG4gIG9wZW5zcGVjOmNoZWNrLXRhc2tzLWNvbXBsZXRlXFxgKS4gR2F0ZXMgdGhlIGZhY3RvcnkncyBpbXBsZW1lbnRpbmcgc3RhZ2U6XG4gIHdvcmsgaXNuJ3QgZG9uZSB1bnRpbCB0aGUgY2hhbmdlJ3Mgb3duIHRhc2sgbGlzdCBzYXlzIGl0J3MgZG9uZSwgbm90IGp1c3RcbiAgYmVjYXVzZSBhbiBhcnRpZmFjdCB3YXMgcmVjb3JkZWQuXG50YWdzOiB7fVxuaW5wdXRzOlxuICB0eXBlOiBvYmplY3RcbiAgcmVxdWlyZWQ6IFtjaGFuZ2VTbHVnXVxuICBwcm9wZXJ0aWVzOlxuICAgIGNoYW5nZVNsdWc6XG4gICAgICB0eXBlOiBzdHJpbmdcbiAgICAgIGRlc2NyaXB0aW9uOiBUaGUgb3BlbnNwZWMgY2hhbmdlIG5hbWUgKG9wZW5zcGVjL2NoYW5nZXMvPGNoYW5nZVNsdWc+LykuXG5qb2JzOlxuICAtIG5hbWU6IHZlcmlmeVxuICAgIGRlc2NyaXB0aW9uOiBDaGVjayBldmVyeSB0YXNrIGluIHRoZSBjaGFuZ2UncyB0YXNrcy5tZCBpcyBjb21wbGV0ZVxuICAgIHN0ZXBzOlxuICAgICAgLSBuYW1lOiBjaGVjay10YXNrc1xuICAgICAgICBkZXNjcmlwdGlvbjogcG5wbSBydW4gb3BlbnNwZWM6Y2hlY2stdGFza3MtY29tcGxldGUgLS0gPGNoYW5nZVNsdWc+XG4gICAgICAgIHRhc2s6XG4gICAgICAgICAgdHlwZTogbW9kZWxfbWV0aG9kXG4gICAgICAgICAgbW9kZWxJZE9yTmFtZTogJHtzaGVsbE1vZGVsfVxuICAgICAgICAgIG1ldGhvZE5hbWU6IGV4ZWN1dGVcbiAgICAgICAgICBpbnB1dHM6XG4gICAgICAgICAgICBydW46ICdwbnBtIHJ1biBvcGVuc3BlYzpjaGVjay10YXNrcy1jb21wbGV0ZSAtLSBcXCR7eyBpbnB1dHMuY2hhbmdlU2x1ZyB9fSdcbiAgICAgICAgZGVwZW5kc09uOiBbXVxuICAgICAgICB3ZWlnaHQ6IDBcbiAgICAgICAgYWxsb3dGYWlsdXJlOiBmYWxzZVxuICAgICAgLSBuYW1lOiBhc3NlcnQtdGFza3MtY29tcGxldGVcbiAgICAgICAgZGVzY3JpcHRpb246IG9wZW5zcGVjOmNoZWNrLXRhc2tzLWNvbXBsZXRlIG11c3QgZXhpdCAwXG4gICAgICAgIHRhc2s6XG4gICAgICAgICAgdHlwZTogYXNzZXJ0XG4gICAgICAgICAgZXhwcjogPi1cbiAgICAgICAgICAgIGRhdGEucXVlcnkoJ21vZGVsTmFtZSA9PSBcIiR7c2hlbGxNb2RlbH1cIiAmJiBuYW1lID09IFwicmVzdWx0XCIgJiZcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQgPT0gXCInICsgcnVuLmlkICsgJ1wiJylbMF0uYXR0cmlidXRlcy5leGl0Q29kZSA9PSAwXG4gICAgICAgICAgbWVzc2FnZTogPi1cbiAgICAgICAgICAgIE9wZW5TcGVjIGNoYW5nZSBoYXMgaW5jb21wbGV0ZSB0YXNrcyDigJQgc2VlIHRoZSAke3NoZWxsTW9kZWx9XG4gICAgICAgICAgICByZXN1bHQgZGF0YSBmb3IgdGhlIGNvbXBsZXRlZFRhc2tzL3RvdGFsVGFza3MgYnJlYWtkb3duXG4gICAgICAgICAgc2V2ZXJpdHk6IGhpZ2hcbiAgICAgICAgZGVwZW5kc09uOlxuICAgICAgICAgIC0gc3RlcDogY2hlY2stdGFza3NcbiAgICAgICAgICAgIGNvbmRpdGlvbjpcbiAgICAgICAgICAgICAgdHlwZTogc3VjY2VlZGVkXG4gICAgICAgIHdlaWdodDogMFxuICAgICAgICBhbGxvd0ZhaWx1cmU6IGZhbHNlXG4gICAgZGVwZW5kc09uOiBbXVxuICAgIHdlaWdodDogMFxudmVyc2lvbjogMVxuYCxcbiAgICB9KTtcblxuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsICd3b3JrZmxvd3Mvd29ya2Zsb3ctcHJlLXByLXZlcmlmeS55YW1sJywge1xuICAgICAgY29udGVudHM6IGBpZDogJHtyYW5kb21VVUlEKCl9XG5uYW1lOiBwcmUtcHItdmVyaWZ5XG5kZXNjcmlwdGlvbjogPi1cbiAgUHJlLVBSIHZlcmlmaWNhdGlvbjogcnVuIHRoZSBzYW1lIGNoZWNrcyBDSSB3b3VsZCBydW4sIGJlZm9yZSB0aGUgZmFjdG9yeVxuICBvcGVucyBhIFBSIHJhdGhlciB0aGFuIGFmdGVyIOKAlCBidWlsZC9zeW50aC90ZXN0L2xpbnQgKHBucG0gYnVpbGQpIGFuZCB0aGVcbiAgYXJjaGl0ZWN0dXJlIHJ1bGUgcmVnaXN0cnkgKHBucG0gdmFsaWRhdGU6YXJjaGl0ZWN0dXJlKS4gQm90aCBtdXN0IHBhc3MuXG50YWdzOiB7fVxuaW5wdXRzOlxuICB0eXBlOiBvYmplY3RcbiAgcHJvcGVydGllczpcbiAgICBjb21taXQ6XG4gICAgICB0eXBlOiBzdHJpbmdcbiAgICAgIGRlc2NyaXB0aW9uOiA+LVxuICAgICAgICBUaGUgY29tbWl0IHNoYSBiZWluZyB2ZXJpZmllZC4gUmVhZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgICAgQHN3YW1wL3ZlcmlmaWNhdGlvbi1hdHRlc3RhdGlvbiByZXBvcnQncyBzdWJqZWN0LmNvbW1pdCDigJQgcGFzcyB0aGVcbiAgICAgICAgcmVhbCBIRUFEIHNoYSBvciB0aGUgYXR0ZXN0YXRpb24gcmVuZGVycyBcInVua25vd25cIi5cbiAgICBicmFuY2g6XG4gICAgICB0eXBlOiBzdHJpbmdcbiAgICAgIGRlc2NyaXB0aW9uOiBTYW1lIGFzIGNvbW1pdCwgYnV0IGZvciBAc3dhbXAvdmVyaWZpY2F0aW9uLWF0dGVzdGF0aW9uJ3Mgc3ViamVjdC5icmFuY2guXG5qb2JzOlxuICAtIG5hbWU6IHZlcmlmeVxuICAgIGRlc2NyaXB0aW9uOiBCdWlsZC90ZXN0L2xpbnQgcGx1cyBhcmNoaXRlY3R1cmUtcnVsZSBjaGVja3MsIGdhdGluZyBQUiBjcmVhdGlvblxuICAgIHN0ZXBzOlxuICAgICAgLSBuYW1lOiBidWlsZFxuICAgICAgICBkZXNjcmlwdGlvbjogY29tcGlsZSAtPiBjZGsgc3ludGggLT4gamVzdCAtPiBlc2xpbnQgKGV4aXN0aW5nIHByb2plbiBidWlsZCB0YXNrKVxuICAgICAgICB0YXNrOlxuICAgICAgICAgIHR5cGU6IG1vZGVsX21ldGhvZFxuICAgICAgICAgIG1vZGVsSWRPck5hbWU6ICR7c2hlbGxNb2RlbH1cbiAgICAgICAgICBtZXRob2ROYW1lOiBleGVjdXRlXG4gICAgICAgICAgaW5wdXRzOlxuICAgICAgICAgICAgcnVuOiBwbnBtIGJ1aWxkXG4gICAgICAgIGRlcGVuZHNPbjogW11cbiAgICAgICAgd2VpZ2h0OiAwXG4gICAgICAgIGFsbG93RmFpbHVyZTogZmFsc2VcbiAgICAgIC0gbmFtZTogYXNzZXJ0LWJ1aWxkXG4gICAgICAgIGRlc2NyaXB0aW9uOiBwbnBtIGJ1aWxkIG11c3QgZXhpdCAwXG4gICAgICAgIHRhc2s6XG4gICAgICAgICAgdHlwZTogYXNzZXJ0XG4gICAgICAgICAgZXhwcjogPi1cbiAgICAgICAgICAgIGRhdGEucXVlcnkoJ21vZGVsTmFtZSA9PSBcIiR7c2hlbGxNb2RlbH1cIiAmJiBuYW1lID09IFwicmVzdWx0XCIgJiZcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQgPT0gXCInICsgcnVuLmlkICsgJ1wiJylbMF0uYXR0cmlidXRlcy5leGl0Q29kZSA9PSAwXG4gICAgICAgICAgbWVzc2FnZTogPi1cbiAgICAgICAgICAgIHBucG0gYnVpbGQgZmFpbGVkIChjb21waWxlL3N5bnRoL3Rlc3QvbGludCkg4oCUIHNlZSB0aGUgJHtzaGVsbE1vZGVsfVxuICAgICAgICAgICAgcmVzdWx0IGRhdGEgZm9yIHN0ZG91dC9zdGRlcnJcbiAgICAgICAgICBzZXZlcml0eTogaGlnaFxuICAgICAgICBkZXBlbmRzT246XG4gICAgICAgICAgLSBzdGVwOiBidWlsZFxuICAgICAgICAgICAgY29uZGl0aW9uOlxuICAgICAgICAgICAgICB0eXBlOiBzdWNjZWVkZWRcbiAgICAgICAgd2VpZ2h0OiAwXG4gICAgICAgIGFsbG93RmFpbHVyZTogZmFsc2VcbiAgICAgIC0gbmFtZTogYXJjaGl0ZWN0dXJlXG4gICAgICAgIGRlc2NyaXB0aW9uOiBydW4gdGhlIGFyY2hpdGVjdHVyZSBydWxlIHJlZ2lzdHJ5IChhcmNoaXRlY3R1cmUtcnVsZXMvcnVsZXMuanNvbilcbiAgICAgICAgdGFzazpcbiAgICAgICAgICB0eXBlOiBtb2RlbF9tZXRob2RcbiAgICAgICAgICBtb2RlbElkT3JOYW1lOiAke3NoZWxsQXJjaGl0ZWN0dXJlTW9kZWx9XG4gICAgICAgICAgbWV0aG9kTmFtZTogZXhlY3V0ZVxuICAgICAgICAgIGlucHV0czpcbiAgICAgICAgICAgIHJ1bjogcG5wbSBydW4gdmFsaWRhdGU6YXJjaGl0ZWN0dXJlXG4gICAgICAgIGRlcGVuZHNPbjpcbiAgICAgICAgICAtIHN0ZXA6IGFzc2VydC1idWlsZFxuICAgICAgICAgICAgY29uZGl0aW9uOlxuICAgICAgICAgICAgICB0eXBlOiBzdWNjZWVkZWRcbiAgICAgICAgd2VpZ2h0OiAwXG4gICAgICAgIGFsbG93RmFpbHVyZTogZmFsc2VcbiAgICAgIC0gbmFtZTogYXNzZXJ0LWFyY2hpdGVjdHVyZVxuICAgICAgICBkZXNjcmlwdGlvbjogYXJjaGl0ZWN0dXJlIHJ1bGUgcmVnaXN0cnkgbXVzdCBleGl0IDAgKG5vIGVuYWJsZWQtcnVsZSB2aW9sYXRpb25zKVxuICAgICAgICB0YXNrOlxuICAgICAgICAgIHR5cGU6IGFzc2VydFxuICAgICAgICAgIGV4cHI6ID4tXG4gICAgICAgICAgICBkYXRhLnF1ZXJ5KCdtb2RlbE5hbWUgPT0gXCIke3NoZWxsQXJjaGl0ZWN0dXJlTW9kZWx9XCIgJiYgbmFtZSA9PSBcInJlc3VsdFwiICYmXG4gICAgICAgICAgICB3b3JrZmxvd1J1bklkID09IFwiJyArIHJ1bi5pZCArICdcIicpWzBdLmF0dHJpYnV0ZXMuZXhpdENvZGUgPT0gMFxuICAgICAgICAgIG1lc3NhZ2U6ID4tXG4gICAgICAgICAgICBhcmNoaXRlY3R1cmUgcnVsZSB2aW9sYXRpb24ocykgZm91bmQg4oCUIHNlZSB0aGUgJHtzaGVsbE1vZGVsfSByZXN1bHRcbiAgICAgICAgICAgIGRhdGEgZm9yIGRldGFpbHNcbiAgICAgICAgICBzZXZlcml0eTogaGlnaFxuICAgICAgICBkZXBlbmRzT246XG4gICAgICAgICAgLSBzdGVwOiBhcmNoaXRlY3R1cmVcbiAgICAgICAgICAgIGNvbmRpdGlvbjpcbiAgICAgICAgICAgICAgdHlwZTogc3VjY2VlZGVkXG4gICAgICAgIHdlaWdodDogMFxuICAgICAgICBhbGxvd0ZhaWx1cmU6IGZhbHNlXG4gICAgICAtIG5hbWU6IG1hbmlmZXN0XG4gICAgICAgIGRlc2NyaXB0aW9uOiA+LVxuICAgICAgICAgIGNvbXB1dGUgdGhlIGF0dGVzdGF0aW9uLW1hbmlmZXN0IGNoZWNrc3VtcyAoYXR0ZXN0YXRpb24vbWFuaWZlc3QudHMpXG4gICAgICAgICAgdGhhdCB2ZXJpZnktYXR0ZXN0YXRpb24ueW1sIHJlLWNoZWNrcyBhdCBtZXJnZSB0aW1lXG4gICAgICAgIHRhc2s6XG4gICAgICAgICAgdHlwZTogbW9kZWxfbWV0aG9kXG4gICAgICAgICAgbW9kZWxJZE9yTmFtZTogJHtzaGVsbE1hbmlmZXN0TW9kZWx9XG4gICAgICAgICAgbWV0aG9kTmFtZTogZXhlY3V0ZVxuICAgICAgICAgIGlucHV0czpcbiAgICAgICAgICAgIHJ1bjogcG5wbSBydW4gYXR0ZXN0YXRpb246bWFuaWZlc3RcbiAgICAgICAgZGVwZW5kc09uOlxuICAgICAgICAgIC0gc3RlcDogYXNzZXJ0LWFyY2hpdGVjdHVyZVxuICAgICAgICAgICAgY29uZGl0aW9uOlxuICAgICAgICAgICAgICB0eXBlOiBzdWNjZWVkZWRcbiAgICAgICAgd2VpZ2h0OiAwXG4gICAgICAgIGFsbG93RmFpbHVyZTogZmFsc2VcbiAgICAgIC0gbmFtZTogYXNzZXJ0LW1hbmlmZXN0XG4gICAgICAgIGRlc2NyaXB0aW9uOiBhdHRlc3RhdGlvbjptYW5pZmVzdCBtdXN0IGV4aXQgMFxuICAgICAgICB0YXNrOlxuICAgICAgICAgIHR5cGU6IGFzc2VydFxuICAgICAgICAgIGV4cHI6ID4tXG4gICAgICAgICAgICBkYXRhLnF1ZXJ5KCdtb2RlbE5hbWUgPT0gXCIke3NoZWxsTWFuaWZlc3RNb2RlbH1cIiAmJiBuYW1lID09IFwicmVzdWx0XCIgJiZcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQgPT0gXCInICsgcnVuLmlkICsgJ1wiJylbMF0uYXR0cmlidXRlcy5leGl0Q29kZSA9PSAwXG4gICAgICAgICAgbWVzc2FnZTogPi1cbiAgICAgICAgICAgIGZhaWxlZCB0byBjb21wdXRlIHRoZSBhdHRlc3RhdGlvbiBtYW5pZmVzdCDigJQgc2VlIHRoZVxuICAgICAgICAgICAgJHtzaGVsbE1hbmlmZXN0TW9kZWx9IHJlc3VsdCBkYXRhIGZvciBzdGRvdXQvc3RkZXJyXG4gICAgICAgICAgc2V2ZXJpdHk6IGhpZ2hcbiAgICAgICAgZGVwZW5kc09uOlxuICAgICAgICAgIC0gc3RlcDogbWFuaWZlc3RcbiAgICAgICAgICAgIGNvbmRpdGlvbjpcbiAgICAgICAgICAgICAgdHlwZTogc3VjY2VlZGVkXG4gICAgICAgIHdlaWdodDogMFxuICAgICAgICBhbGxvd0ZhaWx1cmU6IGZhbHNlXG4gICAgZGVwZW5kc09uOiBbXVxuICAgIHdlaWdodDogMFxudmVyc2lvbjogMVxuYCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhY2thZ2VNYW5hZ2VyID0gcHJvamVjdC5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyO1xuICAgIGNvbnN0IGFjdGlvblZlcnNpb25zID0gcmVzb2x2ZUFjdGlvblZlcnNpb25zKG9wdGlvbnMuYWN0aW9uVmVyc2lvbnMpO1xuXG4gICAgbmV3IFlhbWxGaWxlKHByb2plY3QsICcuZ2l0aHViL3dvcmtmbG93cy92ZXJpZnktYXR0ZXN0YXRpb24ueW1sJywge1xuICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICBvYmo6IHtcbiAgICAgICAgbmFtZTogJ1ZlcmlmeSBBdHRlc3RhdGlvbicsXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgcHVsbF9yZXF1ZXN0OiB7XG4gICAgICAgICAgICB0eXBlczogWydvcGVuZWQnLCAnc3luY2hyb25pemUnLCAncmVvcGVuZWQnXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgICdjb250ZW50cyc6ICdyZWFkJyxcbiAgICAgICAgICAncHVsbC1yZXF1ZXN0cyc6ICdyZWFkJyxcbiAgICAgICAgfSxcbiAgICAgICAgam9iczoge1xuICAgICAgICAgIHZlcmlmeToge1xuICAgICAgICAgICAgJ3J1bnMtb24nOiAndWJ1bnR1LWxhdGVzdCcsXG4gICAgICAgICAgICAnc3RlcHMnOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ2hlY2tvdXQnLFxuICAgICAgICAgICAgICAgIHVzZXM6IGFjdGlvblZlcnNpb25zLmNoZWNrb3V0LFxuICAgICAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgICAgICdyZWYnOiAnJHt7IGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QuaGVhZC5zaGEgfX0nLFxuICAgICAgICAgICAgICAgICAgJ3BlcnNpc3QtY3JlZGVudGlhbHMnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAuLi4ocGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNID8gW3tcbiAgICAgICAgICAgICAgICBuYW1lOiAnU2V0dXAgcG5wbScsXG4gICAgICAgICAgICAgICAgdXNlczogYWN0aW9uVmVyc2lvbnMucG5wbUFjdGlvblNldHVwLFxuICAgICAgICAgICAgICB9XSA6IFtdKSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdTZXR1cCBOb2RlLmpzJyxcbiAgICAgICAgICAgICAgICB1c2VzOiBhY3Rpb25WZXJzaW9ucy5zZXR1cE5vZGUsXG4gICAgICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICAgICAgJ25vZGUtdmVyc2lvbic6ICcyNCcsXG4gICAgICAgICAgICAgICAgICAncGFja2FnZS1tYW5hZ2VyLWNhY2hlJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdJbnN0YWxsIGRlcGVuZGVuY2llcycsXG4gICAgICAgICAgICAgICAgcnVuOiBpbnN0YWxsQ29tbWFuZChwYWNrYWdlTWFuYWdlciksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnRmV0Y2ggUFIgYm9keScsXG4gICAgICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgICAgICBHSF9UT0tFTjogJyR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBydW46IFtcbiAgICAgICAgICAgICAgICAgICdnaCBwciB2aWV3ICR7eyBnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0Lm51bWJlciB9fSBcXFxcJyxcbiAgICAgICAgICAgICAgICAgICcgIC0tcmVwbyAke3sgZ2l0aHViLnJlcG9zaXRvcnkgfX0gXFxcXCcsXG4gICAgICAgICAgICAgICAgICAnICAtLWpzb24gYm9keSAtcSAuYm9keSA+IC90bXAvcHItYm9keS5tZCcsXG4gICAgICAgICAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdWZXJpZnkgYXR0ZXN0YXRpb24nLFxuICAgICAgICAgICAgICAgIHJ1bjogW1xuICAgICAgICAgICAgICAgICAgYCR7cnVuU2NyaXB0Q29tbWFuZChwYWNrYWdlTWFuYWdlciwgJ2F0dGVzdGF0aW9uOnZlcmlmeScpfSAtLSBcXFxcYCxcbiAgICAgICAgICAgICAgICAgICcgIC0tYm9keS1maWxlIC90bXAvcHItYm9keS5tZCBcXFxcJyxcbiAgICAgICAgICAgICAgICAgICcgIC0tY29tbWl0ICR7eyBnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LmhlYWQuc2hhIH19JyxcbiAgICAgICAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
349
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHdhcmVGYWN0b3J5V29ya2Zsb3dzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NvZnR3YXJlRmFjdG9yeVdvcmtmbG93cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFDcEMsbUNBQThDO0FBQzlDLHNEQUF3RTtBQUN4RSxtQ0FBMkQ7QUFDM0QscUVBQXlGO0FBZXpGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBYSx3QkFBd0I7SUFDbkMsWUFBWSxPQUFvQixFQUFFLE9BQXdDO1FBQ3hFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsR0FBRyxRQUFRLFFBQVEsQ0FBQztRQUN2QyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsUUFBUSxxQkFBcUIsQ0FBQztRQUNoRSxNQUFNLGtCQUFrQixHQUFHLEdBQUcsUUFBUSxpQkFBaUIsQ0FBQztRQUV4RCx3RkFBd0Y7UUFDeEYsbUZBQW1GO1FBQ25GLDJGQUEyRjtRQUMzRix3RkFBd0Y7UUFDeEYsc0ZBQXNGO1FBQ3RGLDJGQUEyRjtRQUMzRixrRkFBa0Y7UUFDbEYscUZBQXFGO1FBQ3JGLHlGQUF5RjtRQUN6RixnQkFBZ0I7UUFDaEIsTUFBTSxvQkFBb0IsR0FBRzs7Ozs7Ozs7K0JBUUYsQ0FBQztRQUU1QixJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLDhDQUE4QyxFQUFFO1lBQ3RFLFFBQVEsRUFBRSxPQUFPLElBQUEsbUJBQVUsR0FBRTs7Ozs7Ozs7Ozs7Ozs7O0VBZWpDLG9CQUFvQjs7Ozs7Ozs7OzJCQVNLLFVBQVU7Ozs7Ozs7Ozs7Ozt3Q0FZRyxVQUFVOzs7O3FEQUlHLFVBQVU7Ozs7Ozs7Ozs7OztDQVk5RDtTQUNJLENBQUMsQ0FBQztRQUVILElBQUksbUJBQVUsQ0FBQyxPQUFPLEVBQUUsK0NBQStDLEVBQUU7WUFDdkUsUUFBUSxFQUFFLE9BQU8sSUFBQSxtQkFBVSxHQUFFOzs7Ozs7Ozs7Ozs7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QUE1VUQsNERBNFVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBTYW1wbGVGaWxlLCBZYW1sRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBOb2RlUGFja2FnZU1hbmFnZXIsIE5vZGVQcm9qZWN0IH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcbmltcG9ydCB7IGluc3RhbGxDb21tYW5kLCBydW5TY3JpcHRDb21tYW5kIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyByZXNvbHZlQWN0aW9uVmVyc2lvbnMsIFdvcmtmbG93QWN0aW9uVmVyc2lvbnMgfSBmcm9tICcuL1dvcmtmbG93QWN0aW9uVmVyc2lvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvZnR3YXJlRmFjdG9yeVdvcmtmbG93c09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGJhcmUgcmVwbyBuYW1lLCB1c2VkIHRvIGRlcml2ZSB0aGUgYDxyZXBvTmFtZT4tc2hlbGxbLWFyY2hpdGVjdHVyZXwtbWFuaWZlc3RdYFxuICAgKiBtb2RlbCBuYW1lcyB0aGVzZSB3b3JrZmxvd3MgZGlzcGF0Y2ggc2hlbGwgY29tbWFuZHMgdGhyb3VnaC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBmb3IgdGhlIHBpbm5lZCBhY3Rpb24gdmVyc2lvbnMgdXNlZCBieSBgdmVyaWZ5LWF0dGVzdGF0aW9uLnltbGAuXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25WZXJzaW9ucz86IFdvcmtmbG93QWN0aW9uVmVyc2lvbnM7XG59XG5cbi8qKlxuICogVGhlIDMgc3dhbXAgd29ya2Zsb3dzIHRoZSBmYWN0b3J5J3MgZ2F0ZSBzdGFnZXMgcnVuIChvcGVuc3BlYy1wbGFuLXZlcmlmeSxcbiAqIG9wZW5zcGVjLXRhc2tzLXZlcmlmeSwgcHJlLXByLXZlcmlmeSksIHBsdXMgdGhlIEdpdEh1YiBBY3Rpb24gdGhhdFxuICogcmUtdmVyaWZpZXMgYSBQUidzIGVtYmVkZGVkIGF0dGVzdGF0aW9uIGF0IG1lcmdlIHRpbWUuXG4gKlxuICogVGhlIHN3YW1wIHdvcmtmbG93IFlBTUxzIGNhcnJ5IGEgc3dhbXAtYXNzaWduZWQgYGlkYCB0aGF0IG11c3Qgc3RheSBzdGFibGVcbiAqIGFjcm9zcyBzeW50aHMgKHN3YW1wIHVzZXMgaXQgYXMgdGhlIHdvcmtmbG93J3MgaWRlbnRpdHkpLCBzbyDigJQgbGlrZSB0aGVcbiAqIG1vZGVsIGluc3RhbmNlcyBpbiBgU29mdHdhcmVGYWN0b3J5TW9kZWxzYCDigJQgdGhleSdyZSBgU2FtcGxlRmlsZWBzLCB3cml0dGVuXG4gKiBvbmNlIGFuZCB0aGVuIG93bmVkIGJ5IHRoZSB0ZWFtLiBgdmVyaWZ5LWF0dGVzdGF0aW9uLnltbGAgaGFzIG5vIHN1Y2hcbiAqIGlkZW50aXR5IGNvbnN0cmFpbnQgYW5kIGlzIGEgcGxhaW4gR2l0SHViIEFjdGlvbnMgd29ya2Zsb3csIHNvIGl0J3MgYnVpbHRcbiAqIHRoZSBzYW1lIG1hbmFnZWQgd2F5IGBQckRlcGxveVdvcmtmbG93YCBpcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNvZnR3YXJlRmFjdG9yeVdvcmtmbG93cyB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBTb2Z0d2FyZUZhY3RvcnlXb3JrZmxvd3NPcHRpb25zKSB7XG4gICAgY29uc3QgeyByZXBvTmFtZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBzaGVsbE1vZGVsID0gYCR7cmVwb05hbWV9LXNoZWxsYDtcbiAgICBjb25zdCBzaGVsbEFyY2hpdGVjdHVyZU1vZGVsID0gYCR7cmVwb05hbWV9LXNoZWxsLWFyY2hpdGVjdHVyZWA7XG4gICAgY29uc3Qgc2hlbGxNYW5pZmVzdE1vZGVsID0gYCR7cmVwb05hbWV9LXNoZWxsLW1hbmlmZXN0YDtcblxuICAgIC8vIEVhY2ggam9iIHN0ZXAncyBgcnVuOmAgYmVsb3cgZXhlY3V0ZXMgdGhyb3VnaCBzd2FtcCdzIGNvbW1hbmQvc2hlbGwgbW9kZWwsIHdoaWNoIHJ1bnNcbiAgICAvLyB0aGUgc3RyaW5nIHRocm91Z2ggdGhlIGhvc3QncyBuYXRpdmUgc2hlbGwg4oCUIGJhc2gvc2ggb24gbWFjT1MvTGludXgsIGJ1dCBXaW5kb3dzXG4gICAgLy8gUG93ZXJTaGVsbCA1LjEgb24gYSBXaW5kb3dzIGRldiBtYWNoaW5lLiBQb3dlclNoZWxsIDUuMSBoYXMgbm8gYCYmYC9gfHxgIGNoYWluIG9wZXJhdG9yc1xuICAgIC8vIGFuZCBhbGlhc2VzIGBybWAgdG8gYFJlbW92ZS1JdGVtYCAod2hvc2UgYC1mYCBpcyBhbWJpZ3VvdXMgd2l0aCBgLUZpbHRlcmApLiBJZiBhIHN0ZXBcbiAgICAvLyBoZXJlIG5lZWRzIG1vcmUgdGhhbiBvbmUgY29tbWFuZCwgcHJlZmVyIGEgc2luZ2xlIHBhY2thZ2UuanNvbiBzY3JpcHQgdGhhdCBkb2VzIHRoZVxuICAgIC8vIHNlcXVlbmNpbmcsIG9yIHVzZSBgO2AgdG8gc2VwYXJhdGUgY29tbWFuZHMgKGFjY2VwdGVkIGJ5IGJvdGggc2hlbGxzLCB0aG91Z2ggaXQgZG9lcyBub3RcbiAgICAvLyBzaG9ydC1jaXJjdWl0IG9uIGZhaWx1cmUg4oCUIHJlbHkgb24gdGhlIHdvcmtmbG93J3Mgb3duIGFzc2VydCBzdGVwIGZvciB0aGF0KS4gVG9cbiAgICAvLyBmb3JjZS1kZWxldGUgYSBmaWxlIHBvcnRhYmx5LCB1c2UgYG5vZGUgLWUgXCJyZXF1aXJlKCdmcycpLnJtU3luYygnPHBhdGg+Jywge2ZvcmNlOlxuICAgIC8vIHRydWV9KVwiYCBpbnN0ZWFkIG9mIGBybSAtZiA8cGF0aD5gIChzZWUgc2hlbGxQb3J0YWJsZVNlcXVlbmNlL3NoZWxsUG9ydGFibGVGb3JjZURlbGV0ZVxuICAgIC8vIGluIHV0aWxzLnRzKS5cbiAgICBjb25zdCBzaGVsbFBvcnRhYmlsaXR5Tm90ZSA9IGAjIFBvcnRhYmlsaXR5IG5vdGU6IFxcYHJ1bjpcXGAgYmVsb3cgZXhlY3V0ZXMgdGhyb3VnaCBzd2FtcCdzIGNvbW1hbmQvc2hlbGwgbW9kZWwsIHdoaWNoIHJ1bnNcbiMgdGhlIHN0cmluZyB0aHJvdWdoIHRoZSBob3N0J3MgbmF0aXZlIHNoZWxsIOKAlCBiYXNoL3NoIG9uIG1hY09TL0xpbnV4LCBidXQgV2luZG93c1xuIyBQb3dlclNoZWxsIDUuMSBvbiBhIFdpbmRvd3MgZGV2IG1hY2hpbmUuIFBvd2VyU2hlbGwgNS4xIGhhcyBubyBcXGAmJlxcYC9cXGB8fFxcYCBjaGFpbiBvcGVyYXRvcnNcbiMgYW5kIGFsaWFzZXMgXFxgcm1cXGAgdG8gXFxgUmVtb3ZlLUl0ZW1cXGAgKHdob3NlIFxcYC1mXFxgIGlzIGFtYmlndW91cyB3aXRoIFxcYC1GaWx0ZXJcXGApLiBJZiBhIHN0ZXAgaGVyZVxuIyBuZWVkcyBtb3JlIHRoYW4gb25lIGNvbW1hbmQsIHByZWZlciBhIHNpbmdsZSBwYWNrYWdlLmpzb24gc2NyaXB0IHRoYXQgZG9lcyB0aGVcbiMgc2VxdWVuY2luZywgb3IgdXNlIFxcYDtcXGAgdG8gc2VwYXJhdGUgY29tbWFuZHMgKGFjY2VwdGVkIGJ5IGJvdGggc2hlbGxzLCB0aG91Z2ggaXQgZG9lcyBub3RcbiMgc2hvcnQtY2lyY3VpdCBvbiBmYWlsdXJlIOKAlCByZWx5IG9uIHRoZSB3b3JrZmxvdydzIG93biBhc3NlcnQgc3RlcCBmb3IgdGhhdCkuIFRvXG4jIGZvcmNlLWRlbGV0ZSBhIGZpbGUgcG9ydGFibHksIHVzZSBcXGBub2RlIC1lIFwicmVxdWlyZSgnZnMnKS5ybVN5bmMoJzxwYXRoPicsIHtmb3JjZTogdHJ1ZX0pXCJcXGBcbiMgaW5zdGVhZCBvZiBcXGBybSAtZiA8cGF0aD5cXGAuYDtcblxuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsICd3b3JrZmxvd3Mvd29ya2Zsb3ctb3BlbnNwZWMtcGxhbi12ZXJpZnkueWFtbCcsIHtcbiAgICAgIGNvbnRlbnRzOiBgaWQ6ICR7cmFuZG9tVVVJRCgpfVxubmFtZTogb3BlbnNwZWMtcGxhbi12ZXJpZnlcbmRlc2NyaXB0aW9uOiA+LVxuICBGYWlscyB1bmxlc3MgdGhlIG5hbWVkIE9wZW5TcGVjIGNoYW5nZSBpcyB3ZWxsLWZvcm1lZCAocHJvcG9zYWwsIGRlc2lnbixcbiAgc3BlY3Mgd2l0aCBkZWx0YXMsIHRhc2tzIGFsbCBwcmVzZW50KSB2aWEgXFxgb3BlbnNwZWMgdmFsaWRhdGVcXGAuIEdhdGVzIHRoZVxuICBmYWN0b3J5J3MgcGxhbm5pbmcgc3RhZ2U6IGEgcmVxdWVzdCBjYW4ndCBwcm9jZWVkIHRvIGltcGxlbWVudGF0aW9uIHVudGlsXG4gIGl0J3MgYSByZWFsIE9wZW5TcGVjIGNoYW5nZSwgbm90IGp1c3QgcHJvc2UgaW4gYSBzd2FtcCBhcnRpZmFjdC5cbnRhZ3M6IHt9XG5pbnB1dHM6XG4gIHR5cGU6IG9iamVjdFxuICByZXF1aXJlZDogW2NoYW5nZVNsdWddXG4gIHByb3BlcnRpZXM6XG4gICAgY2hhbmdlU2x1ZzpcbiAgICAgIHR5cGU6IHN0cmluZ1xuICAgICAgZGVzY3JpcHRpb246IFRoZSBvcGVuc3BlYyBjaGFuZ2UgbmFtZSAob3BlbnNwZWMvY2hhbmdlcy88Y2hhbmdlU2x1Zz4vKS5cbiR7c2hlbGxQb3J0YWJpbGl0eU5vdGV9XG5qb2JzOlxuICAtIG5hbWU6IHZlcmlmeVxuICAgIGRlc2NyaXB0aW9uOiBWYWxpZGF0ZSB0aGUgT3BlblNwZWMgY2hhbmdlIGlzIGNvbXBsZXRlIGFuZCB3ZWxsLWZvcm1lZFxuICAgIHN0ZXBzOlxuICAgICAgLSBuYW1lOiB2YWxpZGF0ZVxuICAgICAgICBkZXNjcmlwdGlvbjogb3BlbnNwZWMgdmFsaWRhdGUgPGNoYW5nZVNsdWc+IC0tdHlwZSBjaGFuZ2VcbiAgICAgICAgdGFzazpcbiAgICAgICAgICB0eXBlOiBtb2RlbF9tZXRob2RcbiAgICAgICAgICBtb2RlbElkT3JOYW1lOiAke3NoZWxsTW9kZWx9XG4gICAgICAgICAgbWV0aG9kTmFtZTogZXhlY3V0ZVxuICAgICAgICAgIGlucHV0czpcbiAgICAgICAgICAgIHJ1bjogJ29wZW5zcGVjIHZhbGlkYXRlIFxcJHt7IGlucHV0cy5jaGFuZ2VTbHVnIH19IC0tdHlwZSBjaGFuZ2UnXG4gICAgICAgIGRlcGVuZHNPbjogW11cbiAgICAgICAgd2VpZ2h0OiAwXG4gICAgICAgIGFsbG93RmFpbHVyZTogZmFsc2VcbiAgICAgIC0gbmFtZTogYXNzZXJ0LXZhbGlkXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcGVuc3BlYyB2YWxpZGF0ZSBtdXN0IGV4aXQgMFxuICAgICAgICB0YXNrOlxuICAgICAgICAgIHR5cGU6IGFzc2VydFxuICAgICAgICAgIGV4cHI6ID4tXG4gICAgICAgICAgICBkYXRhLnF1ZXJ5KCdtb2RlbE5hbWUgPT0gXCIke3NoZWxsTW9kZWx9XCIgJiYgbmFtZSA9PSBcInJlc3VsdFwiICYmXG4gICAgICAgICAgICB3b3JrZmxvd1J1bklkID09IFwiJyArIHJ1bi5pZCArICdcIicpWzBdLmF0dHJpYnV0ZXMuZXhpdENvZGUgPT0gMFxuICAgICAgICAgIG1lc3NhZ2U6ID4tXG4gICAgICAgICAgICBPcGVuU3BlYyBjaGFuZ2UgaXMgbm90IHZhbGlkL2NvbXBsZXRlIChtaXNzaW5nIHByb3Bvc2FsLCBkZXNpZ24sXG4gICAgICAgICAgICBzcGVjcyB3aXRoIGRlbHRhcywgb3IgdGFza3MpIOKAlCBzZWUgdGhlICR7c2hlbGxNb2RlbH0gcmVzdWx0IGRhdGFcbiAgICAgICAgICAgIGZvciBvcGVuc3BlYydzIG93biByZW1lZGlhdGlvbiBvdXRwdXRcbiAgICAgICAgICBzZXZlcml0eTogaGlnaFxuICAgICAgICBkZXBlbmRzT246XG4gICAgICAgICAgLSBzdGVwOiB2YWxpZGF0ZVxuICAgICAgICAgICAgY29uZGl0aW9uOlxuICAgICAgICAgICAgICB0eXBlOiBzdWNjZWVkZWRcbiAgICAgICAgd2VpZ2h0OiAwXG4gICAgICAgIGFsbG93RmFpbHVyZTogZmFsc2VcbiAgICBkZXBlbmRzT246IFtdXG4gICAgd2VpZ2h0OiAwXG52ZXJzaW9uOiAxXG5gLFxuICAgIH0pO1xuXG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgJ3dvcmtmbG93cy93b3JrZmxvdy1vcGVuc3BlYy10YXNrcy12ZXJpZnkueWFtbCcsIHtcbiAgICAgIGNvbnRlbnRzOiBgaWQ6ICR7cmFuZG9tVVVJRCgpfVxubmFtZTogb3BlbnNwZWMtdGFza3MtdmVyaWZ5XG5kZXNjcmlwdGlvbjogPi1cbiAgRmFpbHMgdW5sZXNzIGV2ZXJ5IHRhc2sgaW4gdGhlIG5hbWVkIE9wZW5TcGVjIGNoYW5nZSdzIHRhc2tzLm1kIGlzIGNoZWNrZWRcbiAgb2ZmIChvcGVuc3BlYy1nYXRlcy9jaGVjay10YXNrcy1jb21wbGV0ZS50cywgdmlhIFxcYHBucG0gcnVuXG4gIG9wZW5zcGVjOmNoZWNrLXRhc2tzLWNvbXBsZXRlXFxgKS4gR2F0ZXMgdGhlIGZhY3RvcnkncyBpbXBsZW1lbnRpbmcgc3RhZ2U6XG4gIHdvcmsgaXNuJ3QgZG9uZSB1bnRpbCB0aGUgY2hhbmdlJ3Mgb3duIHRhc2sgbGlzdCBzYXlzIGl0J3MgZG9uZSwgbm90IGp1c3RcbiAgYmVjYXVzZSBhbiBhcnRpZmFjdCB3YXMgcmVjb3JkZWQuXG50YWdzOiB7fVxuaW5wdXRzOlxuICB0eXBlOiBvYmplY3RcbiAgcmVxdWlyZWQ6IFtjaGFuZ2VTbHVnXVxuICBwcm9wZXJ0aWVzOlxuICAgIGNoYW5nZVNsdWc6XG4gICAgICB0eXBlOiBzdHJpbmdcbiAgICAgIGRlc2NyaXB0aW9uOiBUaGUgb3BlbnNwZWMgY2hhbmdlIG5hbWUgKG9wZW5zcGVjL2NoYW5nZXMvPGNoYW5nZVNsdWc+LykuXG4ke3NoZWxsUG9ydGFiaWxpdHlOb3RlfVxuam9iczpcbiAgLSBuYW1lOiB2ZXJpZnlcbiAgICBkZXNjcmlwdGlvbjogQ2hlY2sgZXZlcnkgdGFzayBpbiB0aGUgY2hhbmdlJ3MgdGFza3MubWQgaXMgY29tcGxldGVcbiAgICBzdGVwczpcbiAgICAgIC0gbmFtZTogY2hlY2stdGFza3NcbiAgICAgICAgZGVzY3JpcHRpb246IHBucG0gcnVuIG9wZW5zcGVjOmNoZWNrLXRhc2tzLWNvbXBsZXRlIC0tIDxjaGFuZ2VTbHVnPlxuICAgICAgICB0YXNrOlxuICAgICAgICAgIHR5cGU6IG1vZGVsX21ldGhvZFxuICAgICAgICAgIG1vZGVsSWRPck5hbWU6ICR7c2hlbGxNb2RlbH1cbiAgICAgICAgICBtZXRob2ROYW1lOiBleGVjdXRlXG4gICAgICAgICAgaW5wdXRzOlxuICAgICAgICAgICAgcnVuOiAncG5wbSBydW4gb3BlbnNwZWM6Y2hlY2stdGFza3MtY29tcGxldGUgLS0gXFwke3sgaW5wdXRzLmNoYW5nZVNsdWcgfX0nXG4gICAgICAgIGRlcGVuZHNPbjogW11cbiAgICAgICAgd2VpZ2h0OiAwXG4gICAgICAgIGFsbG93RmFpbHVyZTogZmFsc2VcbiAgICAgIC0gbmFtZTogYXNzZXJ0LXRhc2tzLWNvbXBsZXRlXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcGVuc3BlYzpjaGVjay10YXNrcy1jb21wbGV0ZSBtdXN0IGV4aXQgMFxuICAgICAgICB0YXNrOlxuICAgICAgICAgIHR5cGU6IGFzc2VydFxuICAgICAgICAgIGV4cHI6ID4tXG4gICAgICAgICAgICBkYXRhLnF1ZXJ5KCdtb2RlbE5hbWUgPT0gXCIke3NoZWxsTW9kZWx9XCIgJiYgbmFtZSA9PSBcInJlc3VsdFwiICYmXG4gICAgICAgICAgICB3b3JrZmxvd1J1bklkID09IFwiJyArIHJ1bi5pZCArICdcIicpWzBdLmF0dHJpYnV0ZXMuZXhpdENvZGUgPT0gMFxuICAgICAgICAgIG1lc3NhZ2U6ID4tXG4gICAgICAgICAgICBPcGVuU3BlYyBjaGFuZ2UgaGFzIGluY29tcGxldGUgdGFza3Mg4oCUIHNlZSB0aGUgJHtzaGVsbE1vZGVsfVxuICAgICAgICAgICAgcmVzdWx0IGRhdGEgZm9yIHRoZSBjb21wbGV0ZWRUYXNrcy90b3RhbFRhc2tzIGJyZWFrZG93blxuICAgICAgICAgIHNldmVyaXR5OiBoaWdoXG4gICAgICAgIGRlcGVuZHNPbjpcbiAgICAgICAgICAtIHN0ZXA6IGNoZWNrLXRhc2tzXG4gICAgICAgICAgICBjb25kaXRpb246XG4gICAgICAgICAgICAgIHR5cGU6IHN1Y2NlZWRlZFxuICAgICAgICB3ZWlnaHQ6IDBcbiAgICAgICAgYWxsb3dGYWlsdXJlOiBmYWxzZVxuICAgIGRlcGVuZHNPbjogW11cbiAgICB3ZWlnaHQ6IDBcbnZlcnNpb246IDFcbmAsXG4gICAgfSk7XG5cbiAgICBuZXcgU2FtcGxlRmlsZShwcm9qZWN0LCAnd29ya2Zsb3dzL3dvcmtmbG93LXByZS1wci12ZXJpZnkueWFtbCcsIHtcbiAgICAgIGNvbnRlbnRzOiBgaWQ6ICR7cmFuZG9tVVVJRCgpfVxubmFtZTogcHJlLXByLXZlcmlmeVxuZGVzY3JpcHRpb246ID4tXG4gIFByZS1QUiB2ZXJpZmljYXRpb246IHJ1biB0aGUgc2FtZSBjaGVja3MgQ0kgd291bGQgcnVuLCBiZWZvcmUgdGhlIGZhY3RvcnlcbiAgb3BlbnMgYSBQUiByYXRoZXIgdGhhbiBhZnRlciDigJQgYnVpbGQvc3ludGgvdGVzdC9saW50IChwbnBtIGJ1aWxkKSBhbmQgdGhlXG4gIGFyY2hpdGVjdHVyZSBydWxlIHJlZ2lzdHJ5IChwbnBtIHZhbGlkYXRlOmFyY2hpdGVjdHVyZSkuIEJvdGggbXVzdCBwYXNzLlxudGFnczoge31cbmlucHV0czpcbiAgdHlwZTogb2JqZWN0XG4gIHByb3BlcnRpZXM6XG4gICAgY29tbWl0OlxuICAgICAgdHlwZTogc3RyaW5nXG4gICAgICBkZXNjcmlwdGlvbjogPi1cbiAgICAgICAgVGhlIGNvbW1pdCBzaGEgYmVpbmcgdmVyaWZpZWQuIFJlYWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICAgIEBzd2FtcC92ZXJpZmljYXRpb24tYXR0ZXN0YXRpb24gcmVwb3J0J3Mgc3ViamVjdC5jb21taXQg4oCUIHBhc3MgdGhlXG4gICAgICAgIHJlYWwgSEVBRCBzaGEgb3IgdGhlIGF0dGVzdGF0aW9uIHJlbmRlcnMgXCJ1bmtub3duXCIuXG4gICAgYnJhbmNoOlxuICAgICAgdHlwZTogc3RyaW5nXG4gICAgICBkZXNjcmlwdGlvbjogU2FtZSBhcyBjb21taXQsIGJ1dCBmb3IgQHN3YW1wL3ZlcmlmaWNhdGlvbi1hdHRlc3RhdGlvbidzIHN1YmplY3QuYnJhbmNoLlxuJHtzaGVsbFBvcnRhYmlsaXR5Tm90ZX1cbmpvYnM6XG4gIC0gbmFtZTogdmVyaWZ5XG4gICAgZGVzY3JpcHRpb246IEJ1aWxkL3Rlc3QvbGludCBwbHVzIGFyY2hpdGVjdHVyZS1ydWxlIGNoZWNrcywgZ2F0aW5nIFBSIGNyZWF0aW9uXG4gICAgc3RlcHM6XG4gICAgICAtIG5hbWU6IGJ1aWxkXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjb21waWxlIC0+IGNkayBzeW50aCAtPiBqZXN0IC0+IGVzbGludCAoZXhpc3RpbmcgcHJvamVuIGJ1aWxkIHRhc2spXG4gICAgICAgIHRhc2s6XG4gICAgICAgICAgdHlwZTogbW9kZWxfbWV0aG9kXG4gICAgICAgICAgbW9kZWxJZE9yTmFtZTogJHtzaGVsbE1vZGVsfVxuICAgICAgICAgIG1ldGhvZE5hbWU6IGV4ZWN1dGVcbiAgICAgICAgICBpbnB1dHM6XG4gICAgICAgICAgICBydW46IHBucG0gYnVpbGRcbiAgICAgICAgZGVwZW5kc09uOiBbXVxuICAgICAgICB3ZWlnaHQ6IDBcbiAgICAgICAgYWxsb3dGYWlsdXJlOiBmYWxzZVxuICAgICAgLSBuYW1lOiBhc3NlcnQtYnVpbGRcbiAgICAgICAgZGVzY3JpcHRpb246IHBucG0gYnVpbGQgbXVzdCBleGl0IDBcbiAgICAgICAgdGFzazpcbiAgICAgICAgICB0eXBlOiBhc3NlcnRcbiAgICAgICAgICBleHByOiA+LVxuICAgICAgICAgICAgZGF0YS5xdWVyeSgnbW9kZWxOYW1lID09IFwiJHtzaGVsbE1vZGVsfVwiICYmIG5hbWUgPT0gXCJyZXN1bHRcIiAmJlxuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCA9PSBcIicgKyBydW4uaWQgKyAnXCInKVswXS5hdHRyaWJ1dGVzLmV4aXRDb2RlID09IDBcbiAgICAgICAgICBtZXNzYWdlOiA+LVxuICAgICAgICAgICAgcG5wbSBidWlsZCBmYWlsZWQgKGNvbXBpbGUvc3ludGgvdGVzdC9saW50KSDigJQgc2VlIHRoZSAke3NoZWxsTW9kZWx9XG4gICAgICAgICAgICByZXN1bHQgZGF0YSBmb3Igc3Rkb3V0L3N0ZGVyclxuICAgICAgICAgIHNldmVyaXR5OiBoaWdoXG4gICAgICAgIGRlcGVuZHNPbjpcbiAgICAgICAgICAtIHN0ZXA6IGJ1aWxkXG4gICAgICAgICAgICBjb25kaXRpb246XG4gICAgICAgICAgICAgIHR5cGU6IHN1Y2NlZWRlZFxuICAgICAgICB3ZWlnaHQ6IDBcbiAgICAgICAgYWxsb3dGYWlsdXJlOiBmYWxzZVxuICAgICAgLSBuYW1lOiBhcmNoaXRlY3R1cmVcbiAgICAgICAgZGVzY3JpcHRpb246IHJ1biB0aGUgYXJjaGl0ZWN0dXJlIHJ1bGUgcmVnaXN0cnkgKGFyY2hpdGVjdHVyZS1ydWxlcy9ydWxlcy5qc29uKVxuICAgICAgICB0YXNrOlxuICAgICAgICAgIHR5cGU6IG1vZGVsX21ldGhvZFxuICAgICAgICAgIG1vZGVsSWRPck5hbWU6ICR7c2hlbGxBcmNoaXRlY3R1cmVNb2RlbH1cbiAgICAgICAgICBtZXRob2ROYW1lOiBleGVjdXRlXG4gICAgICAgICAgaW5wdXRzOlxuICAgICAgICAgICAgcnVuOiBwbnBtIHJ1biB2YWxpZGF0ZTphcmNoaXRlY3R1cmVcbiAgICAgICAgZGVwZW5kc09uOlxuICAgICAgICAgIC0gc3RlcDogYXNzZXJ0LWJ1aWxkXG4gICAgICAgICAgICBjb25kaXRpb246XG4gICAgICAgICAgICAgIHR5cGU6IHN1Y2NlZWRlZFxuICAgICAgICB3ZWlnaHQ6IDBcbiAgICAgICAgYWxsb3dGYWlsdXJlOiBmYWxzZVxuICAgICAgLSBuYW1lOiBhc3NlcnQtYXJjaGl0ZWN0dXJlXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhcmNoaXRlY3R1cmUgcnVsZSByZWdpc3RyeSBtdXN0IGV4aXQgMCAobm8gZW5hYmxlZC1ydWxlIHZpb2xhdGlvbnMpXG4gICAgICAgIHRhc2s6XG4gICAgICAgICAgdHlwZTogYXNzZXJ0XG4gICAgICAgICAgZXhwcjogPi1cbiAgICAgICAgICAgIGRhdGEucXVlcnkoJ21vZGVsTmFtZSA9PSBcIiR7c2hlbGxBcmNoaXRlY3R1cmVNb2RlbH1cIiAmJiBuYW1lID09IFwicmVzdWx0XCIgJiZcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQgPT0gXCInICsgcnVuLmlkICsgJ1wiJylbMF0uYXR0cmlidXRlcy5leGl0Q29kZSA9PSAwXG4gICAgICAgICAgbWVzc2FnZTogPi1cbiAgICAgICAgICAgIGFyY2hpdGVjdHVyZSBydWxlIHZpb2xhdGlvbihzKSBmb3VuZCDigJQgc2VlIHRoZSAke3NoZWxsTW9kZWx9IHJlc3VsdFxuICAgICAgICAgICAgZGF0YSBmb3IgZGV0YWlsc1xuICAgICAgICAgIHNldmVyaXR5OiBoaWdoXG4gICAgICAgIGRlcGVuZHNPbjpcbiAgICAgICAgICAtIHN0ZXA6IGFyY2hpdGVjdHVyZVxuICAgICAgICAgICAgY29uZGl0aW9uOlxuICAgICAgICAgICAgICB0eXBlOiBzdWNjZWVkZWRcbiAgICAgICAgd2VpZ2h0OiAwXG4gICAgICAgIGFsbG93RmFpbHVyZTogZmFsc2VcbiAgICAgIC0gbmFtZTogbWFuaWZlc3RcbiAgICAgICAgZGVzY3JpcHRpb246ID4tXG4gICAgICAgICAgY29tcHV0ZSB0aGUgYXR0ZXN0YXRpb24tbWFuaWZlc3QgY2hlY2tzdW1zIChhdHRlc3RhdGlvbi9tYW5pZmVzdC50cylcbiAgICAgICAgICB0aGF0IHZlcmlmeS1hdHRlc3RhdGlvbi55bWwgcmUtY2hlY2tzIGF0IG1lcmdlIHRpbWVcbiAgICAgICAgdGFzazpcbiAgICAgICAgICB0eXBlOiBtb2RlbF9tZXRob2RcbiAgICAgICAgICBtb2RlbElkT3JOYW1lOiAke3NoZWxsTWFuaWZlc3RNb2RlbH1cbiAgICAgICAgICBtZXRob2ROYW1lOiBleGVjdXRlXG4gICAgICAgICAgaW5wdXRzOlxuICAgICAgICAgICAgcnVuOiBwbnBtIHJ1biBhdHRlc3RhdGlvbjptYW5pZmVzdFxuICAgICAgICBkZXBlbmRzT246XG4gICAgICAgICAgLSBzdGVwOiBhc3NlcnQtYXJjaGl0ZWN0dXJlXG4gICAgICAgICAgICBjb25kaXRpb246XG4gICAgICAgICAgICAgIHR5cGU6IHN1Y2NlZWRlZFxuICAgICAgICB3ZWlnaHQ6IDBcbiAgICAgICAgYWxsb3dGYWlsdXJlOiBmYWxzZVxuICAgICAgLSBuYW1lOiBhc3NlcnQtbWFuaWZlc3RcbiAgICAgICAgZGVzY3JpcHRpb246IGF0dGVzdGF0aW9uOm1hbmlmZXN0IG11c3QgZXhpdCAwXG4gICAgICAgIHRhc2s6XG4gICAgICAgICAgdHlwZTogYXNzZXJ0XG4gICAgICAgICAgZXhwcjogPi1cbiAgICAgICAgICAgIGRhdGEucXVlcnkoJ21vZGVsTmFtZSA9PSBcIiR7c2hlbGxNYW5pZmVzdE1vZGVsfVwiICYmIG5hbWUgPT0gXCJyZXN1bHRcIiAmJlxuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCA9PSBcIicgKyBydW4uaWQgKyAnXCInKVswXS5hdHRyaWJ1dGVzLmV4aXRDb2RlID09IDBcbiAgICAgICAgICBtZXNzYWdlOiA+LVxuICAgICAgICAgICAgZmFpbGVkIHRvIGNvbXB1dGUgdGhlIGF0dGVzdGF0aW9uIG1hbmlmZXN0IOKAlCBzZWUgdGhlXG4gICAgICAgICAgICAke3NoZWxsTWFuaWZlc3RNb2RlbH0gcmVzdWx0IGRhdGEgZm9yIHN0ZG91dC9zdGRlcnJcbiAgICAgICAgICBzZXZlcml0eTogaGlnaFxuICAgICAgICBkZXBlbmRzT246XG4gICAgICAgICAgLSBzdGVwOiBtYW5pZmVzdFxuICAgICAgICAgICAgY29uZGl0aW9uOlxuICAgICAgICAgICAgICB0eXBlOiBzdWNjZWVkZWRcbiAgICAgICAgd2VpZ2h0OiAwXG4gICAgICAgIGFsbG93RmFpbHVyZTogZmFsc2VcbiAgICBkZXBlbmRzT246IFtdXG4gICAgd2VpZ2h0OiAwXG52ZXJzaW9uOiAxXG5gLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSBwcm9qZWN0LnBhY2thZ2UucGFja2FnZU1hbmFnZXI7XG4gICAgY29uc3QgYWN0aW9uVmVyc2lvbnMgPSByZXNvbHZlQWN0aW9uVmVyc2lvbnMob3B0aW9ucy5hY3Rpb25WZXJzaW9ucyk7XG5cbiAgICBuZXcgWWFtbEZpbGUocHJvamVjdCwgJy5naXRodWIvd29ya2Zsb3dzL3ZlcmlmeS1hdHRlc3RhdGlvbi55bWwnLCB7XG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgICByZWFkb25seTogdHJ1ZSxcbiAgICAgIG9iajoge1xuICAgICAgICBuYW1lOiAnVmVyaWZ5IEF0dGVzdGF0aW9uJyxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBwdWxsX3JlcXVlc3Q6IHtcbiAgICAgICAgICAgIHR5cGVzOiBbJ29wZW5lZCcsICdzeW5jaHJvbml6ZScsICdyZW9wZW5lZCddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgJ2NvbnRlbnRzJzogJ3JlYWQnLFxuICAgICAgICAgICdwdWxsLXJlcXVlc3RzJzogJ3JlYWQnLFxuICAgICAgICB9LFxuICAgICAgICBqb2JzOiB7XG4gICAgICAgICAgdmVyaWZ5OiB7XG4gICAgICAgICAgICAncnVucy1vbic6ICd1YnVudHUtbGF0ZXN0JyxcbiAgICAgICAgICAgICdzdGVwcyc6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgICAgICAgICAgdXNlczogYWN0aW9uVmVyc2lvbnMuY2hlY2tvdXQsXG4gICAgICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICAgICAgJ3JlZic6ICcke3sgZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5oZWFkLnNoYSB9fScsXG4gICAgICAgICAgICAgICAgICAncGVyc2lzdC1jcmVkZW50aWFscyc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC4uLihwYWNrYWdlTWFuYWdlciA9PT0gTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE0gPyBbe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdTZXR1cCBwbnBtJyxcbiAgICAgICAgICAgICAgICB1c2VzOiBhY3Rpb25WZXJzaW9ucy5wbnBtQWN0aW9uU2V0dXAsXG4gICAgICAgICAgICAgIH1dIDogW10pLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1NldHVwIE5vZGUuanMnLFxuICAgICAgICAgICAgICAgIHVzZXM6IGFjdGlvblZlcnNpb25zLnNldHVwTm9kZSxcbiAgICAgICAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAgICAgICAnbm9kZS12ZXJzaW9uJzogJzI0JyxcbiAgICAgICAgICAgICAgICAgICdwYWNrYWdlLW1hbmFnZXItY2FjaGUnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0luc3RhbGwgZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgICAgICAgICBydW46IGluc3RhbGxDb21tYW5kKHBhY2thZ2VNYW5hZ2VyKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdGZXRjaCBQUiBib2R5JyxcbiAgICAgICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgICAgIEdIX1RPS0VOOiAnJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJ1bjogW1xuICAgICAgICAgICAgICAgICAgJ2doIHByIHZpZXcgJHt7IGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QubnVtYmVyIH19IFxcXFwnLFxuICAgICAgICAgICAgICAgICAgJyAgLS1yZXBvICR7eyBnaXRodWIucmVwb3NpdG9yeSB9fSBcXFxcJyxcbiAgICAgICAgICAgICAgICAgICcgIC0tanNvbiBib2R5IC1xIC5ib2R5ID4gL3RtcC9wci1ib2R5Lm1kJyxcbiAgICAgICAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1ZlcmlmeSBhdHRlc3RhdGlvbicsXG4gICAgICAgICAgICAgICAgcnVuOiBbXG4gICAgICAgICAgICAgICAgICBgJHtydW5TY3JpcHRDb21tYW5kKHBhY2thZ2VNYW5hZ2VyLCAnYXR0ZXN0YXRpb246dmVyaWZ5Jyl9IC0tIFxcXFxgLFxuICAgICAgICAgICAgICAgICAgJyAgLS1ib2R5LWZpbGUgL3RtcC9wci1ib2R5Lm1kIFxcXFwnLFxuICAgICAgICAgICAgICAgICAgJyAgLS1jb21taXQgJHt7IGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QuaGVhZC5zaGEgfX0nLFxuICAgICAgICAgICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -7,7 +7,7 @@ const javascript_1 = require("projen/lib/javascript");
7
7
  const utils_1 = require("./utils");
8
8
  const WorkflowActionVersions_1 = require("./WorkflowActionVersions");
9
9
  class StagingDeployWorkflow extends projen_1.YamlFile {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.StagingDeployWorkflow", version: "1.24.2" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.StagingDeployWorkflow", version: "1.25.1" };
11
11
  constructor(project, options) {
12
12
  const packageManager = project.package.packageManager;
13
13
  const actionVersions = (0, WorkflowActionVersions_1.resolveActionVersions)(options.actionVersions);
@@ -39,7 +39,7 @@ const fs = __importStar(require("fs"));
39
39
  const path = __importStar(require("path"));
40
40
  const projen_1 = require("projen");
41
41
  class WorkflowAutoDiscover extends projen_1.Component {
42
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.WorkflowAutoDiscover", version: "1.24.2" };
42
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.WorkflowAutoDiscover", version: "1.25.1" };
43
43
  constructor(project) {
44
44
  super(project);
45
45
  }
package/lib/utils.d.ts CHANGED
@@ -18,5 +18,20 @@ export declare function installCommand(packageManager: NodePackageManager): stri
18
18
  * name for a given branch.
19
19
  */
20
20
  export declare function sanitizeBranchNameScript(): string[];
21
+ /**
22
+ * Joins commands with `;` instead of `&&`/`||` so the result is valid for a swamp
23
+ * command/shell model's `run:` value on both POSIX shells and Windows PowerShell 5.1
24
+ * (which has no `&&`/`||` chain operators before pwsh 7). Unlike `&&`, `;` does not
25
+ * short-circuit on failure — callers that need failure to stop the sequence should split
26
+ * into separate workflow steps with their own `assert` gates instead of relying on this
27
+ * for control flow.
28
+ */
29
+ export declare function shellPortableSequence(...commands: string[]): string;
30
+ /**
31
+ * Renders a portable force-delete for a single file, for use in a swamp command/shell
32
+ * model's `run:` value in place of `rm -f <path>` (ambiguous with PowerShell 5.1's
33
+ * `Remove-Item -Filter` alias). Matches the fix already validated in exman#136.
34
+ */
35
+ export declare function shellPortableForceDelete(path: string): string;
21
36
  export declare function serializeTs(value: any, depth?: number): string;
22
37
  export declare function readmeContents(projectName: string, e2eTesting?: boolean, packageManager?: NodePackageManager): string;